robotframework 7.1.1__zip → 7.2b1__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. {robotframework-7.1.1 → robotframework-7.2b1}/BUILD.rst +2 -2
  2. {robotframework-7.1.1 → robotframework-7.2b1}/PKG-INFO +2 -2
  3. {robotframework-7.1.1 → robotframework-7.2b1}/setup.py +1 -1
  4. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/api/__init__.py +33 -9
  5. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/api/deco.py +8 -6
  6. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/api/interfaces.py +21 -4
  7. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/api/parsing.py +72 -68
  8. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/conf/languages.py +4 -3
  9. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/conf/settings.py +11 -10
  10. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/errors.py +3 -1
  11. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/htmlfilewriter.py +3 -0
  12. robotframework-7.2b1/src/robot/htmldata/libdoc/libdoc.html +408 -0
  13. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/log.html +1 -1
  14. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/report.html +1 -1
  15. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/testdata.js +1 -1
  16. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdoc.py +19 -11
  17. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/htmlwriter.py +7 -4
  18. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/model.py +7 -5
  19. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/writer.py +2 -2
  20. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/BuiltIn.py +109 -32
  21. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/Collections.py +18 -4
  22. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/__init__.py +3 -3
  23. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/body.py +48 -57
  24. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/control.py +35 -4
  25. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/message.py +13 -8
  26. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/modelobject.py +26 -0
  27. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/statistics.py +13 -9
  28. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/stats.py +12 -14
  29. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/suitestatistics.py +8 -9
  30. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/tags.py +10 -0
  31. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/tagstatistics.py +7 -8
  32. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/testcase.py +1 -0
  33. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/testsuite.py +1 -0
  34. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/totalstatistics.py +14 -21
  35. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/visitor.py +29 -3
  36. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/__init__.py +3 -2
  37. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/console/dotted.py +6 -3
  38. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/debugfile.py +3 -3
  39. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/filelogger.py +7 -3
  40. robotframework-7.2b1/src/robot/output/jsonlogger.py +338 -0
  41. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/librarylogger.py +12 -11
  42. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/listeners.py +49 -47
  43. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/logger.py +33 -20
  44. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/loggerapi.py +6 -0
  45. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/loggerhelper.py +26 -55
  46. robotframework-7.2b1/src/robot/output/loglevel.py +54 -0
  47. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/output.py +21 -17
  48. robotframework-7.2b1/src/robot/output/outputfile.py +174 -0
  49. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/pyloggingconf.py +2 -0
  50. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/xmllogger.py +40 -169
  51. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/blocklexers.py +25 -12
  52. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/statementlexers.py +16 -7
  53. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/tokens.py +2 -1
  54. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/model/__init__.py +1 -1
  55. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/model/blocks.py +34 -2
  56. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/model/statements.py +32 -2
  57. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/parser/blockparsers.py +7 -2
  58. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/rebot.py +10 -2
  59. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/jsmodelbuilders.py +1 -1
  60. robotframework-7.2b1/src/robot/reporting/outputwriter.py +30 -0
  61. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/__init__.py +1 -1
  62. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/executionerrors.py +9 -9
  63. robotframework-7.2b1/src/robot/result/executionresult.py +331 -0
  64. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/messagefilter.py +14 -10
  65. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/model.py +90 -18
  66. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/resultbuilder.py +2 -5
  67. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/xmlelementhandlers.py +20 -9
  68. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/run.py +18 -6
  69. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/__init__.py +1 -1
  70. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/embedded.py +7 -6
  71. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/typeconverters.py +14 -2
  72. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/typeinfo.py +22 -2
  73. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/bodyrunner.py +41 -0
  74. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/builder/settings.py +2 -1
  75. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/builder/transformers.py +46 -20
  76. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/context.py +22 -11
  77. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/librarykeyword.py +1 -1
  78. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/librarykeywordrunner.py +29 -23
  79. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/model.py +31 -4
  80. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/status.py +42 -35
  81. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/statusreporter.py +1 -1
  82. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/suiterunner.py +22 -15
  83. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/importer.py +39 -23
  84. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/unic.py +7 -8
  85. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/evaluation.py +21 -2
  86. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/replacer.py +20 -24
  87. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/scopes.py +17 -8
  88. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/variables.py +4 -1
  89. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/version.py +1 -1
  90. {robotframework-7.1.1 → robotframework-7.2b1}/src/robotframework.egg-info/PKG-INFO +2 -2
  91. {robotframework-7.1.1 → robotframework-7.2b1}/src/robotframework.egg-info/SOURCES.txt +3 -4
  92. robotframework-7.1.1/src/robot/htmldata/libdoc/doc_formatting.css +0 -74
  93. robotframework-7.1.1/src/robot/htmldata/libdoc/libdoc.css +0 -747
  94. robotframework-7.1.1/src/robot/htmldata/libdoc/libdoc.html +0 -702
  95. robotframework-7.1.1/src/robot/htmldata/libdoc/print.css +0 -11
  96. robotframework-7.1.1/src/robot/htmldata/libdoc/pygments.css +0 -162
  97. robotframework-7.1.1/src/robot/reporting/outputwriter.py +0 -48
  98. robotframework-7.1.1/src/robot/result/executionresult.py +0 -201
  99. {robotframework-7.1.1 → robotframework-7.2b1}/AUTHORS.rst +0 -0
  100. {robotframework-7.1.1 → robotframework-7.2b1}/CONTRIBUTING.rst +0 -0
  101. {robotframework-7.1.1 → robotframework-7.2b1}/COPYRIGHT.txt +0 -0
  102. {robotframework-7.1.1 → robotframework-7.2b1}/INSTALL.rst +0 -0
  103. {robotframework-7.1.1 → robotframework-7.2b1}/LICENSE.txt +0 -0
  104. {robotframework-7.1.1 → robotframework-7.2b1}/MANIFEST.in +0 -0
  105. {robotframework-7.1.1 → robotframework-7.2b1}/README.rst +0 -0
  106. {robotframework-7.1.1 → robotframework-7.2b1}/setup.cfg +0 -0
  107. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/__init__.py +0 -0
  108. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/__main__.py +0 -0
  109. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/api/exceptions.py +0 -0
  110. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/api/logger.py +0 -0
  111. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/api/py.typed +0 -0
  112. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/conf/__init__.py +0 -0
  113. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/conf/gatherfailed.py +0 -0
  114. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/__init__.py +0 -0
  115. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/common/__init__.py +0 -0
  116. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/common/js_disabled.css +0 -0
  117. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/common/storage.js +0 -0
  118. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/jsonwriter.py +0 -0
  119. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/lib/__init__.py +0 -0
  120. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
  121. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/lib/jquery.min.js +0 -0
  122. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
  123. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
  124. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
  125. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/libdoc/__init__.py +0 -0
  126. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/__init__.py +0 -0
  127. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/common.css +0 -0
  128. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
  129. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/fileloading.js +0 -0
  130. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/log.css +0 -0
  131. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/log.js +0 -0
  132. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/model.js +0 -0
  133. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/print.css +0 -0
  134. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/report.css +0 -0
  135. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/util.js +0 -0
  136. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/rebot/view.js +0 -0
  137. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/template.py +0 -0
  138. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/testdoc/__init__.py +0 -0
  139. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/testdoc/testdoc.css +0 -0
  140. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/htmldata/testdoc/testdoc.html +0 -0
  141. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/__init__.py +0 -0
  142. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/builder.py +0 -0
  143. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/consoleviewer.py +0 -0
  144. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/datatypes.py +0 -0
  145. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/htmlutils.py +0 -0
  146. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/jsonbuilder.py +0 -0
  147. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/jsonwriter.py +0 -0
  148. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/output.py +0 -0
  149. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/robotbuilder.py +0 -0
  150. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/standardtypes.py +0 -0
  151. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/xmlbuilder.py +0 -0
  152. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libdocpkg/xmlwriter.py +0 -0
  153. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/DateTime.py +0 -0
  154. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/Dialogs.py +0 -0
  155. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/Easter.py +0 -0
  156. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/OperatingSystem.py +0 -0
  157. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/Process.py +0 -0
  158. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/Remote.py +0 -0
  159. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/Screenshot.py +0 -0
  160. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/String.py +0 -0
  161. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/Telnet.py +0 -0
  162. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/XML.py +0 -0
  163. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/__init__.py +0 -0
  164. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/libraries/dialogs_py.py +0 -0
  165. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/configurer.py +0 -0
  166. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/filter.py +0 -0
  167. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/fixture.py +0 -0
  168. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/itemlist.py +0 -0
  169. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/keyword.py +0 -0
  170. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/metadata.py +0 -0
  171. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/modifier.py +0 -0
  172. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/namepatterns.py +0 -0
  173. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/model/tagsetter.py +0 -0
  174. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/console/__init__.py +0 -0
  175. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/console/highlighting.py +0 -0
  176. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/console/quiet.py +0 -0
  177. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/console/verbose.py +0 -0
  178. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/output/stdoutlogsplitter.py +0 -0
  179. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/__init__.py +0 -0
  180. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/__init__.py +0 -0
  181. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/context.py +0 -0
  182. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/lexer.py +0 -0
  183. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/settings.py +0 -0
  184. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/lexer/tokenizer.py +0 -0
  185. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/model/visitor.py +0 -0
  186. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/parser/__init__.py +0 -0
  187. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/parser/fileparser.py +0 -0
  188. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/parser/parser.py +0 -0
  189. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/parsing/suitestructure.py +0 -0
  190. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/pythonpathsetter.py +0 -0
  191. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/__init__.py +0 -0
  192. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/expandkeywordmatcher.py +0 -0
  193. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/jsbuildingcontext.py +0 -0
  194. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/jsexecutionresult.py +0 -0
  195. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/jswriter.py +0 -0
  196. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/logreportwriters.py +0 -0
  197. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/resultwriter.py +0 -0
  198. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/stringcache.py +0 -0
  199. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/reporting/xunitwriter.py +0 -0
  200. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/configurer.py +0 -0
  201. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/flattenkeywordmatcher.py +0 -0
  202. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/keywordremover.py +0 -0
  203. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/merger.py +0 -0
  204. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/modeldeprecation.py +0 -0
  205. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/suiteteardownfailed.py +0 -0
  206. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/result/visitor.py +0 -0
  207. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/__init__.py +0 -0
  208. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/argumentconverter.py +0 -0
  209. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/argumentmapper.py +0 -0
  210. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/argumentparser.py +0 -0
  211. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/argumentresolver.py +0 -0
  212. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/argumentspec.py +0 -0
  213. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/argumentvalidator.py +0 -0
  214. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/customconverters.py +0 -0
  215. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/typeinfoparser.py +0 -0
  216. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/arguments/typevalidator.py +0 -0
  217. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/builder/__init__.py +0 -0
  218. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/builder/builders.py +0 -0
  219. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/builder/parsers.py +0 -0
  220. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/dynamicmethods.py +0 -0
  221. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/importer.py +0 -0
  222. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/invalidkeyword.py +0 -0
  223. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/keywordfinder.py +0 -0
  224. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/keywordimplementation.py +0 -0
  225. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/libraryscopes.py +0 -0
  226. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/namespace.py +0 -0
  227. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/outputcapture.py +0 -0
  228. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/randomizer.py +0 -0
  229. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/resourcemodel.py +0 -0
  230. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/runkwregister.py +0 -0
  231. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/signalhandler.py +0 -0
  232. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/testlibraries.py +0 -0
  233. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/timeouts/__init__.py +0 -0
  234. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/timeouts/nosupport.py +0 -0
  235. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/timeouts/posix.py +0 -0
  236. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/timeouts/windows.py +0 -0
  237. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/running/userkeywordrunner.py +0 -0
  238. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/testdoc.py +0 -0
  239. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/__init__.py +0 -0
  240. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/application.py +0 -0
  241. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/argumentparser.py +0 -0
  242. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/asserts.py +0 -0
  243. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/charwidth.py +0 -0
  244. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/compress.py +0 -0
  245. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/connectioncache.py +0 -0
  246. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/dotdict.py +0 -0
  247. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/encoding.py +0 -0
  248. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/encodingsniffer.py +0 -0
  249. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/error.py +0 -0
  250. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/escaping.py +0 -0
  251. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/etreewrapper.py +0 -0
  252. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/filereader.py +0 -0
  253. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/frange.py +0 -0
  254. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/htmlformatters.py +0 -0
  255. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/markuputils.py +0 -0
  256. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/markupwriters.py +0 -0
  257. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/match.py +0 -0
  258. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/misc.py +0 -0
  259. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/normalizing.py +0 -0
  260. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/notset.py +0 -0
  261. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/platform.py +0 -0
  262. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/recommendations.py +0 -0
  263. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/restreader.py +0 -0
  264. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/robotenv.py +0 -0
  265. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/robotinspect.py +0 -0
  266. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/robotio.py +0 -0
  267. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/robotpath.py +0 -0
  268. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/robottime.py +0 -0
  269. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/robottypes.py +0 -0
  270. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/setter.py +0 -0
  271. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/sortable.py +0 -0
  272. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/text.py +0 -0
  273. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/utils/typehints.py +0 -0
  274. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/__init__.py +0 -0
  275. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/assigner.py +0 -0
  276. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/filesetter.py +0 -0
  277. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/finders.py +0 -0
  278. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/notfound.py +0 -0
  279. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/resolvable.py +0 -0
  280. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/search.py +0 -0
  281. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/store.py +0 -0
  282. {robotframework-7.1.1 → robotframework-7.2b1}/src/robot/variables/tablesetter.py +0 -0
  283. {robotframework-7.1.1 → robotframework-7.2b1}/src/robotframework.egg-info/dependency_links.txt +0 -0
  284. {robotframework-7.1.1 → robotframework-7.2b1}/src/robotframework.egg-info/entry_points.txt +0 -0
  285. {robotframework-7.1.1 → robotframework-7.2b1}/src/robotframework.egg-info/top_level.txt +0 -0
  286. {robotframework-7.1.1 → robotframework-7.2b1}/tasks.py +0 -0
