|
1 | 1 | """Tests for the inventory module.""" |
2 | 2 |
|
| 3 | +import sys |
3 | 4 | from io import BytesIO |
4 | 5 | from os.path import join |
5 | | -from pathlib import Path |
6 | 6 |
|
7 | 7 | import pytest |
| 8 | +from mkdocs.commands.build import build |
| 9 | +from mkdocs.config import load_config |
8 | 10 |
|
9 | 11 | from mkdocstrings.inventory import Inventory, InventoryItem |
10 | 12 |
|
11 | | -sphinx_inventory = pytest.importorskip("sphinx.util.inventory", reason="Sphinx is not installed") |
12 | | -MKDOCSTRINGS_OBJECTS_INV = Path("site/objects.inv") |
| 13 | +sphinx = pytest.importorskip("sphinx.util.inventory", reason="Sphinx is not installed") |
13 | 14 |
|
14 | 15 |
|
15 | 16 | @pytest.mark.parametrize( |
16 | | - "inventory", |
| 17 | + "our_inv", |
17 | 18 | [ |
18 | 19 | Inventory(), |
19 | 20 | Inventory([InventoryItem(name="object_path", domain="py", role="obj", uri="page_url")]), |
20 | 21 | Inventory([InventoryItem(name="object_path", domain="py", role="obj", uri="page_url#object_path")]), |
21 | 22 | Inventory([InventoryItem(name="object_path", domain="py", role="obj", uri="page_url#other_anchor")]), |
22 | 23 | ], |
23 | 24 | ) |
24 | | -def test_sphinx_load_inventory_file(inventory): |
| 25 | +def test_sphinx_load_inventory_file(our_inv): |
25 | 26 | """Perform the 'live' inventory load test.""" |
26 | | - buffer = BytesIO(inventory.format_sphinx()) |
27 | | - sphinx_inventory.InventoryFile.load(buffer, "", join) |
| 27 | + buffer = BytesIO(our_inv.format_sphinx()) |
| 28 | + sphinx_inv = sphinx.InventoryFile.load(buffer, "", join) |
28 | 29 |
|
| 30 | + sphinx_inv_length = sum(len(sphinx_inv[key]) for key in sphinx_inv) |
| 31 | + assert sphinx_inv_length == len(our_inv.values()) |
29 | 32 |
|
30 | | -@pytest.mark.skipif(not MKDOCSTRINGS_OBJECTS_INV.exists(), reason="site/objects.inv does not exist") |
| 33 | + for item in our_inv.values(): |
| 34 | + assert item.name in sphinx_inv[f"{item.domain}:{item.role}"] |
| 35 | + |
| 36 | + |
| 37 | +@pytest.mark.skipif(sys.version_info < (3, 7), reason="using plugins that require Python 3.7") |
31 | 38 | def test_sphinx_load_mkdocstrings_inventory_file(): |
32 | 39 | """Perform the 'live' inventory load test on mkdocstrings own inventory.""" |
33 | | - with MKDOCSTRINGS_OBJECTS_INV.open("rb") as fp: |
34 | | - sphinx_inventory.InventoryFile.load(fp, "", join) |
| 40 | + mkdocs_config = load_config() |
| 41 | + build(mkdocs_config) |
| 42 | + own_inv = mkdocs_config["plugins"]["mkdocstrings"].handlers.inventory |
| 43 | + |
| 44 | + with open("site/objects.inv", "rb") as fp: |
| 45 | + sphinx_inv = sphinx.InventoryFile.load(fp, "", join) |
| 46 | + |
| 47 | + sphinx_inv_length = sum(len(sphinx_inv[key]) for key in sphinx_inv) |
| 48 | + assert sphinx_inv_length == len(own_inv.values()) |
| 49 | + |
| 50 | + for item in own_inv.values(): |
| 51 | + assert item.name in sphinx_inv[f"{item.domain}:{item.role}"] |
0 commit comments