65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
SCRIPT = ROOT / "scripts" / "analyze_1c_moxel_named_range_rules.py"
|
|
SPEC = importlib.util.spec_from_file_location("analyze_1c_moxel_named_range_rules", SCRIPT)
|
|
assert SPEC and SPEC.loader
|
|
named_rules = importlib.util.module_from_spec(SPEC)
|
|
SPEC.loader.exec_module(named_rules)
|
|
|
|
|
|
def probe(raw_scalars: list[str], one_based: dict[str, int], name: str = "RANGE_RECT_TEST") -> dict:
|
|
return {
|
|
"probe": {
|
|
"named_ranges": [
|
|
{
|
|
"name": name,
|
|
"kind": "named_cell_or_range",
|
|
"range": {"one_based": one_based},
|
|
"raw_scalars": raw_scalars,
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
|
|
def test_single_cell_named_range_stays_ambiguous() -> None:
|
|
result = named_rules.analyze(
|
|
[
|
|
probe(
|
|
["1", "3", "3", "7", "3", "7", "00000000-0000-0000-0000-000000000000", "0"],
|
|
{"left": 4, "right": 4, "top": 8, "bottom": 8},
|
|
name="R7C2_TEST",
|
|
)
|
|
],
|
|
"R7C2_TEST",
|
|
)
|
|
rules = {rule["target"]: rule for rule in result["rules"]}
|
|
|
|
assert rules["moxel.named_range.left"]["confidence"] == "medium"
|
|
assert rules["moxel.named_range.left"]["raw_scalar_indexes"] == [2, 4]
|
|
assert rules["moxel.named_range.top"]["raw_scalar_indexes"] == [3, 5]
|
|
|
|
|
|
def test_rectangular_named_range_promotes_unique_indexes() -> None:
|
|
result = named_rules.analyze(
|
|
[
|
|
probe(
|
|
["1", "0", "3", "7", "6", "9", "00000000-0000-0000-0000-000000000000", "0"],
|
|
{"left": 4, "top": 8, "right": 7, "bottom": 10},
|
|
)
|
|
],
|
|
"RANGE_RECT_TEST",
|
|
)
|
|
rules = {rule["target"]: rule for rule in result["rules"]}
|
|
|
|
assert rules["moxel.named_range.left"]["confidence"] == "high"
|
|
assert rules["moxel.named_range.left"]["raw_scalar_indexes"] == [2]
|
|
assert rules["moxel.named_range.top"]["raw_scalar_indexes"] == [3]
|
|
assert rules["moxel.named_range.right"]["raw_scalar_indexes"] == [4]
|
|
assert rules["moxel.named_range.bottom"]["raw_scalar_indexes"] == [5]
|