Source code for fluidsimfoam.testing
"""Testing utilities"""
import shutil
import sys
from pathlib import Path
try:
import pytest
except ImportError:
if "sphinx" not in sys.modules:
raise
from fluidsimfoam.foam_input_files import dump, parse
from fluidsimfoam.util import get_openfoam_version
[docs]class skipif_executable_not_available:
def __init__(self, command_name):
path_foam_executable = shutil.which(command_name)
self.skipif = pytest.mark.skipif(
path_foam_executable is None,
reason=f"executable '{command_name}' not available",
)
def __call__(self, func):
return self.skipif(func)
[docs]class skipif_openfoam_too_old:
def __init__(self, version_date=2206):
openfoam_version = get_openfoam_version()
if openfoam_version is None:
has_to_skip = True
reason = "OpenFOAM not available"
elif len(openfoam_version) == 4:
version_date_available = int(openfoam_version)
has_to_skip = version_date_available < version_date
reason = f"OpenFOAM ({openfoam_version}) too old"
else:
has_to_skip = False
reason = ""
self.skipif = pytest.mark.skipif(
has_to_skip,
reason=reason,
)
def __call__(self, func):
return self.skipif(func)
[docs]def check_saved_case(path_saved_case, path_run, files_compare_tree=None):
if files_compare_tree is None:
files_compare_tree = []
paths_in_sim = [
path.relative_to(path_saved_case)
for path in path_saved_case.rglob("*")
if not path.is_dir()
and not any(path.name.startswith(s) for s in ("README", "All"))
and not path.parent.name == "polyMesh"
]
for relative_path in paths_in_sim:
path_manual = path_saved_case / relative_path
text_manual = path_manual.read_text()
if str(relative_path.parent) == "0_org":
relative_path = Path("0") / relative_path.name
path_produced = path_run / relative_path
assert path_produced.exists(), relative_path
text_produced = path_produced.read_text()
if relative_path.name in files_compare_tree:
tree_saved_file = parse(text_manual)
tree_from_py = parse(text_produced)
assert dump(tree_saved_file).strip() == dump(tree_from_py).strip()
else:
if text_produced != text_manual:
print(f"meld {path_produced} {path_manual}")
assert text_produced == text_manual, relative_path