From e204ab73334642b97df37c63937151983f3ad516 Mon Sep 17 00:00:00 2001 From: lindsay stevens Date: Thu, 21 Jul 2022 19:37:27 +1000 Subject: [PATCH] fix: upgrade fixture-based test for instance_xmlns setting - The test was broken by changes to choices processing (#603). - The test conditions seem to relate only to the instance_xmlns feature. - The new test asserts the same using the pyxformtestcase pattern. --- tests/example_xls/instance_xmlns_test.xls | Bin 20480 -> 0 bytes tests/example_xls/instance_xmlns_test.xml | 30 ------------- tests/test_settings.py | 47 +++++++++++++++++++ tests/tests_by_file.py | 52 ---------------------- 4 files changed, 47 insertions(+), 82 deletions(-) delete mode 100644 tests/example_xls/instance_xmlns_test.xls delete mode 100644 tests/example_xls/instance_xmlns_test.xml create mode 100644 tests/test_settings.py delete mode 100644 tests/tests_by_file.py diff --git a/tests/example_xls/instance_xmlns_test.xls b/tests/example_xls/instance_xmlns_test.xls deleted file mode 100644 index 3978bfe9160c338e0e1a809d58157aff8da66ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 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 - - foo - - - - - - - - - - - - - - - - - - - yes - - - - no - - - - diff --git a/tests/test_settings.py b/tests/test_settings.py new file mode 100644 index 000000000..e61d89cc7 --- /dev/null +++ b/tests/test_settings.py @@ -0,0 +1,47 @@ +from tests.pyxform_test_case import PyxformTestCase + + +class TestSettings(PyxformTestCase): + + def test_instance_xmlns__is_set__custom_xmlns(self): + """Should find the instance_xmlns value in the instance xmlns attribute.""" + md = """ + | settings | + | | instance_xmlns | + | | 1234 | + | survey | | | | + | | type | name | label | + | | text | q1 | hello | + """ + self.assertPyxformXform( + md=md, + xml__xpath_match=[ + """ + /h:html/h:head/x:model/x:instance/*[ + local-name()='test_name' + and @id='test_id' + and namespace-uri()='1234' + ] + """ + ] + ) + + def test_instance_xmlns__not_set__default_xmlns(self): + """Should find the default xmlns for the instance element.""" + md = """ + | survey | | | | + | | type | name | label | + | | text | q1 | hello | + """ + self.assertPyxformXform( + md=md, + xml__xpath_match=[ + """ + /h:html/h:head/x:model/x:instance/*[ + local-name()='test_name' + and @id='test_id' + and namespace-uri()='http://www.w3.org/2002/xforms' + ] + """ + ], + ) diff --git a/tests/tests_by_file.py b/tests/tests_by_file.py deleted file mode 100644 index 43daba818..000000000 --- a/tests/tests_by_file.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tests by file. Runs through a list of *.xls files, and expects that the output -for a *.xml with a matching prefix before the . is as expected. Possibly risky: -all tests in this file are defined according to matching files. -""" - -import codecs -import os -import sys -import xml.etree.ElementTree as ETree -from unittest import TestCase - -from formencode.doctest_xml_compare import xml_compare - -import pyxform -from pyxform import xls2json -from tests import utils - - -class MainTest(TestCase): - def runTest(self): - files_to_test = ["instance_xmlns_test.xls"] - for file_to_test in files_to_test: - path_to_excel_file = utils.path_to_text_fixture(file_to_test) - - # Get the xform output path: - directory, filename = os.path.split(path_to_excel_file) - root_filename, ext = os.path.splitext(filename) - path_to_output_xform = os.path.join(directory, root_filename + "_output.xml") - path_to_expected_xform = os.path.join(directory, root_filename + ".xml") - - # Do the conversion: - json_survey = xls2json.parse_file_to_json( - path_to_excel_file, default_name=root_filename - ) - survey = pyxform.create_survey_element_from_dict(json_survey) - survey.print_xform_to_file(path_to_output_xform) - - # Compare with the expected output: - with codecs.open( - path_to_expected_xform, "rb", encoding="utf-8" - ) as expected_file: - expected = ETree.fromstring(expected_file.read()) - result = ETree.fromstring(survey.to_xml()) - - def write_line(x): - sys.stdout.write(x + "\n") - - reporter = write_line - self.assertTrue(xml_compare(expected, result, reporter=reporter)) - os.remove(path_to_output_xform)