Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revisión | c88877e2c9a9a15ca06dfc68f5ad59946fb10c2f (tree) |
---|---|
Tiempo | 2022-02-07 01:34:07 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
renamed a (simple) test to show its about XML
@@ -1,113 +0,0 @@ | ||
1 | -import pytest | |
2 | -from xml.etree import ElementTree as ET | |
3 | -import logging; logger = logging.getLogger(__name__) | |
4 | - | |
5 | -from castle.ast import peg, serialization | |
6 | - | |
7 | - | |
8 | -class Sequence: | |
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 | - tree = ET.fromstring(txt) | |
26 | - if version: | |
27 | - assert tree.attrib['version'] == version | |
28 | - founds = tree.findall(tag) | |
29 | - assert len(founds) == 1, f"Expected only one element; got: {len(founds)} :{founds}" | |
30 | - found = founds[0] | |
31 | - logger.debug(f'XXX1 tag={tag}:: found={found}') | |
32 | - for attrib, value in attribs.items(): | |
33 | - logger.debug(f'XXX2 tag={tag}:: attrib={attrib}, value={value}') | |
34 | - assert found.attrib[attrib] == value | |
35 | - | |
36 | - | |
37 | - | |
38 | -@pytest.fixture | |
39 | -def xml_serialize(): | |
40 | - return serialization.Serialize('xml').serialize | |
41 | - | |
42 | - | |
43 | - | |
44 | -def test_ID(xml_serialize): | |
45 | - txt = xml_serialize(peg.ID(name='demo_ID')) | |
46 | - assert_xml_Element(txt, tag='ID', name='demo_ID') | |
47 | - | |
48 | - | |
49 | -def test_StrTerm(xml_serialize): | |
50 | - txt = xml_serialize(peg.StrTerm(value='demo string')) | |
51 | - assert_xml_Element(txt, tag='StrTerm', value='demo string') | |
52 | - | |
53 | - | |
54 | -def test_RegExpTerm(xml_serialize): | |
55 | - txt = xml_serialize(peg.RegExpTerm(value='demo RegExp')) | |
56 | - assert_xml_Element(txt, tag='RegExpTerm', value='demo RegExp') | |
57 | - | |
58 | - | |
59 | -def test_Sequence_1(xml_serialize): | |
60 | - e1 = peg.ID(name='ID_1') | |
61 | - txt= xml_serialize(peg.Sequence(value=[e1])) | |
62 | - logger.debug(f'XML:: {txt}') | |
63 | - assert_xml_Element(txt, tag='Sequence') | |
64 | - assert_xml_Element(txt, tag='.//ID', name='ID_1') | |
65 | - | |
66 | - | |
67 | - | |
68 | -def test_Sequence_3(xml_serialize): | |
69 | - seq = Sequence() | |
70 | - txt= xml_serialize(seq.seq) | |
71 | - logger.debug(f'XML:: {txt}') | |
72 | - | |
73 | - assert_xml_Element(txt, tag='Sequence') | |
74 | - seq.assert_xml_Element(txt) | |
75 | - | |
76 | - | |
77 | -def test_Rule_1ID(xml_serialize): | |
78 | - rule_name = "RuleName" | |
79 | - xref = "cross_ref" | |
80 | - expr = peg.Sequence(value=[peg.ID(name=xref)]) | |
81 | - | |
82 | - txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=expr)) | |
83 | - logger.debug(f'XML:: {txt}') | |
84 | - | |
85 | - assert_xml_Element(txt, tag='Rule', name=rule_name) | |
86 | - assert_xml_Element(txt, tag='.//ID', name=xref) | |
87 | - | |
88 | - | |
89 | -def test_Rule_Sequence(xml_serialize): | |
90 | - rule_name = "Rule_Sequence" | |
91 | - seq = Sequence() | |
92 | - | |
93 | - txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=seq.seq)) | |
94 | - logger.debug(f'XML:: {txt}') | |
95 | - | |
96 | - assert_xml_Element(txt, tag='Rule', name=rule_name) | |
97 | - seq.assert_xml_Element(txt) | |
98 | - | |
99 | - | |
100 | -def test_Rules(xml_serialize): | |
101 | - r1 = peg.Rule(name=peg.ID(name='rule_1'), expr=peg.Sequence(value=[peg.ID(name='id1')])) | |
102 | - r2 = peg.Rule(name=peg.ID(name='rule_2'), expr=peg.Sequence(value=[peg.StrTerm(value='str2')])) | |
103 | - | |
104 | - txt = xml_serialize(peg.Rules(children=[r1,r2])) | |
105 | - logger.debug(f'XML:: {txt}') | |
106 | - | |
107 | - tree = ET.fromstring(txt) | |
108 | - assert len(tree.findall('.//Rule')) == 2 | |
109 | - assert len(tree.findall('.//ID')) == 1 | |
110 | - assert len(tree.findall('.//StrTerm')) == 1 | |
111 | - | |
112 | - assert tree.findall('.//Rule[1]')[0].attrib['name'] == 'rule_1' | |
113 | - assert tree.findall('.//Rule[2]//StrTerm')[0].attrib['value'] == 'str2' |
@@ -0,0 +1,113 @@ | ||
1 | +import pytest | |
2 | +from xml.etree import ElementTree as ET | |
3 | +import logging; logger = logging.getLogger(__name__) | |
4 | + | |
5 | +from castle.ast import peg, serialization | |
6 | + | |
7 | + | |
8 | +class Sequence: | |
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 | + tree = ET.fromstring(txt) | |
26 | + if version: | |
27 | + assert tree.attrib['version'] == version | |
28 | + founds = tree.findall(tag) | |
29 | + assert len(founds) == 1, f"Expected only one element; got: {len(founds)} :{founds}" | |
30 | + found = founds[0] | |
31 | + logger.debug(f'XXX1 tag={tag}:: found={found}') | |
32 | + for attrib, value in attribs.items(): | |
33 | + logger.debug(f'XXX2 tag={tag}:: attrib={attrib}, value={value}') | |
34 | + assert found.attrib[attrib] == value | |
35 | + | |
36 | + | |
37 | + | |
38 | +@pytest.fixture | |
39 | +def xml_serialize(): | |
40 | + return serialization.Serialize('xml').serialize | |
41 | + | |
42 | + | |
43 | + | |
44 | +def test_ID(xml_serialize): | |
45 | + txt = xml_serialize(peg.ID(name='demo_ID')) | |
46 | + assert_xml_Element(txt, tag='ID', name='demo_ID') | |
47 | + | |
48 | + | |
49 | +def test_StrTerm(xml_serialize): | |
50 | + txt = xml_serialize(peg.StrTerm(value='demo string')) | |
51 | + assert_xml_Element(txt, tag='StrTerm', value='demo string') | |
52 | + | |
53 | + | |
54 | +def test_RegExpTerm(xml_serialize): | |
55 | + txt = xml_serialize(peg.RegExpTerm(value='demo RegExp')) | |
56 | + assert_xml_Element(txt, tag='RegExpTerm', value='demo RegExp') | |
57 | + | |
58 | + | |
59 | +def test_Sequence_1(xml_serialize): | |
60 | + e1 = peg.ID(name='ID_1') | |
61 | + txt= xml_serialize(peg.Sequence(value=[e1])) | |
62 | + logger.debug(f'XML:: {txt}') | |
63 | + assert_xml_Element(txt, tag='Sequence') | |
64 | + assert_xml_Element(txt, tag='.//ID', name='ID_1') | |
65 | + | |
66 | + | |
67 | + | |
68 | +def test_Sequence_3(xml_serialize): | |
69 | + seq = Sequence() | |
70 | + txt= xml_serialize(seq.seq) | |
71 | + logger.debug(f'XML:: {txt}') | |
72 | + | |
73 | + assert_xml_Element(txt, tag='Sequence') | |
74 | + seq.assert_xml_Element(txt) | |
75 | + | |
76 | + | |
77 | +def test_Rule_1ID(xml_serialize): | |
78 | + rule_name = "RuleName" | |
79 | + xref = "cross_ref" | |
80 | + expr = peg.Sequence(value=[peg.ID(name=xref)]) | |
81 | + | |
82 | + txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=expr)) | |
83 | + logger.debug(f'XML:: {txt}') | |
84 | + | |
85 | + assert_xml_Element(txt, tag='Rule', name=rule_name) | |
86 | + assert_xml_Element(txt, tag='.//ID', name=xref) | |
87 | + | |
88 | + | |
89 | +def test_Rule_Sequence(xml_serialize): | |
90 | + rule_name = "Rule_Sequence" | |
91 | + seq = Sequence() | |
92 | + | |
93 | + txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=seq.seq)) | |
94 | + logger.debug(f'XML:: {txt}') | |
95 | + | |
96 | + assert_xml_Element(txt, tag='Rule', name=rule_name) | |
97 | + seq.assert_xml_Element(txt) | |
98 | + | |
99 | + | |
100 | +def test_Rules(xml_serialize): | |
101 | + r1 = peg.Rule(name=peg.ID(name='rule_1'), expr=peg.Sequence(value=[peg.ID(name='id1')])) | |
102 | + r2 = peg.Rule(name=peg.ID(name='rule_2'), expr=peg.Sequence(value=[peg.StrTerm(value='str2')])) | |
103 | + | |
104 | + txt = xml_serialize(peg.Rules(children=[r1,r2])) | |
105 | + logger.debug(f'XML:: {txt}') | |
106 | + | |
107 | + tree = ET.fromstring(txt) | |
108 | + assert len(tree.findall('.//Rule')) == 2 | |
109 | + assert len(tree.findall('.//ID')) == 1 | |
110 | + assert len(tree.findall('.//StrTerm')) == 1 | |
111 | + | |
112 | + assert tree.findall('.//Rule[1]')[0].attrib['name'] == 'rule_1' | |
113 | + assert tree.findall('.//Rule[2]//StrTerm')[0].attrib['value'] == 'str2' |