Skip to content

Commit 33cac61

Browse files
authored
Merge pull request #1322 from cloudbees-oss/merge-v1-20260608
Merge v1 20260608
2 parents 8511507 + 68de76c commit 33cac61

3 files changed

Lines changed: 246 additions & 42 deletions

File tree

smart_tests/test_runners/robot.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,22 @@ def parse_suite(suite: ET.Element):
6262
if status == "NOT_RUN" or nested_status == 'NOT_RUN':
6363
skipped = ET.SubElement(testcase, "skipped") # noqa: F841
6464

65+
def find_leaf_suites(suite: ET.Element):
66+
nested = suite.findall(SUITE_TAG_NAME)
67+
if not nested:
68+
return [suite]
69+
leaves = []
70+
for child in nested:
71+
leaves.extend(find_leaf_suites(child))
72+
return leaves
73+
6574
original_tree = ET.parse(p)
6675
testsuite = ET.Element("testsuite", {"name": "robot"})
6776

6877
SUITE_TAG_NAME = "suite"
69-
for suites in original_tree.findall(SUITE_TAG_NAME):
70-
nested_suites = suites.findall(SUITE_TAG_NAME)
71-
72-
if nested_suites:
73-
# Run tests in a directory
74-
for suite in nested_suites:
75-
parse_suite(suite)
76-
else:
77-
# Run tests in a single file
78-
parse_suite(suites)
78+
for top_suite in original_tree.findall(SUITE_TAG_NAME):
79+
for leaf_suite in find_leaf_suites(top_suite):
80+
parse_suite(leaf_suite)
7981

8082
return ET.ElementTree(testsuite)
8183

tests/data/robot/output.xml

