Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revisión | 95438985f9d0a593e1ba50b2508b76d97a87511f (tree) |
---|---|
Tiempo | 2022-02-01 05:30:43 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
AST-2-XML serialization: after rewrite(Mixin_Children...): it works with ID-types IDs
@@ -85,7 +85,7 @@ | ||
85 | 85 | logger.debug(f'{self._typeName(self)}: name={self._valType(name)}, expr={self._valType(expr)}') |
86 | 86 | if expr: |
87 | 87 | logger.debug("\t" + "; ".join(f'{c}:{type(c)}' for c in expr)) |
88 | - ID.validate_or_raise(name) | |
88 | + if not isinstance(name, ID): raise TypeError(f'Rule-name {name} is not of type ID') | |
89 | 89 | super().__init__(**kwargs) |
90 | 90 | self.name = name |
91 | 91 | self.expr = expr |
@@ -69,8 +69,8 @@ | ||
69 | 69 | self._ast2xml(elm, parent=seq) |
70 | 70 | |
71 | 71 | def Rule2xml(self, ast, parent) ->None: |
72 | - logger.debug(f"Rule2xml:: ast:Rule.name={ast.name}") | |
73 | - rule = ET.SubElement(parent, 'Rule', name=ast.name) | |
72 | + logger.debug(f"Rule2xml:: ast:Rule.name={ast.name.name}") | |
73 | + rule = ET.SubElement(parent, 'Rule', name=ast.name.name) | |
74 | 74 | self._ast2xml(ast.expr, parent=rule) |
75 | 75 | |
76 | 76 | def Rules2xml(self, ast, parent) ->None: |
@@ -79,7 +79,7 @@ | ||
79 | 79 | xref = "cross_ref" |
80 | 80 | expr = peg.Sequence(value=[peg.ID(name=xref)]) |
81 | 81 | |
82 | - txt = xml_serialize(peg.Rule(name=rule_name, expr=expr)) | |
82 | + txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=expr)) | |
83 | 83 | logger.debug(f'XML:: {txt}') |
84 | 84 | |
85 | 85 | assert_xml_Element(txt, tag='Rule', name=rule_name) |
@@ -90,7 +90,7 @@ | ||
90 | 90 | rule_name = "Rule_Sequence" |
91 | 91 | seq = Sequence() |
92 | 92 | |
93 | - txt = xml_serialize(peg.Rule(name=rule_name, expr=seq.seq)) | |
93 | + txt = xml_serialize(peg.Rule(name=peg.ID(name=rule_name), expr=seq.seq)) | |
94 | 94 | logger.debug(f'XML:: {txt}') |
95 | 95 | |
96 | 96 | assert_xml_Element(txt, tag='Rule', name=rule_name) |
@@ -98,8 +98,8 @@ | ||
98 | 98 | |
99 | 99 | |
100 | 100 | def test_Rules(xml_serialize): |
101 | - r1 = peg.Rule(name='rule_1', expr=peg.Sequence(value=[peg.ID(name='id1')])) | |
102 | - r2 = peg.Rule(name='rule_2', expr=peg.Sequence(value=[peg.StrTerm(value='str2')])) | |
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 | 103 | |
104 | 104 | txt = xml_serialize(peg.Rules(children=[r1,r2])) |
105 | 105 | logger.debug(f'XML:: {txt}') |
@@ -1,19 +1,18 @@ | ||
1 | 1 | import pytest |
2 | 2 | |
3 | -from castle.ast.peg import Rule | |
4 | - | |
5 | -@pytest.mark.skip("This test is wrong: (1) An ID is not string, (2) a int is not an Expression") | |
6 | -def test_a_ID(): | |
7 | - a_name, a_val = 'aName', 42 | |
8 | - s=Rule(name=a_name, expr=a_val) | |
9 | - assert s.name == a_name, "Remember the ID" | |
10 | - assert s.expr == a_val, "Remember the expr" | |
3 | +from castle.ast import peg | |
11 | 4 | |
12 | 5 | |
13 | -def test_needID(): | |
14 | - with pytest.raises(ValueError): | |
15 | - Rule(name=42) # The name should be an ID, or string | |
16 | - with pytest.raises(ValueError): | |
17 | - Rule(name='a b') # "A space in not allowed in an ID | |
6 | +def test_rulename_is_an_ID(): | |
7 | + anID = peg.ID(name="aName") | |
8 | + s = peg.Rule(name=anID, expr=None) | |
9 | + assert s.name == anID | |
10 | + | |
11 | +def test_rulename_isnot_string(): | |
12 | + with pytest.raises(TypeError): | |
13 | + peg.Rule(name="strName", expr=None) | |
18 | 14 | |
19 | 15 | |
16 | +#XXX ToBeDone: more tests | |
17 | + | |
18 | + |