• R/O
  • SSH

Commit

Tags
Keine 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

Revision969863cb6c9532083ee4fa68253d425ea5a08cc3 (tree)
Zeit2022-02-26 01:04:14
AutorAlbert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Log Message

Refactored (AST2XML) tests: split into multiple files

Ändern Zusammenfassung

Diff

diff -r b128e4fff750 -r 969863cb6c95 pytst/ast/XML_serialization/__init__.py
--- a/pytst/ast/XML_serialization/__init__.py Fri Feb 25 16:21:30 2022 +0100
+++ b/pytst/ast/XML_serialization/__init__.py Fri Feb 25 17:04:14 2022 +0100
@@ -1,8 +1,13 @@
1-import logging; logger = logging.getLogger(__name__)
1+import pytest
2+
3+#import logging; logger = logging.getLogger(__name__)
24 from xml.etree import ElementTree as ET
35
4-from castle.ast import peg
6+from castle.ast import peg, serialization
57
8+@pytest.fixture
9+def xml_serialize():
10+ return serialization.Serialize('xml').serialize
611
712 class StdSequence_withAsserts:
813 """A class with some terminals and a sequence, and assert-statements
diff -r b128e4fff750 -r 969863cb6c95 pytst/ast/XML_serialization/test_1_simpleXML.py
--- a/pytst/ast/XML_serialization/test_1_simpleXML.py Fri Feb 25 16:21:30 2022 +0100
+++ b/pytst/ast/XML_serialization/test_1_simpleXML.py Fri Feb 25 17:04:14 2022 +0100
@@ -1,33 +1,24 @@
11 import pytest
2-from xml.etree import ElementTree as ET
32 import logging; logger = logging.getLogger(__name__)
43
5-from castle.ast import peg, serialization
6-
7-from . import StdSequence_withAsserts, assert_xml_Element
4+from castle.ast import peg
85
9-
10-@pytest.fixture
11-def xml_serialize():
12- return serialization.Serialize('xml').serialize
13-
6+from . import xml_serialize #@pytest.fixture
7+from . import assert_xml_Element, StdSequence_withAsserts
148
159
1610 def test_ID(xml_serialize):
1711 txt = xml_serialize(peg.ID(name='demo_ID'))
1812 assert_xml_Element(txt, tag='ID', name='demo_ID')
1913
20-
2114 def test_StrTerm(xml_serialize):
2215 txt = xml_serialize(peg.StrTerm(value='demo string'))
2316 assert_xml_Element(txt, tag='StrTerm', value='demo string')
2417
25-
2618 def test_RegExpTerm(xml_serialize):
2719 txt = xml_serialize(peg.RegExpTerm(value='demo RegExp'))
2820 assert_xml_Element(txt, tag='RegExpTerm', value='demo RegExp')
2921
30-
3122 def test_Sequence_1(xml_serialize):
3223 e1 = peg.ID(name='ID_1')
3324 txt = xml_serialize(peg.Sequence(children=[e1]))
@@ -36,15 +27,6 @@
3627 assert_xml_Element(txt, tag='.//ID', name='ID_1')
3728
3829
39-def test_Sequence_3(xml_serialize):
40- seq = StdSequence_withAsserts()
41- txt = xml_serialize(seq.seq)
42- logger.debug(f'XML:: {txt}')
43-
44- assert_xml_Element(txt, tag='Sequence')
45- seq.assert_xml_Element(txt)
46-
47-
4830 def test_Rule_1ID(xml_serialize):
4931 rule_name = "RuleName"
5032 xref = "cross_ref"
@@ -57,70 +39,6 @@
5739 assert_xml_Element(txt, tag='.//ID', name=xref)
5840
5941
60-def test_Rule_Sequence(xml_serialize):
61- rule_name = "Rule_Sequence"
62- seq = StdSequence_withAsserts()
63-
64- txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=seq.seq))
65- logger.debug(f'XML:: {txt}')
66-
67- assert_xml_Element(txt, tag='Rule', name=rule_name)
68- seq.assert_xml_Element(txt)
69-
70-
71-def test_ParseRules(xml_serialize):
72- r1 = peg.Rule(name=peg.ID(name='rule_1'), expr=peg.Sequence(children=[peg.ID(name='id1')]))
73- r2 = peg.Rule(name=peg.ID(name='rule_2'), expr=peg.Sequence(children=[peg.StrTerm(value='str2')]))
74-
75- txt = xml_serialize(peg.Rules(children=[r1,r2])) # Use generic 'Rules' not ParseRules/Settings
76- logger.debug(f'XML:: {txt}')
77-
78- tree = ET.fromstring(txt)
79- assert len(tree.findall('.//Rule')) == 2
80- assert len(tree.findall('.//ID')) == 1
81- assert len(tree.findall('.//StrTerm')) == 1
82-
83- assert tree.findall('.//Rule[1]')[0].attrib['name'] == 'rule_1'
84- assert tree.findall('.//Rule[2]//StrTerm')[0].attrib['value'] == 'str2'
85-
86-
87-
88-def verify_QuantityGroup(xml_serialize, pegGrp, tagName):
89- seq = StdSequence_withAsserts()
90- txt = xml_serialize(pegGrp(expr=seq.seq))
91- logger.debug(f'XML:: {txt}')
92-
93- assert_xml_Element(txt, tagName)
94- seq.assert_xml_Element(txt)
95-
96-def test_OptionalSeq(xml_serialize): verify_QuantityGroup(xml_serialize, peg.Optional, 'Optional') ## ` ( ...)? `
97-def test_ZeroOrMoreSeq(xml_serialize): verify_QuantityGroup(xml_serialize, peg.ZeroOrMore, 'ZeroOrMore') ## ` ( ...)* `
98-def test_OneOrMoreSeq(xml_serialize): verify_QuantityGroup(xml_serialize, peg.OneOrMore, 'OneOrMore') ## ` ( ...)+ `
99-def test_UnorderedGroup(xml_serialize): verify_QuantityGroup(xml_serialize, peg.UnorderedGroup, 'UnorderedGroup') ## ` ( ...)# ` # Only useful for a group/sequence!!
100-
101-
102-def verify_QuantityID(xml_serialize, pegGrp, tagName, id_name='JustAName'):
103- txt = xml_serialize(pegGrp(expr=peg.ID(name=id_name)))
104- logger.debug(f'XML:: {txt}')
105-
106- assert_xml_Element(txt, tagName)
107- assert_xml_Element(txt, tag='.//ID', name=id_name)
108-
109-def test_OptionalID(xml_serialize): verify_QuantityID(xml_serialize, peg.Optional, 'Optional')
110-def test_ZeroOrMoreID(xml_serialize): verify_QuantityID(xml_serialize, peg.ZeroOrMore, 'ZeroOrMore')
111-def test_OneOrMoreID(xml_serialize): verify_QuantityID(xml_serialize, peg.OneOrMore, 'OneOrMore')
112-def test_UnorderedID(xml_serialize): verify_QuantityID(xml_serialize, peg.UnorderedGroup, 'UnorderedGroup', 'strange') ## A bit uncommon: an unordered group of ONE! But it should work.
113-
114-
115-
116-def test_OC3(xml_serialize): # e1 | e2 | e2
117- e1, e2, e3 = peg.ID(name='ID_1'), peg.StrTerm(value='str_2'), peg.RegExpTerm(value='regexp_3')
118- txt = xml_serialize(peg.OrderedChoice(children=[e1,e2,e3]))
119- logger.debug(f'XML:: {txt}')
120-
121- assert_xml_Element(txt, tag='OrderedChoice', child_count=3)
122-
123-
12442 def test_OC_long(xml_serialize): # e1 | e2a e2b e2c
12543 e1, seq = peg.ID(name='single_ID'), StdSequence_withAsserts()
12644 txt = xml_serialize(peg.OrderedChoice(children=[e1, seq.seq]))
@@ -128,74 +46,20 @@
12846
12947 assert_xml_Element(txt, tag='OrderedChoice', child_count=2)
13048
49+
50+def test_OC3(xml_serialize): # e1 | e2 | e2
51+ e1, e2, e3 = peg.ID(name='ID_1'), peg.StrTerm(value='str_2'), peg.RegExpTerm(value='regexp_3')
52+ txt = xml_serialize(peg.OrderedChoice(children=[e1,e2,e3]))
53+ logger.debug(f'XML:: {txt}')
54+ assert_xml_Element(txt, tag='OrderedChoice', child_count=3)
55+
56+
13157 def verify_Predicate(xml_serialize, pegPredicate, tagName):
13258 txt = xml_serialize(pegPredicate(expr=peg.ID(name="PartOfSomePredicate")))
13359 logger.debug(f'XML:: {txt}')
134-
13560 assert_xml_Element(txt, tag=tagName, child_count=1)
13661
13762 def test_AndPredicate(xml_serialize): verify_Predicate(xml_serialize, peg.AndPredicate, 'AndPredicate')
13863 def test_NotPredicate(xml_serialize): verify_Predicate(xml_serialize, peg.NotPredicate, 'NotPredicate')
13964
14065
141-def verify_setting_NumVal(xml_serialize, number):
142- txt = xml_serialize(peg.Number(value=number))
143- logger.debug(f'XML:: {txt}')
144- assert_xml_Element(txt, tag='Number', text=number)
145-
146-def test_setting_NumVal_int(xml_serialize): verify_setting_NumVal(xml_serialize, '42')
147-def test_setting_NumVal_float(xml_serialize): verify_setting_NumVal(xml_serialize, '3.14')
148-def test_setting_NumVal_complex1(xml_serialize): verify_setting_NumVal(xml_serialize, '-1+j1')
149-def test_setting_NumVal_complex2(xml_serialize): verify_setting_NumVal(xml_serialize, '+1-i1')
150-
151-
152-def verify_Number_setting(xml_serialize, name, value, pegVal=peg.Number):
153- txt = xml_serialize(peg.Setting(name=peg.ID(name=name), value=pegVal(value=value)))
154- logger.debug(f'XML:: {txt}')
155-
156- assert_xml_Element(txt, tag='.//Setting/ID', name=name)
157- assert_xml_Element(txt, tag='.//Setting/Number', text=value)
158-
159-def test_setting_int(xml_serialize): verify_Number_setting(xml_serialize, name='anInt', value='42')
160-def test_setting_float(xml_serialize): verify_Number_setting(xml_serialize, name='anInt', value='3.14')
161-def test_setting_complex(xml_serialize): verify_Number_setting(xml_serialize, name='anInt', value='1+j1')
162-
163-
164-def verify_txt_setting(xml_serialize, name, pegTxt, value, tag):
165- txt = xml_serialize(peg.Setting(name=peg.ID(name=name), value=pegTxt(value=value)))
166- logger.debug(f'XML:: {txt}')
167-
168- assert_xml_Element(txt, tag='.//Setting/ID', name=name)
169- assert_xml_Element(txt, tag=f'.//Setting/{tag}', value=value)
170-
171-def test_setting_StrTerm(xml_serialize): verify_txt_setting(xml_serialize, name='string', pegTxt=peg.StrTerm, value='StrVal', tag='StrTerm')
172-def test_setting_RegExTerm(xml_serialize): verify_txt_setting(xml_serialize, name='regexp', pegTxt=peg.RegExpTerm, value='/RegExp/', tag='RegExpTerm')
173-
174-
175-def test_setting_XID(xml_serialize):
176- name, xref = 'SetTo', 'anOtherID'
177- txt = xml_serialize(peg.Setting(name=peg.ID(name=name), value=peg.ID(name=xref)))
178- logger.debug(f'XML:: {txt}')
179-
180- assert_xml_Element(txt, tag='.//Setting/ID[1]', name=name)
181- assert_xml_Element(txt, tag='.//Setting/ID[2]', name=xref)
182-
183-def test_Settings(xml_serialize):
184- name_1, val_1 = 's1', '42'
185- name_2, val_2 = 's2', '2.71828'
186- s1 = peg.Setting(name=peg.ID(name=name_1), value=peg.Number(value=val_1))
187- s2 = peg.Setting(name=peg.ID(name=name_2), value=peg.Number(value=val_2))
188-
189- txt = xml_serialize(peg.Rules(children=[s1,s2])) # Use generic 'Rules' not ParseRules/Settings
190- logger.debug(f'XML:: {txt}')
191-
192- assert_xml_Element(txt, tag=f".//Setting/ID[@name='{name_1}']/../Number", text=val_1)
193- assert_xml_Element(txt, tag=f".//Setting/ID[@name='{name_2}']/../Number", text=val_2)
194-
195- tree = ET.fromstring(txt)
196- assert len(tree.findall('.//Setting')) == 2
197- assert len(tree.findall('.//ID')) == 2
198-
199-
200-
201-
diff -r b128e4fff750 -r 969863cb6c95 pytst/ast/XML_serialization/test_2_stdSequence.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pytst/ast/XML_serialization/test_2_stdSequence.py Fri Feb 25 17:04:14 2022 +0100
@@ -0,0 +1,30 @@
1+import pytest
2+import logging; logger = logging.getLogger(__name__)
3+
4+from castle.ast import peg
5+
6+from . import xml_serialize #@pytest.fixture
7+from . import assert_xml_Element, StdSequence_withAsserts
8+
9+
10+def test_Sequence_3(xml_serialize):
11+ seq = StdSequence_withAsserts()
12+ txt = xml_serialize(seq.seq)
13+ logger.debug(f'XML:: {txt}')
14+
15+ assert_xml_Element(txt, tag='Sequence')
16+ seq.assert_xml_Element(txt)
17+
18+
19+def test_Rule_Sequence(xml_serialize):
20+ rule_name = "Rule_Sequence"
21+ seq = StdSequence_withAsserts()
22+
23+ txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=seq.seq))
24+ logger.debug(f'XML:: {txt}')
25+
26+ assert_xml_Element(txt, tag='Rule', name=rule_name)
27+ seq.assert_xml_Element(txt)
28+
29+
30+
diff -r b128e4fff750 -r 969863cb6c95 pytst/ast/XML_serialization/test_3_details.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pytst/ast/XML_serialization/test_3_details.py Fri Feb 25 17:04:14 2022 +0100
@@ -0,0 +1,42 @@
1+import pytest
2+import logging; logger = logging.getLogger(__name__)
3+
4+from xml.etree import ElementTree as ET
5+from castle.ast import peg
6+
7+from . import xml_serialize #@pytest.fixture
8+from . import assert_xml_Element
9+
10+
11+def test_ParseRules(xml_serialize):
12+ r1 = peg.Rule(name=peg.ID(name='rule_1'), expr=peg.Sequence(children=[peg.ID(name='id1')]))
13+ r2 = peg.Rule(name=peg.ID(name='rule_2'), expr=peg.Sequence(children=[peg.StrTerm(value='str2')]))
14+
15+ txt = xml_serialize(peg.Rules(children=[r1,r2])) # Use generic 'Rules' not ParseRules/Settings
16+ logger.debug(f'XML:: {txt}')
17+
18+ tree = ET.fromstring(txt)
19+ assert len(tree.findall('.//Rule')) == 2
20+ assert len(tree.findall('.//ID')) == 1
21+ assert len(tree.findall('.//StrTerm')) == 1
22+
23+ assert tree.findall('.//Rule[1]')[0].attrib['name'] == 'rule_1'
24+ assert tree.findall('.//Rule[2]//StrTerm')[0].attrib['value'] == 'str2'
25+
26+
27+
28+def test_Settings(xml_serialize):
29+ name_1, val_1 = 's1', '42'
30+ name_2, val_2 = 's2', '2.71828'
31+ s1 = peg.Setting(name=peg.ID(name=name_1), value=peg.Number(value=val_1))
32+ s2 = peg.Setting(name=peg.ID(name=name_2), value=peg.Number(value=val_2))
33+
34+ txt = xml_serialize(peg.Rules(children=[s1,s2])) # Use generic 'Rules' not ParseRules/Settings
35+ logger.debug(f'XML:: {txt}')
36+
37+ assert_xml_Element(txt, tag=f".//Setting/ID[@name='{name_1}']/../Number", text=val_1)
38+ assert_xml_Element(txt, tag=f".//Setting/ID[@name='{name_2}']/../Number", text=val_2)
39+
40+ tree = ET.fromstring(txt)
41+ assert len(tree.findall('.//Setting')) == 2
42+ assert len(tree.findall('.//ID')) == 2
diff -r b128e4fff750 -r 969863cb6c95 pytst/ast/XML_serialization/test_4_Quantity.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pytst/ast/XML_serialization/test_4_Quantity.py Fri Feb 25 17:04:14 2022 +0100
@@ -0,0 +1,35 @@
1+import pytest
2+import logging; logger = logging.getLogger(__name__)
3+
4+from castle.ast import peg
5+
6+from . import xml_serialize #@pytest.fixture
7+from . import assert_xml_Element, StdSequence_withAsserts
8+
9+
10+def verify_QuantityID(xml_serialize, pegGrp, tagName, id_name='JustAName'):
11+ txt = xml_serialize(pegGrp(expr=peg.ID(name=id_name)))
12+ logger.debug(f'XML:: {txt}')
13+ assert_xml_Element(txt, tagName)
14+ assert_xml_Element(txt, tag='.//ID', name=id_name)
15+
16+def test_OptionalID(xml_serialize): verify_QuantityID(xml_serialize, peg.Optional, 'Optional')
17+def test_ZeroOrMoreID(xml_serialize): verify_QuantityID(xml_serialize, peg.ZeroOrMore, 'ZeroOrMore')
18+def test_OneOrMoreID(xml_serialize): verify_QuantityID(xml_serialize, peg.OneOrMore, 'OneOrMore')
19+def test_UnorderedID(xml_serialize): verify_QuantityID(xml_serialize, peg.UnorderedGroup, 'UnorderedGroup', 'strange') ## A bit uncommon: an unordered group of ONE! But it should work.
20+
21+
22+def verify_QuantityGroup(xml_serialize, pegGrp, tagName):
23+ seq = StdSequence_withAsserts()
24+ txt = xml_serialize(pegGrp(expr=seq.seq))
25+ logger.debug(f'XML:: {txt}')
26+
27+ assert_xml_Element(txt, tagName)
28+ seq.assert_xml_Element(txt)
29+
30+def test_OptionalSeq(xml_serialize): verify_QuantityGroup(xml_serialize, peg.Optional, 'Optional') ## ` ( ...)? `
31+def test_ZeroOrMoreSeq(xml_serialize): verify_QuantityGroup(xml_serialize, peg.ZeroOrMore, 'ZeroOrMore') ## ` ( ...)* `
32+def test_OneOrMoreSeq(xml_serialize): verify_QuantityGroup(xml_serialize, peg.OneOrMore, 'OneOrMore') ## ` ( ...)+ `
33+def test_UnorderedGroup(xml_serialize): verify_QuantityGroup(xml_serialize, peg.UnorderedGroup, 'UnorderedGroup') ## ` ( ...)# ` # Only useful for a group/sequence!!
34+
35+
diff -r b128e4fff750 -r 969863cb6c95 pytst/ast/XML_serialization/test_5_settings.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pytst/ast/XML_serialization/test_5_settings.py Fri Feb 25 17:04:14 2022 +0100
@@ -0,0 +1,49 @@
1+import pytest
2+import logging; logger = logging.getLogger(__name__)
3+
4+from castle.ast import peg
5+
6+from . import xml_serialize #@pytest.fixture
7+from . import assert_xml_Element, StdSequence_withAsserts
8+
9+def verify_setting_NumVal(xml_serialize, number):
10+ txt = xml_serialize(peg.Number(value=number))
11+ logger.debug(f'XML:: {txt}')
12+ assert_xml_Element(txt, tag='Number', text=number)
13+
14+def test_setting_NumVal_int(xml_serialize): verify_setting_NumVal(xml_serialize, '42')
15+def test_setting_NumVal_float(xml_serialize): verify_setting_NumVal(xml_serialize, '3.14')
16+def test_setting_NumVal_complex1(xml_serialize): verify_setting_NumVal(xml_serialize, '-1+j1')
17+def test_setting_NumVal_complex2(xml_serialize): verify_setting_NumVal(xml_serialize, '+1-i1')
18+
19+
20+def verify_Number_setting(xml_serialize, name, value, pegVal=peg.Number):
21+ txt = xml_serialize(peg.Setting(name=peg.ID(name=name), value=pegVal(value=value)))
22+ logger.debug(f'XML:: {txt}')
23+
24+ assert_xml_Element(txt, tag='.//Setting/ID', name=name)
25+ assert_xml_Element(txt, tag='.//Setting/Number', text=value)
26+
27+def test_setting_int(xml_serialize): verify_Number_setting(xml_serialize, name='anInt', value='42')
28+def test_setting_float(xml_serialize): verify_Number_setting(xml_serialize, name='anInt', value='3.14')
29+def test_setting_complex(xml_serialize): verify_Number_setting(xml_serialize, name='anInt', value='1+j1')
30+
31+
32+def verify_txt_setting(xml_serialize, name, pegTxt, value, tag):
33+ txt = xml_serialize(peg.Setting(name=peg.ID(name=name), value=pegTxt(value=value)))
34+ logger.debug(f'XML:: {txt}')
35+
36+ assert_xml_Element(txt, tag='.//Setting/ID', name=name)
37+ assert_xml_Element(txt, tag=f'.//Setting/{tag}', value=value)
38+
39+def test_setting_StrTerm(xml_serialize): verify_txt_setting(xml_serialize, name='string', pegTxt=peg.StrTerm, value='StrVal', tag='StrTerm')
40+def test_setting_RegExTerm(xml_serialize): verify_txt_setting(xml_serialize, name='regexp', pegTxt=peg.RegExpTerm, value='/RegExp/', tag='RegExpTerm')
41+
42+
43+def test_setting_XID(xml_serialize):
44+ name, xref = 'SetTo', 'anOtherID'
45+ txt = xml_serialize(peg.Setting(name=peg.ID(name=name), value=peg.ID(name=xref)))
46+ logger.debug(f'XML:: {txt}')
47+
48+ assert_xml_Element(txt, tag='.//Setting/ID[1]', name=name)
49+ assert_xml_Element(txt, tag='.//Setting/ID[2]', name=xref)