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