robotframework 6.1.1__zip → 7.0__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 (307) hide show
  1. {robotframework-6.1.1 → robotframework-7.0}/INSTALL.rst +25 -25
  2. {robotframework-6.1.1 → robotframework-7.0}/PKG-INFO +6 -8
  3. {robotframework-6.1.1 → robotframework-7.0}/README.rst +3 -2
  4. {robotframework-6.1.1 → robotframework-7.0}/setup.py +3 -6
  5. {robotframework-6.1.1 → robotframework-7.0}/src/robot/api/__init__.py +4 -1
  6. {robotframework-6.1.1 → robotframework-7.0}/src/robot/api/deco.py +60 -14
  7. {robotframework-6.1.1 → robotframework-7.0}/src/robot/api/exceptions.py +6 -6
  8. {robotframework-6.1.1 → robotframework-7.0}/src/robot/api/interfaces.py +402 -67
  9. {robotframework-6.1.1 → robotframework-7.0}/src/robot/api/logger.py +27 -20
  10. {robotframework-6.1.1 → robotframework-7.0}/src/robot/api/parsing.py +4 -2
  11. robotframework-7.0/src/robot/api/py.typed +0 -0
  12. {robotframework-6.1.1 → robotframework-7.0}/src/robot/conf/gatherfailed.py +2 -2
  13. {robotframework-6.1.1 → robotframework-7.0}/src/robot/conf/languages.py +0 -9
  14. {robotframework-6.1.1 → robotframework-7.0}/src/robot/conf/settings.py +21 -14
  15. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/common/storage.js +11 -6
  16. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/htmlfilewriter.py +1 -1
  17. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/libdoc/libdoc.css +10 -2
  18. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/libdoc/libdoc.html +10 -0
  19. robotframework-7.0/src/robot/htmldata/rebot/common.css +362 -0
  20. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/doc_formatting.css +13 -7
  21. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/log.css +51 -10
  22. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/log.html +14 -23
  23. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/model.js +2 -4
  24. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/report.css +83 -19
  25. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/report.html +22 -7
  26. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/testdata.js +10 -3
  27. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/view.js +84 -0
  28. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/template.py +3 -3
  29. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/builder.py +0 -8
  30. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/datatypes.py +9 -10
  31. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/htmlutils.py +4 -7
  32. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/jsonbuilder.py +38 -20
  33. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/model.py +21 -28
  34. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/robotbuilder.py +50 -31
  35. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/standardtypes.py +9 -1
  36. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/xmlbuilder.py +35 -20
  37. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/xmlwriter.py +18 -38
  38. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/BuiltIn.py +255 -205
  39. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/Collections.py +384 -240
  40. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/DateTime.py +73 -60
  41. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/OperatingSystem.py +6 -5
  42. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/Process.py +26 -27
  43. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/Remote.py +40 -36
  44. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/String.py +66 -76
  45. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/XML.py +66 -59
  46. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/__init__.py +2 -2
  47. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/__init__.py +5 -5
  48. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/body.py +44 -13
  49. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/configurer.py +15 -11
  50. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/control.py +226 -84
  51. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/filter.py +31 -25
  52. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/itemlist.py +9 -8
  53. robotframework-7.0/src/robot/model/keyword.py +77 -0
  54. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/message.py +19 -10
  55. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/modelobject.py +25 -7
  56. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/namepatterns.py +3 -25
  57. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/stats.py +9 -15
  58. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/tags.py +1 -1
  59. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/testcase.py +15 -27
  60. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/testsuite.py +17 -26
  61. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/visitor.py +35 -8
  62. robotframework-7.0/src/robot/output/console/dotted.py +90 -0
  63. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/console/quiet.py +3 -2
  64. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/console/verbose.py +61 -61
  65. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/debugfile.py +39 -24
  66. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/filelogger.py +18 -15
  67. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/librarylogger.py +3 -2
  68. robotframework-7.0/src/robot/output/listeners.py +753 -0
  69. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/logger.py +216 -80
  70. robotframework-7.0/src/robot/output/loggerapi.py +215 -0
  71. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/loggerhelper.py +23 -56
  72. robotframework-7.0/src/robot/output/output.py +185 -0
  73. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/stdoutlogsplitter.py +8 -5
  74. robotframework-7.0/src/robot/output/xmllogger.py +459 -0
  75. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/blocklexers.py +17 -13
  76. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/context.py +12 -2
  77. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/lexer.py +1 -1
  78. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/settings.py +6 -3
  79. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/statementlexers.py +39 -10
  80. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/tokens.py +27 -29
  81. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/model/blocks.py +19 -6
  82. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/model/statements.py +193 -94
  83. robotframework-7.0/src/robot/parsing/model/visitor.py +100 -0
  84. {robotframework-6.1.1 → robotframework-7.0}/src/robot/rebot.py +2 -0
  85. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/expandkeywordmatcher.py +1 -1
  86. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/jsbuildingcontext.py +8 -6
  87. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/jsmodelbuilders.py +88 -61
  88. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/logreportwriters.py +16 -10
  89. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/outputwriter.py +18 -2
  90. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/resultwriter.py +4 -4
  91. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/stringcache.py +3 -3
  92. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/xunitwriter.py +15 -21
  93. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/__init__.py +3 -2
  94. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/configurer.py +12 -9
  95. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/executionresult.py +56 -8
  96. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/flattenkeywordmatcher.py +48 -9
  97. robotframework-7.0/src/robot/result/keywordremover.py +207 -0
  98. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/merger.py +1 -1
  99. robotframework-7.0/src/robot/result/model.py +1185 -0
  100. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/modeldeprecation.py +9 -3
  101. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/resultbuilder.py +46 -36
  102. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/xmlelementhandlers.py +83 -43
  103. {robotframework-6.1.1 → robotframework-7.0}/src/robot/run.py +2 -0
  104. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/__init__.py +14 -4
  105. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/arguments/__init__.py +2 -1
  106. robotframework-7.0/src/robot/running/arguments/argumentconverter.py +100 -0
  107. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/arguments/argumentmapper.py +26 -24
  108. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/arguments/argumentparser.py +82 -60
  109. robotframework-7.0/src/robot/running/arguments/argumentresolver.py +158 -0
  110. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/arguments/argumentspec.py +83 -116
  111. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/arguments/argumentvalidator.py +33 -27
  112. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/arguments/customconverters.py +15 -12
  113. robotframework-7.0/src/robot/running/arguments/embedded.py +145 -0
  114. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/arguments/typeconverters.py +233 -213
  115. robotframework-7.0/src/robot/running/arguments/typeinfo.py +317 -0
  116. robotframework-7.0/src/robot/running/arguments/typeinfoparser.py +219 -0
  117. robotframework-7.0/src/robot/running/arguments/typevalidator.py +60 -0
  118. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/bodyrunner.py +147 -129
  119. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/builder/builders.py +2 -1
  120. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/builder/parsers.py +10 -11
  121. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/builder/settings.py +9 -17
  122. robotframework-7.0/src/robot/running/builder/transformers.py +535 -0
  123. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/context.py +113 -31
  124. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/dynamicmethods.py +62 -34
  125. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/importer.py +27 -49
  126. robotframework-7.0/src/robot/running/invalidkeyword.py +67 -0
  127. robotframework-7.0/src/robot/running/keywordfinder.py +91 -0
  128. robotframework-7.0/src/robot/running/keywordimplementation.py +164 -0
  129. robotframework-7.0/src/robot/running/librarykeyword.py +392 -0
  130. robotframework-7.0/src/robot/running/librarykeywordrunner.py +250 -0
  131. robotframework-7.0/src/robot/running/libraryscopes.py +115 -0
  132. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/model.py +195 -377
  133. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/namespace.py +124 -137
  134. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/outputcapture.py +20 -12
  135. robotframework-7.0/src/robot/running/resourcemodel.py +448 -0
  136. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/statusreporter.py +16 -13
  137. robotframework-7.0/src/robot/running/suiterunner.py +265 -0
  138. robotframework-7.0/src/robot/running/testlibraries.py +500 -0
  139. robotframework-7.0/src/robot/running/userkeywordrunner.py +260 -0
  140. {robotframework-6.1.1 → robotframework-7.0}/src/robot/testdoc.py +18 -13
  141. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/__init__.py +53 -35
  142. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/connectioncache.py +64 -59
  143. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/dotdict.py +3 -0
  144. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/encodingsniffer.py +1 -1
  145. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/escaping.py +19 -19
  146. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/importer.py +2 -2
  147. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/markupwriters.py +23 -15
  148. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/misc.py +1 -2
  149. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/normalizing.py +9 -24
  150. robotframework-7.0/src/robot/utils/notset.py +33 -0
  151. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/platform.py +15 -5
  152. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/robotio.py +9 -9
  153. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/robotpath.py +1 -0
  154. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/robottime.py +122 -90
  155. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/robottypes.py +21 -31
  156. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/setter.py +0 -5
  157. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/text.py +7 -4
  158. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/unic.py +2 -2
  159. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/__init__.py +2 -2
  160. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/assigner.py +17 -19
  161. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/evaluation.py +20 -17
  162. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/filesetter.py +80 -80
  163. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/replacer.py +33 -36
  164. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/scopes.py +17 -12
  165. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/search.py +66 -41
  166. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/store.py +14 -16
  167. robotframework-7.0/src/robot/variables/tablesetter.py +164 -0
  168. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/variables.py +1 -1
  169. {robotframework-6.1.1 → robotframework-7.0}/src/robot/version.py +1 -1
  170. {robotframework-6.1.1 → robotframework-7.0}/src/robotframework.egg-info/PKG-INFO +6 -8
  171. {robotframework-6.1.1 → robotframework-7.0}/src/robotframework.egg-info/SOURCES.txt +10 -8
  172. {robotframework-6.1.1 → robotframework-7.0}/tasks.py +6 -6
  173. robotframework-6.1.1/src/robot/htmldata/rebot/common.css +0 -239
  174. robotframework-6.1.1/src/robot/libraries/Reserved.py +0 -48
  175. robotframework-6.1.1/src/robot/model/keyword.py +0 -173
  176. robotframework-6.1.1/src/robot/output/console/dotted.py +0 -90
  177. robotframework-6.1.1/src/robot/output/listenerarguments.py +0 -165
  178. robotframework-6.1.1/src/robot/output/listenermethods.py +0 -113
  179. robotframework-6.1.1/src/robot/output/listeners.py +0 -174
  180. robotframework-6.1.1/src/robot/output/output.py +0 -95
  181. robotframework-6.1.1/src/robot/output/xmllogger.py +0 -354
  182. robotframework-6.1.1/src/robot/parsing/model/visitor.py +0 -67
  183. robotframework-6.1.1/src/robot/result/keywordremover.py +0 -183
  184. robotframework-6.1.1/src/robot/result/model.py +0 -957
  185. robotframework-6.1.1/src/robot/running/arguments/argumentconverter.py +0 -79
  186. robotframework-6.1.1/src/robot/running/arguments/argumentresolver.py +0 -131
  187. robotframework-6.1.1/src/robot/running/arguments/embedded.py +0 -146
  188. robotframework-6.1.1/src/robot/running/arguments/typevalidator.py +0 -56
  189. robotframework-6.1.1/src/robot/running/builder/transformers.py +0 -642
  190. robotframework-6.1.1/src/robot/running/handlers.py +0 -321
  191. robotframework-6.1.1/src/robot/running/handlerstore.py +0 -66
  192. robotframework-6.1.1/src/robot/running/librarykeywordrunner.py +0 -238
  193. robotframework-6.1.1/src/robot/running/libraryscopes.py +0 -97
  194. robotframework-6.1.1/src/robot/running/modelcombiner.py +0 -32
  195. robotframework-6.1.1/src/robot/running/suiterunner.py +0 -248
  196. robotframework-6.1.1/src/robot/running/testlibraries.py +0 -423
  197. robotframework-6.1.1/src/robot/running/usererrorhandler.py +0 -75
  198. robotframework-6.1.1/src/robot/running/userkeyword.py +0 -111
  199. robotframework-6.1.1/src/robot/running/userkeywordrunner.py +0 -274
  200. robotframework-6.1.1/src/robot/variables/tablesetter.py +0 -156
  201. {robotframework-6.1.1 → robotframework-7.0}/AUTHORS.rst +0 -0
  202. {robotframework-6.1.1 → robotframework-7.0}/BUILD.rst +0 -0
  203. {robotframework-6.1.1 → robotframework-7.0}/CONTRIBUTING.rst +0 -0
  204. {robotframework-6.1.1 → robotframework-7.0}/COPYRIGHT.txt +0 -0
  205. {robotframework-6.1.1 → robotframework-7.0}/LICENSE.txt +0 -0
  206. {robotframework-6.1.1 → robotframework-7.0}/MANIFEST.in +0 -0
  207. {robotframework-6.1.1 → robotframework-7.0}/setup.cfg +0 -0
  208. {robotframework-6.1.1 → robotframework-7.0}/src/robot/__init__.py +0 -0
  209. {robotframework-6.1.1 → robotframework-7.0}/src/robot/__main__.py +0 -0
  210. {robotframework-6.1.1 → robotframework-7.0}/src/robot/conf/__init__.py +0 -0
  211. {robotframework-6.1.1 → robotframework-7.0}/src/robot/errors.py +0 -0
  212. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/__init__.py +0 -0
  213. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/common/__init__.py +0 -0
  214. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/common/js_disabled.css +0 -0
  215. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/jsonwriter.py +0 -0
  216. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/lib/__init__.py +0 -0
  217. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
  218. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.min.js +0 -0
  219. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
  220. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
  221. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
  222. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/libdoc/__init__.py +0 -0
  223. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
  224. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/libdoc/print.css +0 -0
  225. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/libdoc/pygments.css +0 -0
  226. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/__init__.py +0 -0
  227. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/fileloading.js +0 -0
  228. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/log.js +0 -0
  229. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/print.css +0 -0
  230. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/rebot/util.js +0 -0
  231. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/testdoc/__init__.py +0 -0
  232. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.css +0 -0
  233. {robotframework-6.1.1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.html +0 -0
  234. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdoc.py +0 -0
  235. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/__init__.py +0 -0
  236. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/consoleviewer.py +0 -0
  237. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/htmlwriter.py +0 -0
  238. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/jsonwriter.py +0 -0
  239. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/output.py +0 -0
  240. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libdocpkg/writer.py +0 -0
  241. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/Dialogs.py +0 -0
  242. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/Easter.py +0 -0
  243. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/Screenshot.py +0 -0
  244. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/Telnet.py +0 -0
  245. {robotframework-6.1.1 → robotframework-7.0}/src/robot/libraries/dialogs_py.py +0 -0
  246. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/fixture.py +0 -0
  247. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/metadata.py +0 -0
  248. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/modifier.py +0 -0
  249. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/statistics.py +0 -0
  250. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/suitestatistics.py +0 -0
  251. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/tagsetter.py +0 -0
  252. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/tagstatistics.py +0 -0
  253. {robotframework-6.1.1 → robotframework-7.0}/src/robot/model/totalstatistics.py +0 -0
  254. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/__init__.py +0 -0
  255. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/console/__init__.py +0 -0
  256. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/console/highlighting.py +0 -0
  257. {robotframework-6.1.1 → robotframework-7.0}/src/robot/output/pyloggingconf.py +0 -0
  258. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/__init__.py +0 -0
  259. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/__init__.py +0 -0
  260. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/lexer/tokenizer.py +0 -0
  261. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/model/__init__.py +0 -0
  262. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/parser/__init__.py +0 -0
  263. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/parser/blockparsers.py +0 -0
  264. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/parser/fileparser.py +0 -0
  265. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/parser/parser.py +0 -0
  266. {robotframework-6.1.1 → robotframework-7.0}/src/robot/parsing/suitestructure.py +0 -0
  267. {robotframework-6.1.1 → robotframework-7.0}/src/robot/pythonpathsetter.py +0 -0
  268. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/__init__.py +0 -0
  269. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/jsexecutionresult.py +0 -0
  270. {robotframework-6.1.1 → robotframework-7.0}/src/robot/reporting/jswriter.py +0 -0
  271. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/executionerrors.py +0 -0
  272. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/messagefilter.py +0 -0
  273. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/suiteteardownfailed.py +0 -0
  274. {robotframework-6.1.1 → robotframework-7.0}/src/robot/result/visitor.py +0 -0
  275. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/builder/__init__.py +0 -0
  276. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/randomizer.py +0 -0
  277. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/runkwregister.py +0 -0
  278. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/signalhandler.py +0 -0
  279. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/status.py +0 -0
  280. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/timeouts/__init__.py +0 -0
  281. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/timeouts/posix.py +0 -0
  282. {robotframework-6.1.1 → robotframework-7.0}/src/robot/running/timeouts/windows.py +0 -0
  283. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/application.py +0 -0
  284. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/argumentparser.py +0 -0
  285. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/asserts.py +0 -0
  286. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/charwidth.py +0 -0
  287. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/compress.py +0 -0
  288. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/encoding.py +0 -0
  289. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/error.py +0 -0
  290. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/etreewrapper.py +0 -0
  291. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/filereader.py +0 -0
  292. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/frange.py +0 -0
  293. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/htmlformatters.py +0 -0
  294. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/markuputils.py +0 -0
  295. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/match.py +0 -0
  296. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/recommendations.py +0 -0
  297. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/restreader.py +0 -0
  298. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/robotenv.py +0 -0
  299. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/robotinspect.py +0 -0
  300. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/sortable.py +0 -0
  301. {robotframework-6.1.1 → robotframework-7.0}/src/robot/utils/typehints.py +0 -0
  302. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/finders.py +0 -0
  303. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/notfound.py +0 -0
  304. {robotframework-6.1.1 → robotframework-7.0}/src/robot/variables/resolvable.py +0 -0
  305. {robotframework-6.1.1 → robotframework-7.0}/src/robotframework.egg-info/dependency_links.txt +0 -0
  306. {robotframework-6.1.1 → robotframework-7.0}/src/robotframework.egg-info/entry_points.txt +0 -0
  307. {robotframework-6.1.1 → robotframework-7.0}/src/robotframework.egg-info/top_level.txt +0 -0
@@ -1,642 +0,0 @@
1
- # Copyright 2008-2015 Nokia Networks
2
- # Copyright 2016- Robot Framework Foundation
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from ast import NodeVisitor
17
-
18
- from robot.errors import DataError
19
- from robot.output import LOGGER
20
- from robot.parsing import File, Token
21
- from robot.variables import VariableIterator
22
-
23
- from .settings import FileSettings
24
- from ..model import ResourceFile, TestSuite
25
-
26
-
27
- class SettingsBuilder(NodeVisitor):
28
-
29
- def __init__(self, suite: TestSuite, settings: FileSettings):
30
- self.suite = suite
31
- self.settings = settings
32
-
33
- def visit_Documentation(self, node):
34
- self.suite.doc = node.value
35
-
36
- def visit_Metadata(self, node):
37
- self.suite.metadata[node.name] = node.value
38
-
39
- def visit_SuiteName(self, node):
40
- self.suite.name = node.value
41
-
42
- def visit_SuiteSetup(self, node):
43
- self.suite.setup.config(name=node.name, args=node.args,
44
- lineno=node.lineno)
45
-
46
- def visit_SuiteTeardown(self, node):
47
- self.suite.teardown.config(name=node.name, args=node.args,
48
- lineno=node.lineno)
49
-
50
- def visit_TestSetup(self, node):
51
- self.settings.test_setup = {'name': node.name, 'args': node.args,
52
- 'lineno': node.lineno}
53
-
54
- def visit_TestTeardown(self, node):
55
- self.settings.test_teardown = {'name': node.name, 'args': node.args,
56
- 'lineno': node.lineno}
57
-
58
- def visit_TestTimeout(self, node):
59
- self.settings.test_timeout = node.value
60
-
61
- def visit_DefaultTags(self, node):
62
- self.settings.default_tags = node.values
63
-
64
- def visit_ForceTags(self, node):
65
- self.settings.test_tags = node.values
66
-
67
- def visit_KeywordTags(self, node):
68
- self.settings.keyword_tags = node.values
69
-
70
- def visit_TestTemplate(self, node):
71
- self.settings.test_template = node.value
72
-
73
- def visit_LibraryImport(self, node):
74
- self.suite.resource.imports.library(node.name, node.args, node.alias, node.lineno)
75
-
76
- def visit_ResourceImport(self, node):
77
- self.suite.resource.imports.resource(node.name, node.lineno)
78
-
79
- def visit_VariablesImport(self, node):
80
- self.suite.resource.imports.variables(node.name, node.args, node.lineno)
81
-
82
- def visit_VariableSection(self, node):
83
- pass
84
-
85
- def visit_TestCaseSection(self, node):
86
- pass
87
-
88
- def visit_KeywordSection(self, node):
89
- pass
90
-
91
-
92
- class SuiteBuilder(NodeVisitor):
93
-
94
- def __init__(self, suite: TestSuite, settings: FileSettings):
95
- self.suite = suite
96
- self.settings = settings
97
- self.rpa = None
98
-
99
- def build(self, model: File):
100
- ErrorReporter(model.source).visit(model)
101
- SettingsBuilder(self.suite, self.settings).visit(model)
102
- self.visit(model)
103
- if self.rpa is not None:
104
- self.suite.rpa = self.rpa
105
-
106
- def visit_SettingSection(self, node):
107
- pass
108
-
109
- def visit_Variable(self, node):
110
- self.suite.resource.variables.create(name=node.name,
111
- value=node.value,
112
- lineno=node.lineno,
113
- error=format_error(node.errors))
114
-
115
- def visit_TestCaseSection(self, node):
116
- if self.rpa is None:
117
- self.rpa = node.tasks
118
- elif self.rpa != node.tasks:
119
- raise DataError('One file cannot have both tests and tasks.')
120
- self.generic_visit(node)
121
-
122
- def visit_TestCase(self, node):
123
- TestCaseBuilder(self.suite, self.settings).visit(node)
124
-
125
- def visit_Keyword(self, node):
126
- KeywordBuilder(self.suite.resource, self.settings).visit(node)
127
-
128
-
129
- class ResourceBuilder(NodeVisitor):
130
-
131
- def __init__(self, resource: ResourceFile):
132
- self.resource = resource
133
- self.settings = FileSettings()
134
-
135
- def build(self, model: File):
136
- ErrorReporter(model.source, raise_on_invalid_header=True).visit(model)
137
- self.visit(model)
138
-
139
- def visit_Documentation(self, node):
140
- self.resource.doc = node.value
141
-
142
- def visit_KeywordTags(self, node):
143
- self.settings.keyword_tags = node.values
144
-
145
- def visit_LibraryImport(self, node):
146
- self.resource.imports.library(node.name, node.args, node.alias, node.lineno)
147
-
148
- def visit_ResourceImport(self, node):
149
- self.resource.imports.resource(node.name, node.lineno)
150
-
151
- def visit_VariablesImport(self, node):
152
- self.resource.imports.variables(node.name, node.args, node.lineno)
153
-
154
- def visit_Variable(self, node):
155
- self.resource.variables.create(name=node.name,
156
- value=node.value,
157
- lineno=node.lineno,
158
- error=format_error(node.errors))
159
-
160
- def visit_Keyword(self, node):
161
- KeywordBuilder(self.resource, self.settings).visit(node)
162
-
163
-
164
- class TestCaseBuilder(NodeVisitor):
165
-
166
- def __init__(self, suite: TestSuite, settings: FileSettings):
167
- self.suite = suite
168
- self.settings = settings
169
- self.test = None
170
- self.tags = None
171
-
172
- def visit_TestCase(self, node):
173
- error = format_error(node.errors + node.header.errors)
174
- settings = self.settings
175
- self.test = self.suite.tests.create(name=node.name,
176
- lineno=node.lineno,
177
- tags=settings.test_tags,
178
- timeout=settings.test_timeout,
179
- template=settings.test_template,
180
- error=error)
181
- if settings.test_setup:
182
- self.test.setup.config(**settings.test_setup)
183
- if settings.test_teardown:
184
- self.test.teardown.config(**settings.test_teardown)
185
- self.generic_visit(node)
186
- tags = self.tags if self.tags is not None else settings.default_tags
187
- if tags:
188
- self.test.tags.add(tags)
189
- if self.test.template:
190
- self._set_template(self.test, self.test.template)
191
-
192
- def _set_template(self, parent, template):
193
- for item in parent.body:
194
- if item.type == item.FOR:
195
- self._set_template(item, template)
196
- elif item.type == item.IF_ELSE_ROOT:
197
- for branch in item.body:
198
- self._set_template(branch, template)
199
- elif item.type == item.KEYWORD:
200
- name, args = self._format_template(template, item.args)
201
- item.name = name
202
- item.args = args
203
-
204
- def _format_template(self, template, arguments):
205
- variables = VariableIterator(template, identifiers='$')
206
- count = len(variables)
207
- if count == 0 or count != len(arguments):
208
- return template, arguments
209
- temp = []
210
- for (before, _, after), arg in zip(variables, arguments):
211
- temp.extend([before, arg])
212
- temp.append(after)
213
- return ''.join(temp), ()
214
-
215
- def visit_For(self, node):
216
- ForBuilder(self.test).build(node)
217
-
218
- def visit_While(self, node):
219
- WhileBuilder(self.test).build(node)
220
-
221
- def visit_If(self, node):
222
- IfBuilder(self.test).build(node)
223
-
224
- def visit_Try(self, node):
225
- TryBuilder(self.test).build(node)
226
-
227
- def visit_TemplateArguments(self, node):
228
- self.test.body.create_keyword(args=node.args, lineno=node.lineno)
229
-
230
- def visit_Documentation(self, node):
231
- self.test.doc = node.value
232
-
233
- def visit_Setup(self, node):
234
- self.test.setup.config(name=node.name, args=node.args, lineno=node.lineno)
235
-
236
- def visit_Teardown(self, node):
237
- self.test.teardown.config(name=node.name, args=node.args, lineno=node.lineno)
238
-
239
- def visit_Timeout(self, node):
240
- self.test.timeout = node.value
241
-
242
- def visit_Tags(self, node):
243
- deprecate_tags_starting_with_hyphen(node, self.suite.source)
244
- self.tags = node.values
245
-
246
- def visit_Template(self, node):
247
- self.test.template = node.value
248
-
249
- def visit_KeywordCall(self, node):
250
- self.test.body.create_keyword(name=node.keyword, args=node.args,
251
- assign=node.assign, lineno=node.lineno)
252
-
253
- def visit_ReturnStatement(self, node):
254
- self.test.body.create_return(node.values, lineno=node.lineno,
255
- error=format_error(node.errors))
256
-
257
- def visit_Continue(self, node):
258
- self.test.body.create_continue(lineno=node.lineno,
259
- error=format_error(node.errors))
260
-
261
- def visit_Break(self, node):
262
- self.test.body.create_break(lineno=node.lineno,
263
- error=format_error(node.errors))
264
-
265
- def visit_Error(self, node):
266
- self.test.body.create_error(lineno=node.lineno,
267
- values=node.values, error=format_error(node.errors))
268
-
269
-
270
- class KeywordBuilder(NodeVisitor):
271
-
272
- def __init__(self, resource: ResourceFile, settings: FileSettings):
273
- self.resource = resource
274
- self.settings = settings
275
- self.kw = None
276
-
277
- def visit_Keyword(self, node):
278
- error = format_error(node.errors + node.header.errors)
279
- self.kw = self.resource.keywords.create(name=node.name,
280
- tags=self.settings.keyword_tags,
281
- lineno=node.lineno,
282
- error=error)
283
- self.generic_visit(node)
284
-
285
- def visit_Documentation(self, node):
286
- self.kw.doc = node.value
287
-
288
- def visit_Arguments(self, node):
289
- self.kw.args = node.values
290
- if node.errors:
291
- error = format_error(node.errors)
292
- self.kw.error = f'Invalid argument specification: {error}'
293
-
294
- def visit_Tags(self, node):
295
- deprecate_tags_starting_with_hyphen(node, self.resource.source)
296
- self.kw.tags.add(node.values)
297
-
298
- def visit_Return(self, node):
299
- self.kw.return_ = node.values
300
-
301
- def visit_Timeout(self, node):
302
- self.kw.timeout = node.value
303
-
304
- def visit_Teardown(self, node):
305
- self.kw.teardown.config(name=node.name, args=node.args,
306
- lineno=node.lineno)
307
-
308
- def visit_KeywordCall(self, node):
309
- self.kw.body.create_keyword(name=node.keyword, args=node.args,
310
- assign=node.assign, lineno=node.lineno)
311
-
312
- def visit_ReturnStatement(self, node):
313
- self.kw.body.create_return(node.values, lineno=node.lineno,
314
- error=format_error(node.errors))
315
-
316
- def visit_Continue(self, node):
317
- self.kw.body.create_continue(lineno=node.lineno,
318
- error=format_error(node.errors))
319
-
320
- def visit_Break(self, node):
321
- self.kw.body.create_break(lineno=node.lineno,
322
- error=format_error(node.errors))
323
-
324
- def visit_For(self, node):
325
- ForBuilder(self.kw).build(node)
326
-
327
- def visit_While(self, node):
328
- WhileBuilder(self.kw).build(node)
329
-
330
- def visit_If(self, node):
331
- IfBuilder(self.kw).build(node)
332
-
333
- def visit_Try(self, node):
334
- TryBuilder(self.kw).build(node)
335
-
336
- def visit_Error(self, node):
337
- self.kw.body.create_error(lineno=node.lineno,
338
- values=node.values, error=format_error(node.errors))
339
-
340
-
341
- class ForBuilder(NodeVisitor):
342
-
343
- def __init__(self, parent):
344
- self.parent = parent
345
- self.model = None
346
-
347
- def build(self, node):
348
- error = format_error(self._get_errors(node))
349
- self.model = self.parent.body.create_for(
350
- node.variables, node.flavor, node.values, node.start, node.mode, node.fill,
351
- lineno=node.lineno, error=error
352
- )
353
- for step in node.body:
354
- self.visit(step)
355
- return self.model
356
-
357
- def _get_errors(self, node):
358
- errors = node.header.errors + node.errors
359
- if node.end:
360
- errors += node.end.errors
361
- return errors
362
-
363
- def visit_KeywordCall(self, node):
364
- self.model.body.create_keyword(name=node.keyword, args=node.args,
365
- assign=node.assign, lineno=node.lineno)
366
-
367
- def visit_TemplateArguments(self, node):
368
- self.model.body.create_keyword(args=node.args, lineno=node.lineno)
369
-
370
- def visit_For(self, node):
371
- ForBuilder(self.model).build(node)
372
-
373
- def visit_While(self, node):
374
- WhileBuilder(self.model).build(node)
375
-
376
- def visit_If(self, node):
377
- IfBuilder(self.model).build(node)
378
-
379
- def visit_Try(self, node):
380
- TryBuilder(self.model).build(node)
381
-
382
- def visit_ReturnStatement(self, node):
383
- self.model.body.create_return(node.values, lineno=node.lineno,
384
- error=format_error(node.errors))
385
-
386
- def visit_Continue(self, node):
387
- self.model.body.create_continue(lineno=node.lineno,
388
- error=format_error(node.errors))
389
-
390
- def visit_Break(self, node):
391
- self.model.body.create_break(lineno=node.lineno,
392
- error=format_error(node.errors))
393
-
394
- def visit_Error(self, node):
395
- self.model.body.create_error(lineno=node.lineno,
396
- values=node.values, error=format_error(node.errors))
397
-
398
-
399
- class IfBuilder(NodeVisitor):
400
-
401
- def __init__(self, parent):
402
- self.parent = parent
403
- self.model = None
404
-
405
- def build(self, node):
406
- root = self.parent.body.create_if(lineno=node.lineno,
407
- error=format_error(self._get_errors(node)))
408
- assign = node.assign
409
- node_type = None
410
- while node:
411
- node_type = node.type if node.type != 'INLINE IF' else 'IF'
412
- self.model = root.body.create_branch(node_type, node.condition,
413
- lineno=node.lineno)
414
- for step in node.body:
415
- self.visit(step)
416
- if assign:
417
- for item in self.model.body:
418
- # Having assign when model item doesn't support assign is an error,
419
- # but it has been handled already when model was validated.
420
- if hasattr(item, 'assign'):
421
- item.assign = assign
422
- node = node.orelse
423
- # Smallish hack to make sure assignment is always run.
424
- if assign and node_type != 'ELSE':
425
- root.body.create_branch('ELSE').body.create_keyword(
426
- assign=assign, name='BuiltIn.Set Variable', args=['${NONE}']
427
- )
428
- return root
429
-
430
- def _get_errors(self, node):
431
- errors = node.header.errors + node.errors
432
- if node.orelse:
433
- errors += self._get_errors(node.orelse)
434
- if node.end:
435
- errors += node.end.errors
436
- return errors
437
-
438
- def visit_KeywordCall(self, node):
439
- self.model.body.create_keyword(name=node.keyword, args=node.args,
440
- assign=node.assign, lineno=node.lineno)
441
-
442
- def visit_TemplateArguments(self, node):
443
- self.model.body.create_keyword(args=node.args, lineno=node.lineno)
444
-
445
- def visit_For(self, node):
446
- ForBuilder(self.model).build(node)
447
-
448
- def visit_While(self, node):
449
- WhileBuilder(self.model).build(node)
450
-
451
- def visit_If(self, node):
452
- IfBuilder(self.model).build(node)
453
-
454
- def visit_Try(self, node):
455
- TryBuilder(self.model).build(node)
456
-
457
- def visit_ReturnStatement(self, node):
458
- self.model.body.create_return(node.values, lineno=node.lineno,
459
- error=format_error(node.errors))
460
-
461
- def visit_Continue(self, node):
462
- self.model.body.create_continue(lineno=node.lineno,
463
- error=format_error(node.errors))
464
-
465
- def visit_Break(self, node):
466
- self.model.body.create_break(lineno=node.lineno,
467
- error=format_error(node.errors))
468
-
469
- def visit_Error(self, node):
470
- self.model.body.create_error(lineno=node.lineno,
471
- values=node.values, error=format_error(node.errors))
472
-
473
-
474
- class TryBuilder(NodeVisitor):
475
-
476
- def __init__(self, parent):
477
- self.parent = parent
478
- self.model = None
479
- self.template_error = None
480
-
481
- def build(self, node):
482
- root = self.parent.body.create_try(lineno=node.lineno)
483
- errors = self._get_errors(node)
484
- while node:
485
- self.model = root.body.create_branch(node.type, node.patterns,
486
- node.pattern_type, node.variable,
487
- lineno=node.lineno)
488
- for step in node.body:
489
- self.visit(step)
490
- node = node.next
491
- if self.template_error:
492
- errors += (self.template_error,)
493
- if errors:
494
- root.error = format_error(errors)
495
- return root
496
-
497
- def _get_errors(self, node):
498
- errors = node.header.errors + node.errors
499
- if node.next:
500
- errors += self._get_errors(node.next)
501
- if node.end:
502
- errors += node.end.errors
503
- return errors
504
-
505
- def visit_For(self, node):
506
- ForBuilder(self.model).build(node)
507
-
508
- def visit_While(self, node):
509
- WhileBuilder(self.model).build(node)
510
-
511
- def visit_If(self, node):
512
- IfBuilder(self.model).build(node)
513
-
514
- def visit_Try(self, node):
515
- TryBuilder(self.model).build(node)
516
-
517
- def visit_ReturnStatement(self, node):
518
- self.model.body.create_return(node.values, lineno=node.lineno,
519
- error=format_error(node.errors))
520
-
521
- def visit_Continue(self, node):
522
- self.model.body.create_continue(lineno=node.lineno,
523
- error=format_error(node.errors))
524
-
525
- def visit_Break(self, node):
526
- self.model.body.create_break(lineno=node.lineno,
527
- error=format_error(node.errors))
528
-
529
- def visit_KeywordCall(self, node):
530
- self.model.body.create_keyword(name=node.keyword, args=node.args,
531
- assign=node.assign, lineno=node.lineno)
532
-
533
- def visit_TemplateArguments(self, node):
534
- self.template_error = 'Templates cannot be used with TRY.'
535
-
536
- def visit_Error(self, node):
537
- self.model.body.create_error(lineno=node.lineno,
538
- values=node.values, error=format_error(node.errors))
539
-
540
-
541
- class WhileBuilder(NodeVisitor):
542
-
543
- def __init__(self, parent):
544
- self.parent = parent
545
- self.model = None
546
-
547
- def build(self, node):
548
- error = format_error(self._get_errors(node))
549
- self.model = self.parent.body.create_while(
550
- node.condition, node.limit, node.on_limit,
551
- node.on_limit_message, lineno=node.lineno, error=error
552
- )
553
- for step in node.body:
554
- self.visit(step)
555
- return self.model
556
-
557
- def _get_errors(self, node):
558
- errors = node.header.errors + node.errors
559
- if node.end:
560
- errors += node.end.errors
561
- return errors
562
-
563
- def visit_KeywordCall(self, node):
564
- self.model.body.create_keyword(name=node.keyword, args=node.args,
565
- assign=node.assign, lineno=node.lineno)
566
-
567
- def visit_TemplateArguments(self, node):
568
- self.model.body.create_keyword(args=node.args, lineno=node.lineno)
569
-
570
- def visit_For(self, node):
571
- ForBuilder(self.model).build(node)
572
-
573
- def visit_While(self, node):
574
- WhileBuilder(self.model).build(node)
575
-
576
- def visit_If(self, node):
577
- IfBuilder(self.model).build(node)
578
-
579
- def visit_Try(self, node):
580
- TryBuilder(self.model).build(node)
581
-
582
- def visit_ReturnStatement(self, node):
583
- self.model.body.create_return(node.values, lineno=node.lineno,
584
- error=format_error(node.errors))
585
-
586
- def visit_Break(self, node):
587
- self.model.body.create_break(error=format_error(node.errors))
588
-
589
- def visit_Continue(self, node):
590
- self.model.body.create_continue(error=format_error(node.errors))
591
-
592
- def visit_Error(self, node):
593
- self.model.body.create_error(lineno=node.lineno,
594
- values=node.values, error=format_error(node.errors))
595
-
596
-
597
- def format_error(errors):
598
- if not errors:
599
- return None
600
- if len(errors) == 1:
601
- return errors[0]
602
- return '\n- '.join(('Multiple errors:',) + errors)
603
-
604
-
605
- def deprecate_tags_starting_with_hyphen(node, source):
606
- for tag in node.values:
607
- if tag.startswith('-'):
608
- LOGGER.warn(
609
- f"Error in file '{source}' on line {node.lineno}: "
610
- f"Settings tags starting with a hyphen using the '[Tags]' setting "
611
- f"is deprecated. In Robot Framework 7.0 this syntax will be used "
612
- f"for removing tags. Escape '{tag}' like '\\{tag}' to use the "
613
- f"literal value and to avoid this warning."
614
- )
615
-
616
-
617
- class ErrorReporter(NodeVisitor):
618
-
619
- def __init__(self, source, raise_on_invalid_header=False):
620
- self.source = source
621
- self.raise_on_invalid_header = raise_on_invalid_header
622
-
623
- def visit_TestCase(self, node):
624
- pass
625
-
626
- def visit_Keyword(self, node):
627
- pass
628
-
629
- def visit_SectionHeader(self, node):
630
- token = node.get_token(Token.INVALID_HEADER)
631
- if token:
632
- if self.raise_on_invalid_header:
633
- raise DataError(self._format_message(token))
634
- else:
635
- LOGGER.error(self._format_message(token))
636
-
637
- def visit_Error(self, node):
638
- for error in node.get_tokens(Token.ERROR):
639
- LOGGER.error(self._format_message(error))
640
-
641
- def _format_message(self, token):
642
- return f"Error in file '{self.source}' on line {token.lineno}: {token.error}"