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.
- {robotframework-6.1rc1 → robotframework-7.0}/INSTALL.rst +25 -25
- {robotframework-6.1rc1 → robotframework-7.0}/PKG-INFO +6 -8
- {robotframework-6.1rc1 → robotframework-7.0}/README.rst +3 -2
- {robotframework-6.1rc1 → robotframework-7.0}/setup.py +3 -6
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/__init__.py +4 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/deco.py +60 -14
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/exceptions.py +6 -6
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/interfaces.py +403 -68
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/logger.py +27 -20
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/parsing.py +4 -2
- robotframework-7.0/src/robot/api/py.typed +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/gatherfailed.py +2 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/languages.py +61 -25
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/settings.py +21 -14
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/storage.js +11 -6
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/htmlfilewriter.py +1 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/libdoc.css +10 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/libdoc.html +10 -0
- robotframework-7.0/src/robot/htmldata/rebot/common.css +362 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/doc_formatting.css +13 -7
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.css +51 -10
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.html +14 -23
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/model.js +2 -4
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/report.css +83 -19
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/report.html +22 -7
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/testdata.js +10 -3
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/view.js +84 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/template.py +3 -3
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/builder.py +0 -8
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/datatypes.py +9 -10
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/htmlutils.py +4 -7
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/jsonbuilder.py +38 -20
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/model.py +21 -28
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/robotbuilder.py +50 -31
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/standardtypes.py +9 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/xmlbuilder.py +35 -20
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/xmlwriter.py +18 -38
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/BuiltIn.py +255 -205
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Collections.py +384 -240
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/DateTime.py +73 -60
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/OperatingSystem.py +6 -5
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Process.py +26 -27
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Remote.py +40 -36
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/String.py +66 -76
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/XML.py +66 -59
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/__init__.py +2 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/dialogs_py.py +14 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/__init__.py +5 -5
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/body.py +44 -13
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/configurer.py +19 -15
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/control.py +230 -88
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/filter.py +31 -25
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/itemlist.py +9 -8
- robotframework-7.0/src/robot/model/keyword.py +77 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/message.py +19 -10
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/modelobject.py +27 -15
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/modifier.py +1 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/namepatterns.py +3 -25
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/stats.py +9 -15
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tags.py +1 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/testcase.py +15 -27
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/testsuite.py +44 -28
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/visitor.py +35 -8
- robotframework-7.0/src/robot/output/console/dotted.py +90 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/quiet.py +3 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/verbose.py +61 -61
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/debugfile.py +39 -24
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/filelogger.py +18 -15
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/librarylogger.py +3 -2
- robotframework-7.0/src/robot/output/listeners.py +753 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/logger.py +216 -80
- robotframework-7.0/src/robot/output/loggerapi.py +215 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/loggerhelper.py +23 -56
- robotframework-7.0/src/robot/output/output.py +185 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/stdoutlogsplitter.py +8 -5
- robotframework-7.0/src/robot/output/xmllogger.py +459 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/blocklexers.py +17 -13
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/context.py +12 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/lexer.py +1 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/settings.py +6 -3
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/statementlexers.py +39 -10
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/tokens.py +27 -29
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/blocks.py +19 -6
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/statements.py +193 -94
- robotframework-7.0/src/robot/parsing/model/visitor.py +100 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/rebot.py +2 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/expandkeywordmatcher.py +1 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsbuildingcontext.py +8 -6
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsmodelbuilders.py +88 -61
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/logreportwriters.py +16 -10
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/outputwriter.py +18 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/resultwriter.py +4 -4
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/stringcache.py +3 -3
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/xunitwriter.py +15 -21
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/__init__.py +3 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/configurer.py +12 -9
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/executionresult.py +56 -8
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/flattenkeywordmatcher.py +48 -9
- robotframework-7.0/src/robot/result/keywordremover.py +207 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/merger.py +1 -1
- robotframework-7.0/src/robot/result/model.py +1185 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/modeldeprecation.py +9 -3
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/resultbuilder.py +46 -36
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/xmlelementhandlers.py +83 -43
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/run.py +3 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/__init__.py +14 -4
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/__init__.py +2 -1
- robotframework-7.0/src/robot/running/arguments/argumentconverter.py +100 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentmapper.py +26 -24
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentparser.py +85 -61
- robotframework-7.0/src/robot/running/arguments/argumentresolver.py +158 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentspec.py +83 -116
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentvalidator.py +33 -27
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/customconverters.py +15 -12
- robotframework-7.0/src/robot/running/arguments/embedded.py +145 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/typeconverters.py +268 -220
- robotframework-7.0/src/robot/running/arguments/typeinfo.py +317 -0
- robotframework-7.0/src/robot/running/arguments/typeinfoparser.py +219 -0
- robotframework-7.0/src/robot/running/arguments/typevalidator.py +60 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/bodyrunner.py +147 -129
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/builders.py +17 -26
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/parsers.py +17 -11
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/settings.py +9 -17
- robotframework-7.0/src/robot/running/builder/transformers.py +535 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/context.py +113 -31
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/dynamicmethods.py +62 -34
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/importer.py +27 -49
- robotframework-7.0/src/robot/running/invalidkeyword.py +67 -0
- robotframework-7.0/src/robot/running/keywordfinder.py +91 -0
- robotframework-7.0/src/robot/running/keywordimplementation.py +164 -0
- robotframework-7.0/src/robot/running/librarykeyword.py +392 -0
- robotframework-7.0/src/robot/running/librarykeywordrunner.py +250 -0
- robotframework-7.0/src/robot/running/libraryscopes.py +115 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/model.py +198 -337
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/namespace.py +124 -137
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/outputcapture.py +20 -12
- robotframework-7.0/src/robot/running/resourcemodel.py +448 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/statusreporter.py +16 -13
- robotframework-7.0/src/robot/running/suiterunner.py +265 -0
- robotframework-7.0/src/robot/running/testlibraries.py +500 -0
- robotframework-7.0/src/robot/running/userkeywordrunner.py +260 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/testdoc.py +18 -13
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/__init__.py +53 -35
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/connectioncache.py +64 -59
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/dotdict.py +3 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/encodingsniffer.py +9 -4
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/escaping.py +19 -19
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/importer.py +2 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/markupwriters.py +23 -15
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/misc.py +1 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/normalizing.py +9 -24
- robotframework-7.0/src/robot/utils/notset.py +33 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/platform.py +15 -5
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotio.py +9 -9
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotpath.py +1 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robottime.py +122 -90
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robottypes.py +21 -31
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/setter.py +0 -5
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/text.py +7 -4
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/unic.py +2 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/__init__.py +2 -2
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/assigner.py +17 -19
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/evaluation.py +20 -17
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/filesetter.py +80 -80
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/replacer.py +33 -36
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/scopes.py +17 -12
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/search.py +66 -41
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/store.py +14 -16
- robotframework-7.0/src/robot/variables/tablesetter.py +164 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/variables.py +1 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/version.py +1 -1
- {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/PKG-INFO +6 -8
- {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/SOURCES.txt +10 -8
- {robotframework-6.1rc1 → robotframework-7.0}/tasks.py +6 -6
- robotframework-6.1rc1/src/robot/htmldata/rebot/common.css +0 -239
- robotframework-6.1rc1/src/robot/libraries/Reserved.py +0 -48
- robotframework-6.1rc1/src/robot/model/keyword.py +0 -173
- robotframework-6.1rc1/src/robot/output/console/dotted.py +0 -90
- robotframework-6.1rc1/src/robot/output/listenerarguments.py +0 -165
- robotframework-6.1rc1/src/robot/output/listenermethods.py +0 -113
- robotframework-6.1rc1/src/robot/output/listeners.py +0 -174
- robotframework-6.1rc1/src/robot/output/output.py +0 -95
- robotframework-6.1rc1/src/robot/output/xmllogger.py +0 -354
- robotframework-6.1rc1/src/robot/parsing/model/visitor.py +0 -67
- robotframework-6.1rc1/src/robot/result/keywordremover.py +0 -183
- robotframework-6.1rc1/src/robot/result/model.py +0 -957
- robotframework-6.1rc1/src/robot/running/arguments/argumentconverter.py +0 -79
- robotframework-6.1rc1/src/robot/running/arguments/argumentresolver.py +0 -131
- robotframework-6.1rc1/src/robot/running/arguments/embedded.py +0 -146
- robotframework-6.1rc1/src/robot/running/arguments/typevalidator.py +0 -56
- robotframework-6.1rc1/src/robot/running/builder/transformers.py +0 -642
- robotframework-6.1rc1/src/robot/running/handlers.py +0 -321
- robotframework-6.1rc1/src/robot/running/handlerstore.py +0 -66
- robotframework-6.1rc1/src/robot/running/librarykeywordrunner.py +0 -238
- robotframework-6.1rc1/src/robot/running/libraryscopes.py +0 -97
- robotframework-6.1rc1/src/robot/running/modelcombiner.py +0 -32
- robotframework-6.1rc1/src/robot/running/suiterunner.py +0 -249
- robotframework-6.1rc1/src/robot/running/testlibraries.py +0 -420
- robotframework-6.1rc1/src/robot/running/usererrorhandler.py +0 -75
- robotframework-6.1rc1/src/robot/running/userkeyword.py +0 -111
- robotframework-6.1rc1/src/robot/running/userkeywordrunner.py +0 -274
- robotframework-6.1rc1/src/robot/variables/tablesetter.py +0 -156
- {robotframework-6.1rc1 → robotframework-7.0}/AUTHORS.rst +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/BUILD.rst +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/CONTRIBUTING.rst +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/COPYRIGHT.txt +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/LICENSE.txt +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/MANIFEST.in +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/setup.cfg +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/__main__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/errors.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/js_disabled.css +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/jsonwriter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.min.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/print.css +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/pygments.css +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/fileloading.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/print.css +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/util.js +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.css +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.html +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdoc.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/consoleviewer.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/htmlwriter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/jsonwriter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/output.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/writer.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Dialogs.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Easter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Screenshot.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Telnet.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/fixture.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/metadata.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/statistics.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/suitestatistics.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tagsetter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tagstatistics.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/totalstatistics.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/highlighting.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/pyloggingconf.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/tokenizer.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/blockparsers.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/fileparser.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/parser.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/suitestructure.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/pythonpathsetter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsexecutionresult.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jswriter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/executionerrors.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/messagefilter.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/suiteteardownfailed.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/visitor.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/randomizer.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/runkwregister.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/signalhandler.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/status.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/__init__.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/posix.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/windows.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/application.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/argumentparser.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/asserts.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/charwidth.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/compress.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/encoding.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/error.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/etreewrapper.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/filereader.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/frange.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/htmlformatters.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/markuputils.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/match.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/recommendations.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/restreader.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotenv.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotinspect.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/sortable.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/typehints.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/finders.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/notfound.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/resolvable.py +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/dependency_links.txt +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/entry_points.txt +0 -0
- {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,250 @@
|
|
|
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 contextlib import contextmanager
|
|
17
|
+
from typing import TYPE_CHECKING
|
|
18
|
+
|
|
19
|
+
from robot.errors import DataError
|
|
20
|
+
from robot.output import LOGGER
|
|
21
|
+
from robot.result import Keyword as KeywordResult
|
|
22
|
+
from robot.utils import prepr, safe_str
|
|
23
|
+
from robot.variables import contains_variable, is_list_variable, VariableAssignment
|
|
24
|
+
|
|
25
|
+
from .bodyrunner import BodyRunner
|
|
26
|
+
from .model import Keyword as KeywordData
|
|
27
|
+
from .resourcemodel import UserKeyword
|
|
28
|
+
from .outputcapture import OutputCapturer
|
|
29
|
+
from .signalhandler import STOP_SIGNAL_MONITOR
|
|
30
|
+
from .statusreporter import StatusReporter
|
|
31
|
+
|
|
32
|
+
if TYPE_CHECKING:
|
|
33
|
+
from .librarykeyword import LibraryKeyword
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class LibraryKeywordRunner:
|
|
37
|
+
|
|
38
|
+
def __init__(self, keyword: 'LibraryKeyword', name: 'str|None' = None,
|
|
39
|
+
languages=None):
|
|
40
|
+
self.keyword = keyword
|
|
41
|
+
self.name = name or keyword.name
|
|
42
|
+
self.pre_run_messages = ()
|
|
43
|
+
self.languages = languages
|
|
44
|
+
|
|
45
|
+
def run(self, data: KeywordData, result: KeywordResult, context, run=True):
|
|
46
|
+
kw = self.keyword.bind(data)
|
|
47
|
+
assignment = VariableAssignment(data.assign)
|
|
48
|
+
self._config_result(result, data, kw, assignment)
|
|
49
|
+
with StatusReporter(data, result, context, run, implementation=kw):
|
|
50
|
+
if run:
|
|
51
|
+
with assignment.assigner(context) as assigner:
|
|
52
|
+
return_value = self._run(kw, data.args, result, context)
|
|
53
|
+
assigner.assign(return_value)
|
|
54
|
+
return return_value
|
|
55
|
+
|
|
56
|
+
def _config_result(self, result: KeywordResult, data: KeywordData,
|
|
57
|
+
kw: 'LibraryKeyword', assignment):
|
|
58
|
+
result.config(name=self.name,
|
|
59
|
+
owner=kw.owner.name,
|
|
60
|
+
doc=kw.short_doc,
|
|
61
|
+
args=data.args,
|
|
62
|
+
assign=tuple(assignment),
|
|
63
|
+
tags=kw.tags,
|
|
64
|
+
type=data.type)
|
|
65
|
+
|
|
66
|
+
def _run(self, kw: 'LibraryKeyword', args, result: KeywordResult, context):
|
|
67
|
+
if self.pre_run_messages:
|
|
68
|
+
for message in self.pre_run_messages:
|
|
69
|
+
context.output.message(message)
|
|
70
|
+
variables = context.variables if not context.dry_run else None
|
|
71
|
+
positional, named = kw.resolve_arguments(args, variables, self.languages)
|
|
72
|
+
context.output.trace(lambda: self._trace_log_args(positional, named),
|
|
73
|
+
write_if_flat=False)
|
|
74
|
+
if kw.error:
|
|
75
|
+
raise DataError(kw.error)
|
|
76
|
+
return self._execute(kw.method, positional, named, context)
|
|
77
|
+
|
|
78
|
+
def _trace_log_args(self, positional, named):
|
|
79
|
+
args = [prepr(arg) for arg in positional]
|
|
80
|
+
args += ['%s=%s' % (safe_str(n), prepr(v)) for n, v in named]
|
|
81
|
+
return 'Arguments: [ %s ]' % ' | '.join(args)
|
|
82
|
+
|
|
83
|
+
def _runner_for(self, method, positional, named, context):
|
|
84
|
+
timeout = self._get_timeout(context)
|
|
85
|
+
if timeout and timeout.active:
|
|
86
|
+
def runner():
|
|
87
|
+
with LOGGER.delayed_logging:
|
|
88
|
+
context.output.debug(timeout.get_message)
|
|
89
|
+
return timeout.run(method, args=positional, kwargs=named)
|
|
90
|
+
return runner
|
|
91
|
+
return lambda: method(*positional, **named)
|
|
92
|
+
|
|
93
|
+
def _get_timeout(self, context):
|
|
94
|
+
return min(context.timeouts) if context.timeouts else None
|
|
95
|
+
|
|
96
|
+
def _execute(self, method, positional, named, context):
|
|
97
|
+
timeout = self._get_timeout(context)
|
|
98
|
+
if timeout and timeout.active:
|
|
99
|
+
method = self._wrap_with_timeout(method, timeout, context.output)
|
|
100
|
+
with self._monitor(context):
|
|
101
|
+
result = method(*positional, **dict(named))
|
|
102
|
+
if context.asynchronous.is_loop_required(result):
|
|
103
|
+
return context.asynchronous.run_until_complete(result)
|
|
104
|
+
return result
|
|
105
|
+
|
|
106
|
+
def _wrap_with_timeout(self, method, timeout, output):
|
|
107
|
+
def wrapper(*args, **kwargs):
|
|
108
|
+
with output.delayed_logging:
|
|
109
|
+
output.debug(timeout.get_message)
|
|
110
|
+
return timeout.run(method, args=args, kwargs=kwargs)
|
|
111
|
+
return wrapper
|
|
112
|
+
|
|
113
|
+
@contextmanager
|
|
114
|
+
def _monitor(self, context):
|
|
115
|
+
STOP_SIGNAL_MONITOR.start_running_keyword(context.in_teardown)
|
|
116
|
+
capturer = OutputCapturer()
|
|
117
|
+
capturer.start()
|
|
118
|
+
try:
|
|
119
|
+
yield
|
|
120
|
+
finally:
|
|
121
|
+
capturer.stop()
|
|
122
|
+
STOP_SIGNAL_MONITOR.stop_running_keyword()
|
|
123
|
+
|
|
124
|
+
def dry_run(self, data: KeywordData, result: KeywordResult, context):
|
|
125
|
+
kw = self.keyword.bind(data)
|
|
126
|
+
assignment = VariableAssignment(data.assign)
|
|
127
|
+
self._config_result(result, data, kw, assignment)
|
|
128
|
+
with StatusReporter(data, result, context, run=False, implementation=kw):
|
|
129
|
+
assignment.validate_assignment()
|
|
130
|
+
self._dry_run(kw, data.args, result, context)
|
|
131
|
+
|
|
132
|
+
def _dry_run(self, kw: 'LibraryKeyword', args, result: KeywordResult, context):
|
|
133
|
+
if self._executed_in_dry_run(kw):
|
|
134
|
+
self._run(kw, args, result, context)
|
|
135
|
+
else:
|
|
136
|
+
kw.resolve_arguments(args, languages=self.languages)
|
|
137
|
+
|
|
138
|
+
def _executed_in_dry_run(self, kw: 'LibraryKeyword'):
|
|
139
|
+
return (kw.owner.name == 'BuiltIn'
|
|
140
|
+
and kw.name in ('Import Library', 'Set Library Search Order',
|
|
141
|
+
'Set Tags', 'Remove Tags'))
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class EmbeddedArgumentsRunner(LibraryKeywordRunner):
|
|
145
|
+
|
|
146
|
+
def __init__(self, keyword: 'LibraryKeyword', name: 'str'):
|
|
147
|
+
super().__init__(keyword, name)
|
|
148
|
+
self.embedded_args = keyword.embedded.match(name).groups()
|
|
149
|
+
|
|
150
|
+
def _run(self, kw: 'LibraryKeyword', args, result: KeywordResult, context):
|
|
151
|
+
return super()._run(kw, self.embedded_args + args, result, context)
|
|
152
|
+
|
|
153
|
+
def _dry_run(self, kw: 'LibraryKeyword', args, result: KeywordResult, context):
|
|
154
|
+
return super()._dry_run(kw, self.embedded_args + args, result, context)
|
|
155
|
+
|
|
156
|
+
def _config_result(self, result: KeywordResult, data: KeywordData,
|
|
157
|
+
kw: 'LibraryKeyword', assignment):
|
|
158
|
+
super()._config_result(result, data, kw, assignment)
|
|
159
|
+
result.source_name = kw.name
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class RunKeywordRunner(LibraryKeywordRunner):
|
|
163
|
+
|
|
164
|
+
def __init__(self, keyword: 'LibraryKeyword', execute_in_dry_run=False):
|
|
165
|
+
super().__init__(keyword)
|
|
166
|
+
self.execute_in_dry_run = execute_in_dry_run
|
|
167
|
+
|
|
168
|
+
def _get_timeout(self, context):
|
|
169
|
+
# These keywords are not affected by timeouts. Keywords they execute are.
|
|
170
|
+
return None
|
|
171
|
+
|
|
172
|
+
@contextmanager
|
|
173
|
+
def _monitor(self, context):
|
|
174
|
+
STOP_SIGNAL_MONITOR.start_running_keyword(context.in_teardown)
|
|
175
|
+
try:
|
|
176
|
+
yield
|
|
177
|
+
finally:
|
|
178
|
+
STOP_SIGNAL_MONITOR.stop_running_keyword()
|
|
179
|
+
|
|
180
|
+
def _dry_run(self, kw: 'LibraryKeyword', args, result: KeywordResult, context):
|
|
181
|
+
super()._dry_run(kw, args, result, context)
|
|
182
|
+
wrapper = UserKeyword(name=kw.name,
|
|
183
|
+
doc="Wraps keywords executed by '{kw.name}' in dry-run.",
|
|
184
|
+
parent=kw.parent)
|
|
185
|
+
wrapper.body = [k for k in self._get_dry_run_keywords(kw, args)
|
|
186
|
+
if not contains_variable(k.name)]
|
|
187
|
+
BodyRunner(context).run(wrapper, result)
|
|
188
|
+
|
|
189
|
+
def _get_dry_run_keywords(self, kw: 'LibraryKeyword', args):
|
|
190
|
+
if not self.execute_in_dry_run:
|
|
191
|
+
return []
|
|
192
|
+
if kw.name == 'Run Keyword If':
|
|
193
|
+
return self._get_dry_run_keywords_for_run_keyword_if(args)
|
|
194
|
+
if kw.name == 'Run Keywords':
|
|
195
|
+
return self._get_dry_run_keywords_for_run_keyword(args)
|
|
196
|
+
return self._get_dry_run_keywords_based_on_name(kw, args)
|
|
197
|
+
|
|
198
|
+
def _get_dry_run_keywords_for_run_keyword_if(self, given_args):
|
|
199
|
+
for kw_call in self._get_run_kw_if_calls(given_args):
|
|
200
|
+
if kw_call:
|
|
201
|
+
yield KeywordData(name=kw_call[0], args=kw_call[1:])
|
|
202
|
+
|
|
203
|
+
def _get_run_kw_if_calls(self, given_args):
|
|
204
|
+
while 'ELSE IF' in given_args:
|
|
205
|
+
kw_call, given_args = self._split_run_kw_if_args(given_args, 'ELSE IF', 2)
|
|
206
|
+
yield kw_call
|
|
207
|
+
if 'ELSE' in given_args:
|
|
208
|
+
kw_call, else_call = self._split_run_kw_if_args(given_args, 'ELSE', 1)
|
|
209
|
+
yield kw_call
|
|
210
|
+
yield else_call
|
|
211
|
+
elif self._validate_kw_call(given_args):
|
|
212
|
+
expr, kw_call = given_args[0], given_args[1:]
|
|
213
|
+
if not is_list_variable(expr):
|
|
214
|
+
yield kw_call
|
|
215
|
+
|
|
216
|
+
def _split_run_kw_if_args(self, given_args, control_word, required_after):
|
|
217
|
+
index = list(given_args).index(control_word)
|
|
218
|
+
expr_and_call = given_args[:index]
|
|
219
|
+
remaining = given_args[index+1:]
|
|
220
|
+
if not (self._validate_kw_call(expr_and_call) and
|
|
221
|
+
self._validate_kw_call(remaining, required_after)):
|
|
222
|
+
raise DataError("Invalid 'Run Keyword If' usage.")
|
|
223
|
+
if is_list_variable(expr_and_call[0]):
|
|
224
|
+
return (), remaining
|
|
225
|
+
return expr_and_call[1:], remaining
|
|
226
|
+
|
|
227
|
+
def _validate_kw_call(self, kw_call, min_length=2):
|
|
228
|
+
if len(kw_call) >= min_length:
|
|
229
|
+
return True
|
|
230
|
+
return any(is_list_variable(item) for item in kw_call)
|
|
231
|
+
|
|
232
|
+
def _get_dry_run_keywords_for_run_keyword(self, given_args):
|
|
233
|
+
for kw_call in self._get_run_kws_calls(given_args):
|
|
234
|
+
yield KeywordData(name=kw_call[0], args=kw_call[1:])
|
|
235
|
+
|
|
236
|
+
def _get_run_kws_calls(self, given_args):
|
|
237
|
+
if 'AND' not in given_args:
|
|
238
|
+
for kw_call in given_args:
|
|
239
|
+
yield [kw_call,]
|
|
240
|
+
else:
|
|
241
|
+
while 'AND' in given_args:
|
|
242
|
+
index = list(given_args).index('AND')
|
|
243
|
+
kw_call, given_args = given_args[:index], given_args[index + 1:]
|
|
244
|
+
yield kw_call
|
|
245
|
+
if given_args:
|
|
246
|
+
yield given_args
|
|
247
|
+
|
|
248
|
+
def _get_dry_run_keywords_based_on_name(self, kw: 'LibraryKeyword', given_args):
|
|
249
|
+
index = kw.args.positional.index('name')
|
|
250
|
+
return [KeywordData(name=given_args[index], args=given_args[index+1:])]
|
|
@@ -0,0 +1,115 @@
|
|
|
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 enum import auto, Enum
|
|
17
|
+
from typing import TYPE_CHECKING
|
|
18
|
+
|
|
19
|
+
from robot.errors import DataError
|
|
20
|
+
|
|
21
|
+
from .context import EXECUTION_CONTEXTS
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from .testlibraries import TestLibrary
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Scope(Enum):
|
|
28
|
+
GLOBAL = auto()
|
|
29
|
+
SUITE = auto()
|
|
30
|
+
TEST = auto()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ScopeManager:
|
|
34
|
+
|
|
35
|
+
def __init__(self, library: 'TestLibrary'):
|
|
36
|
+
self.library = library
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def for_library(cls, library):
|
|
40
|
+
manager = {Scope.GLOBAL: GlobalScopeManager,
|
|
41
|
+
Scope.SUITE: SuiteScopeManager,
|
|
42
|
+
Scope.TEST: TestScopeManager}[library.scope]
|
|
43
|
+
return manager(library)
|
|
44
|
+
|
|
45
|
+
def start_suite(self):
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
def end_suite(self):
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
def start_test(self):
|
|
52
|
+
pass
|
|
53
|
+
|
|
54
|
+
def end_test(self):
|
|
55
|
+
pass
|
|
56
|
+
|
|
57
|
+
def close_global_listeners(self):
|
|
58
|
+
pass
|
|
59
|
+
|
|
60
|
+
def register_listeners(self):
|
|
61
|
+
if self.library.listeners:
|
|
62
|
+
try:
|
|
63
|
+
listeners = EXECUTION_CONTEXTS.current.output.library_listeners
|
|
64
|
+
listeners.register(self.library)
|
|
65
|
+
except DataError as err:
|
|
66
|
+
self.library._has_listeners = False
|
|
67
|
+
self.library.report_error(f"Registering listeners failed: {err}")
|
|
68
|
+
|
|
69
|
+
def unregister_listeners(self, close=False):
|
|
70
|
+
if self.library.listeners:
|
|
71
|
+
listeners = EXECUTION_CONTEXTS.current.output.library_listeners
|
|
72
|
+
listeners.unregister(self.library, close)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class GlobalScopeManager(ScopeManager):
|
|
76
|
+
|
|
77
|
+
def start_suite(self):
|
|
78
|
+
self.register_listeners()
|
|
79
|
+
|
|
80
|
+
def end_suite(self):
|
|
81
|
+
self.unregister_listeners()
|
|
82
|
+
|
|
83
|
+
def close_global_listeners(self):
|
|
84
|
+
self.register_listeners()
|
|
85
|
+
self.unregister_listeners(close=True)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class SuiteScopeManager(ScopeManager):
|
|
89
|
+
|
|
90
|
+
def __init__(self, library):
|
|
91
|
+
super().__init__(library)
|
|
92
|
+
self.instance_cache = []
|
|
93
|
+
|
|
94
|
+
def start_suite(self):
|
|
95
|
+
self.instance_cache.append(self.library._instance)
|
|
96
|
+
self.library.instance = None
|
|
97
|
+
self.register_listeners()
|
|
98
|
+
|
|
99
|
+
def end_suite(self):
|
|
100
|
+
self.unregister_listeners(close=True)
|
|
101
|
+
self.library.instance = self.instance_cache.pop()
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class TestScopeManager(SuiteScopeManager):
|
|
105
|
+
|
|
106
|
+
def start_test(self):
|
|
107
|
+
self.unregister_listeners()
|
|
108
|
+
self.instance_cache.append(self.library._instance)
|
|
109
|
+
self.library.instance = None
|
|
110
|
+
self.register_listeners()
|
|
111
|
+
|
|
112
|
+
def end_test(self):
|
|
113
|
+
self.unregister_listeners(close=True)
|
|
114
|
+
self.library.instance = self.instance_cache.pop()
|
|
115
|
+
self.register_listeners()
|