Skip to content

Commit 184f7c1

Browse files
bhirszmnojek
andauthored
Fixed Tasks header causing MergeAndOrderSections to fail with Robot Framework 6.0+ (#496)
* Add GenerateDocumentation transformer Co-authored-by: Mateusz Nojek <matnojek@gmail.com>
1 parent 6703048 commit 184f7c1

File tree

6 files changed

+38
-9
lines changed

6 files changed

+38
-9
lines changed

docs/releasenotes/4.0.0.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,4 +272,5 @@ enclose it with quotation marks::
272272
Bugs
273273
-----
274274

275-
- Fixed the bug where keyword name would be prefixed with continuation marks (``...``) if name was longer than line length limit (#494)
275+
- Keyword name will no longer be prefixed with continuation marks (``...``) if name was longer than line length limit (#494)
276+
- It is now safe to use Tasks sections with ``MergeAndOrderSections`` transformer with Robot Framework 6.0+ (#490)

robotidy/decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def wrapper(*args, **kwargs):
2727
"\nFatal exception occurred. You can create an issue at "
2828
"https://github.com/MarketSquare/robotframework-tidy/issues . Thanks!"
2929
)
30-
err.args = (err.args[0] + message,) + err.args[1:]
30+
err.args = (str(err.args[0]) + message,) + err.args[1:]
3131
raise err
3232

3333
return wrapper

robotidy/transformers/MergeAndOrderSections.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def parse_order(self, order):
6868
Token.SETTING_HEADER,
6969
Token.VARIABLE_HEADER,
7070
Token.TESTCASE_HEADER,
71+
"TASK HEADER",
7172
Token.KEYWORD_HEADER,
7273
)
7374
if not order:
@@ -82,19 +83,31 @@ def parse_order(self, order):
8283
"variable": Token.VARIABLE_HEADER,
8384
"testcases": Token.TESTCASE_HEADER,
8485
"testcase": Token.TESTCASE_HEADER,
86+
"tasks": "TASK HEADER",
87+
"task": "TASK HEADER",
8588
"keywords": Token.KEYWORD_HEADER,
8689
"keyword": Token.KEYWORD_HEADER,
8790
}
8891
parsed_order = [self.LANGUAGE_MARKER_SECTION]
8992
for part in parts:
9093
parsed_order.append(map_names.get(part, None))
91-
if any(header not in parsed_order for header in default_order):
94+
# all sections need to be here, and either tasks or test cases or both of them
95+
any_of_sections = [Token.TESTCASE_HEADER, "TASK HEADER"]
96+
required_sections = [section for section in default_order if section not in any_of_sections]
97+
if (
98+
# unexpected section names
99+
any(header not in default_order for header in parsed_order)
100+
# missing required section
101+
or any(req_section not in parsed_order for req_section in required_sections)
102+
# we need either task, test or both in parsing order
103+
or not any(any_section in parsed_order for any_section in any_of_sections)
104+
):
92105
raise InvalidParameterValueError(
93106
self.__class__.__name__,
94107
"order",
95108
order,
96109
"Custom order should be provided in comma separated list with all section names:\n"
97-
"order=comments,settings,variables,testcases,variables",
110+
"order=comments,settings,variables,testcases,tasks,variables",
98111
)
99112
return parsed_order
100113

@@ -181,8 +194,6 @@ def get_section_type(self, section):
181194
)
182195
if section.header:
183196
name_token = section.header.get_token(*header_tokens)
184-
if name_token.type == "TASK HEADER":
185-
return Token.TESTCASE_HEADER
186197
return name_token.type
187198
if Config and any(isinstance(child, Config) for child in section.body):
188199
return self.LANGUAGE_MARKER_SECTION
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
*** Comments ***
2+
i am comment
3+
*** Test Case ***
4+
Test 1
5+
IF ${condition}
6+
Log stuff
7+
END
8+
9+
*** Task ***
10+
Task 1
11+
IF ${condition}
12+
Log stuff
13+
END
14+

tests/atest/transformers/MergeAndOrderSections/test_merge_and_order_sections.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ def test_merging_and_ordering(self):
1010
self.compare(source="tests.robot")
1111

1212
def test_both_test_and_task(self):
13-
self.compare(source="both_test_and_task.robot")
13+
self.compare(source="both_test_and_task.robot", target_version="<6")
14+
15+
def test_both_test_and_task_rf6(self):
16+
self.compare(source="both_test_and_task.robot", expected="both_test_and_task_rf6.robot", target_version=">=6")
1417

1518
def test_multiple_header_comments(self):
1619
self.compare(source="multiple_header_comments.robot")
@@ -64,7 +67,7 @@ def test_invalid_order_parameter(self, parameter):
6467
expected_output = (
6568
f"Error: {self.TRANSFORMER_NAME}: Invalid 'order' parameter value: '{parameter}'. "
6669
"Custom order should be provided in comma separated list with all section names:\n"
67-
"order=comments,settings,variables,testcases,variables\n"
70+
"order=comments,settings,variables,testcases,tasks,variables\n"
6871
)
6972
assert expected_output == result.output
7073

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
robotframework==6.0
1+
robotframework==6.0.2

0 commit comments

Comments
 (0)