Lines changed: 120 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,192 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<robot generator="Robot 7.4.2 (Python 3.13.13 on darwin)" generated="2026-06-04T16:18:55.667057" rpa="false" schemaversion="5">
2+
<robot generator="Robot 7.4.2 (Python 3.13.13 on darwin)" generated="2026-06-05T16:09:07.132972" rpa="false" schemaversion="5">
33
<suite id="s1" name="Robot" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot">
44
<suite id="s1-s1" name="Minus" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot/minus.robot">
55
<test id="s1-s1-t1" name="Check method" line="6">
66
<kw name="Result Is" owner="Calculator">
77
<arg>-1</arg>
8-
<status status="NOT RUN" start="2026-06-04T16:18:55.688016" elapsed="0.000060"/>
8+
<status status="NOT RUN" start="2026-06-05T16:09:07.159445" elapsed="0.000131"/>
99
</kw>
10-
<status status="PASS" start="2026-06-04T16:18:55.687743" elapsed="0.000411"/>
10+
<status status="PASS" start="2026-06-05T16:09:07.159168" elapsed="0.000485"/>
1111
</test>
1212
<test id="s1-s1-t2" name="Minus method" line="9">
1313
<kw name="Plus" owner="Calculator">
1414
<arg>1</arg>
15-
<status status="NOT RUN" start="2026-06-04T16:18:55.688330" elapsed="0.000034"/>
15+
<status status="NOT RUN" start="2026-06-05T16:09:07.159987" elapsed="0.000048"/>
1616
</kw>
1717
<kw name="Minus" owner="Calculator">
1818
<arg>1</arg>
19-
<status status="NOT RUN" start="2026-06-04T16:18:55.688410" elapsed="0.000021"/>
19+
<status status="NOT RUN" start="2026-06-05T16:09:07.160077" elapsed="0.000022"/>
2020
</kw>
2121
<kw name="Result Is" owner="Calculator">
2222
<arg>0</arg>
23-
<status status="NOT RUN" start="2026-06-04T16:18:55.688468" elapsed="0.000018"/>
23+
<status status="NOT RUN" start="2026-06-05T16:09:07.160127" elapsed="0.000017"/>
2424
</kw>
25-
<status status="PASS" start="2026-06-04T16:18:55.688231" elapsed="0.000296"/>
25+
<status status="PASS" start="2026-06-05T16:09:07.159839" elapsed="0.000343"/>
2626
</test>
2727
<test id="s1-s1-t3" name="Minus method 2" line="14">
2828
<kw name="Plus" owner="Calculator">
2929
<arg>10</arg>
30-
<status status="NOT RUN" start="2026-06-04T16:18:55.688668" elapsed="0.000020"/>
30+
<status status="NOT RUN" start="2026-06-05T16:09:07.160348" elapsed="0.000022"/>
3131
</kw>
3232
<kw name="Minus" owner="Calculator">
3333
<arg>20</arg>
34-
<status status="NOT RUN" start="2026-06-04T16:18:55.688722" elapsed="0.000017"/>
34+
<status status="NOT RUN" start="2026-06-05T16:09:07.160397" elapsed="0.000018"/>
3535
</kw>
3636
<kw name="Result Is" owner="Calculator">
3737
<arg>-10</arg>
38-
<status status="NOT RUN" start="2026-06-04T16:18:55.688772" elapsed="0.000017"/>
38+
<status status="NOT RUN" start="2026-06-05T16:09:07.160441" elapsed="0.000017"/>
3939
</kw>
40-
<status status="PASS" start="2026-06-04T16:18:55.688587" elapsed="0.000240"/>
40+
<status status="PASS" start="2026-06-05T16:09:07.160261" elapsed="0.000229"/>
4141
</test>
42-
<status status="PASS" start="2026-06-04T16:18:55.686349" elapsed="0.002607"/>
42+
<status status="PASS" start="2026-06-05T16:09:07.156594" elapsed="0.004039"/>
4343
</suite>
4444
<suite id="s1-s2" name="Plus" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot/plus.robot">
4545
<test id="s1-s2-t1" name="Check method" line="6">
4646
<kw name="Result Is" owner="Calculator">
4747
<arg>-1</arg>
48-
<status status="NOT RUN" start="2026-06-04T16:18:55.689659" elapsed="0.000021"/>
48+
<status status="NOT RUN" start="2026-06-05T16:09:07.161408" elapsed="0.000022"/>
4949
</kw>
50-
<status status="PASS" start="2026-06-04T16:18:55.689575" elapsed="0.000142"/>
50+
<status status="PASS" start="2026-06-05T16:09:07.161320" elapsed="0.000143"/>
5151
</test>
5252
<test id="s1-s2-t2" name="Plus method" line="9">
5353
<kw name="Plus" owner="Calculator">
5454
<arg>1</arg>
55-
<status status="NOT RUN" start="2026-06-04T16:18:55.689845" elapsed="0.000020"/>
55+
<status status="NOT RUN" start="2026-06-05T16:09:07.161589" elapsed="0.000019"/>
5656
</kw>
5757
<kw name="Plus" owner="Calculator">
5858
<arg>1</arg>
59-
<status status="NOT RUN" start="2026-06-04T16:18:55.689897" elapsed="0.000017"/>
59+
<status status="NOT RUN" start="2026-06-05T16:09:07.161634" elapsed="0.000016"/>
6060
</kw>
6161
<kw name="Result Is" owner="Calculator">
6262
<arg>2</arg>
63-
<status status="NOT RUN" start="2026-06-04T16:18:55.689945" elapsed="0.000016"/>
63+
<status status="NOT RUN" start="2026-06-05T16:09:07.161677" elapsed="0.000015"/>
6464
</kw>
65-
<status status="PASS" start="2026-06-04T16:18:55.689772" elapsed="0.000225"/>
65+
<status status="PASS" start="2026-06-05T16:09:07.161514" elapsed="0.000206"/>
6666
</test>
6767
<test id="s1-s2-t3" name="Plus method 2" line="14">
6868
<kw name="Plus" owner="Calculator">
6969
<arg>10</arg>
70-
<status status="NOT RUN" start="2026-06-04T16:18:55.690120" elapsed="0.000021"/>
70+
<status status="NOT RUN" start="2026-06-05T16:09:07.161845" elapsed="0.000019"/>
7171
</kw>
7272
<kw name="Plus" owner="Calculator">
7373
<arg>20</arg>
74-
<status status="NOT RUN" start="2026-06-04T16:18:55.690175" elapsed="0.000018"/>
74+
<status status="NOT RUN" start="2026-06-05T16:09:07.161888" elapsed="0.000016"/>
7575
</kw>
7676
<kw name="Result Is" owner="Calculator">
7777
<arg>30</arg>
78-
<status status="NOT RUN" start="2026-06-04T16:18:55.690226" elapsed="0.000016"/>
78+
<status status="NOT RUN" start="2026-06-05T16:09:07.161928" elapsed="0.000016"/>
7979
</kw>
80-
<status status="PASS" start="2026-06-04T16:18:55.690050" elapsed="0.000227"/>
80+
<status status="PASS" start="2026-06-05T16:09:07.161773" elapsed="0.000198"/>
8181
</test>
82-
<status status="PASS" start="2026-06-04T16:18:55.689089" elapsed="0.001258"/>
82+
<status status="PASS" start="2026-06-05T16:09:07.160774" elapsed="0.001270"/>
8383
</suite>
84-
<status status="PASS" start="2026-06-04T16:18:55.668356" elapsed="0.022122"/>
84+
<suite id="s1-s3" name="Tests" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot/tests">
85+
<suite id="s1-s3-s1" name="Minus" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot/tests/minus">
86+
<suite id="s1-s3-s1-s1" name="Minus" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot/tests/minus/minus.robot">
87+
<test id="s1-s3-s1-s1-t1" name="Check method" line="6">
88+
<kw name="Result Is" owner="Calculator">
89+
<arg>-1</arg>
90+
<status status="NOT RUN" start="2026-06-05T16:09:07.163194" elapsed="0.000020"/>
91+
</kw>
92+
<status status="PASS" start="2026-06-05T16:09:07.163105" elapsed="0.000143"/>
93+
</test>
94+
<test id="s1-s3-s1-s1-t2" name="Minus method" line="9">
95+
<kw name="Plus" owner="Calculator">
96+
<arg>1</arg>
97+
<status status="NOT RUN" start="2026-06-05T16:09:07.163370" elapsed="0.000018"/>
98+
</kw>
99+
<kw name="Minus" owner="Calculator">
100+
<arg>1</arg>
101+
<status status="NOT RUN" start="2026-06-05T16:09:07.163413" elapsed="0.000016"/>
102+
</kw>
103+
<kw name="Result Is" owner="Calculator">
104+
<arg>0</arg>
105+
<status status="NOT RUN" start="2026-06-05T16:09:07.163452" elapsed="0.000016"/>
106+
</kw>
107+
<status status="PASS" start="2026-06-05T16:09:07.163297" elapsed="0.000201"/>
108+
</test>
109+
<test id="s1-s3-s1-s1-t3" name="Minus method 2" line="14">
110+
<kw name="Plus" owner="Calculator">
111+
<arg>10</arg>
112+
<status status="NOT RUN" start="2026-06-05T16:09:07.163618" elapsed="0.000018"/>
113+
</kw>
114+
<kw name="Minus" owner="Calculator">
115+
<arg>20</arg>
116+
<status status="NOT RUN" start="2026-06-05T16:09:07.163659" elapsed="0.000016"/>
117+
</kw>
118+
<kw name="Result Is" owner="Calculator">
119+
<arg>-10</arg>
120+
<status status="NOT RUN" start="2026-06-05T16:09:07.163698" elapsed="0.000016"/>
121+
</kw>
122+
<status status="PASS" start="2026-06-05T16:09:07.163546" elapsed="0.000198"/>
123+
</test>
124+
<status status="PASS" start="2026-06-05T16:09:07.162742" elapsed="0.001073"/>
125+
</suite>
126+
<status status="PASS" start="2026-06-05T16:09:07.162475" elapsed="0.001500"/>
127+
</suite>
128+
<suite id="s1-s3-s2" name="Plus" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot/tests/plus">
129+
<suite id="s1-s3-s2-s1" name="Plus" source="/Users/ryabuki/src/github.com/cloudbees-oss/smart-tests-integration-examples/robot/tests/plus/plus.robot">
130+
<test id="s1-s3-s2-s1-t1" name="Check method" line="6">
131+
<kw name="Result Is" owner="Calculator">
132+
<arg>-1</arg>
133+
<status status="NOT RUN" start="2026-06-05T16:09:07.164810" elapsed="0.000018"/>
134+
</kw>
135+
<status status="PASS" start="2026-06-05T16:09:07.164730" elapsed="0.000128"/>
136+
</test>
137+
<test id="s1-s3-s2-s1-t2" name="Plus method" line="9">
138+
<kw name="Plus" owner="Calculator">
139+
<arg>1</arg>
140+
<status status="NOT RUN" start="2026-06-05T16:09:07.164974" elapsed="0.000018"/>
141+
</kw>
142+
<kw name="Plus" owner="Calculator">
143+
<arg>1</arg>
144+
<status status="NOT RUN" start="2026-06-05T16:09:07.165015" elapsed="0.000016"/>
145+
</kw>
146+
<kw name="Result Is" owner="Calculator">
147+
<arg>2</arg>
148+
<status status="NOT RUN" start="2026-06-05T16:09:07.165053" elapsed="0.000014"/>
149+
</kw>
150+
<status status="PASS" start="2026-06-05T16:09:07.164905" elapsed="0.000191"/>
151+
</test>
152+
<test id="s1-s3-s2-s1-t3" name="Plus method 2" line="14">
153+
<kw name="Plus" owner="Calculator">
154+
<arg>10</arg>
155+
<status status="NOT RUN" start="2026-06-05T16:09:07.165217" elapsed="0.000018"/>
156+
</kw>
157+
<kw name="Plus" owner="Calculator">
158+
<arg>20</arg>
159+
<status status="NOT RUN" start="2026-06-05T16:09:07.165258" elapsed="0.000017"/>
160+
</kw>
161+
<kw name="Result Is" owner="Calculator">
162+
<arg>30</arg>
163+
<status status="NOT RUN" start="2026-06-05T16:09:07.165296" elapsed="0.000015"/>
164+
</kw>
165+
<status status="PASS" start="2026-06-05T16:09:07.165143" elapsed="0.000196"/>
166+
</test>
167+
<status status="PASS" start="2026-06-05T16:09:07.164370" elapsed="0.001035"/>
168+
</suite>
169+
<status status="PASS" start="2026-06-05T16:09:07.164101" elapsed="0.001468"/>
170+
</suite>
171+
<status status="PASS" start="2026-06-05T16:09:07.162170" elapsed="0.003538"/>
172+
</suite>
173+
<status status="PASS" start="2026-06-05T16:09:07.134259" elapsed="0.031588"/>
85174
</suite>
86175
<statistics>
87176
<total>
88-
<stat pass="6" fail="0" skip="0">All Tests</stat>
177+
<stat pass="12" fail="0" skip="0">All Tests</stat>
89178
</total>
90179
<tag>
91180
</tag>
92181
<suite>
93-
<stat name="Robot" id="s1" pass="6" fail="0" skip="0">Robot</stat>
182+
<stat name="Robot" id="s1" pass="12" fail="0" skip="0">Robot</stat>
94183
<stat name="Minus" id="s1-s1" pass="3" fail="0" skip="0">Robot.Minus</stat>
95184
<stat name="Plus" id="s1-s2" pass="3" fail="0" skip="0">Robot.Plus</stat>
185+
<stat name="Tests" id="s1-s3" pass="6" fail="0" skip="0">Robot.Tests</stat>
186+
<stat name="Minus" id="s1-s3-s1" pass="3" fail="0" skip="0">Robot.Tests.Minus</stat>
187+
<stat name="Minus" id="s1-s3-s1-s1" pass="3" fail="0" skip="0">Robot.Tests.Minus.Minus</stat>
188+
<stat name="Plus" id="s1-s3-s2" pass="3" fail="0" skip="0">Robot.Tests.Plus</stat>
189+
<stat name="Plus" id="s1-s3-s2-s1" pass="3" fail="0" skip="0">Robot.Tests.Plus.Plus</stat>
96190
</suite>
97191
</statistics>
98192
<errors>

0 commit comments

Comments
 (0)