mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
43 lines
1.0 KiB
Python
43 lines
1.0 KiB
Python
|
|
import os
|
||
|
|
import sys
|
||
|
|
import glob
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
import tabulate
|
||
|
|
|
||
|
|
import ifcopenshell.express.rule_executor
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.parametrize(
|
||
|
|
"filename",
|
||
|
|
[fn for fn in glob.glob(os.path.join(os.path.dirname(__file__), "fixtures/rules/*.ifc")) if len(sys.argv) < 2 or sys.argv[1] in os.path.basename(fn)],
|
||
|
|
)
|
||
|
|
def test_file(filename):
|
||
|
|
base = os.path.basename(filename)
|
||
|
|
file = ifcopenshell.open(filename)
|
||
|
|
logger = ifcopenshell.validate.json_logger()
|
||
|
|
ifcopenshell.express.rule_executor.run(file, logger)
|
||
|
|
results = logger.statements
|
||
|
|
|
||
|
|
print()
|
||
|
|
print(base)
|
||
|
|
print()
|
||
|
|
print(f"{len(results)} errors")
|
||
|
|
|
||
|
|
if results:
|
||
|
|
print(tabulate.tabulate(
|
||
|
|
[[c or '' for c in r.values()] for r in results],
|
||
|
|
maxcolwidths=[20,100,20],
|
||
|
|
tablefmt="simple_grid",
|
||
|
|
headers=results[0].keys()
|
||
|
|
))
|
||
|
|
|
||
|
|
if base.startswith("fail-"):
|
||
|
|
assert len(results) > 0
|
||
|
|
if base.startswith("pass-"):
|
||
|
|
assert len(results) == 0
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
pytest.main(["-sx", __file__])
|