• R/O
  • SSH

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2


Commit MetaInfo

Revisãoa27eaba4f3343db2216d02709b6e143ff2cc1f3a (tree)
Hora2022-02-12 04:19:22
AutorAlbert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Mensagem de Log

Refactored Test: XML-serialization

Mudança Sumário

Diff

diff -r 70b8c4ed931b -r a27eaba4f334 pytst/ast/XML_serialization/__init__.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pytst/ast/XML_serialization/__init__.py Fri Feb 11 20:19:22 2022 +0100
@@ -0,0 +1,57 @@
1+import logging; logger = logging.getLogger(__name__)
2+from xml.etree import ElementTree as ET
3+
4+from castle.ast import peg
5+
6+
7+class StdSequence_withAsserts:
8+ """A class with some terminals and a sequence, and assert-statements
9+ """
10+ def __init__(self):
11+ self.n1, self.v2, self.v3 = 'ID_1', 'str_2', 'regexp_3'
12+ e1 = peg.ID(name=self.n1)
13+ e2 = peg.StrTerm(value=self.v2)
14+ e3 = peg.RegExpTerm(value=self.v3)
15+ self.seq = peg.Sequence(value=[e1, e2, e3])
16+ def assert_xml_Element(self, txt):
17+ assert_xml_Element(txt, tag='.//Sequence')
18+ assert_xml_Element(txt, tag='.//ID', name=self.n1)
19+ assert_xml_Element(txt, tag='.//StrTerm',value=self.v2)
20+ assert_xml_Element(txt, tag='.//RegExpTerm', value=self.v3)
21+
22+
23+def assert_xml_Element(txt, tag,
24+ version="0.0",
25+ **attribs,):
26+ """Partially verify an xml-string; focusing on 'tag' -- a real tag, or a (limited) XPATH-expression.
27+
28+ This `tag` (expression) should result in a single hit!. *Use e.g `[0]` as suffix to select one from a list*.
29+ Pass ``key=value`` **attribs** to verify the found tag has those attribs and values
30+ """
31+
32+ tree = ET.fromstring(txt)
33+ if version:
34+ assert tree.attrib['version'] == version
35+ founds = tree.findall(tag)
36+ assert len(founds) == 1, f"Expected only one element; got: {len(founds)} :{founds}"
37+ found = founds[0]
38+ logger.debug(f'XXX1 tag={tag}:: found={found}')
39+ for attrib, value in attribs.items():
40+ logger.debug(f'XXX2 tag={tag}:: attrib={attrib}, value={value}')
41+ assert found.attrib[attrib] == value
42+
43+
44+def assert_QuantityGroup(xml_serialize, pegGrp, tagName):
45+ seq = StdSequence_withAsserts()
46+ txt = xml_serialize(pegGrp(expr=seq.seq))
47+ logger.debug(f'XML:: {txt}')
48+
49+ assert_xml_Element(txt, tagName)
50+ seq.assert_xml_Element(txt)
51+
52+def assert_QuantityID(xml_serialize, pegGrp, tagName, id_name='JustAName'):
53+ txt = xml_serialize(pegGrp(expr=peg.ID(name=id_name)))
54+ logger.debug(f'XML:: {txt}')
55+
56+ assert_xml_Element(txt, tagName)
57+ assert_xml_Element(txt, tag='.//ID', name=id_name)
diff -r 70b8c4ed931b -r a27eaba4f334 pytst/ast/XML_serialization/test_1_simpleXML.py
--- a/pytst/ast/XML_serialization/test_1_simpleXML.py Fri Feb 11 19:06:30 2022 +0100
+++ b/pytst/ast/XML_serialization/test_1_simpleXML.py Fri Feb 11 20:19:22 2022 +0100
@@ -4,41 +4,7 @@
44
55 from castle.ast import peg, serialization
66
7-
8-class StdSequence_withAsserts:
9- def __init__(self):
10- self.n1, self.v2, self.v3 = 'ID_1', 'str_2', 'regexp_3'
11- e1 = peg.ID(name=self.n1)
12- e2 = peg.StrTerm(value=self.v2)
13- e3 = peg.RegExpTerm(value=self.v3)
14- self.seq = peg.Sequence(value=[e1, e2, e3])
15- def assert_xml_Element(self, txt):
16- assert_xml_Element(txt, tag='.//Sequence')
17- assert_xml_Element(txt, tag='.//ID', name=self.n1)
18- assert_xml_Element(txt, tag='.//StrTerm',value=self.v2)
19- assert_xml_Element(txt, tag='.//RegExpTerm', value=self.v3)
20-
21-
22-def assert_xml_Element(txt, tag,
23- version="0.0",
24- **attribs,):
25- """Partially verify an xml-string; focusing on 'tag' -- a real tag, or a (limited) XPATH-expression.
26-
27- This `tag` (expression) should result in a single hit!. *Use e.g `[0]` as suffix to select one from a list*.
28- Pass ``key=value`` **attribs** to verify the found tag has those attribs and values
29- """
30-
31- tree = ET.fromstring(txt)
32- if version:
33- assert tree.attrib['version'] == version
34- founds = tree.findall(tag)
35- assert len(founds) == 1, f"Expected only one element; got: {len(founds)} :{founds}"
36- found = founds[0]
37- logger.debug(f'XXX1 tag={tag}:: found={found}')
38- for attrib, value in attribs.items():
39- logger.debug(f'XXX2 tag={tag}:: attrib={attrib}, value={value}')
40- assert found.attrib[attrib] == value
41-
7+from . import StdSequence_withAsserts, assert_xml_Element, assert_QuantityGroup, assert_QuantityID
428
439
4410 @pytest.fixture
@@ -117,14 +83,6 @@
11783 assert tree.findall('.//Rule[1]')[0].attrib['name'] == 'rule_1'
11884 assert tree.findall('.//Rule[2]//StrTerm')[0].attrib['value'] == 'str2'
11985
120-def assert_QuantityGroup(xml_serialize, pegGrp, tagName):
121- seq = StdSequence_withAsserts()
122- txt = xml_serialize(pegGrp(expr=seq.seq))
123- logger.debug(f'XML:: {txt}')
124-
125- assert_xml_Element(txt, tagName)
126- seq.assert_xml_Element(txt)
127-
12886
12987 def test_OptionalSeq(xml_serialize): assert_QuantityGroup(xml_serialize, peg.Optional, 'Optional') ## ` ( ...)? `
13088 def test_ZeroOrMoreSeq(xml_serialize): assert_QuantityGroup(xml_serialize, peg.ZeroOrMore, 'ZeroOrMore') ## ` ( ...)* `
@@ -132,23 +90,18 @@
13290 def test_UnorderedGroup(xml_serialize): assert_QuantityGroup(xml_serialize, peg.UnorderedGroup, 'UnorderedGroup') ## ` ( ...)# ` # Only useful for a group/sequence!!
13391
13492
135-def assert_QuantityID(xml_serialize, pegGrp, tagName, id_name='JustAName'):
136- txt = xml_serialize(pegGrp(expr=peg.ID(name=id_name)))
137- logger.debug(f'XML:: {txt}')
138-
139- assert_xml_Element(txt, tagName)
140- assert_xml_Element(txt, tag='.//ID', name=id_name)
141-
14293 def test_OptionalID(xml_serialize): assert_QuantityID(xml_serialize, peg.Optional, 'Optional')
14394 def test_ZeroOrMoreID(xml_serialize): assert_QuantityID(xml_serialize, peg.ZeroOrMore, 'ZeroOrMore')
14495 def test_OneOrMoreID(xml_serialize): assert_QuantityID(xml_serialize, peg.OneOrMore, 'OneOrMore')
14596 ## A bit uncommon: unordered group of ONE :`` Always#`` but it should work
14697 def test_UnorderedID(xml_serialize): assert_QuantityID(xml_serialize, peg.UnorderedGroup, 'UnorderedGroup', 'strange')
14798
99+
148100 @pytest.mark.xfail(reason="Can't test as peg.OrderedChoice() isn't implemented")
149101 def test_OrderedChoice(xml_serialize): # e1 | e2 | e2
150102 e1 = peg.ID(name='ID_1')
151103 e2 = peg.StrTerm(value='str_2')
152104 e3 = peg.RegExpTerm(value='regexp_3')
153105 txt = xml_serialize(peg.OrderedChoice()) # not implemented; never peg.OrderedChoice is never called
106+
154107 assert False