robotframework 6.1.1__zip → 7.0a1__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.
- {robotframework-6.1.1/src/robotframework.egg-info → robotframework-7.0a1}/PKG-INFO +3 -6
- {robotframework-6.1.1 → robotframework-7.0a1}/setup.py +2 -5
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/interfaces.py +35 -48
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/parsing.py +4 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/gatherfailed.py +2 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/languages.py +0 -9
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/settings.py +8 -5
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.css +4 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.html +9 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/model.js +2 -4
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/testdata.js +10 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/template.py +3 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/builder.py +0 -8
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/datatypes.py +9 -10
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/htmlutils.py +4 -7
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/jsonbuilder.py +14 -10
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/model.py +13 -25
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/robotbuilder.py +13 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/xmlbuilder.py +8 -8
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/xmlwriter.py +12 -38
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/BuiltIn.py +215 -189
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Collections.py +2 -9
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/DateTime.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/OperatingSystem.py +4 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Process.py +26 -27
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Remote.py +40 -36
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/String.py +4 -4
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/XML.py +7 -8
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/__init__.py +2 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/__init__.py +4 -4
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/body.py +14 -6
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/configurer.py +15 -11
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/control.py +151 -81
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/filter.py +31 -25
- robotframework-7.0a1/src/robot/model/keyword.py +70 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/message.py +19 -10
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/namepatterns.py +3 -25
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/stats.py +9 -15
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/tags.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/testcase.py +12 -21
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/testsuite.py +16 -22
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/visitor.py +35 -8
- robotframework-7.0a1/src/robot/output/console/dotted.py +90 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/quiet.py +3 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/verbose.py +60 -60
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/debugfile.py +36 -23
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/filelogger.py +16 -13
- robotframework-7.0a1/src/robot/output/listeners.py +586 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/logger.py +164 -77
- robotframework-7.0a1/src/robot/output/loggerapi.py +152 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/loggerhelper.py +23 -56
- robotframework-7.0a1/src/robot/output/output.py +158 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/stdoutlogsplitter.py +8 -5
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/xmllogger.py +163 -109
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/blocklexers.py +17 -13
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/context.py +12 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/lexer.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/settings.py +6 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/statementlexers.py +39 -10
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/tokens.py +27 -29
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/model/blocks.py +19 -6
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/model/statements.py +184 -84
- robotframework-7.0a1/src/robot/parsing/model/visitor.py +102 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/expandkeywordmatcher.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jsbuildingcontext.py +8 -6
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jsmodelbuilders.py +88 -61
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/stringcache.py +4 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/xunitwriter.py +15 -21
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/__init__.py +3 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/configurer.py +12 -9
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/flattenkeywordmatcher.py +8 -8
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/keywordremover.py +71 -54
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/merger.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/model.py +400 -316
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/modeldeprecation.py +9 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/resultbuilder.py +21 -23
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/xmlelementhandlers.py +76 -40
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/__init__.py +1 -1
- robotframework-7.0a1/src/robot/running/arguments/argumentconverter.py +101 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentmapper.py +16 -14
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentresolver.py +41 -33
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentspec.py +24 -90
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentvalidator.py +34 -27
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/customconverters.py +14 -11
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/embedded.py +23 -26
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/typeconverters.py +175 -213
- robotframework-7.0a1/src/robot/running/arguments/typeinfo.py +367 -0
- robotframework-7.0a1/src/robot/running/arguments/typevalidator.py +62 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/bodyrunner.py +83 -68
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/parsers.py +8 -10
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/settings.py +9 -17
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/transformers.py +166 -308
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/context.py +80 -25
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/handlers.py +11 -16
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/handlerstore.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/librarykeywordrunner.py +9 -17
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/model.py +109 -32
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/namespace.py +18 -19
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/statusreporter.py +13 -12
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/suiterunner.py +15 -17
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/testlibraries.py +33 -40
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/usererrorhandler.py +8 -8
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/userkeyword.py +13 -8
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/userkeywordrunner.py +18 -21
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/testdoc.py +18 -13
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/__init__.py +50 -35
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/connectioncache.py +64 -59
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/encodingsniffer.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/escaping.py +11 -9
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/markupwriters.py +20 -13
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/normalizing.py +9 -24
- robotframework-7.0a1/src/robot/utils/notset.py +33 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/platform.py +15 -5
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotpath.py +1 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robottime.py +120 -88
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robottypes.py +16 -31
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/setter.py +0 -5
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/text.py +7 -4
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/unic.py +2 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/__init__.py +2 -2
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/assigner.py +17 -19
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/evaluation.py +20 -17
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/filesetter.py +80 -80
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/replacer.py +33 -36
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/scopes.py +3 -3
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/search.py +66 -41
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/store.py +14 -16
- robotframework-7.0a1/src/robot/variables/tablesetter.py +164 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/variables.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/version.py +1 -1
- {robotframework-6.1.1 → robotframework-7.0a1/src/robotframework.egg-info}/PKG-INFO +3 -6
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/SOURCES.txt +3 -4
- {robotframework-6.1.1 → robotframework-7.0a1}/tasks.py +6 -6
- robotframework-6.1.1/src/robot/libraries/Reserved.py +0 -48
- robotframework-6.1.1/src/robot/model/keyword.py +0 -173
- robotframework-6.1.1/src/robot/output/console/dotted.py +0 -90
- robotframework-6.1.1/src/robot/output/listenerarguments.py +0 -165
- robotframework-6.1.1/src/robot/output/listenermethods.py +0 -113
- robotframework-6.1.1/src/robot/output/listeners.py +0 -174
- robotframework-6.1.1/src/robot/output/output.py +0 -95
- robotframework-6.1.1/src/robot/parsing/model/visitor.py +0 -67
- robotframework-6.1.1/src/robot/running/arguments/argumentconverter.py +0 -79
- robotframework-6.1.1/src/robot/running/arguments/typevalidator.py +0 -56
- robotframework-6.1.1/src/robot/running/modelcombiner.py +0 -32
- robotframework-6.1.1/src/robot/variables/tablesetter.py +0 -156
- {robotframework-6.1.1 → robotframework-7.0a1}/AUTHORS.rst +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/BUILD.rst +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/CONTRIBUTING.rst +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/COPYRIGHT.txt +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/INSTALL.rst +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/LICENSE.txt +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/MANIFEST.in +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/README.rst +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/setup.cfg +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/__main__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/deco.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/exceptions.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/logger.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/errors.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/common/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/common/js_disabled.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/common/storage.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/htmlfilewriter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/jsonwriter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.min.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/libdoc.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/libdoc.html +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/print.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/pygments.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/common.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/fileloading.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/print.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/report.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/report.html +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/util.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/view.js +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/testdoc.css +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/testdoc.html +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdoc.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/consoleviewer.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/htmlwriter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/jsonwriter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/output.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/standardtypes.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/writer.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Dialogs.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Easter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Screenshot.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Telnet.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/dialogs_py.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/fixture.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/itemlist.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/metadata.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/modelobject.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/modifier.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/statistics.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/suitestatistics.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/tagsetter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/tagstatistics.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/totalstatistics.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/highlighting.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/librarylogger.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/pyloggingconf.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/tokenizer.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/model/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/blockparsers.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/fileparser.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/parser.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/suitestructure.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/pythonpathsetter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/rebot.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jsexecutionresult.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jswriter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/logreportwriters.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/outputwriter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/resultwriter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/executionerrors.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/executionresult.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/messagefilter.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/suiteteardownfailed.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/visitor.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/run.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentparser.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/builders.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/dynamicmethods.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/importer.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/libraryscopes.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/outputcapture.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/randomizer.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/runkwregister.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/signalhandler.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/status.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/timeouts/__init__.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/timeouts/posix.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/timeouts/windows.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/application.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/argumentparser.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/asserts.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/charwidth.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/compress.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/dotdict.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/encoding.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/error.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/etreewrapper.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/filereader.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/frange.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/htmlformatters.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/importer.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/markuputils.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/match.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/misc.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/recommendations.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/restreader.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotenv.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotinspect.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotio.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/sortable.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/typehints.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/finders.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/notfound.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/resolvable.py +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/dependency_links.txt +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/entry_points.txt +0 -0
- {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/top_level.txt +0 -0
|
@@ -13,21 +13,21 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
|
+
import re
|
|
17
|
+
import time
|
|
16
18
|
from collections import OrderedDict
|
|
17
19
|
from contextlib import contextmanager
|
|
20
|
+
from datetime import datetime
|
|
18
21
|
from itertools import zip_longest
|
|
19
|
-
import re
|
|
20
|
-
import time
|
|
21
22
|
|
|
22
23
|
from robot.errors import (BreakLoop, ContinueLoop, DataError, ExecutionFailed,
|
|
23
24
|
ExecutionFailures, ExecutionPassed, ExecutionStatus)
|
|
24
25
|
from robot.result import (For as ForResult, While as WhileResult, If as IfResult,
|
|
25
|
-
|
|
26
|
-
TryBranch as TryBranchResult)
|
|
26
|
+
Try as TryResult)
|
|
27
27
|
from robot.output import librarylogger as logger
|
|
28
|
-
from robot.utils import (cut_assign_value, frange, get_error_message,
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
from robot.utils import (cut_assign_value, frange, get_error_message, is_list_like,
|
|
29
|
+
is_number, plural_or_not as s, secs_to_timestr, seq2str,
|
|
30
|
+
split_from_equals, type_name, Matcher, timestr_to_secs)
|
|
31
31
|
from robot.variables import is_dict_variable, evaluate_expression
|
|
32
32
|
|
|
33
33
|
from .statusreporter import StatusReporter
|
|
@@ -101,7 +101,7 @@ class ForInRunner:
|
|
|
101
101
|
error = DataError(data.error, syntax=True)
|
|
102
102
|
else:
|
|
103
103
|
run = True
|
|
104
|
-
result = ForResult(data.
|
|
104
|
+
result = ForResult(data.assign, data.flavor, data.values, data.start,
|
|
105
105
|
data.mode, data.fill)
|
|
106
106
|
with StatusReporter(data, result, self._context, run) as status:
|
|
107
107
|
if run:
|
|
@@ -143,7 +143,7 @@ class ForInRunner:
|
|
|
143
143
|
def _get_values_for_rounds(self, data):
|
|
144
144
|
if self._context.dry_run:
|
|
145
145
|
return [None]
|
|
146
|
-
values_per_round = len(data.
|
|
146
|
+
values_per_round = len(data.assign)
|
|
147
147
|
if self._is_dict_iteration(data.values):
|
|
148
148
|
values = self._resolve_dict_values(data.values)
|
|
149
149
|
values = self._map_dict_values_to_rounds(values, values_per_round)
|
|
@@ -218,10 +218,10 @@ class ForInRunner:
|
|
|
218
218
|
variables = self._context.variables
|
|
219
219
|
else: # Not really run (earlier failure, unexecuted IF branch, dry-run)
|
|
220
220
|
variables = {}
|
|
221
|
-
values = [''] * len(data.
|
|
222
|
-
for name, value in self._map_variables_and_values(data.
|
|
221
|
+
values = [''] * len(data.assign)
|
|
222
|
+
for name, value in self._map_variables_and_values(data.assign, values):
|
|
223
223
|
variables[name] = value
|
|
224
|
-
result.
|
|
224
|
+
result.assign[name] = cut_assign_value(value)
|
|
225
225
|
runner = BodyRunner(self._context, run, self._templated)
|
|
226
226
|
with StatusReporter(data, result, self._context, run):
|
|
227
227
|
runner.run(data.body)
|
|
@@ -274,13 +274,13 @@ class ForInZipRunner(ForInRunner):
|
|
|
274
274
|
if not mode or self._context.dry_run:
|
|
275
275
|
return None
|
|
276
276
|
try:
|
|
277
|
-
mode = self._context.variables.replace_string(mode)
|
|
278
|
-
if mode in ('STRICT', 'SHORTEST', 'LONGEST'):
|
|
279
|
-
return mode
|
|
280
|
-
raise DataError(f"
|
|
281
|
-
f"
|
|
277
|
+
mode = self._context.variables.replace_string(mode)
|
|
278
|
+
if mode.upper() in ('STRICT', 'SHORTEST', 'LONGEST'):
|
|
279
|
+
return mode.upper()
|
|
280
|
+
raise DataError(f"Value '{mode}' is not accepted. Valid values "
|
|
281
|
+
f"are 'STRICT', 'SHORTEST' and 'LONGEST'.")
|
|
282
282
|
except DataError as err:
|
|
283
|
-
raise DataError(f'Invalid mode: {err}')
|
|
283
|
+
raise DataError(f'Invalid FOR IN ZIP mode: {err}')
|
|
284
284
|
|
|
285
285
|
def _resolve_fill(self, fill):
|
|
286
286
|
if not fill or self._context.dry_run:
|
|
@@ -288,7 +288,7 @@ class ForInZipRunner(ForInRunner):
|
|
|
288
288
|
try:
|
|
289
289
|
return self._context.variables.replace_scalar(fill)
|
|
290
290
|
except DataError as err:
|
|
291
|
-
raise DataError(f'Invalid fill value: {err}')
|
|
291
|
+
raise DataError(f'Invalid FOR IN ZIP fill value: {err}')
|
|
292
292
|
|
|
293
293
|
def _resolve_dict_values(self, values):
|
|
294
294
|
raise DataError('FOR IN ZIP loops do not support iterating over dictionaries.',
|
|
@@ -302,6 +302,8 @@ class ForInZipRunner(ForInRunner):
|
|
|
302
302
|
return zip_longest(*values, fillvalue=self._fill)
|
|
303
303
|
if self._mode == 'STRICT':
|
|
304
304
|
self._validate_strict_lengths(values)
|
|
305
|
+
if self._mode is None:
|
|
306
|
+
self._deprecate_different_lengths(values)
|
|
305
307
|
return zip(*values)
|
|
306
308
|
|
|
307
309
|
def _validate_types(self, values):
|
|
@@ -316,12 +318,21 @@ class ForInZipRunner(ForInRunner):
|
|
|
316
318
|
try:
|
|
317
319
|
lengths.append(len(item))
|
|
318
320
|
except TypeError:
|
|
319
|
-
raise DataError(f"FOR IN ZIP items
|
|
320
|
-
f"but item {index} does not.")
|
|
321
|
+
raise DataError(f"FOR IN ZIP items must have length in the STRICT "
|
|
322
|
+
f"mode, but item {index} does not.")
|
|
321
323
|
if len(set(lengths)) > 1:
|
|
322
|
-
raise DataError(f"FOR IN ZIP items
|
|
324
|
+
raise DataError(f"FOR IN ZIP items must have equal lengths in the STRICT "
|
|
323
325
|
f"mode, but lengths are {seq2str(lengths, quote='')}.")
|
|
324
326
|
|
|
327
|
+
def _deprecate_different_lengths(self, values):
|
|
328
|
+
try:
|
|
329
|
+
self._validate_strict_lengths(values)
|
|
330
|
+
except DataError as err:
|
|
331
|
+
logger.warn(f"FOR IN ZIP default mode will be changed from SHORTEST to "
|
|
332
|
+
f"STRICT in Robot Framework 8.0. Use 'mode=SHORTEST' to keep "
|
|
333
|
+
f"using the SHORTEST mode. If the mode is not changed, "
|
|
334
|
+
f"execution will fail like this in the future: {err}")
|
|
335
|
+
|
|
325
336
|
|
|
326
337
|
class ForInEnumerateRunner(ForInRunner):
|
|
327
338
|
flavor = 'IN ENUMERATE'
|
|
@@ -339,9 +350,9 @@ class ForInEnumerateRunner(ForInRunner):
|
|
|
339
350
|
try:
|
|
340
351
|
return int(start)
|
|
341
352
|
except ValueError:
|
|
342
|
-
raise DataError(f"
|
|
353
|
+
raise DataError(f"Value must be an integer, got '{start}'.")
|
|
343
354
|
except DataError as err:
|
|
344
|
-
raise DataError(f'Invalid start value: {err}')
|
|
355
|
+
raise DataError(f'Invalid FOR IN ENUMERATE start value: {err}')
|
|
345
356
|
|
|
346
357
|
def _map_dict_values_to_rounds(self, values, per_round):
|
|
347
358
|
if per_round > 3:
|
|
@@ -375,10 +386,12 @@ class WhileRunner:
|
|
|
375
386
|
error = None
|
|
376
387
|
run = False
|
|
377
388
|
limit = None
|
|
378
|
-
loop_result = WhileResult(data.condition,
|
|
379
|
-
data.
|
|
380
|
-
|
|
381
|
-
|
|
389
|
+
loop_result = WhileResult(data.condition,
|
|
390
|
+
data.limit,
|
|
391
|
+
data.on_limit,
|
|
392
|
+
data.on_limit_message,
|
|
393
|
+
start_time=datetime.now())
|
|
394
|
+
iter_result = loop_result.body.create_iteration(start_time=datetime.now())
|
|
382
395
|
if self._run:
|
|
383
396
|
if data.error:
|
|
384
397
|
error = DataError(data.error, syntax=True)
|
|
@@ -420,7 +433,7 @@ class WhileRunner:
|
|
|
420
433
|
errors.extend(failed.get_errors())
|
|
421
434
|
if not failed.can_continue(ctx, self._templated):
|
|
422
435
|
break
|
|
423
|
-
iter_result = loop_result.body.create_iteration(
|
|
436
|
+
iter_result = loop_result.body.create_iteration(start_time=datetime.now())
|
|
424
437
|
if not self._should_run(data.condition, ctx.variables):
|
|
425
438
|
break
|
|
426
439
|
if errors:
|
|
@@ -453,10 +466,11 @@ class IfRunner:
|
|
|
453
466
|
def run(self, data):
|
|
454
467
|
with self._dry_run_recursion_detection(data) as recursive_dry_run:
|
|
455
468
|
error = None
|
|
456
|
-
|
|
469
|
+
result = IfResult()
|
|
470
|
+
with StatusReporter(data, result, self._context, self._run):
|
|
457
471
|
for branch in data.body:
|
|
458
472
|
try:
|
|
459
|
-
if self._run_if_branch(branch, recursive_dry_run, data.error):
|
|
473
|
+
if self._run_if_branch(branch, result, recursive_dry_run, data.error):
|
|
460
474
|
self._run = False
|
|
461
475
|
except ExecutionStatus as err:
|
|
462
476
|
error = err
|
|
@@ -478,9 +492,9 @@ class IfRunner:
|
|
|
478
492
|
if dry_run:
|
|
479
493
|
self._dry_run_stack.pop()
|
|
480
494
|
|
|
481
|
-
def _run_if_branch(self, branch, recursive_dry_run=False, syntax_error=None):
|
|
495
|
+
def _run_if_branch(self, branch, result, recursive_dry_run=False, syntax_error=None):
|
|
482
496
|
context = self._context
|
|
483
|
-
result =
|
|
497
|
+
result = result.body.create_branch(branch.type, branch.condition, start_time=datetime.now())
|
|
484
498
|
error = None
|
|
485
499
|
if syntax_error:
|
|
486
500
|
run_branch = False
|
|
@@ -525,28 +539,29 @@ class TryRunner:
|
|
|
525
539
|
|
|
526
540
|
def run(self, data):
|
|
527
541
|
run = self._run
|
|
528
|
-
|
|
542
|
+
result = TryResult()
|
|
543
|
+
with StatusReporter(data, result, self._context, run):
|
|
529
544
|
if data.error:
|
|
530
|
-
self._run_invalid(data)
|
|
545
|
+
self._run_invalid(data, result)
|
|
531
546
|
return
|
|
532
|
-
error = self._run_try(data, run)
|
|
547
|
+
error = self._run_try(data, result, run)
|
|
533
548
|
run_excepts_or_else = self._should_run_excepts_or_else(error, run)
|
|
534
549
|
if error:
|
|
535
|
-
error = self._run_excepts(data, error, run=run_excepts_or_else)
|
|
536
|
-
self._run_else(data, run=False)
|
|
550
|
+
error = self._run_excepts(data, result, error, run=run_excepts_or_else)
|
|
551
|
+
self._run_else(data, result, run=False)
|
|
537
552
|
else:
|
|
538
|
-
self._run_excepts(data, error, run=False)
|
|
539
|
-
error = self._run_else(data, run=run_excepts_or_else)
|
|
540
|
-
error = self._run_finally(data, run) or error
|
|
553
|
+
self._run_excepts(data, result, error, run=False)
|
|
554
|
+
error = self._run_else(data, result, run=run_excepts_or_else)
|
|
555
|
+
error = self._run_finally(data, result, run) or error
|
|
541
556
|
if error:
|
|
542
557
|
raise error
|
|
543
558
|
|
|
544
|
-
def _run_invalid(self, data):
|
|
559
|
+
def _run_invalid(self, data, result):
|
|
545
560
|
error_reported = False
|
|
546
561
|
for branch in data.body:
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
with StatusReporter(branch,
|
|
562
|
+
branch_result = result.body.create_branch(branch.type, branch.patterns,
|
|
563
|
+
branch.pattern_type, branch.assign)
|
|
564
|
+
with StatusReporter(branch, branch_result, self._context, run=False, suppress=True):
|
|
550
565
|
runner = BodyRunner(self._context, run=False, templated=self._templated)
|
|
551
566
|
runner.run(branch.body)
|
|
552
567
|
if not error_reported:
|
|
@@ -554,8 +569,8 @@ class TryRunner:
|
|
|
554
569
|
raise DataError(data.error, syntax=True)
|
|
555
570
|
raise ExecutionFailed(data.error, syntax=True)
|
|
556
571
|
|
|
557
|
-
def _run_try(self, data, run):
|
|
558
|
-
result =
|
|
572
|
+
def _run_try(self, data, result, run):
|
|
573
|
+
result = result.body.create_branch(data.TRY)
|
|
559
574
|
return self._run_branch(data.try_branch, result, run)
|
|
560
575
|
|
|
561
576
|
def _should_run_excepts_or_else(self, error, run):
|
|
@@ -577,7 +592,7 @@ class TryRunner:
|
|
|
577
592
|
else:
|
|
578
593
|
return None
|
|
579
594
|
|
|
580
|
-
def _run_excepts(self, data, error, run):
|
|
595
|
+
def _run_excepts(self, data, result, error, run):
|
|
581
596
|
for branch in data.except_branches:
|
|
582
597
|
try:
|
|
583
598
|
run_branch = run and self._should_run_except(branch, error)
|
|
@@ -586,15 +601,15 @@ class TryRunner:
|
|
|
586
601
|
pattern_error = err
|
|
587
602
|
else:
|
|
588
603
|
pattern_error = None
|
|
589
|
-
|
|
590
|
-
|
|
604
|
+
branch_result = result.body.create_branch(branch.type, branch.patterns,
|
|
605
|
+
branch.pattern_type, branch.assign)
|
|
591
606
|
if run_branch:
|
|
592
|
-
if branch.
|
|
593
|
-
self._context.variables[branch.
|
|
594
|
-
error = self._run_branch(branch,
|
|
607
|
+
if branch.assign:
|
|
608
|
+
self._context.variables[branch.assign] = str(error)
|
|
609
|
+
error = self._run_branch(branch, branch_result, error=pattern_error)
|
|
595
610
|
run = False
|
|
596
611
|
else:
|
|
597
|
-
self._run_branch(branch,
|
|
612
|
+
self._run_branch(branch, branch_result, run=False)
|
|
598
613
|
return error
|
|
599
614
|
|
|
600
615
|
def _should_run_except(self, branch, error):
|
|
@@ -602,9 +617,9 @@ class TryRunner:
|
|
|
602
617
|
return True
|
|
603
618
|
matchers = {
|
|
604
619
|
'GLOB': lambda m, p: Matcher(p, spaceless=False, caseless=False).match(m),
|
|
620
|
+
'REGEXP': lambda m, p: re.fullmatch(p, m) is not None,
|
|
621
|
+
'START': lambda m, p: m.startswith(p),
|
|
605
622
|
'LITERAL': lambda m, p: m == p,
|
|
606
|
-
'REGEXP': lambda m, p: re.match(rf'{p}\Z', m) is not None,
|
|
607
|
-
'START': lambda m, p: m.startswith(p)
|
|
608
623
|
}
|
|
609
624
|
if branch.pattern_type:
|
|
610
625
|
pattern_type = self._context.variables.replace_string(branch.pattern_type)
|
|
@@ -612,21 +627,21 @@ class TryRunner:
|
|
|
612
627
|
pattern_type = 'LITERAL'
|
|
613
628
|
matcher = matchers.get(pattern_type.upper())
|
|
614
629
|
if not matcher:
|
|
615
|
-
raise DataError(f"Invalid EXCEPT pattern type '{pattern_type}'
|
|
616
|
-
f"
|
|
630
|
+
raise DataError(f"Invalid EXCEPT pattern type '{pattern_type}'. "
|
|
631
|
+
f"Valid values are {seq2str(matchers)}.")
|
|
617
632
|
for pattern in branch.patterns:
|
|
618
633
|
if matcher(error.message, self._context.variables.replace_string(pattern)):
|
|
619
634
|
return True
|
|
620
635
|
return False
|
|
621
636
|
|
|
622
|
-
def _run_else(self, data, run):
|
|
637
|
+
def _run_else(self, data, result, run):
|
|
623
638
|
if data.else_branch:
|
|
624
|
-
result =
|
|
639
|
+
result = result.body.create_branch(data.ELSE)
|
|
625
640
|
return self._run_branch(data.else_branch, result, run)
|
|
626
641
|
|
|
627
|
-
def _run_finally(self, data, run):
|
|
642
|
+
def _run_finally(self, data, result, run):
|
|
628
643
|
if data.finally_branch:
|
|
629
|
-
result =
|
|
644
|
+
result = result.body.create_branch(data.FINALLY)
|
|
630
645
|
try:
|
|
631
646
|
with StatusReporter(data.finally_branch, result, self._context, run):
|
|
632
647
|
runner = BodyRunner(self._context, run, self._templated)
|
|
@@ -679,15 +694,15 @@ class WhileLimit:
|
|
|
679
694
|
return None
|
|
680
695
|
try:
|
|
681
696
|
on_limit = variables.replace_string(on_limit)
|
|
682
|
-
if on_limit.upper()
|
|
683
|
-
|
|
697
|
+
if on_limit.upper() in ('PASS', 'FAIL'):
|
|
698
|
+
return on_limit.upper()
|
|
699
|
+
raise DataError(f"Value '{on_limit}' is not accepted. Valid values "
|
|
700
|
+
f"are 'PASS' and 'FAIL'.")
|
|
684
701
|
except DataError as err:
|
|
685
|
-
raise DataError(f"Invalid WHILE loop 'on_limit' value
|
|
686
|
-
else:
|
|
687
|
-
return on_limit.lower()
|
|
702
|
+
raise DataError(f"Invalid WHILE loop 'on_limit' value: {err}")
|
|
688
703
|
|
|
689
704
|
def limit_exceeded(self):
|
|
690
|
-
on_limit_pass = self.on_limit == '
|
|
705
|
+
on_limit_pass = self.on_limit == 'PASS'
|
|
691
706
|
if self.on_limit_message:
|
|
692
707
|
raise LimitExceeded(on_limit_pass, self.on_limit_message)
|
|
693
708
|
else:
|
|
@@ -53,23 +53,21 @@ class RobotParser(Parser):
|
|
|
53
53
|
def parse_suite_file(self, source: Path, defaults: TestDefaults) -> TestSuite:
|
|
54
54
|
model = get_model(self._get_source(source), data_only=True,
|
|
55
55
|
curdir=self._get_curdir(source), lang=self.lang)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
SuiteBuilder(suite, FileSettings(defaults)).build(model)
|
|
59
|
-
return suite
|
|
56
|
+
model.source = source
|
|
57
|
+
return self.parse_model(model, defaults)
|
|
60
58
|
|
|
61
59
|
def parse_init_file(self, source: Path, defaults: TestDefaults) -> TestSuite:
|
|
62
60
|
model = get_init_model(self._get_source(source), data_only=True,
|
|
63
61
|
curdir=self._get_curdir(source), lang=self.lang)
|
|
64
|
-
|
|
65
|
-
suite = TestSuite(name=TestSuite.name_from_source(
|
|
66
|
-
source=
|
|
62
|
+
model.source = source
|
|
63
|
+
suite = TestSuite(name=TestSuite.name_from_source(source.parent),
|
|
64
|
+
source=source.parent, rpa=None)
|
|
67
65
|
SuiteBuilder(suite, InitFileSettings(defaults)).build(model)
|
|
68
66
|
return suite
|
|
69
67
|
|
|
70
68
|
def parse_model(self, model: File, defaults: 'TestDefaults|None' = None) -> TestSuite:
|
|
71
|
-
|
|
72
|
-
suite = TestSuite(name=
|
|
69
|
+
name = TestSuite.name_from_source(model.source, self.extensions)
|
|
70
|
+
suite = TestSuite(name=name, source=model.source)
|
|
73
71
|
SuiteBuilder(suite, FileSettings(defaults)).build(model)
|
|
74
72
|
return suite
|
|
75
73
|
|
|
@@ -82,8 +80,8 @@ class RobotParser(Parser):
|
|
|
82
80
|
def parse_resource_file(self, source: Path) -> ResourceFile:
|
|
83
81
|
model = get_resource_model(self._get_source(source), data_only=True,
|
|
84
82
|
curdir=self._get_curdir(source), lang=self.lang)
|
|
83
|
+
model.source = source
|
|
85
84
|
resource = self.parse_resource_model(model)
|
|
86
|
-
resource.source = source
|
|
87
85
|
return resource
|
|
88
86
|
|
|
89
87
|
def parse_resource_model(self, model: File) -> ResourceFile:
|
|
@@ -13,31 +13,23 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
|
-
import sys
|
|
17
16
|
from collections.abc import Sequence
|
|
17
|
+
from typing import TypedDict
|
|
18
18
|
|
|
19
19
|
from ..model import TestCase
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
class OptionalItems(TypedDict, total=False):
|
|
23
|
+
args: 'Sequence[str]'
|
|
24
|
+
lineno: int
|
|
24
25
|
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
lineno: int
|
|
27
|
+
class FixtureDict(OptionalItems):
|
|
28
|
+
"""Dictionary containing setup or teardown info.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
:attr:`args` and :attr:`lineno` are optional.
|
|
35
|
-
"""
|
|
36
|
-
name: str
|
|
37
|
-
|
|
38
|
-
else:
|
|
39
|
-
class FixtureDict(dict):
|
|
40
|
-
pass
|
|
30
|
+
:attr:`args` and :attr:`lineno` are optional.
|
|
31
|
+
"""
|
|
32
|
+
name: str
|
|
41
33
|
|
|
42
34
|
|
|
43
35
|
class TestDefaults:
|