Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Révision | 1cfd23275f8624db2017ae7eaf94690020c909eb (tree) |
---|---|
l'heure | 2023-09-29 01:04:14 |
Auteur | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
ASIS/BUSY: Protocol-with-parms: rendering with types seems oke - more tests needed (and a bit of design
@@ -7,14 +7,22 @@ | ||
7 | 7 | |
8 | 8 | {#GAM Note: do not put {% block ... inside the loop - does not work#} |
9 | 9 | |
10 | +{%- macro Str_or_Type(t) -%} | |
11 | + {%- if t is string -%} | |
12 | + "{{t}}" | |
13 | + {%- else -%} | |
14 | + {{t.__name__}} | |
15 | + {%- endif -%} | |
16 | +{%- endmacro -%} | |
17 | + | |
10 | 18 | {% for proto in protocols %} |
11 | 19 | {{- m.ProtocolName(proto.name) }} = buildin.CC_B_Protocol(name="{{ proto.name }}", |
12 | 20 | {% if proto.typedParameters %} |
13 | 21 | parameters=( |
14 | - {%- for parm in proto.typedParameters -%} | |
15 | - ({{ parm.name}} , {{parm.type}}), | |
16 | - {%- endfor -%} | |
17 | - ), # XXX ToDo: parms: (seq of] typle, namedType, strings? | |
22 | + {% for parm in proto.typedParameters %} | |
23 | + ('{{ parm.name}}' , {{ Str_or_Type(parm.type) }}), | |
24 | + {% endfor %} | |
25 | + ), ### XXX ToDo: parms: tuple, namedType, strings, ... (see event -- use macro?) | |
18 | 26 | {% endif %} |
19 | 27 | kind=buildin.{{proto.kind}}, |
20 | 28 | inherit_from={{m.ProtocolName(proto.based_on.name)}} |
@@ -72,28 +72,42 @@ | ||
72 | 72 | typedParameters=[])]) |
73 | 73 | assert 'parameters' not in out |
74 | 74 | |
75 | + | |
75 | 76 | def test_protocol_with_1parm(T_ProtocolDataStructures): |
76 | 77 | out = T_ProtocolDataStructures.render(protocols=[EventProtocol(name="With_1_Parm", |
77 | 78 | events=[], |
78 | 79 | typedParameters=[TypedParameter(name='a_parm', type="A_Type")])]) |
79 | 80 | logger.debug("\n---------- out:: ------------------------\n%s\n--------------------------------", out) |
80 | - assert 'parameters=' in out | |
81 | - assert False, "check rendering" | |
82 | 81 | |
82 | + assert 'parameters=(' in out | |
83 | + assert 'a_parm' in out | |
84 | + assert 'A_T' in out | |
85 | + | |
86 | +sQUOTE="'" | |
87 | +dQUOTE='"' | |
83 | 88 | def test_protocol_with_parms(T_ProtocolDataStructures): |
84 | - out = T_ProtocolDataStructures.render(protocols=[EventProtocol(name="WithParms", | |
85 | - events=[], | |
86 | - typedParameters=[ | |
87 | - TypedParameter(name='a_parm', type="A_Type"), | |
88 | - TypedParameter(name='b_parm', type=int), | |
89 | - TypedParameter(name='c_parm', type=float), | |
90 | - TypedParameter(name='1', type=int) | |
91 | - ])]) | |
89 | + p= EventProtocol(name="WithParms", | |
90 | + events=[], | |
91 | + typedParameters=[ | |
92 | + TypedParameter(name='a_parm', type="A_Type"), | |
93 | + TypedParameter(name='b_parm', type=int), | |
94 | + TypedParameter(name='c_parm', type=float), | |
95 | + TypedParameter(name='foo', type=int) | |
96 | + ]) | |
97 | + out = T_ProtocolDataStructures.render(protocols=[p]) | |
92 | 98 | logger.debug("\n---------- out:: ------------------------\n%s\n--------------------------------", out) |
93 | - assert 'parameters=' in out | |
94 | - assert False, "check rendering" | |
99 | + assert 'parameters=(' in out | |
100 | + assert "'a_parm'" in out | |
101 | + for parm in p.typedParameters: | |
102 | + assert sQUOTE + parm.name + sQUOTE in out | |
103 | + type_val = (dQUOTE + parm.type + dQUOTE) if isinstance(parm.type, str) else parm.type.__name__ | |
104 | + assert type_val in out | |
95 | 105 | |
96 | 106 | |
107 | +@pytest.mark.skip("Later: assert on types of the TypedParameter -- see note in ``ProtocolDataStructures.jinja2``") | |
108 | +def test_todo_with_parms(): | |
109 | + assert False | |
110 | + | |
97 | 111 | |
98 | 112 | def test_ProtocolDataStructures_in_protocol(T_Protocol, p_1e, p_2e_1i): |
99 | 113 | out = T_Protocol.render(protocols=[p_1e, p_2e_1i]) |