Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revisão | 47e5226e156991e537ada1c5af654f35beb516f8 (tree) |
---|---|
Hora | 2023-01-29 07:14:41 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
asis
@@ -29,7 +29,7 @@ | ||
29 | 29 | |
30 | 30 | mutmut: mutmut-3.11 # Mutation testing (takes a long run) https://en.wikipedia.org/wiki/Mutation_testing |
31 | 31 | -mutmut run --tests-dir pytst --paths-to-mutate castle |
32 | - mutmut html && rm ${MUTMUT_dir} ; mv html ${MUTMUT_dir} | |
32 | + mutmut html && rm -rf ${MUTMUT_dir} && mv html ${MUTMUT_dir} | |
33 | 33 | mutmut results |
34 | 34 | mutmut-open: mutmut |
35 | 35 | open ${MUTMUT_dir}index.html |
@@ -99,6 +99,7 @@ | ||
99 | 99 | retval.append(f'{prepend}}};\n') #end of struct |
100 | 100 | return '\n'.join(retval) +"\n" |
101 | 101 | |
102 | + | |
102 | 103 | # XXX Mutant 2* : default values prepend/indent |
103 | 104 | def render_indexes(self, prepend:str="", indent=" ") ->str: ## #define CC_P_<proto>_<event> index |
104 | 105 | ## For now, loop over the events here ... |
@@ -107,6 +108,7 @@ | ||
107 | 108 | retval.append(f'#define CC_P_{self.name}_{e.name}\t{n}\n') |
108 | 109 | return '\n'.join(retval)+"\n" |
109 | 110 | |
111 | + | |
110 | 112 | # XXX Mutant 2*: default values prepend/indent |
111 | 113 | def render_FTs(self, prepend:str="", indent=" ") ->str: ##typedef void (*CC_E_{...}_FT)(CC_selfType, CC_ComponentType, {...}); |
112 | 114 | type_name = lambda ptype : ptype if isinstance(ptype, str) else ptype.__name__ # XXX Mutant |
@@ -6,18 +6,23 @@ | ||
6 | 6 | |
7 | 7 | from . import * # CCompare |
8 | 8 | |
9 | - | |
10 | 9 | from castle.writers.CC2Cpy.Protocol import * #CC_EventProtocol |
11 | 10 | from castle.writers.CC2Cpy.Event import CC_Event |
12 | 11 | from castle.writers.CC2Cpy.CCbase import CC_TypedParameter |
13 | 12 | |
13 | +### | |
14 | +### NOTE | |
15 | +### | |
16 | +### The leading whitespace in the `ref_...` strings are relevant. | |
17 | +### Each space is an 'indent'; the renderXXX() formating uses this | |
18 | +### It does change the prepend/indent and counts the have "the same" number | |
14 | 19 | |
15 | 20 | @pytest.fixture |
16 | 21 | def emptyProtocol(): |
17 | 22 | return CC_EventProtocol("EMPTY", events=[], based_on=None) |
18 | 23 | |
19 | 24 | ##Note: whitespace in this ref is relevant!! |
20 | -refws_emptyProtocol_struct="""\ | |
25 | +ref_emptyProtocol_struct="""\ | |
21 | 26 | struct CC_B_Protocol cc_P_EMPTY = { |
22 | 27 | .name = "EMPTY", |
23 | 28 | .kind = CC_B_ProtocolKindIs_Event, |
@@ -33,7 +38,7 @@ | ||
33 | 38 | return CC_EventProtocol("SimpleSieve", events=[CC_Event("input", typedParameters=[CC_TypedParameter(name='event', type=int)])]) |
34 | 39 | |
35 | 40 | ##Note: whitespace in this ref is relevant!! |
36 | -refws_simpleSieve="""\ | |
41 | +ref_simpleSieve="""\ | |
37 | 42 | struct CC_B_Protocol cc_P_SimpleSieve = { |
38 | 43 | .name = "SimpleSieve", |
39 | 44 | .kind = CC_B_ProtocolKindIs_Event, |
@@ -58,35 +63,35 @@ | ||
58 | 63 | CC_Event("demoEventF")]) |
59 | 64 | |
60 | 65 | |
61 | -ref_DemoProtocol=""" | |
62 | - struct CC_B_Protocol cc_P_DEMO = { | |
63 | - .name = "DEMO", | |
64 | - .kind = CC_B_ProtocolKindIs_Event, | |
65 | - .inherit_from = &cc_P_Protocol, | |
66 | - .length = 6, | |
67 | - .events = { | |
68 | - { .seqNo = 0, .name = "demoEventA", .part_of = &cc_P_DEMO }, | |
69 | - { .seqNo = 1, .name = "demoEventB", .part_of = &cc_P_DEMO }, | |
70 | - { .seqNo = 2, .name = "demoEventC", .part_of = &cc_P_DEMO }, | |
71 | - { .seqNo = 3, .name = "demoEventD", .part_of = &cc_P_DEMO }, | |
72 | - { .seqNo = 4, .name = "demoEventE", .part_of = &cc_P_DEMO }, | |
73 | - { .seqNo = 5, .name = "demoEventF", .part_of = &cc_P_DEMO }, | |
74 | - } | |
75 | - }; | |
66 | +ref_DemoProtocol="""\ | |
67 | +struct CC_B_Protocol cc_P_DEMO = { | |
68 | + .name = "DEMO", | |
69 | + .kind = CC_B_ProtocolKindIs_Event, | |
70 | + .inherit_from = &cc_P_Protocol, | |
71 | + .length = 6, | |
72 | + .events = { | |
73 | + { .seqNo = 0, .name = "demoEventA", .part_of = &cc_P_DEMO }, | |
74 | + { .seqNo = 1, .name = "demoEventB", .part_of = &cc_P_DEMO }, | |
75 | + { .seqNo = 2, .name = "demoEventC", .part_of = &cc_P_DEMO }, | |
76 | + { .seqNo = 3, .name = "demoEventD", .part_of = &cc_P_DEMO }, | |
77 | + { .seqNo = 4, .name = "demoEventE", .part_of = &cc_P_DEMO }, | |
78 | + { .seqNo = 5, .name = "demoEventF", .part_of = &cc_P_DEMO }, | |
79 | + } | |
80 | +}; | |
76 | 81 | |
77 | - #define CC_P_DEMO_demoEventA 0 | |
78 | - #define CC_P_DEMO_demoEventB 1 | |
79 | - #define CC_P_DEMO_demoEventC 2 | |
80 | - #define CC_P_DEMO_demoEventD 3 | |
81 | - #define CC_P_DEMO_demoEventE 4 | |
82 | - #define CC_P_DEMO_demoEventF 5 | |
82 | +#define CC_P_DEMO_demoEventA 0 | |
83 | +#define CC_P_DEMO_demoEventB 1 | |
84 | +#define CC_P_DEMO_demoEventC 2 | |
85 | +#define CC_P_DEMO_demoEventD 3 | |
86 | +#define CC_P_DEMO_demoEventE 4 | |
87 | +#define CC_P_DEMO_demoEventF 5 | |
83 | 88 | |
84 | - typedef void (*CC_E_DEMO_demoEventA_FT)(CC_selfType, CC_ComponentType, ); | |
85 | - typedef void (*CC_E_DEMO_demoEventB_FT)(CC_selfType, CC_ComponentType, ); | |
86 | - typedef void (*CC_E_DEMO_demoEventC_FT)(CC_selfType, CC_ComponentType, ); | |
87 | - typedef void (*CC_E_DEMO_demoEventD_FT)(CC_selfType, CC_ComponentType, ); | |
88 | - typedef void (*CC_E_DEMO_demoEventE_FT)(CC_selfType, CC_ComponentType, ); | |
89 | - typedef void (*CC_E_DEMO_demoEventF_FT)(CC_selfType, CC_ComponentType, ); | |
89 | +typedef void (*CC_E_DEMO_demoEventA_FT)(CC_selfType, CC_ComponentType, ); | |
90 | +typedef void (*CC_E_DEMO_demoEventB_FT)(CC_selfType, CC_ComponentType, ); | |
91 | +typedef void (*CC_E_DEMO_demoEventC_FT)(CC_selfType, CC_ComponentType, ); | |
92 | +typedef void (*CC_E_DEMO_demoEventD_FT)(CC_selfType, CC_ComponentType, ); | |
93 | +typedef void (*CC_E_DEMO_demoEventE_FT)(CC_selfType, CC_ComponentType, ); | |
94 | +typedef void (*CC_E_DEMO_demoEventF_FT)(CC_selfType, CC_ComponentType, ); | |
90 | 95 | """ |
91 | 96 | |
92 | 97 |
@@ -118,22 +123,20 @@ | ||
118 | 123 | assert CCompare(ref_DemoProtocol, demoProtocol.render()) |
119 | 124 | |
120 | 125 | def test_render_struct_sieve(simpleSieve): |
121 | - assert CCompare(refws_simpleSieve, simpleSieve.render_struct()) | |
122 | - | |
123 | - | |
126 | + assert CCompare(ref_simpleSieve, simpleSieve.render_struct()) | |
124 | 127 | |
125 | 128 | |
126 | 129 | |
127 | 130 | def test_emptyProtocol(emptyProtocol): |
128 | 131 | # the "struct" is minimal" |
129 | - assert CCompare(refws_emptyProtocol_struct, emptyProtocol.render_struct()) | |
132 | + assert CCompare(ref_emptyProtocol_struct, emptyProtocol.render_struct()) | |
130 | 133 | # and the other parts are absent |
131 | - assert CCompare(refws_emptyProtocol_struct, emptyProtocol.render()) | |
134 | + assert CCompare(ref_emptyProtocol_struct, emptyProtocol.render()) | |
132 | 135 | |
133 | 136 | |
134 | 137 | def test_whitespace(emptyProtocol): |
135 | 138 | # More or less leading whitespace should not have effect |
136 | - assert CCompare(refws_emptyProtocol_struct, emptyProtocol.render(prepend="\t\t", indent="")) | |
139 | + assert CCompare(ref_emptyProtocol_struct, emptyProtocol.render(prepend="\t\t", indent="")) | |
137 | 140 | |
138 | 141 | def test_prepend(emptyProtocol): # prepend shoud be on any (not empty) line |
139 | 142 | prepend="PREPEND_" |
@@ -161,12 +164,14 @@ | ||
161 | 164 | |
162 | 165 | |
163 | 166 | def test_indent_empty(emptyProtocol): |
164 | - verify_indent(refws_emptyProtocol_struct, emptyProtocol) | |
167 | + verify_indent(ref_emptyProtocol_struct, emptyProtocol) | |
165 | 168 | |
166 | 169 | |
167 | 170 | def test_indent_simpleSieve(simpleSieve): |
168 | - verify_indent(refws_simpleSieve, simpleSieve) | |
171 | + verify_indent(ref_simpleSieve, simpleSieve) | |
169 | 172 | |
173 | +def test_indent_demo(demoProtocol): | |
174 | + verify_indent(ref_DemoProtocol, demoProtocol) | |
170 | 175 | |
171 | 176 | |
172 | 177 | @pytest.mark.skip(reason="CURRENT: busy with testing all part of *C&P CC_EventProtocol") |