1"""Tests for `$ fio cat`."""
2
3
4import os
5import pytest
6from click.testing import CliRunner
7
8from fiona.fio.main import main_group
9from fiona.fio import cat
10
11
12def test_one(path_coutwildrnp_shp):
13    runner = CliRunner()
14    result = runner.invoke(main_group, ['cat', path_coutwildrnp_shp])
15    assert result.exit_code == 0
16    assert result.output.count('"Feature"') == 67
17
18
19def test_two(path_coutwildrnp_shp):
20    runner = CliRunner()
21    result = runner.invoke(main_group, ['cat', path_coutwildrnp_shp, path_coutwildrnp_shp])
22    assert result.exit_code == 0
23    assert result.output.count('"Feature"') == 134
24
25
26def test_bbox_no(path_coutwildrnp_shp):
27    runner = CliRunner()
28    result = runner.invoke(
29        main_group,
30        ['cat', path_coutwildrnp_shp, '--bbox', '0,10,80,20'],
31        catch_exceptions=False)
32    assert result.exit_code == 0
33    assert result.output == ""
34
35
36def test_bbox_yes(path_coutwildrnp_shp):
37    runner = CliRunner()
38    result = runner.invoke(
39        main_group,
40        ['cat', path_coutwildrnp_shp, '--bbox', '-109,37,-107,39'],
41        catch_exceptions=False)
42    assert result.exit_code == 0
43    assert result.output.count('"Feature"') == 19
44
45
46def test_bbox_yes_two_files(path_coutwildrnp_shp):
47    runner = CliRunner()
48    result = runner.invoke(
49        main_group,
50        ['cat', path_coutwildrnp_shp, path_coutwildrnp_shp, '--bbox', '-109,37,-107,39'],
51        catch_exceptions=False)
52    assert result.exit_code == 0
53    assert result.output.count('"Feature"') == 38
54
55
56def test_bbox_json_yes(path_coutwildrnp_shp):
57    runner = CliRunner()
58    result = runner.invoke(
59        main_group,
60        ['cat', path_coutwildrnp_shp, '--bbox', '[-109,37,-107,39]'],
61        catch_exceptions=False)
62    assert result.exit_code == 0
63    assert result.output.count('"Feature"') == 19
64
65
66def test_multi_layer(data_dir):
67    layerdef = "1:coutwildrnp,1:coutwildrnp"
68    runner = CliRunner()
69    result = runner.invoke(
70        main_group, ['cat', '--layer', layerdef, data_dir])
71    assert result.output.count('"Feature"') == 134
72
73
74def test_multi_layer_fail(data_dir):
75    runner = CliRunner()
76    result = runner.invoke(main_group, ['cat', '--layer', '200000:coutlildrnp',
77                           data_dir])
78    assert result.exit_code != 0
79
80
81def test_vfs(path_coutwildrnp_zip):
82    runner = CliRunner()
83    result = runner.invoke(main_group, [
84        'cat', 'zip://{}'.format(path_coutwildrnp_zip)])
85    assert result.exit_code == 0
86    assert result.output.count('"Feature"') == 67
87
88
89def test_dst_crs_epsg3857(path_coutwildrnp_shp):
90    """Confirm fix of issue #952"""
91    runner = CliRunner()
92    result = runner.invoke(
93        main_group, ["cat", "--dst-crs", "EPSG:3857", path_coutwildrnp_shp]
94    )
95    assert result.exit_code == 0
96    assert result.output.count('"Feature"') == 67
97