@@ -131,7 +131,7 @@ function addExecutionLog(main) {
131
131
 
132
132
  <script type="text/x-jquery-tmpl" id="tagStatisticsRowTemplate">
133
133
  <tr class="row-${$item.index}">
134
- <td class="stats-col-name" title="{{html doc}}">
134
+ <td class="stats-col-name" title="${doc}">
135
135
  <div class="stat-name">
136
136
  <span>{{html label}}</span>
137
137
  {{if info}}(${info}){{/if}}
@@ -467,7 +467,7 @@ function hideHiddenDetailsColumns(elem) {
467
467
 
468
468
  <script type="text/x-jquery-tmpl" id="tagStatisticsRowTemplate">
469
469
  <tr onclick="tagDetailSelected('${label}')" class="row-${$item.index}">
470
- <td class="stats-col-name" title="{{html doc}}">
470
+ <td class="stats-col-name" title="${doc}">
471
471
  <div class="stat-name">
472
472
  <a href="#tags?${label}">{{html label}}</a>
473
473
  {{if info}}(${info}){{/if}}
@@ -7,7 +7,7 @@ window.testdata = function () {
7
7
  var STATUSES = ['FAIL', 'PASS', 'SKIP', 'NOT RUN'];
8
8
  var KEYWORD_TYPES = ['KEYWORD', 'SETUP', 'TEARDOWN', 'FOR', 'ITERATION', 'IF',
9
9
  'ELSE IF', 'ELSE', 'RETURN', 'VAR', 'TRY', 'EXCEPT', 'FINALLY',
10
- 'WHILE', 'CONTINUE', 'BREAK', 'ERROR'];
10
+ 'WHILE', 'GROUP', 'CONTINUE', 'BREAK', 'ERROR'];
11
11
 
12
12
  function addElement(elem) {
13
13
  if (!elem.id)
@@ -67,9 +67,6 @@ the normal installation. Alternatively it is possible to execute the
67
67
  can be replaced with any supported Python interpreter. Yet another alternative
68
68
  is running the module as a script like `python path/to/robot/libdoc.py`.
69
69
 
70
- The separate `libdoc` command and the support for JSON spec files are new in
71
- Robot Framework 4.0.
72
-
73
70
  Options
74
71
  =======
75
72
 
@@ -85,7 +82,7 @@ Options
85
82
  documentation format and HTML means converting
86
83
  documentation to HTML. The default is RAW with XML
87
84
  spec files and HTML with JSON specs and when using
88
- the special LIBSPEC format. New in RF 4.0.
85
+ the special LIBSPEC format.
89
86
  -F --docformat ROBOT|HTML|TEXT|REST
90
87
  Specifies the source documentation format. Possible
91
88
  values are Robot Framework's documentation format,
@@ -96,11 +93,14 @@ Options
96
93
  Use dark or light HTML theme. If this option is not
97
94
  used, or the value is NONE, the theme is selected
98
95
  based on the browser color scheme. New in RF 6.0.
96
+ --language lang Set the default language in documentation. `lang`
97
+ must be a code of a built-in language, which are
98
+ `en` and `fi`. New in RF 7.2.
99
99
  -n --name name Sets the name of the documented library or resource.
100
100
  -v --version version Sets the version of the documented library or
101
101
  resource.
102
102
  --quiet Do not print the path of the generated output file
103
- to the console. New in RF 4.0.
103
+ to the console.
104
104
  -P --pythonpath path * Additional locations where to search for libraries
105
105
  and resources.
106
106
  -h -? --help Print this help.
@@ -179,7 +179,7 @@ class LibDoc(Application):
179
179
  return options, arguments
180
180
 
181
181
  def main(self, args, name='', version='', format=None, docformat=None,
182
- specdocformat=None, theme=None, pythonpath=None, quiet=False):
182
+ specdocformat=None, theme=None, language=None, pythonpath=None, quiet=False):
183
183
  if pythonpath:
184
184
  sys.path = pythonpath + sys.path
185
185
  lib_or_res, output = args[:2]
@@ -194,7 +194,8 @@ class LibDoc(Application):
194
194
  or specdocformat == 'HTML'
195
195
  or format in ('JSON', 'LIBSPEC') and specdocformat != 'RAW'):
196
196
  libdoc.convert_docs_to_html()
197
- libdoc.save(output, format, self._validate_theme(theme, format))
197
+ libdoc.save(output, format, self._validate_theme(theme, format),
198
+ self._validate_lang(language, format))
198
199
  if not quiet:
199
200
  self.console(Path(output).absolute())
200
201
 
@@ -229,13 +230,21 @@ class LibDoc(Application):
229
230
  raise DataError("The --theme option is only applicable with HTML outputs.")
230
231
  return theme
231
232
 
233
+ def _validate_lang(self, lang, format):
234
+ theme = self._validate('Language', lang, 'FI', 'EN', 'NONE')
235
+ if not theme or theme == 'NONE':
236
+ return None
237
+ if format != 'HTML':
238
+ raise DataError("The --theme option is only applicable with HTML outputs.")
239
+ return theme
240
+
232
241
 
233
242
  def libdoc_cli(arguments=None, exit=True):
234
243
  """Executes Libdoc similarly as from the command line.
235
244
 
236
245
  :param arguments: Command line options and arguments as a list of strings.
237
- Starting from RF 4.0, defaults to ``sys.argv[1:]`` if not given.
238
- :param exit: If ``True``, call ``sys.exit`` automatically. New in RF 4.0.
246
+ Defaults to ``sys.argv[1:]`` if not given.
247
+ :param exit: If ``True``, call ``sys.exit`` automatically.
239
248
 
240
249
  The :func:`libdoc` function may work better in programmatic usage.
241
250
 
@@ -271,9 +280,8 @@ def libdoc(library_or_resource, outfile, name='', version='', format=None,
271
280
  files is converted to HTML regardless of the original documentation
272
281
  format. Possible values are ``'HTML'`` (convert to HTML) and ``'RAW'``
273
282
  (use original format). The default depends on the output format.
274
- New in Robot Framework 4.0.
275
283
  :param quiet: When true, the path of the generated output file is not
276
- printed the console. New in Robot Framework 4.0.
284
+ printed the console.
277
285
 
278
286
  Arguments have same semantics as Libdoc command line options with same names.
279
287
  Run ``libdoc --help`` or consult the Libdoc section in the Robot Framework
@@ -18,23 +18,26 @@ from robot.htmldata import HtmlFileWriter, ModelWriter, LIBDOC
18
18
 
19
19
  class LibdocHtmlWriter:
20
20
 
21
- def __init__(self, theme=None):
21
+ def __init__(self, theme=None, lang=None):
22
22
  self.theme = theme
23
+ self.lang = lang
23
24
 
24
25
  def write(self, libdoc, output):
25
- model_writer = LibdocModelWriter(output, libdoc, self.theme)
26
+ model_writer = LibdocModelWriter(output, libdoc, self.theme, self.lang)
26
27
  HtmlFileWriter(output, model_writer).write(LIBDOC)
27
28
 
28
29
 
29
30
  class LibdocModelWriter(ModelWriter):
30
31
 
31
- def __init__(self, output, libdoc, theme=None):
32
+ def __init__(self, output, libdoc, theme=None, lang=None):
32
33
  self.output = output
33
34
  self.libdoc = libdoc
34
35
  self.theme = theme
36
+ self.lang = lang
35
37
 
36
38
  def write(self, line):
37
- data = self.libdoc.to_json(include_private=False, theme=self.theme)
39
+ data = self.libdoc.to_json(include_private=False, theme=self.theme,
40
+ lang=self.lang)
38
41
  self.output.write(f'<script type="text/javascript">\n'
39
42
  f'libdoc = {data}\n'
40
43
  f'</script>\n')
@@ -89,9 +89,9 @@ class LibraryDoc:
89
89
  def all_tags(self):
90
90
  return Tags(chain.from_iterable(kw.tags for kw in self.keywords))
91
91
 
92
- def save(self, output=None, format='HTML', theme=None):
92
+ def save(self, output=None, format='HTML', theme=None, lang=None):
93
93
  with LibdocOutput(output, format) as outfile:
94
- LibdocWriter(format, theme).write(self, outfile)
94
+ LibdocWriter(format, theme, lang).write(self, outfile)
95
95
 
96
96
  def convert_docs_to_html(self):
97
97
  formatter = DocFormatter(self.keywords, self.type_docs, self.doc, self.doc_format)
@@ -111,7 +111,7 @@ class LibraryDoc:
111
111
  type_doc.doc = formatter.html(type_doc.doc)
112
112
  self.doc_format = 'HTML'
113
113
 
114
- def to_dictionary(self, include_private=False, theme=None):
114
+ def to_dictionary(self, include_private=False, theme=None, lang=None):
115
115
  data = {
116
116
  'specversion': 3,
117
117
  'name': self.name,
@@ -131,10 +131,12 @@ class LibraryDoc:
131
131
  }
132
132
  if theme:
133
133
  data['theme'] = theme.lower()
134
+ if lang:
135
+ data['lang'] = lang.lower()
134
136
  return data
135
137
 
136
- def to_json(self, indent=None, include_private=True, theme=None):
137
- data = self.to_dictionary(include_private, theme)
138
+ def to_json(self, indent=None, include_private=True, theme=None, lang=None):
139
+ data = self.to_dictionary(include_private, theme, lang)
138
140
  return json.dumps(data, indent=indent)
139
141
 
140
142
 
@@ -20,10 +20,10 @@ from .xmlwriter import LibdocXmlWriter
20
20
  from .jsonwriter import LibdocJsonWriter
21
21
 
22
22
 
23
- def LibdocWriter(format=None, theme=None):
23
+ def LibdocWriter(format=None, theme=None, lang=None):
24
24
  format = (format or 'HTML')
25
25
  if format == 'HTML':
26
- return LibdocHtmlWriter(theme)
26
+ return LibdocHtmlWriter(theme, lang)
27
27
  if format == 'XML':
28
28
  return LibdocXmlWriter()
29
29
  if format == 'LIBSPEC':
@@ -24,7 +24,7 @@ from robot.api.deco import keyword
24
24
  from robot.errors import (BreakLoop, ContinueLoop, DataError, ExecutionFailed,
25
25
  ExecutionFailures, ExecutionPassed, PassExecution,
26
26
  ReturnFromKeyword, VariableError)
27
- from robot.running import Keyword, RUN_KW_REGISTER
27
+ from robot.running import Keyword, RUN_KW_REGISTER, TypeInfo
28
28
  from robot.running.context import EXECUTION_CONTEXTS
29
29
  from robot.utils import (DotDict, escape, format_assign_message, get_error_message,
30
30
  get_time, html_escape, is_falsy, is_integer, is_list_like,
@@ -341,8 +341,8 @@ class _Converter(_BuiltInBase):
341
341
  - ``text:`` Converts text to bytes character by character. All
342
342
  characters with ordinal below 256 can be used and are converted to
343
343
  bytes with same values. Many characters are easiest to represent
344
- using escapes like ``\x00`` or ``\xff``. Supports both Unicode
345
- strings and bytes.
344
+ using escapes like ``\x00`` or ``\xff``. In practice this is the same
345
+ as Latin-1 encoding.
346
346
 
347
347
  - ``int:`` Converts integers separated by spaces to bytes. Similarly as
348
348
  with `Convert To Integer`, it is possible to use binary, octal, or
@@ -380,10 +380,10 @@ class _Converter(_BuiltInBase):
380
380
  """
381
381
  try:
382
382
  try:
383
- ordinals = getattr(self, f'_get_ordinals_from_{input_type}')
383
+ get_ordinals = getattr(self, f'_get_ordinals_from_{input_type}')
384
384
  except AttributeError:
385
385
  raise RuntimeError(f"Invalid input type '{input_type}'.")
386
- return bytes(bytearray(o for o in ordinals(input)))
386
+ return bytes(o for o in get_ordinals(input))
387
387
  except:
388
388
  raise RuntimeError("Creating bytes failed: " + get_error_message())
389
389
 
@@ -583,8 +583,8 @@ class _Verify(_BuiltInBase):
583
583
 
584
584
  def should_be_equal(self, first, second, msg=None, values=True,
585
585
  ignore_case=False, formatter='str', strip_spaces=False,
586
- collapse_spaces=False):
587
- """Fails if the given objects are unequal.
586
+ collapse_spaces=False, type=None, types=None):
587
+ r"""Fails if the given objects are unequal.
588
588
 
589
589
  Optional ``msg``, ``values`` and ``formatter`` arguments specify how
590
590
  to construct the error message if this keyword fails:
@@ -614,15 +614,33 @@ class _Verify(_BuiltInBase):
614
614
  arguments are strings, the comparison is done with all white spaces replaced by
615
615
  a single space character.
616
616
 
617
+ The ``type`` and ``types`` arguments control optional type conversion:
618
+ - If ``type`` is used, the argument ``second`` is converted to that type.
619
+ In addition to that, the argument ``first`` is validated to match the type.
620
+ - If ``types`` is used, both ``first`` and ``second`` are converted.
621
+ - Supported types are the same as supported by
622
+ [https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#supported-conversions|
623
+ automatic argument conversion] such as ``int``, ``bytes`` and ``list``.
624
+ Also parameterized types like ``list[int]`` and unions like ``int | float``
625
+ are supported.
626
+ - When using ``type``, a special value ``auto`` can be used to convert
627
+ ``second`` to the same type that ``first`` has.
628
+ - Using both ``type`` and ``types`` at the same time is an error.
629
+
617
630
  Examples:
618
631
  | Should Be Equal | ${x} | expected |
619
632
  | Should Be Equal | ${x} | expected | Custom error message |
620
633
  | Should Be Equal | ${x} | expected | Custom message | values=False |
621
634
  | Should Be Equal | ${x} | expected | ignore_case=True | formatter=repr |
635
+ | Should Be Equal | ${x} | \x00\x01 | type=bytes |
636
+ | Should Be Equal | ${x} | ${y} | types=int|float |
622
637
 
623
638
  ``strip_spaces`` is new in Robot Framework 4.0 and
624
639
  ``collapse_spaces`` is new in Robot Framework 4.1.
640
+ ``type`` and ``types`` are new in Robot Framework 7.2.
625
641
  """
642
+ if type or types:
643
+ first, second = self._type_convert(first, second, type, types)
626
644
  self._log_types_at_info_if_different(first, second)
627
645
  if is_string(first) and is_string(second):
628
646
  if ignore_case:
@@ -636,6 +654,21 @@ class _Verify(_BuiltInBase):
636
654
  second = self._collapse_spaces(second)
637
655
  self._should_be_equal(first, second, msg, values, formatter)
638
656
 
657
+ def _type_convert(self, first, second, type, types, type_builtin=type):
658
+ if type and types:
659
+ raise TypeError("Cannot use both 'type' and 'types' arguments.")
660
+ elif types:
661
+ type = types
662
+ elif isinstance(type, str) and type.upper() == 'AUTO':
663
+ type = type_builtin(first)
664
+ converter = TypeInfo.from_type_hint(type).get_converter()
665
+ if types:
666
+ first = converter.convert(first, 'first')
667
+ elif not converter.no_conversion_needed(first):
668
+ raise ValueError(f"Argument 'first' got value {first!r} that "
669
+ f"does not match type {type!r}.")
670
+ return first, converter.convert(second, 'second')
671
+
639
672
  def _should_be_equal(self, first, second, msg, values, formatter='str'):
640
673
  include_values = self._include_values(values)
641
674
  formatter = self._get_formatter(formatter)
@@ -1527,8 +1560,12 @@ class _Variables(_BuiltInBase):
1527
1560
  For the reasons explained in the `Using variables with keywords creating
1528
1561
  or accessing variables` section, using the escaped format is recommended.
1529
1562
 
1563
+ Notice that ``default`` must be given positionally like ``example`` and
1564
+ not using the named-argument syntax like ``default=example``. We hope to
1565
+ be able to remove this limitation in the future.
1566
+
1530
1567
  Examples:
1531
- | ${x} = `Get Variable Value` $a default
1568
+ | ${x} = `Get Variable Value` $a example
1532
1569
  | ${y} = `Get Variable Value` $a ${b}
1533
1570
  | ${z} = `Get Variable Value` $z
1534
1571
  =>
@@ -1567,7 +1604,7 @@ class _Variables(_BuiltInBase):
1567
1604
  return name, value
1568
1605
 
1569
1606
  @run_keyword_variant(resolve=0)
1570
- def variable_should_exist(self, name, msg=None):
1607
+ def variable_should_exist(self, name, message=None):
1571
1608
  r"""Fails unless the given variable exists within the current scope.
1572
1609
 
1573
1610
  The name of the variable can be given either as a normal variable name
@@ -1575,7 +1612,10 @@ class _Variables(_BuiltInBase):
1575
1612
  For the reasons explained in the `Using variables with keywords creating
1576
1613
  or accessing variables` section, using the escaped format is recommended.
1577
1614
 
1578
- The default error message can be overridden with the ``msg`` argument.
1615
+ The default error message can be overridden with the ``message`` argument.
1616
+ Notice that it must be given positionally like ``A message`` and not
1617
+ using the named-argument syntax like ``message=A message``. We hope to
1618
+ be able to remove this limitation in the future.
1579
1619
 
1580
1620
  See also `Variable Should Not Exist` and `Keyword Should Exist`.
1581
1621
  """
@@ -1583,11 +1623,11 @@ class _Variables(_BuiltInBase):
1583
1623
  try:
1584
1624
  self._variables.replace_scalar(name)
1585
1625
  except VariableError:
1586
- raise AssertionError(self._variables.replace_string(msg)
1587
- if msg else f"Variable '{name}' does not exist.")
1626
+ raise AssertionError(self._variables.replace_string(message)
1627
+ if message else f"Variable '{name}' does not exist.")
1588
1628
 
1589
1629
  @run_keyword_variant(resolve=0)
1590
- def variable_should_not_exist(self, name, msg=None):
1630
+ def variable_should_not_exist(self, name, message=None):
1591
1631
  r"""Fails if the given variable exists within the current scope.
1592
1632
 
1593
1633
  The name of the variable can be given either as a normal variable name
@@ -1595,7 +1635,10 @@ class _Variables(_BuiltInBase):
1595
1635
  For the reasons explained in the `Using variables with keywords creating
1596
1636
  or accessing variables` section, using the escaped format is recommended.
1597
1637
 
1598
- The default error message can be overridden with the ``msg`` argument.
1638
+ The default error message can be overridden with the ``message`` argument.
1639
+ Notice that it must be given positionally like ``A message`` and not
1640
+ using the named-argument syntax like ``message=A message``. We hope to
1641
+ be able to remove this limitation in the future.
1599
1642
 
1600
1643
  See also `Variable Should Exist` and `Keyword Should Exist`.
1601
1644
  """
@@ -1605,8 +1648,8 @@ class _Variables(_BuiltInBase):
1605
1648
  except VariableError:
1606
1649
  pass
1607
1650
  else:
1608
- raise AssertionError(self._variables.replace_string(msg)
1609
- if msg else f"Variable '{name}' exists.")
1651
+ raise AssertionError(self._variables.replace_string(message)
1652
+ if message else f"Variable '{name}' exists.")
1610
1653
 
1611
1654
  def replace_variables(self, text):
1612
1655
  """Replaces variables in the given text with their current values.
@@ -1710,8 +1753,12 @@ class _Variables(_BuiltInBase):
1710
1753
  variable in a user keyword, it is available both in the test case level
1711
1754
  and also in all other user keywords used in the current test. Other
1712
1755
  test cases will not see variables set with this keyword.
1713
- It is an error to call `Set Test Variable` outside the
1714
- scope of a test (e.g. in a Suite Setup or Teardown).
1756
+
1757
+ If `Set Test Variable` is used in suite setup, the variable is available
1758
+ everywhere within that suite setup as well as in the corresponding suite
1759
+ teardown, but it is not seen by tests or possible child suites. If the
1760
+ keyword is used in a suite teardown, the variable is available only in that
1761
+ teardown.
1715
1762
 
1716
1763
  See `Set Suite Variable` for more information and usage examples. See
1717
1764
  also the `Using variables with keywords creating or accessing variables`
@@ -1724,6 +1771,9 @@ class _Variables(_BuiltInBase):
1724
1771
 
1725
1772
  *NOTE:* The ``VAR`` syntax introduced in Robot Framework 7.0 is recommended
1726
1773
  over this keyword.
1774
+
1775
+ *NOTE:* Prior to Robot Framework 7.2, using `Set Test Variable` in a suite
1776
+ setup or teardown was an error.
1727
1777
  """
1728
1778
  name = self._get_var_name(name)
1729
1779
  value = self._get_var_value(name, values)
@@ -1914,7 +1964,7 @@ class _RunKeyword(_BuiltInBase):
1914
1964
  if not (ctx.dry_run or self._accepts_embedded_arguments(name, ctx)):
1915
1965
  name, args = self._replace_variables_in_name([name] + list(args))
1916
1966
  if ctx.steps:
1917
- data, result = ctx.steps[-1]
1967
+ data, result, _ = ctx.steps[-1]
1918
1968
  lineno = data.lineno
1919
1969
  else: # Called, typically by a listener, when no keyword started.
1920
1970
  data = lineno = None
@@ -3562,12 +3612,16 @@ class _Misc(_BuiltInBase):
3562
3612
  return re.escape(patterns[0])
3563
3613
  return [re.escape(p) for p in patterns]
3564
3614
 
3565
- def set_test_message(self, message, append=False):
3615
+ def set_test_message(self, message, append=False, separator=' '):
3566
3616
  """Sets message for the current test case.
3567
3617
 
3568
3618
  If the optional ``append`` argument is given a true value (see `Boolean
3569
3619
  arguments`), the given ``message`` is added after the possible earlier
3570
- message by joining the messages with a space.
3620
+ message.
3621
+
3622
+ An optional ``separator`` argument can be used to provide custom separator
3623
+ string when appending to the old text. A single space is used as separator
3624
+ by default.
3571
3625
 
3572
3626
  In test teardown this keyword can alter the possible failure message,
3573
3627
  but otherwise failures override messages set by this keyword. Notice
@@ -3584,19 +3638,21 @@ class _Misc(_BuiltInBase):
3584
3638
  | Set Test Message | `*`HTML`*` <b>Hello!</b> | |
3585
3639
 
3586
3640
  This keyword can not be used in suite setup or suite teardown.
3641
+
3642
+ The ``separator`` argument is new in Robot Framework 7.2.
3587
3643
  """
3588
3644
  test = self._context.test
3589
3645
  if not test:
3590
3646
  raise RuntimeError("'Set Test Message' keyword cannot be used in "
3591
3647
  "suite setup or teardown.")
3592
- test.message = self._get_new_text(test.message, message,
3593
- append, handle_html=True)
3648
+ test.message = self._get_new_text(
3649
+ test.message, message, append, handle_html=True, separator=separator)
3594
3650
  if self._context.in_test_teardown:
3595
3651
  self._variables.set_test("${TEST_MESSAGE}", test.message)
3596
3652
  message, level = self._get_logged_test_message_and_level(test.message)
3597
3653
  self.log(f'Set test message to:\n{message}', level)
3598
3654
 
3599
- def _get_new_text(self, old, new, append, handle_html=False):
3655
+ def _get_new_text(self, old, new, append, handle_html=False, separator=' '):
3600
3656
  if not is_string(new):
3601
3657
  new = str(new)
3602
3658
  if not (is_truthy(append) and old):
@@ -3606,35 +3662,43 @@ class _Misc(_BuiltInBase):
3606
3662
  new = new[6:].lstrip()
3607
3663
  if not old.startswith('*HTML*'):
3608
3664
  old = f'*HTML* {html_escape(old)}'
3665
+ separator = html_escape(separator)
3609
3666
  elif old.startswith('*HTML*'):
3610
3667
  new = html_escape(new)
3611
- return f'{old} {new}'
3668
+ separator = html_escape(separator)
3669
+ return f'{old}{separator}{new}'
3612
3670
 
3613
3671
  def _get_logged_test_message_and_level(self, message):
3614
3672
  if message.startswith('*HTML*'):
3615
3673
  return message[6:].lstrip(), 'HTML'
3616
3674
  return message, 'INFO'
3617
3675
 
3618
- def set_test_documentation(self, doc, append=False):
3676
+ def set_test_documentation(self, doc, append=False, separator=' '):
3619
3677
  """Sets documentation for the current test case.
3620
3678
 
3621
- By default the possible existing documentation is overwritten, but
3679
+ The possible existing documentation is overwritten by default, but
3622
3680
  this can be changed using the optional ``append`` argument similarly
3623
3681
  as with `Set Test Message` keyword.
3624
3682
 
3683
+ An optional ``separator`` argument can be used to provide custom separator
3684
+ string when appending to the old text. A single space is used as separator
3685
+ by default.
3686
+
3625
3687
  The current test documentation is available as a built-in variable
3626
3688
  ``${TEST DOCUMENTATION}``. This keyword can not be used in suite
3627
3689
  setup or suite teardown.
3690
+
3691
+ The ``separator`` argument is new in Robot Framework 7.2.
3628
3692
  """
3629
3693
  test = self._context.test
3630
3694
  if not test:
3631
3695
  raise RuntimeError("'Set Test Documentation' keyword cannot be "
3632
3696
  "used in suite setup or teardown.")
3633
- test.doc = self._get_new_text(test.doc, doc, append)
3697
+ test.doc = self._get_new_text(test.doc, doc, append, separator=separator)
3634
3698
  self._variables.set_test('${TEST_DOCUMENTATION}', test.doc)
3635
3699
  self.log(f'Set test documentation to:\n{test.doc}')
3636
3700
 
3637
- def set_suite_documentation(self, doc, append=False, top=False):
3701
+ def set_suite_documentation(self, doc, append=False, top=False, separator=' '):
3638
3702
  """Sets documentation for the current test suite.
3639
3703
 
3640
3704
  By default, the possible existing documentation is overwritten, but
@@ -3646,15 +3710,21 @@ class _Misc(_BuiltInBase):
3646
3710
  arguments`), the documentation of the top level suite is altered
3647
3711
  instead.
3648
3712
 
3713
+ An optional ``separator`` argument can be used to provide custom separator
3714
+ string when appending to the old text. A single space is used as separator
3715
+ by default.
3716
+
3649
3717
  The documentation of the current suite is available as a built-in
3650
3718
  variable ``${SUITE DOCUMENTATION}``.
3719
+
3720
+ The ``separator`` argument is new in Robot Framework 7.2.
3651
3721
  """
3652
3722
  suite = self._get_context(top).suite
3653
- suite.doc = self._get_new_text(suite.doc, doc, append)
3723
+ suite.doc = self._get_new_text(suite.doc, doc, append, separator=separator)
3654
3724
  self._variables.set_suite('${SUITE_DOCUMENTATION}', suite.doc, top)
3655
3725
  self.log(f'Set suite documentation to:\n{suite.doc}')
3656
3726
 
3657
- def set_suite_metadata(self, name, value, append=False, top=False):
3727
+ def set_suite_metadata(self, name, value, append=False, top=False, separator=' '):
3658
3728
  """Sets metadata for the current test suite.
3659
3729
 
3660
3730
  By default, possible existing metadata values are overwritten, but
@@ -3665,15 +3735,22 @@ class _Misc(_BuiltInBase):
3665
3735
  If the optional ``top`` argument is given a true value (see `Boolean
3666
3736
  arguments`), the metadata of the top level suite is altered instead.
3667
3737
 
3738
+ An optional ``separator`` argument can be used to provide custom separator
3739
+ string when appending to the old text. A single space is used as separator
3740
+ by default.
3741
+
3668
3742
  The metadata of the current suite is available as a built-in variable
3669
3743
  ``${SUITE METADATA}`` in a Python dictionary. Notice that modifying this
3670
3744
  variable directly has no effect on the actual metadata the suite has.
3745
+
3746
+ The ``separator`` argument is new in Robot Framework 7.2.
3671
3747
  """
3672
3748
  if not is_string(name):
3673
3749
  name = str(name)
3674
3750
  metadata = self._get_context(top).suite.metadata
3675
3751
  original = metadata.get(name, '')
3676
- metadata[name] = self._get_new_text(original, value, append)
3752
+ metadata[name] = self._get_new_text(original, value, append,
3753
+ separator=separator)
3677
3754
  self._variables.set_suite('${SUITE_METADATA}', metadata.copy(), top)
3678
3755
  self.log(f"Set suite metadata '{name}' to value '{metadata[name]}'.")
3679
3756
 
@@ -783,7 +783,8 @@ class _Dictionary:
783
783
  )
784
784
 
785
785
  def dictionaries_should_be_equal(self, dict1, dict2, msg=None, values=True,
786
- ignore_keys=None, ignore_case=False):
786
+ ignore_keys=None, ignore_case=False,
787
+ ignore_value_order=False):
787
788
  """Fails if the given dictionaries are not equal.
788
789
 
789
790
  First the equality of dictionaries' keys is checked and after that all
@@ -807,9 +808,15 @@ class _Dictionary:
807
808
  The ``ignore_case`` argument can be used to make comparison case-insensitive.
808
809
  See the `Ignore case` section for more details. This option is new in
809
810
  Robot Framework 7.0.
811
+
812
+ The ``ignore_value_order`` argument can be used to make comparison in case of
813
+ list-like values to ignore the order of the elements in the lists.
814
+ Using it requires items to be sortable.
815
+ This option is new in Robot Framework 7.2.
810
816
  """
811
817
  self._validate_dictionary(dict1, dict2)
812
- normalizer = Normalizer(ignore_case, ignore_keys=ignore_keys)
818
+ normalizer = Normalizer(ignore_case=ignore_case, ignore_keys=ignore_keys,
819
+ ignore_order=ignore_value_order)
813
820
  dict1 = normalizer.normalize(dict1)
814
821
  dict2 = normalizer.normalize(dict2)
815
822
  self._should_have_same_keys(dict1, dict2, msg, values)
@@ -839,7 +846,8 @@ class _Dictionary:
839
846
  _report_error(error, message, values)
840
847
 
841
848
  def dictionary_should_contain_sub_dictionary(self, dict1, dict2, msg=None,
842
- values=True, ignore_case=False):
849
+ values=True, ignore_case=False,
850
+ ignore_value_order=False):
843
851
  """Fails unless all items in ``dict2`` are found from ``dict1``.
844
852
 
845
853
  See `Lists Should Be Equal` for more information about configuring
@@ -848,9 +856,15 @@ class _Dictionary:
848
856
  The ``ignore_case`` argument can be used to make comparison case-insensitive.
849
857
  See the `Ignore case` section for more details. This option is new in
850
858
  Robot Framework 7.0.
859
+
860
+ The ``ignore_value_order`` argument can be used to make comparison in case of
861
+ list-like values to ignore the order of the elements in the lists.
862
+ Using it requires items to be sortable.
863
+ This option is new in Robot Framework 7.2.
851
864
  """
852
865
  self._validate_dictionary(dict1, dict2)
853
- normalizer = Normalizer(ignore_case)
866
+ normalizer = Normalizer(ignore_case=ignore_case,
867
+ ignore_order=ignore_value_order)
854
868
  dict1 = normalizer.normalize(dict1)
855
869
  dict2 = normalizer.normalize(dict2)
856
870
  self._should_have_same_keys(dict1, dict2, msg, values, validate_both=False)
@@ -27,12 +27,12 @@ This package is considered stable.
27
27
 
28
28
  from .body import BaseBody, Body, BodyItem, BaseBranches, BaseIterations
29
29
  from .configurer import SuiteConfigurer
30
- from .control import (Break, Continue, Error, For, ForIteration, If, IfBranch,
31
- Return, Try, TryBranch, Var, While, WhileIteration)
30
+ from .control import (Break, Continue, Error, For, ForIteration, Group, If,
31
+ IfBranch, Return, Try, TryBranch, Var, While, WhileIteration)
32
32
  from .fixture import create_fixture
33
33
  from .itemlist import ItemList
34
34
  from .keyword import Keyword
35
- from .message import Message, MessageLevel, Messages
35
+ from .message import Message, MessageLevel
36
36
  from .modelobject import DataDict, ModelObject
37
37
  from .modifier import ModelModifier
38
38
  from .statistics import Statistics