Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Révision | 104f58785bc607207c60a69e8bd7ff6f9a991627 (tree) |
---|---|
l'heure | 2023-02-04 08:02:24 |
Auteur | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
asis
@@ -52,19 +52,18 @@ | ||
52 | 52 | return count |
53 | 53 | |
54 | 54 | def render(self, prepend:str="", indent=" ") ->str: |
55 | - self.render_struct(prepend=prepend, indent=indent) | |
55 | + return self.render_struct(prepend=prepend, indent=indent) | |
56 | 56 | |
57 | 57 | def render_struct(self, prepend:str="", indent=" ") ->str: ## struct CC_B_ComponentInterface cc_CI_${name} ... |
58 | 58 | """ |
59 | 59 | .. todo:: |
60 | 60 | |
61 | - - Move `CC_B_ComponentInterface.render()` into a Rendering subclass-delegate | |
62 | 61 | - refactor & test: spilt into parts |
63 | 62 | - optional: Use Jinja ipv f-strings |
64 | 63 | - make name/prefix (``f'cc_CI_{self.name}``) in a getter oid |
65 | 64 | """ |
66 | 65 | name = f'cc_CI_{self.name}' |
67 | - based_on_link = f'&cc_CI_{self.based_on[0].name}' if self.based_on[0] else "NULL" | |
66 | + based_on_link = f'&cc_CI_{self.based_on[0].name}' if self.based_on else "NULL" | |
68 | 67 | |
69 | 68 | retval = [] |
70 | 69 | retval.append(f'{prepend}struct CC_B_ComponentInterface {name} = {{') |
@@ -21,26 +21,68 @@ | ||
21 | 21 | def subComp(demo2Comp): |
22 | 22 | return CC_B_ComponentInterface('sub', based_on=demo2Comp) |
23 | 23 | |
24 | -def test_0_name(emptyComp, demo2Comp): | |
24 | +def test_0a_name(emptyComp, demo2Comp): | |
25 | 25 | assert emptyComp.name == 'empty' |
26 | 26 | assert demo2Comp.name == 'demo2' |
27 | 27 | |
28 | -def test_0_based_on(subComp, demo2Comp): | |
28 | +def test_0b_based_on(subComp, demo2Comp): | |
29 | 29 | assert demo2Comp.based_on == () |
30 | 30 | assert subComp.based_on[0] is demo2Comp |
31 | 31 | |
32 | -def test_1_NoOfPorts(emptyComp, demo2Comp): | |
32 | +def test_1a_NoOfPorts(emptyComp, demo2Comp): | |
33 | 33 | assert emptyComp.no_of_ports() == 0 |
34 | 34 | assert demo2Comp.no_of_ports() == 2 |
35 | 35 | |
36 | -def test_1_NoOfPorts_variants(subComp): | |
36 | +def test_1b_NoOfPorts_variants(subComp): | |
37 | 37 | assert subComp.no_of_ports() == 0 # inherited=False, mine=True |
38 | - | |
39 | 38 | assert subComp.no_of_ports(inherited=False, mine=False) == 0 |
40 | 39 | assert subComp.no_of_ports(inherited=False, mine=True) == 0 |
41 | 40 | assert subComp.no_of_ports(inherited=True, mine=False) == 2 |
42 | 41 | assert subComp.no_of_ports(inherited=True, mine=True) == 2 |
43 | 42 | |
43 | +def test_1c_MorePorts(): | |
44 | + p1 = CC_B_ComponentInterface('p1', ports = CC_Port(name='no_1', type=None)) | |
45 | + p2 = CC_B_ComponentInterface('p2', ports = [CC_Port(name='no_2', type=None), CC_Port(name='no_3', type=None)]) | |
46 | + pa = CC_B_ComponentInterface('pa', ports = CC_Port(name='no_4', type=None)) | |
47 | + pb = CC_B_ComponentInterface('pb', based_on = pa) | |
48 | + p = CC_B_ComponentInterface('p', based_on = (p1,p2,pb)) | |
49 | + | |
50 | + assert p.no_of_ports(inherited=True, mine=True) == 4 | |
51 | + | |
52 | + | |
53 | +ref_emptyComp="""\ | |
54 | +struct CC_B_ComponentInterface cc_CI_Empty = { | |
55 | + .name = "empty", | |
56 | + .inherit_from = &cc_CI_Component, | |
57 | + .length = 0, | |
58 | + .ports = { | |
59 | + } | |
60 | +} ; | |
61 | +""" | |
62 | + | |
63 | +ref_subComp="""\ | |
64 | +struct CC_B_ComponentInterface cc_CI_sub = { | |
65 | + .name = "sub", | |
66 | + .inherit_from = &cc_CI_demo2, | |
67 | + .length = 0, | |
68 | + .ports = { | |
69 | + } | |
70 | +} ; | |
71 | +""" | |
72 | + | |
73 | +def test_render(emptyComp): | |
74 | + CCompare(ref_emptyComp, emptyComp.render()) | |
75 | + CCompare(ref_emptyComp, emptyComp.render_struct()) | |
76 | + | |
77 | +def test_render_whitespace(emptyComp): | |
78 | + # prepending a/o indenting with whitespace has no effect | |
79 | + CCompare(ref_emptyComp, emptyComp.render(prepend="\t\t", indent="")) | |
80 | + CCompare(ref_emptyComp, emptyComp.render_struct(prepend=" ", indent="\t\t\t")) | |
81 | + | |
82 | + | |
83 | +def test_render_sub(subComp): | |
84 | + CCompare(ref_subComp, subComp.render()) | |
85 | + | |
44 | 86 | @pytest.mark.skip(reason="More CompInterface-tests are needed") |
45 | 87 | def test_more(): pass |
46 | 88 |