Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
修訂 | 04e9ef19c23133bd4b0cf109ce2f3c25db126aa8 (tree) |
---|---|
時間 | 2023-01-29 07:41:04 |
作者 | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
(asis) corrected prepend= with more tests
@@ -105,7 +105,7 @@ | ||
105 | 105 | ## For now, loop over the events here ... |
106 | 106 | retval = [] |
107 | 107 | for n, e in enumerate(self.events, len(self.event_dict(inherired=True,mine=False))): # pragma: no mutate on event_dict parms |
108 | - retval.append(f'#define CC_P_{self.name}_{e.name}\t{n}\n') | |
108 | + retval.append(f'{prepend}#define CC_P_{self.name}_{e.name}\t{n}') | |
109 | 109 | return '\n'.join(retval)+"\n" |
110 | 110 | |
111 | 111 |
@@ -116,6 +116,6 @@ | ||
116 | 116 | retval = [] |
117 | 117 | for e in self.events: |
118 | 118 | types =" , ".join(f'{type_name(parm.type)}' for parm in e.typedParameters) # pragma: no mutate on " , " befor join() |
119 | - retval.append( f'typedef void (*CC_E_{self.name}_{e.name}_FT)(CC_selfType, CC_ComponentType, {types});') | |
119 | + retval.append( f'{prepend}typedef void (*CC_E_{self.name}_{e.name}_FT)(CC_selfType, CC_ComponentType, {types});') | |
120 | 120 | return '\n'.join(retval)+"\n" |
121 | 121 |
@@ -63,7 +63,7 @@ | ||
63 | 63 | CC_Event("demoEventF")]) |
64 | 64 | |
65 | 65 | |
66 | -ref_DemoProtocol="""\ | |
66 | +ref_demo_struct="""\ | |
67 | 67 | struct CC_B_Protocol cc_P_DEMO = { |
68 | 68 | .name = "DEMO", |
69 | 69 | .kind = CC_B_ProtocolKindIs_Event, |
@@ -78,14 +78,16 @@ | ||
78 | 78 | { .seqNo = 5, .name = "demoEventF", .part_of = &cc_P_DEMO }, |
79 | 79 | } |
80 | 80 | }; |
81 | - | |
81 | +""" | |
82 | +ref_demo_index="""\ | |
82 | 83 | #define CC_P_DEMO_demoEventA 0 |
83 | 84 | #define CC_P_DEMO_demoEventB 1 |
84 | 85 | #define CC_P_DEMO_demoEventC 2 |
85 | 86 | #define CC_P_DEMO_demoEventD 3 |
86 | 87 | #define CC_P_DEMO_demoEventE 4 |
87 | 88 | #define CC_P_DEMO_demoEventF 5 |
88 | - | |
89 | +""" | |
90 | +ref_demo_FTs="""\ | |
89 | 91 | typedef void (*CC_E_DEMO_demoEventA_FT)(CC_selfType, CC_ComponentType, ); |
90 | 92 | typedef void (*CC_E_DEMO_demoEventB_FT)(CC_selfType, CC_ComponentType, ); |
91 | 93 | typedef void (*CC_E_DEMO_demoEventC_FT)(CC_selfType, CC_ComponentType, ); |
@@ -94,6 +96,8 @@ | ||
94 | 96 | typedef void (*CC_E_DEMO_demoEventF_FT)(CC_selfType, CC_ComponentType, ); |
95 | 97 | """ |
96 | 98 | |
99 | +ref_demo="\n".join([ref_demo_struct, ref_demo_index, ref_demo_FTs]) | |
100 | + | |
97 | 101 | |
98 | 102 | |
99 | 103 | def test_0_isEvent(demoProtocol): |
@@ -120,7 +124,7 @@ | ||
120 | 124 | |
121 | 125 | |
122 | 126 | def test_render(demoProtocol): |
123 | - assert CCompare(ref_DemoProtocol, demoProtocol.render()) | |
127 | + assert CCompare(ref_demo, demoProtocol.render()) | |
124 | 128 | |
125 | 129 | def test_render_struct_sieve(simpleSieve): |
126 | 130 | assert CCompare(ref_simpleSieve, simpleSieve.render_struct()) |
@@ -138,25 +142,34 @@ | ||
138 | 142 | # More or less leading whitespace should not have effect |
139 | 143 | assert CCompare(ref_emptyProtocol_struct, emptyProtocol.render(prepend="\t\t", indent="")) |
140 | 144 | |
141 | -def test_prepend(emptyProtocol): # prepend shoud be on any (not empty) line | |
145 | +def verify_prepend(protocol): # prepend shoud be on any (not empty) line | |
142 | 146 | prepend="PREPEND_" |
143 | - out = emptyProtocol.render(prepend=prepend) | |
147 | + out = protocol.render(prepend=prepend) | |
148 | + logger.info("Protocol %s results in::\n%s", protocol.name, out) | |
144 | 149 | for l in out.splitlines(): |
145 | 150 | if len(l)>0: |
146 | 151 | assert l.startswith(prepend) |
147 | 152 | assert not l[len(prepend):].startswith(prepend) # No more prepend's |
148 | 153 | |
154 | +def test_prepend_empty(emptyProtocol): | |
155 | + verify_prepend(emptyProtocol) | |
156 | + | |
157 | +def test_prepend_simpleSieve(simpleSieve): | |
158 | + verify_prepend(simpleSieve) | |
159 | + | |
160 | +def test_prepend_demo(demoProtocol): | |
161 | + verify_prepend(demoProtocol) | |
162 | + | |
149 | 163 | |
150 | 164 | def verify_indent(ref, protocol): # indent can be used several time ... |
151 | - #try_indent="_-|" | |
152 | - try_indent="_" | |
165 | + try_indent="_-|" | |
153 | 166 | out = protocol.render_struct(indent=try_indent, prepend="") |
154 | 167 | logger.info("Protocol %s results in::\n%s", protocol.name, out) |
155 | 168 | |
156 | 169 | for ref_line,out_line in zip(ref.splitlines(), out.splitlines()): |
157 | 170 | ref_indents = len(ref_line)-len(ref_line.lstrip(' ')) |
158 | - logger.debug("ref_line: %s", ref_line) | |
159 | - logger.debug("out_line: %s", out_line) | |
171 | + logger.debug("ref_line: %s", ref_line); logger.debug("out_line: %s", out_line) | |
172 | + | |
160 | 173 | assert out_line[:len(try_indent)*ref_indents] == try_indent*ref_indents |
161 | 174 | if ref_indents >0: |
162 | 175 | without_pref = out_line[len(try_indent*ref_indents):] |
@@ -171,7 +184,7 @@ | ||
171 | 184 | verify_indent(ref_simpleSieve, simpleSieve) |
172 | 185 | |
173 | 186 | def test_indent_demo(demoProtocol): |
174 | - verify_indent(ref_DemoProtocol, demoProtocol) | |
187 | + verify_indent(ref_demo, demoProtocol) | |
175 | 188 | |
176 | 189 | |
177 | 190 | @pytest.mark.skip(reason="CURRENT: busy with testing all part of *C&P CC_EventProtocol") |