rasterio/tests/test_rio_overview.py
Guillaume Lostis c8dab3c5b7 Automatic overview level computation (#1782)
* Automatic overview level computation

* Change rio overview arg from -1 to auto

* Simplify get_maximum_overview_level
2019-09-30 15:18:00 -06:00

103 lines
3.5 KiB
Python

import logging
import sys
from click.testing import CliRunner
import pytest
import rasterio
from rasterio.rio.main import main_group as cli
from rasterio.rio.overview import get_maximum_overview_level
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
def test_err(data):
runner = CliRunner()
inputfile = str(data.join('RGB.byte.tif'))
result = runner.invoke(cli, ['overview', inputfile, '--build', 'a^2'])
assert result.exit_code == 2
assert "must match" in result.output
def test_ls_none(data):
runner = CliRunner()
inputfile = str(data.join('RGB.byte.tif'))
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
assert result.exit_code == 0
expected = "Overview factors:\n Band 1: None (method: 'unknown')\n Band 2: None (method: 'unknown')\n Band 3: None (method: 'unknown')\n"
assert result.output == expected
def test_build_ls(data):
runner = CliRunner()
inputfile = str(data.join('RGB.byte.tif'))
result = runner.invoke(cli, ['overview', inputfile, '--build', '2,4,8'])
assert result.exit_code == 0
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
assert result.exit_code == 0
expected = " Band 1: [2, 4, 8] (method: 'nearest')\n Band 2: [2, 4, 8] (method: 'nearest')\n Band 3: [2, 4, 8] (method: 'nearest')\n"
assert result.output.endswith(expected)
def test_build_pow_ls(data):
runner = CliRunner()
inputfile = str(data.join('RGB.byte.tif'))
result = runner.invoke(cli, ['overview', inputfile, '--build', '2^1..3'])
assert result.exit_code == 0
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
assert result.exit_code == 0
expected = " Band 1: [2, 4, 8] (method: 'nearest')\n Band 2: [2, 4, 8] (method: 'nearest')\n Band 3: [2, 4, 8] (method: 'nearest')\n"
assert result.output.endswith(expected)
def test_rebuild_ls(data):
runner = CliRunner()
inputfile = str(data.join('RGB.byte.tif'))
result = runner.invoke(
cli,
['overview', inputfile, '--build', '2,4,8', '--resampling', 'cubic'])
assert result.exit_code == 0
result = runner.invoke(cli, ['overview', inputfile, '--rebuild'])
assert result.exit_code == 0
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
assert result.exit_code == 0
expected = " Band 1: [2, 4, 8] (method: 'cubic')\n Band 2: [2, 4, 8] (method: 'cubic')\n Band 3: [2, 4, 8] (method: 'cubic')\n"
assert result.output.endswith(expected)
def test_no_args(data):
runner = CliRunner()
inputfile = str(data.join('RGB.byte.tif'))
result = runner.invoke(cli, ['overview', inputfile])
assert result.exit_code == 2
def test_build_auto_ls(data):
runner = CliRunner()
inputfile = str(data.join('RGB.byte.tif'))
result = runner.invoke(cli, ['overview', inputfile, '--build', 'auto'])
assert result.exit_code == 0
result = runner.invoke(cli, ['overview', inputfile, '--ls'])
assert result.exit_code == 0
expected = " Band 1: [2, 4] (method: 'nearest')\n Band 2: [2, 4] (method: 'nearest')\n Band 3: [2, 4] (method: 'nearest')\n"
assert result.output.endswith(expected)
@pytest.mark.parametrize(
"width, height, minsize, expected",
[
(256, 256, 256, 0),
(257, 257, 256, 1),
(1000, 1000, 128, 3),
(1000, 100, 128, 0)
]
)
def test_max_overview(width, height, minsize, expected):
overview_level = get_maximum_overview_level(width, height, minsize)
assert overview_level == expected