Source code for ewoksid11.tests.test_pdfgetx_config
import os
import pytest
from ..pdfgetx_config import PdfGetXConfig
from ewoksid11.constants import PDF_CONFIG_PARSED
[docs]@pytest.fixture()
def pdfgetx_config_file():
datadir = os.path.abspath(os.path.dirname(__file__))
filename = os.path.join(datadir, "data/pdfexample/config.cfg")
return filename
[docs]def test_pdfgetx_config(requires_diffpy, pdfgetx_config_file):
"""Test PDFgetX parameters from file"""
inputs = {"filename": pdfgetx_config_file}
task = PdfGetXConfig(inputs=inputs)
task.execute()
actual_values = task.get_output_value("pdfgetx_options")
expected_values = dict(PDF_CONFIG_PARSED)
_assert_pdfgetx_parameter(actual_values, expected_values)
[docs]def test_pdfgetx_config_overwrite(requires_diffpy, pdfgetx_config_file):
"""Test PDFgetX parameters from file with overwriting"""
inputs = {"filename": pdfgetx_config_file, "pdfgetx_options_dict": {"rmin": 1}}
task = PdfGetXConfig(inputs=inputs)
task.execute()
actual_values = task.get_output_value("pdfgetx_options")
expected_values = dict(PDF_CONFIG_PARSED)
expected_values["rmin"] = 1
_assert_pdfgetx_parameter(actual_values, expected_values)
def _assert_pdfgetx_parameter(actual_values, expected_values):
for attribute, expected_value in expected_values.items():
# Check if the attribute exists in the object
assert hasattr(actual_values, attribute), f"Attribute '{attribute}' is missing."
actual_value = getattr(actual_values, attribute)
if (
attribute == "bgscale"
): # For some reasons bgscale is not a single value but parsed as a list...
assert float(str(actual_value[0])) == float(
expected_value
), f"Attribute '{attribute}' has an unexpected value: {actual_value} (expected: {expected_value})."
continue
if (
attribute == "backgroundfile"
): # For some reasons backgroundfile is not a single value but parsed as a list...
assert (
str(actual_value[0]) == expected_value
), f"Attribute '{attribute}' has an unexpected value: {actual_value} (expected: {expected_value})."
continue
if attribute == "outputtype": # Need an extra step to convert string to list
assert actual_value == expected_value.split(
", "
), f"Attribute '{attribute}' has an unexpected value: {actual_value} (expected: {expected_value})."
continue
if attribute in [
"force",
"interact",
]: # Keys that can be yes/no are parsed as True/False #TODO Handle the case 'once' for force
if expected_value.lower() in ["true", "yes", "on", "1"]:
expected_value = True
elif expected_value.lower() in ["false", "no", "off", "0"]:
expected_value = False
assert (
actual_value == expected_value
), f"Attribute '{attribute}' has an unexpected value: {actual_value} (expected: {expected_value})."
continue
if (
expected_value == "" or expected_value == "none"
): # Do not consider empty keys
continue
elif (
str(expected_value).replace(".", "").isnumeric()
): # Check if the keys are numeric needs extra str to float step
assert actual_value == float(
expected_value
), f"Attribute '{attribute}' has an unexpected value: {float(actual_value)} (expected: {float(expected_value)})."
else:
assert (
actual_value == expected_value
), f"Attribute '{attribute}' has an unexpected value: {actual_value} (expected: {expected_value})."