robotframework 6.1rc1__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.1rc1 → robotframework-7.0}/INSTALL.rst +25 -25
  2. {robotframework-6.1rc1 → robotframework-7.0}/PKG-INFO +6 -8
  3. {robotframework-6.1rc1 → robotframework-7.0}/README.rst +3 -2
  4. {robotframework-6.1rc1 → robotframework-7.0}/setup.py +3 -6
  5. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/__init__.py +4 -1
  6. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/deco.py +60 -14
  7. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/exceptions.py +6 -6
  8. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/interfaces.py +403 -68
  9. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/logger.py +27 -20
  10. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/parsing.py +4 -2
  11. robotframework-7.0/src/robot/api/py.typed +0 -0
  12. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/gatherfailed.py +2 -2
  13. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/languages.py +61 -25
  14. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/settings.py +21 -14
  15. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/storage.js +11 -6
  16. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/htmlfilewriter.py +1 -1
  17. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/libdoc.css +10 -2
  18. {robotframework-6.1rc1 → 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.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/doc_formatting.css +13 -7
  21. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.css +51 -10
  22. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.html +14 -23
  23. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/model.js +2 -4
  24. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/report.css +83 -19
  25. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/report.html +22 -7
  26. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/testdata.js +10 -3
  27. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/view.js +84 -0
  28. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/template.py +3 -3
  29. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/builder.py +0 -8
  30. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/datatypes.py +9 -10
  31. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/htmlutils.py +4 -7
  32. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/jsonbuilder.py +38 -20
  33. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/model.py +21 -28
  34. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/robotbuilder.py +50 -31
  35. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/standardtypes.py +9 -1
  36. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/xmlbuilder.py +35 -20
  37. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/xmlwriter.py +18 -38
  38. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/BuiltIn.py +255 -205
  39. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Collections.py +384 -240
  40. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/DateTime.py +73 -60
  41. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/OperatingSystem.py +6 -5
  42. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Process.py +26 -27
  43. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Remote.py +40 -36
  44. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/String.py +66 -76
  45. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/XML.py +66 -59
  46. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/__init__.py +2 -2
  47. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/dialogs_py.py +14 -2
  48. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/__init__.py +5 -5
  49. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/body.py +44 -13
  50. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/configurer.py +19 -15
  51. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/control.py +230 -88
  52. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/filter.py +31 -25
  53. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/itemlist.py +9 -8
  54. robotframework-7.0/src/robot/model/keyword.py +77 -0
  55. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/message.py +19 -10
  56. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/modelobject.py +27 -15
  57. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/modifier.py +1 -1
  58. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/namepatterns.py +3 -25
  59. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/stats.py +9 -15
  60. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tags.py +1 -1
  61. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/testcase.py +15 -27
  62. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/testsuite.py +44 -28
  63. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/visitor.py +35 -8
  64. robotframework-7.0/src/robot/output/console/dotted.py +90 -0
  65. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/quiet.py +3 -2
  66. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/verbose.py +61 -61
  67. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/debugfile.py +39 -24
  68. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/filelogger.py +18 -15
  69. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/librarylogger.py +3 -2
  70. robotframework-7.0/src/robot/output/listeners.py +753 -0
  71. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/logger.py +216 -80
  72. robotframework-7.0/src/robot/output/loggerapi.py +215 -0
  73. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/loggerhelper.py +23 -56
  74. robotframework-7.0/src/robot/output/output.py +185 -0
  75. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/stdoutlogsplitter.py +8 -5
  76. robotframework-7.0/src/robot/output/xmllogger.py +459 -0
  77. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/blocklexers.py +17 -13
  78. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/context.py +12 -2
  79. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/lexer.py +1 -1
  80. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/settings.py +6 -3
  81. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/statementlexers.py +39 -10
  82. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/tokens.py +27 -29
  83. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/blocks.py +19 -6
  84. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/statements.py +193 -94
  85. robotframework-7.0/src/robot/parsing/model/visitor.py +100 -0
  86. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/rebot.py +2 -0
  87. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/expandkeywordmatcher.py +1 -1
  88. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsbuildingcontext.py +8 -6
  89. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsmodelbuilders.py +88 -61
  90. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/logreportwriters.py +16 -10
  91. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/outputwriter.py +18 -2
  92. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/resultwriter.py +4 -4
  93. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/stringcache.py +3 -3
  94. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/xunitwriter.py +15 -21
  95. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/__init__.py +3 -2
  96. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/configurer.py +12 -9
  97. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/executionresult.py +56 -8
  98. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/flattenkeywordmatcher.py +48 -9
  99. robotframework-7.0/src/robot/result/keywordremover.py +207 -0
  100. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/merger.py +1 -1
  101. robotframework-7.0/src/robot/result/model.py +1185 -0
  102. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/modeldeprecation.py +9 -3
  103. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/resultbuilder.py +46 -36
  104. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/xmlelementhandlers.py +83 -43
  105. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/run.py +3 -1
  106. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/__init__.py +14 -4
  107. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/__init__.py +2 -1
  108. robotframework-7.0/src/robot/running/arguments/argumentconverter.py +100 -0
  109. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentmapper.py +26 -24
  110. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentparser.py +85 -61
  111. robotframework-7.0/src/robot/running/arguments/argumentresolver.py +158 -0
  112. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentspec.py +83 -116
  113. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentvalidator.py +33 -27
  114. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/customconverters.py +15 -12
  115. robotframework-7.0/src/robot/running/arguments/embedded.py +145 -0
  116. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/typeconverters.py +268 -220
  117. robotframework-7.0/src/robot/running/arguments/typeinfo.py +317 -0
  118. robotframework-7.0/src/robot/running/arguments/typeinfoparser.py +219 -0
  119. robotframework-7.0/src/robot/running/arguments/typevalidator.py +60 -0
  120. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/bodyrunner.py +147 -129
  121. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/builders.py +17 -26
  122. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/parsers.py +17 -11
  123. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/settings.py +9 -17
  124. robotframework-7.0/src/robot/running/builder/transformers.py +535 -0
  125. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/context.py +113 -31
  126. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/dynamicmethods.py +62 -34
  127. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/importer.py +27 -49
  128. robotframework-7.0/src/robot/running/invalidkeyword.py +67 -0
  129. robotframework-7.0/src/robot/running/keywordfinder.py +91 -0
  130. robotframework-7.0/src/robot/running/keywordimplementation.py +164 -0
  131. robotframework-7.0/src/robot/running/librarykeyword.py +392 -0
  132. robotframework-7.0/src/robot/running/librarykeywordrunner.py +250 -0
  133. robotframework-7.0/src/robot/running/libraryscopes.py +115 -0
  134. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/model.py +198 -337
  135. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/namespace.py +124 -137
  136. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/outputcapture.py +20 -12
  137. robotframework-7.0/src/robot/running/resourcemodel.py +448 -0
  138. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/statusreporter.py +16 -13
  139. robotframework-7.0/src/robot/running/suiterunner.py +265 -0
  140. robotframework-7.0/src/robot/running/testlibraries.py +500 -0
  141. robotframework-7.0/src/robot/running/userkeywordrunner.py +260 -0
  142. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/testdoc.py +18 -13
  143. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/__init__.py +53 -35
  144. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/connectioncache.py +64 -59
  145. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/dotdict.py +3 -0
  146. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/encodingsniffer.py +9 -4
  147. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/escaping.py +19 -19
  148. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/importer.py +2 -2
  149. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/markupwriters.py +23 -15
  150. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/misc.py +1 -2
  151. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/normalizing.py +9 -24
  152. robotframework-7.0/src/robot/utils/notset.py +33 -0
  153. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/platform.py +15 -5
  154. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotio.py +9 -9
  155. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotpath.py +1 -0
  156. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robottime.py +122 -90
  157. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robottypes.py +21 -31
  158. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/setter.py +0 -5
  159. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/text.py +7 -4
  160. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/unic.py +2 -2
  161. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/__init__.py +2 -2
  162. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/assigner.py +17 -19
  163. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/evaluation.py +20 -17
  164. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/filesetter.py +80 -80
  165. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/replacer.py +33 -36
  166. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/scopes.py +17 -12
  167. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/search.py +66 -41
  168. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/store.py +14 -16
  169. robotframework-7.0/src/robot/variables/tablesetter.py +164 -0
  170. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/variables.py +1 -1
  171. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/version.py +1 -1
  172. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/PKG-INFO +6 -8
  173. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/SOURCES.txt +10 -8
  174. {robotframework-6.1rc1 → robotframework-7.0}/tasks.py +6 -6
  175. robotframework-6.1rc1/src/robot/htmldata/rebot/common.css +0 -239
  176. robotframework-6.1rc1/src/robot/libraries/Reserved.py +0 -48
  177. robotframework-6.1rc1/src/robot/model/keyword.py +0 -173
  178. robotframework-6.1rc1/src/robot/output/console/dotted.py +0 -90
  179. robotframework-6.1rc1/src/robot/output/listenerarguments.py +0 -165
  180. robotframework-6.1rc1/src/robot/output/listenermethods.py +0 -113
  181. robotframework-6.1rc1/src/robot/output/listeners.py +0 -174
  182. robotframework-6.1rc1/src/robot/output/output.py +0 -95
  183. robotframework-6.1rc1/src/robot/output/xmllogger.py +0 -354
  184. robotframework-6.1rc1/src/robot/parsing/model/visitor.py +0 -67
  185. robotframework-6.1rc1/src/robot/result/keywordremover.py +0 -183
  186. robotframework-6.1rc1/src/robot/result/model.py +0 -957
  187. robotframework-6.1rc1/src/robot/running/arguments/argumentconverter.py +0 -79
  188. robotframework-6.1rc1/src/robot/running/arguments/argumentresolver.py +0 -131
  189. robotframework-6.1rc1/src/robot/running/arguments/embedded.py +0 -146
  190. robotframework-6.1rc1/src/robot/running/arguments/typevalidator.py +0 -56
  191. robotframework-6.1rc1/src/robot/running/builder/transformers.py +0 -642
  192. robotframework-6.1rc1/src/robot/running/handlers.py +0 -321
  193. robotframework-6.1rc1/src/robot/running/handlerstore.py +0 -66
  194. robotframework-6.1rc1/src/robot/running/librarykeywordrunner.py +0 -238
  195. robotframework-6.1rc1/src/robot/running/libraryscopes.py +0 -97
  196. robotframework-6.1rc1/src/robot/running/modelcombiner.py +0 -32
  197. robotframework-6.1rc1/src/robot/running/suiterunner.py +0 -249
  198. robotframework-6.1rc1/src/robot/running/testlibraries.py +0 -420
  199. robotframework-6.1rc1/src/robot/running/usererrorhandler.py +0 -75
  200. robotframework-6.1rc1/src/robot/running/userkeyword.py +0 -111
  201. robotframework-6.1rc1/src/robot/running/userkeywordrunner.py +0 -274
  202. robotframework-6.1rc1/src/robot/variables/tablesetter.py +0 -156
  203. {robotframework-6.1rc1 → robotframework-7.0}/AUTHORS.rst +0 -0
  204. {robotframework-6.1rc1 → robotframework-7.0}/BUILD.rst +0 -0
  205. {robotframework-6.1rc1 → robotframework-7.0}/CONTRIBUTING.rst +0 -0
  206. {robotframework-6.1rc1 → robotframework-7.0}/COPYRIGHT.txt +0 -0
  207. {robotframework-6.1rc1 → robotframework-7.0}/LICENSE.txt +0 -0
  208. {robotframework-6.1rc1 → robotframework-7.0}/MANIFEST.in +0 -0
  209. {robotframework-6.1rc1 → robotframework-7.0}/setup.cfg +0 -0
  210. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/__init__.py +0 -0
  211. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/__main__.py +0 -0
  212. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/__init__.py +0 -0
  213. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/errors.py +0 -0
  214. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/__init__.py +0 -0
  215. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/__init__.py +0 -0
  216. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/js_disabled.css +0 -0
  217. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/jsonwriter.py +0 -0
  218. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/__init__.py +0 -0
  219. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
  220. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.min.js +0 -0
  221. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
  222. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
  223. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
  224. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/__init__.py +0 -0
  225. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
  226. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/print.css +0 -0
  227. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/pygments.css +0 -0
  228. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/__init__.py +0 -0
  229. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/fileloading.js +0 -0
  230. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.js +0 -0
  231. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/print.css +0 -0
  232. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/util.js +0 -0
  233. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/__init__.py +0 -0
  234. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.css +0 -0
  235. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.html +0 -0
  236. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdoc.py +0 -0
  237. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/__init__.py +0 -0
  238. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/consoleviewer.py +0 -0
  239. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/htmlwriter.py +0 -0
  240. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/jsonwriter.py +0 -0
  241. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/output.py +0 -0
  242. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/writer.py +0 -0
  243. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Dialogs.py +0 -0
  244. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Easter.py +0 -0
  245. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Screenshot.py +0 -0
  246. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Telnet.py +0 -0
  247. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/fixture.py +0 -0
  248. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/metadata.py +0 -0
  249. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/statistics.py +0 -0
  250. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/suitestatistics.py +0 -0
  251. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tagsetter.py +0 -0
  252. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tagstatistics.py +0 -0
  253. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/totalstatistics.py +0 -0
  254. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/__init__.py +0 -0
  255. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/__init__.py +0 -0
  256. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/highlighting.py +0 -0
  257. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/pyloggingconf.py +0 -0
  258. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/__init__.py +0 -0
  259. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/__init__.py +0 -0
  260. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/tokenizer.py +0 -0
  261. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/__init__.py +0 -0
  262. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/__init__.py +0 -0
  263. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/blockparsers.py +0 -0
  264. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/fileparser.py +0 -0
  265. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/parser.py +0 -0
  266. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/suitestructure.py +0 -0
  267. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/pythonpathsetter.py +0 -0
  268. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/__init__.py +0 -0
  269. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsexecutionresult.py +0 -0
  270. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jswriter.py +0 -0
  271. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/executionerrors.py +0 -0
  272. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/messagefilter.py +0 -0
  273. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/suiteteardownfailed.py +0 -0
  274. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/visitor.py +0 -0
  275. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/__init__.py +0 -0
  276. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/randomizer.py +0 -0
  277. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/runkwregister.py +0 -0
  278. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/signalhandler.py +0 -0
  279. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/status.py +0 -0
  280. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/__init__.py +0 -0
  281. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/posix.py +0 -0
  282. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/windows.py +0 -0
  283. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/application.py +0 -0
  284. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/argumentparser.py +0 -0
  285. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/asserts.py +0 -0
  286. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/charwidth.py +0 -0
  287. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/compress.py +0 -0
  288. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/encoding.py +0 -0
  289. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/error.py +0 -0
  290. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/etreewrapper.py +0 -0
  291. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/filereader.py +0 -0
  292. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/frange.py +0 -0
  293. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/htmlformatters.py +0 -0
  294. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/markuputils.py +0 -0
  295. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/match.py +0 -0
  296. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/recommendations.py +0 -0
  297. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/restreader.py +0 -0
  298. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotenv.py +0 -0
  299. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotinspect.py +0 -0
  300. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/sortable.py +0 -0
  301. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/typehints.py +0 -0
  302. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/finders.py +0 -0
  303. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/notfound.py +0 -0
  304. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/resolvable.py +0 -0
  305. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/dependency_links.txt +0 -0
  306. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/entry_points.txt +0 -0
  307. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/top_level.txt +0 -0
@@ -1,25 +1,42 @@
1
+ :root {
2
+ --col-toggle-color: #6c6c6c; /* same as in sort icon */
3
+ }
4
+
5
+ @media (prefers-color-scheme: dark) {
6
+ :root {
7
+ --col-toggle-color: #adadad;
8
+ }
9
+ }
1
10
  /* Generic table styles */
2
11
  table {
3
12
  margin: 0 1px;
4
- background: white;
13
+ background: white; /* Fallback value */
14
+ background: var(--background-color);
5
15
  }
6
16
  tr {
7
- background: white;
17
+ background: white; /* Fallback value */
18
+ background: var(--background-color);
8
19
  }
9
20
  th {
10
- background: #ddd;
11
- color: black;
21
+ background: #ddd; /* Fallback value */
22
+ background: var(--primary-color);
23
+ color: black; /* Fallback value */
24
+ color: var(--text-color);
12
25
  }
13
26
  /* Summary and total/tag/suite details */
14
27
  .details {
15
- border: 1px solid #ccc;
28
+ border-color: #ccc; /* Fallback value */
29
+ border-color: var(--secondary-color);
30
+ border-width: 1px;
31
+ border-style: solid;
16
32
  border-spacing: 0.2em;
17
33
  clear: both;
18
34
  width: 65em;
19
35
  margin-bottom: 1em;
20
36
  }
21
37
  .details th {
22
- background: white;
38
+ background: white; /* Fallback value */
39
+ background: var(--background-color);
23
40
  width: 11em;
24
41
  text-align: left;
25
42
  vertical-align: top;
@@ -46,8 +63,30 @@ th {
46
63
  display: none;
47
64
  }
48
65
  /* Search */
66
+ input[type='submit'], input[type='button'] {
67
+ background-color: #ddd; /* Fallback value */
68
+ background-color: var(--primary-color);
69
+ border-radius: 4px;
70
+ border: 0;
71
+ padding: 4px 6px 4px 6px;
72
+ color: black; /* Fallback value */
73
+ color: var(--text-color);
74
+ }
75
+ input[type='submit']:hover, input[type='button']:hover {
76
+ background-color: #ccc; /* Fallback value */
77
+ background-color: var(--secondary-color);
78
+ }
49
79
  #search-suite, #search-test, #search-include, #search-exclude {
50
80
  width: 25em;
81
+ background-color: white; /* Fallback value */
82
+ background-color: var(--background-color);
83
+ border-color: #ccc; /* Fallback value */
84
+ border-color: var(--secondary-color);
85
+ border-width: 2px;
86
+ border-style: solid;
87
+ border-radius: 2px;
88
+ color: black; /* Fallback value */
89
+ color: var(--text-color);
51
90
  }
52
91
  #search a:hover {
53
92
  text-decoration: none;
@@ -55,8 +94,12 @@ th {
55
94
  #search-help div {
56
95
  margin: 0.5em 0.5em 0.7em 0;
57
96
  padding: 0.7em;
58
- background: #eee;
59
- border: 1px solid #ccc;
97
+ background: #eee; /* Fallback value */
98
+ background: var(--highlight-color);
99
+ border-color: #ccc; /* Fallback value */
100
+ border-color: var(--secondary-color);
101
+ border-width: 1px;
102
+ border-style: solid;
60
103
  border-radius: 3px;
61
104
  }
62
105
  #search-help h3, #search-help p {
@@ -91,18 +134,24 @@ th {
91
134
  }
92
135
  .detail-tab {
93
136
  float: left;
94
- background: #ddd;
95
- border: 1px solid #ccc;
137
+ background: #ddd; /* Fallback value */
138
+ background: var(--primary-color);
139
+ border-color: #ccc; /* Fallback value */
140
+ border-color: var(--secondary-color);
141
+ border-width: 1px;
142
+ border-style: solid;
96
143
  border-bottom-width: 0;
97
144
  margin: 0 0.5em 0 0;
98
145
  padding-top: 0.1em;
99
146
  border-radius: 3px 3px 0 0;
100
147
  }
101
148
  .detail-tab:hover {
102
- background: #ccc;
149
+ background: #ccc; /* Fallback value */
150
+ background: var(--secondary-color);
103
151
  }
104
152
  .detail-tab a {
105
- color: black;
153
+ color: black; /* Fallback value */
154
+ color: var(--text-color);
106
155
  text-decoration: none;
107
156
  font-weight: bold;
108
157
  padding: 0 1em;
@@ -110,19 +159,23 @@ th {
110
159
  .detail-tab-selected {
111
160
  position: relative;
112
161
  top: 1px;
113
- background: white;
162
+ background: white; /* Fallback value */
163
+ background: var(--background-color);
114
164
  }
115
165
  .detail-tab-selected:hover {
116
- background: white;
166
+ background: white; /* Fallback value */
167
+ background: var(--background-color);
117
168
  }
118
169
  /* Test details table */
119
170
  #test-details {
120
171
  width: 100%;
121
172
  border-spacing: 1px;
122
- background-color: #ccc;
173
+ background-color: #ccc; /* Fallback value */
174
+ background-color: var(--secondary-color);
123
175
  }
124
176
  #test-details > tbody > tr:hover {
125
- background: #f4f4f4;
177
+ background: #eee; /* Fallback value */
178
+ background: var(--highlight-color);
126
179
  cursor: pointer;
127
180
  }
128
181
  #test-details th, #test-details td {
@@ -137,11 +190,13 @@ th {
137
190
  }
138
191
  .details-col-toggle {
139
192
  float: left;
140
- color: #6c6c6c; /* same as in sort icon */
193
+ color: #6c6c6c; /* Fallback value */
194
+ color: var(--col-toggle-color);
141
195
  cursor: pointer;
142
196
  }
143
197
  .details-col-toggle:hover {
144
- color: black;
198
+ color: black; /* Fallback value */
199
+ color: var(--text-color);
145
200
  }
146
201
  .details-col-name {
147
202
  min-width: 20em;
@@ -182,5 +237,14 @@ th {
182
237
  background-image: none;
183
238
  }
184
239
  th.hidden:hover {
185
- background-color: #ccc;
240
+ background-color: #ddd; /* Fallback value */
241
+ background-color: var(--primary-color);
242
+ }
243
+
244
+ #status-bar {
245
+ height: 100%;
246
+ width: 10px;
247
+ position: fixed;
248
+ top: 0;
249
+ left: 0;
186
250
  }
@@ -25,7 +25,7 @@
25
25
  <!-- JS MODEL --><script type="text/javascript" src="../testdata/data.js"></script>
26
26
  <title></title>
27
27
  </head>
28
- <body>
28
+ <body data-theme="dark">
29
29
  <div id="javascript-disabled">
30
30
  <h1>Opening Robot Framework report failed</h1>
31
31
  <ul>
@@ -35,13 +35,15 @@
35
35
  </ul>
36
36
  </div>
37
37
  <script type="text/javascript">removeJavaScriptDisabledWarning();</script>
38
-
38
+ <div id="status-bar"></div>
39
39
  <div id="header"></div>
40
40
  <div id="statistics-container"></div>
41
41
  <div id="test-details-container"></div>
42
42
 
43
43
  <script type="text/javascript">
44
44
  $(document).ready(function () {
45
+ storage.init();
46
+ theme.init(storage);
45
47
  try {
46
48
  var topsuite = window.testdata.suite();
47
49
  } catch (error) {
@@ -49,24 +51,37 @@ $(document).ready(function () {
49
51
  return;
50
52
  }
51
53
  window.prevLocationHash = '';
52
- setBackground(topsuite);
53
54
  initLayout(topsuite.name, 'Report');
54
- storage.init('report');
55
+ setStatusColor(topsuite);
55
56
  addSummary(topsuite);
56
57
  addStatistics();
57
58
  addDetails();
58
59
  window.onhashchange = showDetailsByHash;
60
+ document.addEventListener("theme-change", () => {
61
+ setStatusColor(topsuite);
62
+ });
59
63
  });
60
64
 
61
- function setBackground(topsuite) {
65
+ function setStatusColor(topsuite) {
62
66
  var color;
63
- if (topsuite.fail)
67
+ let fail = Boolean(topsuite.fail);
68
+ let pass = Boolean(!topsuite.fail && topsuite.pass);
69
+ let skip = Boolean(!topsuite.fail && !topsuite.pass);
70
+ if (theme.getPreference() === 'dark') {
71
+ $('#status-bar').toggleClass("fail-bar", fail);
72
+ $('#status-bar').toggleClass("pass-bar", pass);
73
+ $('#status-bar').toggleClass("skip-bar", skip);
74
+ $('body').css('background-color', "#1c2227");
75
+ return;
76
+ }
77
+ if (fail)
64
78
  color = window.settings.background.fail;
65
- else if (topsuite.pass)
79
+ else if (pass)
66
80
  color = window.settings.background.pass;
67
81
  else
68
82
  color = window.settings.background.skip;
69
83
  $('body').css('background-color', color);
84
+ $('#status-bar').toggleClass("fail-bar pass-bar skip-bar", false);
70
85
  }
71
86
 
72
87
  function addSummary(topsuite) {
@@ -5,8 +5,9 @@ window.testdata = function () {
5
5
  var _statistics = null;
6
6
  var LEVELS = ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR', 'FAIL', 'SKIP'];
7
7
  var STATUSES = ['FAIL', 'PASS', 'SKIP', 'NOT RUN'];
8
- var KEYWORD_TYPES = ['KEYWORD', 'SETUP', 'TEARDOWN', 'FOR', 'ITERATION', 'IF', 'ELSE IF', 'ELSE', 'RETURN',
9
- 'TRY', 'EXCEPT', 'FINALLY', 'WHILE', 'CONTINUE', 'BREAK', 'ERROR'];
8
+ var KEYWORD_TYPES = ['KEYWORD', 'SETUP', 'TEARDOWN', 'FOR', 'ITERATION', 'IF',
9
+ 'ELSE IF', 'ELSE', 'RETURN', 'VAR', 'TRY', 'EXCEPT', 'FINALLY',
10
+ 'WHILE', 'CONTINUE', 'BREAK', 'ERROR'];
10
11
 
11
12
  function addElement(elem) {
12
13
  if (!elem.id)
@@ -57,6 +58,7 @@ window.testdata = function () {
57
58
  }
58
59
 
59
60
  function createKeyword(parent, element, strings, index) {
61
+ var status = element[8];
60
62
  var kw = model.Keyword({
61
63
  parent: parent,
62
64
  type: KEYWORD_TYPES[element[0]],
@@ -72,7 +74,12 @@ window.testdata = function () {
72
74
  this.doc = function () { return doc; };
73
75
  return doc;
74
76
  },
75
- status: parseStatus(element[8], strings),
77
+ status: parseStatus(status),
78
+ message: function () {
79
+ var msg = status.length == 4 ? strings.get(status[3]) : '';
80
+ this.message = function () { return msg; };
81
+ return msg;
82
+ },
76
83
  times: model.Times(times(element[8])),
77
84
  isChildrenLoaded: typeof(element[9]) !== 'number'
78
85
  });
@@ -1,3 +1,20 @@
1
+ const lightModeIcon = `
2
+ <svg class="light-mode-icon" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24"
3
+ viewBox="0 0 24 24" fill="var(--text-color)">
4
+ <rect fill="none" height="24" width="24" />
5
+ <path
6
+ d="M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0 c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2 c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1 C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06 c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41 l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41 c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36 c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z" />
7
+ </svg>`
8
+
9
+ const darkModeIcon = `
10
+ <svg class="dark-mode-icon" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24"
11
+ viewBox="0 0 24 24" fill="var(--text-color)">
12
+ <rect fill="none" height="24" width="24" />
13
+ <path
14
+ d="M11.01,3.05C6.51,3.54,3,7.36,3,12c0,4.97,4.03,9,9,9c4.63,0,8.45-3.5,8.95-8c0.09-0.79-0.78-1.42-1.54-0.95 c-0.84,0.54-1.84,0.85-2.91,0.85c-2.98,0-5.4-2.42-5.4-5.4c0-1.06,0.31-2.06,0.84-2.89C12.39,3.94,11.9,2.98,11.01,3.05z" />
15
+ </svg>`
16
+
17
+
1
18
  function removeJavaScriptDisabledWarning() {
2
19
  // Not using jQuery here for maximum speed
3
20
  document.getElementById('javascript-disabled').style.display = 'none';
@@ -39,6 +56,10 @@ function setTitle(suiteName, type) {
39
56
  function addHeader() {
40
57
  var generated = util.timestamp(window.output.generated);
41
58
  $.tmpl('<h1>${title}</h1>' +
59
+ '<button id=theme-toggle>' +
60
+ lightModeIcon +
61
+ darkModeIcon +
62
+ '</button>' +
42
63
  '<div id="generated">' +
43
64
  '<span>Generated<br>${generated}</span><br>' +
44
65
  '<span id="generated-ago">${ago} ago</span>' +
@@ -50,6 +71,7 @@ function addHeader() {
50
71
  ago: util.createGeneratedAgoString(generated),
51
72
  title: document.title
52
73
  }).appendTo($('#header'));
74
+ document.getElementById('theme-toggle')?.addEventListener('click', theme.onClick);
53
75
  }
54
76
 
55
77
  function addReportOrLogLink(myType) {
@@ -188,3 +210,65 @@ function stopPropagation(event) {
188
210
  if (event.stopPropagation)
189
211
  event.stopPropagation();
190
212
  }
213
+
214
+
215
+ const theme = function () {
216
+
217
+ const storageKey = 'theme-preference';
218
+ const urlParams = new URLSearchParams(window.location.search);
219
+ var storage;
220
+ var theme;
221
+
222
+ function init(givenStorage) {
223
+ storage = givenStorage;
224
+ theme = { value: getPreference() };
225
+ document.body.setAttribute('data-theme', theme.value);
226
+ reflectPreference();
227
+
228
+ window.matchMedia('(prefers-color-scheme: dark)')
229
+ .addEventListener('change', ({matches:isDark}) => {
230
+ theme.value = isDark ? 'dark' : 'light';
231
+ setPreference();
232
+ });
233
+
234
+ window.addEventListener('storage', ({key, newValue}) => {
235
+ if (key === storage.fullKey(storageKey)) {
236
+ theme.value = newValue === 'dark' ? 'dark' : 'light';
237
+ setPreference();
238
+ }
239
+ });
240
+ }
241
+
242
+ function getPreference() {
243
+ if (urlParams.has('theme')) {
244
+ var urlTheme = urlParams.get('theme') === 'dark' ? 'dark' : 'light';
245
+ storage.set(storageKey, urlTheme);
246
+ urlParams.delete('theme');
247
+ return urlTheme;
248
+ }
249
+ if (storage.get(storageKey))
250
+ return storage.get(storageKey) === 'dark' ? 'dark' : 'light';
251
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
252
+ }
253
+
254
+ function setPreference() {
255
+ storage.set(storageKey, theme.value);
256
+ reflectPreference();
257
+ }
258
+
259
+ function reflectPreference() {
260
+ document.body.setAttribute('data-theme', theme.value);
261
+ document.querySelector('#theme-toggle')?.setAttribute('aria-label', theme.value);
262
+ const event = new Event('theme-change', {value: theme.value});
263
+ document.dispatchEvent(event);
264
+ }
265
+
266
+ function onClick() {
267
+ theme.value = theme.value === 'light' ? 'dark' : 'light';
268
+ document.body.setAttribute('theme-toggled', "");
269
+ setPreference();
270
+ }
271
+
272
+ return {init: init, getPreference: getPreference, setPreference: setPreference,
273
+ reflectPreference: reflectPreference, onClick: onClick};
274
+ }();
@@ -27,13 +27,13 @@ if sys.version_info < (3, 9) and not Path(__file__).exists(): # zipsafe
27
27
  except ImportError:
28
28
  raise ImportError(
29
29
  "'importlib_resources' backport module needs to be installed with "
30
- "Python 3.8 and older when Robot Framework is distributed as a zip "
31
- "package or '__file__' does not exist for other reasons."
30
+ "Python 3.8 when Robot Framework is distributed as a zip package "
31
+ "or '__file__' does not exist for other reasons."
32
32
  )
33
33
  else:
34
34
  try:
35
35
  from importlib.resources import files
36
- except ImportError: # Python 3.8 or older
36
+ except ImportError: # Python 3.8
37
37
  BASE_DIR = Path(__file__).absolute().parent.parent.parent # zipsafe
38
38
 
39
39
  def files(module):
@@ -71,14 +71,6 @@ class DocumentationBuilder:
71
71
  instead.
72
72
  """
73
73
 
74
- def __init__(self, library_or_resource=None):
75
- """`library_or_resource` is accepted for backwards compatibility reasons.
76
-
77
- It is not used for anything internally and passing it to the builder is
78
- considered deprecated starting from RF 6.0.1.
79
- """
80
- pass
81
-
82
74
  def build(self, source):
83
75
  # Source can contain arguments separated with `::` so we cannot convert
84
76
  # it to Path and instead need to make sure it's a string. It would be
@@ -47,12 +47,12 @@ class TypeDoc(Sortable):
47
47
  return self.name.lower()
48
48
 
49
49
  @classmethod
50
- def for_type(cls, type_hint, converters):
51
- if isinstance(type_hint, EnumType):
52
- return cls.for_enum(type_hint)
53
- if isinstance(type_hint, typeddict_types):
54
- return cls.for_typed_dict(type_hint)
55
- converter = TypeConverter.converter_for(type_hint, converters)
50
+ def for_type(cls, type_info, converters):
51
+ if isinstance(type_info.type, EnumType):
52
+ return cls.for_enum(type_info.type)
53
+ if isinstance(type_info.type, typeddict_types):
54
+ return cls.for_typed_dict(type_info.type)
55
+ converter = TypeConverter.converter_for(type_info, converters)
56
56
  if not converter:
57
57
  return None
58
58
  elif not converter.type:
@@ -83,15 +83,14 @@ class TypeDoc(Sortable):
83
83
  return cls(cls.TYPED_DICT, typed_dict.__name__, getdoc(typed_dict),
84
84
  accepts=(str, 'Mapping'), items=items)
85
85
 
86
- def to_dictionary(self, legacy=False):
86
+ def to_dictionary(self):
87
87
  data = {
88
88
  'type': self.type,
89
89
  'name': self.name,
90
90
  'doc': self.doc,
91
+ 'usages': self.usages,
92
+ 'accepts': self.accepts
91
93
  }
92
- if not legacy:
93
- data['usages'] = self.usages
94
- data['accepts'] = self.accepts
95
94
  if self.members is not None:
96
95
  data['members'] = [m.to_dictionary() for m in self.members]
97
96
  if self.items is not None:
@@ -14,10 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  import re
17
- try:
18
- from urllib import quote
19
- except ImportError:
20
- from urllib.parse import quote
17
+ from urllib.parse import quote
21
18
 
22
19
  from robot.errors import DataError
23
20
  from robot.utils import html_escape, html_format, NormalizedDict
@@ -97,10 +94,10 @@ class DocToHtml:
97
94
  'HTML': lambda doc: doc,
98
95
  'REST': self._format_rest}[doc_format]
99
96
  except KeyError:
100
- raise DataError("Invalid documentation format '%s'." % doc_format)
97
+ raise DataError(f"Invalid documentation format '{doc_format}'.")
101
98
 
102
99
  def _format_text(self, doc):
103
- return '<p style="white-space: pre-wrap">%s</p>' % html_escape(doc)
100
+ return f'<p style="white-space: pre-wrap">{html_escape(doc)}</p>'
104
101
 
105
102
  def _format_rest(self, doc):
106
103
  try:
@@ -133,7 +130,7 @@ class HtmlToText:
133
130
  '&apos;': "'"
134
131
  }
135
132
 
136
- def get_shortdoc_from_html(self, doc):
133
+ def get_short_doc_from_html(self, doc):
137
134
  match = re.search(r'<p.*?>(.*?)</?p>', doc, re.DOTALL)
138
135
  if match:
139
136
  doc = match.group(1)
@@ -16,7 +16,7 @@
16
16
  import json
17
17
  import os.path
18
18
 
19
- from robot.running import ArgInfo
19
+ from robot.running import ArgInfo, TypeInfo
20
20
  from robot.errors import DataError
21
21
 
22
22
  from .datatypes import EnumMember, TypedDictItem, TypeDoc
@@ -57,50 +57,68 @@ class JsonDocBuilder:
57
57
  def _create_keyword(self, data):
58
58
  kw = KeywordDoc(name=data.get('name'),
59
59
  doc=data['doc'],
60
- shortdoc=data['shortdoc'],
60
+ short_doc=data['shortdoc'],
61
61
  tags=data['tags'],
62
62
  private=data.get('private', False),
63
63
  deprecated=data.get('deprecated', False),
64
64
  source=data['source'],
65
65
  lineno=int(data.get('lineno', -1)))
66
66
  self._create_arguments(data['args'], kw)
67
+ self._add_return_type(data.get('returnType'), kw)
67
68
  return kw
68
69
 
69
70
  def _create_arguments(self, arguments, kw: KeywordDoc):
70
71
  spec = kw.args
71
- setters = {
72
- ArgInfo.POSITIONAL_ONLY: spec.positional_only.append,
73
- ArgInfo.POSITIONAL_ONLY_MARKER: lambda value: None,
74
- ArgInfo.POSITIONAL_OR_NAMED: spec.positional_or_named.append,
75
- ArgInfo.VAR_POSITIONAL: lambda value: setattr(spec, 'var_positional', value),
76
- ArgInfo.NAMED_ONLY_MARKER: lambda value: None,
77
- ArgInfo.NAMED_ONLY: spec.named_only.append,
78
- ArgInfo.VAR_NAMED: lambda value: setattr(spec, 'var_named', value),
79
- }
72
+ positional_only = []
73
+ positional_or_named = []
74
+ named_only = []
80
75
  for arg in arguments:
76
+ kind = arg['kind']
81
77
  name = arg['name']
82
- setters[arg['kind']](name)
78
+ if kind == ArgInfo.POSITIONAL_ONLY:
79
+ positional_only.append(name)
80
+ elif kind == ArgInfo.POSITIONAL_OR_NAMED:
81
+ positional_or_named.append(name)
82
+ elif kind == ArgInfo.VAR_POSITIONAL:
83
+ spec.var_positional = name
84
+ elif kind == ArgInfo.NAMED_ONLY:
85
+ named_only.append(name)
86
+ elif kind == ArgInfo.VAR_NAMED:
87
+ spec.var_named = name
83
88
  default = arg.get('defaultValue')
84
89
  if default is not None:
85
90
  spec.defaults[name] = default
86
- if arg.get('type'):
91
+ if 'type' in arg: # RF >= 6.1
87
92
  type_docs = {}
88
- type_info = self._parse_modern_type_info(arg['type'], type_docs)
89
- else: # Compatibility with RF < 6.1.
93
+ type_info = self._parse_type_info(arg['type'], type_docs)
94
+ else: # RF < 6.1
90
95
  type_docs = arg.get('typedocs', {})
91
- type_info = tuple(arg['types'])
96
+ type_info = self._parse_legacy_type_info(arg['types'])
92
97
  if type_info:
93
98
  if not spec.types:
94
99
  spec.types = {}
95
100
  spec.types[name] = type_info
96
101
  kw.type_docs[name] = type_docs
102
+ spec.positional_only = positional_only
103
+ spec.positional_or_named = positional_or_named
104
+ spec.named_only = named_only
97
105
 
98
- def _parse_modern_type_info(self, data, type_docs):
106
+ def _parse_type_info(self, data, type_docs):
107
+ if not data:
108
+ return None
99
109
  if data.get('typedoc'):
100
110
  type_docs[data['name']] = data['typedoc']
101
- return {'name': data['name'],
102
- 'nested': [self._parse_modern_type_info(nested, type_docs)
103
- for nested in data.get('nested', ())]}
111
+ nested = [self._parse_type_info(typ, type_docs) for typ in data.get('nested', ())]
112
+ return TypeInfo(data['name'], None, nested=nested or None)
113
+
114
+ def _parse_legacy_type_info(self, types):
115
+ return TypeInfo.from_sequence(types) if types else None
116
+
117
+ def _add_return_type(self, data, kw: KeywordDoc):
118
+ if data:
119
+ type_docs = {}
120
+ kw.args.return_type = self._parse_type_info(data, type_docs)
121
+ kw.type_docs['return'] = type_docs
104
122
 
105
123
  def _parse_type_docs(self, type_docs):
106
124
  for data in type_docs: