robotframework 7.0.1rc2__zip → 7.1rc1__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.0.1rc2/src/robotframework.egg-info → robotframework-7.1rc1}/PKG-INFO +3 -2
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/setup.py +2 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/api/interfaces.py +32 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/conf/languages.py +73 -18
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/conf/settings.py +1 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/model.js +22 -33
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/jsonbuilder.py +1 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/BuiltIn.py +16 -3
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/DateTime.py +3 -2
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/Dialogs.py +12 -4
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/OperatingSystem.py +4 -4
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/Process.py +7 -3
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/String.py +4 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/dialogs_py.py +17 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/modelobject.py +1 -6
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/console/dotted.py +1 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/console/highlighting.py +69 -56
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/console/verbose.py +3 -3
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/listeners.py +61 -217
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/logger.py +30 -14
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/loggerapi.py +11 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/loggerhelper.py +6 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/output.py +2 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/model/statements.py +1 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/executionresult.py +1 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/model.py +1 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/resultbuilder.py +12 -11
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/xmlelementhandlers.py +12 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/__init__.py +1 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/argumentresolver.py +15 -11
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/argumentspec.py +2 -2
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/argumentvalidator.py +0 -8
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/embedded.py +2 -2
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/invalidkeyword.py +4 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/keywordimplementation.py +9 -5
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/librarykeyword.py +19 -9
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/librarykeywordrunner.py +25 -19
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/model.py +45 -26
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/namespace.py +20 -26
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/resourcemodel.py +9 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/statusreporter.py +9 -4
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/testlibraries.py +2 -2
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/userkeywordrunner.py +10 -7
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/encodingsniffer.py +3 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/robottime.py +5 -3
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/evaluation.py +1 -4
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/tablesetter.py +17 -20
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/version.py +1 -1
- {robotframework-7.0.1rc2 → robotframework-7.1rc1/src/robotframework.egg-info}/PKG-INFO +3 -2
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/AUTHORS.rst +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/BUILD.rst +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/CONTRIBUTING.rst +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/COPYRIGHT.txt +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/INSTALL.rst +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/LICENSE.txt +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/MANIFEST.in +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/README.rst +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/setup.cfg +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/__main__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/api/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/api/deco.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/api/exceptions.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/api/logger.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/api/parsing.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/api/py.typed +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/conf/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/conf/gatherfailed.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/errors.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/common/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/common/js_disabled.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/common/storage.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/htmlfilewriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/jsonwriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/lib/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/lib/jquery.min.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/libdoc/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/libdoc/libdoc.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/libdoc/libdoc.html +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/libdoc/print.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/libdoc/pygments.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/common.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/fileloading.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/log.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/log.html +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/log.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/print.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/report.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/report.html +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/testdata.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/util.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/rebot/view.js +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/template.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/testdoc/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/testdoc/testdoc.css +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/htmldata/testdoc/testdoc.html +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdoc.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/builder.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/consoleviewer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/datatypes.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/htmlutils.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/htmlwriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/jsonwriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/model.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/output.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/robotbuilder.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/standardtypes.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/writer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/xmlbuilder.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libdocpkg/xmlwriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/Collections.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/Easter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/Remote.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/Screenshot.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/Telnet.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/XML.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/libraries/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/body.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/configurer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/control.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/filter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/fixture.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/itemlist.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/keyword.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/message.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/metadata.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/modifier.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/namepatterns.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/statistics.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/stats.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/suitestatistics.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/tags.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/tagsetter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/tagstatistics.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/testcase.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/testsuite.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/totalstatistics.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/model/visitor.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/console/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/console/quiet.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/debugfile.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/filelogger.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/librarylogger.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/pyloggingconf.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/stdoutlogsplitter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/output/xmllogger.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/blocklexers.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/context.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/lexer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/settings.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/statementlexers.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/tokenizer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/lexer/tokens.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/model/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/model/blocks.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/model/visitor.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/parser/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/parser/blockparsers.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/parser/fileparser.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/parser/parser.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/parsing/suitestructure.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/pythonpathsetter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/rebot.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/expandkeywordmatcher.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/jsbuildingcontext.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/jsexecutionresult.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/jsmodelbuilders.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/jswriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/logreportwriters.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/outputwriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/resultwriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/stringcache.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/reporting/xunitwriter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/configurer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/executionerrors.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/flattenkeywordmatcher.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/keywordremover.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/merger.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/messagefilter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/modeldeprecation.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/suiteteardownfailed.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/result/visitor.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/run.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/argumentconverter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/argumentmapper.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/argumentparser.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/customconverters.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/typeconverters.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/typeinfo.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/typeinfoparser.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/arguments/typevalidator.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/bodyrunner.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/builder/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/builder/builders.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/builder/parsers.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/builder/settings.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/builder/transformers.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/context.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/dynamicmethods.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/importer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/keywordfinder.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/libraryscopes.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/outputcapture.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/randomizer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/runkwregister.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/signalhandler.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/status.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/suiterunner.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/timeouts/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/timeouts/nosupport.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/timeouts/posix.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/running/timeouts/windows.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/testdoc.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/application.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/argumentparser.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/asserts.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/charwidth.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/compress.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/connectioncache.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/dotdict.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/encoding.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/error.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/escaping.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/etreewrapper.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/filereader.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/frange.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/htmlformatters.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/importer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/markuputils.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/markupwriters.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/match.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/misc.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/normalizing.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/notset.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/platform.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/recommendations.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/restreader.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/robotenv.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/robotinspect.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/robotio.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/robotpath.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/robottypes.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/setter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/sortable.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/text.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/typehints.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/utils/unic.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/__init__.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/assigner.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/filesetter.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/finders.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/notfound.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/replacer.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/resolvable.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/scopes.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/search.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/store.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robot/variables/variables.py +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robotframework.egg-info/SOURCES.txt +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robotframework.egg-info/dependency_links.txt +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robotframework.egg-info/entry_points.txt +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/src/robotframework.egg-info/top_level.txt +0 -0
- {robotframework-7.0.1rc2 → robotframework-7.1rc1}/tasks.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: robotframework
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.1rc1
|
|
4
4
|
Summary: Generic automation framework for acceptance testing and robotic process automation (RPA)
|
|
5
5
|
Home-page: https://robotframework.org
|
|
6
6
|
Author: Pekka Klärck
|
|
@@ -10,7 +10,7 @@ Download-URL: https://pypi.org/project/robotframework
|
|
|
10
10
|
Project-URL: Source, https://github.com/robotframework/robotframework
|
|
11
11
|
Project-URL: Issue Tracker, https://github.com/robotframework/robotframework/issues
|
|
12
12
|
Project-URL: Documentation, https://robotframework.org/robotframework
|
|
13
|
-
Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-7.
|
|
13
|
+
Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-7.1rc1.rst
|
|
14
14
|
Project-URL: Slack, http://slack.robotframework.org
|
|
15
15
|
Description: Robot Framework
|
|
16
16
|
===============
|
|
@@ -176,6 +176,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
176
176
|
Classifier: Programming Language :: Python :: 3.10
|
|
177
177
|
Classifier: Programming Language :: Python :: 3.11
|
|
178
178
|
Classifier: Programming Language :: Python :: 3.12
|
|
179
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
179
180
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
180
181
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
181
182
|
Classifier: Topic :: Software Development :: Testing
|
|
@@ -6,7 +6,7 @@ from setuptools import find_packages, setup
|
|
|
6
6
|
|
|
7
7
|
# Version number typically updated by running `invoke set-version <version>`.
|
|
8
8
|
# Run `invoke --help set-version` or see tasks.py for details.
|
|
9
|
-
VERSION = '7.
|
|
9
|
+
VERSION = '7.1rc1'
|
|
10
10
|
with open(join(dirname(abspath(__file__)), 'README.rst')) as f:
|
|
11
11
|
LONG_DESCRIPTION = f.read()
|
|
12
12
|
base_url = 'https://github.com/robotframework/robotframework/blob/master'
|
|
@@ -27,6 +27,7 @@ Programming Language :: Python :: 3.9
|
|
|
27
27
|
Programming Language :: Python :: 3.10
|
|
28
28
|
Programming Language :: Python :: 3.11
|
|
29
29
|
Programming Language :: Python :: 3.12
|
|
30
|
+
Programming Language :: Python :: 3.13
|
|
30
31
|
Programming Language :: Python :: Implementation :: CPython
|
|
31
32
|
Programming Language :: Python :: Implementation :: PyPy
|
|
32
33
|
Topic :: Software Development :: Testing
|
|
@@ -883,6 +883,38 @@ class ListenerV3:
|
|
|
883
883
|
if it is enabled.
|
|
884
884
|
"""
|
|
885
885
|
|
|
886
|
+
def library_import(self, library: running.TestLibrary, importer: running.Import):
|
|
887
|
+
"""Called after a library has been imported.
|
|
888
|
+
|
|
889
|
+
``library`` represents the imported library. It can be inspected and
|
|
890
|
+
also modified. ``importer`` contains information about the location where
|
|
891
|
+
the library was imported.
|
|
892
|
+
|
|
893
|
+
New in Robot Framework 7.1.
|
|
894
|
+
"""
|
|
895
|
+
|
|
896
|
+
def resource_import(self, resource: running.ResourceFile, importer: running.Import):
|
|
897
|
+
"""Called after a resource file has been imported.
|
|
898
|
+
|
|
899
|
+
``resource`` represents the imported resource file. It can be inspected and
|
|
900
|
+
also modified. ``importer`` contains information about the location where
|
|
901
|
+
the resource was imported.
|
|
902
|
+
|
|
903
|
+
New in Robot Framework 7.1.
|
|
904
|
+
"""
|
|
905
|
+
|
|
906
|
+
def variables_import(self, attrs: dict, importer: running.Import):
|
|
907
|
+
"""Called after a variable file has been imported.
|
|
908
|
+
|
|
909
|
+
``attrs`` contains information about the imported variable file. It can be
|
|
910
|
+
inspected, but modifications to it have no effect. `importer`` contains
|
|
911
|
+
information about the location where the variable file was imported.
|
|
912
|
+
|
|
913
|
+
New in Robot Framework 7.1. This method will be changed in the future
|
|
914
|
+
so that the ``attrs`` dictionary is replaced with an object representing
|
|
915
|
+
the imported variable file.
|
|
916
|
+
"""
|
|
917
|
+
|
|
886
918
|
def output_file(self, path: Path):
|
|
887
919
|
"""Called after the output file has been created.
|
|
888
920
|
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
16
|
import inspect
|
|
17
|
+
import re
|
|
17
18
|
from itertools import chain
|
|
18
19
|
from pathlib import Path
|
|
19
20
|
from typing import cast, Iterable, Iterator, Union
|
|
@@ -52,11 +53,19 @@ class Languages:
|
|
|
52
53
|
self.languages: 'list[Language]' = []
|
|
53
54
|
self.headers: 'dict[str, str]' = {}
|
|
54
55
|
self.settings: 'dict[str, str]' = {}
|
|
55
|
-
self.bdd_prefixes:
|
|
56
|
+
self.bdd_prefixes: 'set[str]' = set()
|
|
56
57
|
self.true_strings: 'set[str]' = {'True', '1'}
|
|
57
58
|
self.false_strings: 'set[str]' = {'False', '0', 'None', ''}
|
|
58
59
|
for lang in self._get_languages(languages, add_english):
|
|
59
60
|
self._add_language(lang)
|
|
61
|
+
self._bdd_prefix_regexp = None
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def bdd_prefix_regexp(self):
|
|
65
|
+
if not self._bdd_prefix_regexp:
|
|
66
|
+
prefixes = '|'.join(self.bdd_prefixes).replace(' ', r'\s').lower()
|
|
67
|
+
self._bdd_prefix_regexp = re.compile(rf'({prefixes})\s', re.IGNORECASE)
|
|
68
|
+
return self._bdd_prefix_regexp
|
|
60
69
|
|
|
61
70
|
def reset(self, languages: Iterable[LanguageLike] = (), add_english: bool = True):
|
|
62
71
|
"""Resets the instance to the given languages."""
|
|
@@ -87,6 +96,7 @@ class Languages:
|
|
|
87
96
|
raise DataError(f'{err1} {err2}') from None
|
|
88
97
|
for lang in languages:
|
|
89
98
|
self._add_language(lang)
|
|
99
|
+
self._bdd_prefix_regexp = None
|
|
90
100
|
|
|
91
101
|
def _exists(self, path: Path):
|
|
92
102
|
try:
|
|
@@ -395,7 +405,7 @@ class Nl(Language):
|
|
|
395
405
|
variables_header = 'Variabelen'
|
|
396
406
|
test_cases_header = 'Testgevallen'
|
|
397
407
|
tasks_header = 'Taken'
|
|
398
|
-
keywords_header = '
|
|
408
|
+
keywords_header = 'Actiewoorden'
|
|
399
409
|
comments_header = 'Opmerkingen'
|
|
400
410
|
library_setting = 'Bibliotheek'
|
|
401
411
|
resource_setting = 'Resource'
|
|
@@ -403,24 +413,24 @@ class Nl(Language):
|
|
|
403
413
|
name_setting = 'Naam'
|
|
404
414
|
documentation_setting = 'Documentatie'
|
|
405
415
|
metadata_setting = 'Metadata'
|
|
406
|
-
suite_setup_setting = '
|
|
407
|
-
suite_teardown_setting = 'Suite
|
|
408
|
-
test_setup_setting = '
|
|
409
|
-
test_teardown_setting = '
|
|
410
|
-
test_template_setting = '
|
|
411
|
-
test_timeout_setting = '
|
|
412
|
-
test_tags_setting = '
|
|
413
|
-
task_setup_setting = '
|
|
414
|
-
task_teardown_setting = '
|
|
415
|
-
task_template_setting = '
|
|
416
|
-
task_timeout_setting = '
|
|
417
|
-
task_tags_setting = '
|
|
418
|
-
keyword_tags_setting = '
|
|
416
|
+
suite_setup_setting = 'Suitevoorbereiding'
|
|
417
|
+
suite_teardown_setting = 'Suite-afronding'
|
|
418
|
+
test_setup_setting = 'Testvoorbereiding'
|
|
419
|
+
test_teardown_setting = 'Testafronding'
|
|
420
|
+
test_template_setting = 'Testsjabloon'
|
|
421
|
+
test_timeout_setting = 'Testtijdslimiet'
|
|
422
|
+
test_tags_setting = 'Testlabels'
|
|
423
|
+
task_setup_setting = 'Taakvoorbereiding'
|
|
424
|
+
task_teardown_setting = 'Taakafronding'
|
|
425
|
+
task_template_setting = 'Taaksjabloon'
|
|
426
|
+
task_timeout_setting = 'Taaktijdslimiet'
|
|
427
|
+
task_tags_setting = 'Taaklabels'
|
|
428
|
+
keyword_tags_setting = 'Actiewoordlabels'
|
|
419
429
|
tags_setting = 'Labels'
|
|
420
|
-
setup_setting = '
|
|
421
|
-
teardown_setting = '
|
|
430
|
+
setup_setting = 'Voorbereiding'
|
|
431
|
+
teardown_setting = 'Afronding'
|
|
422
432
|
template_setting = 'Sjabloon'
|
|
423
|
-
timeout_setting = '
|
|
433
|
+
timeout_setting = 'Tijdslimiet'
|
|
424
434
|
arguments_setting = 'Parameters'
|
|
425
435
|
given_prefixes = ['Stel', 'Gegeven']
|
|
426
436
|
when_prefixes = ['Als']
|
|
@@ -1300,3 +1310,48 @@ class Ja(Language):
|
|
|
1300
1310
|
but_prefixes = ['ただし', '但し']
|
|
1301
1311
|
true_strings = ['真', '有効', 'はい', 'オン']
|
|
1302
1312
|
false_strings = ['偽', '無効', 'いいえ', 'オフ']
|
|
1313
|
+
|
|
1314
|
+
|
|
1315
|
+
class Ko(Language):
|
|
1316
|
+
"""Korean
|
|
1317
|
+
|
|
1318
|
+
New in Robot Framework 7.1.
|
|
1319
|
+
"""
|
|
1320
|
+
settings_header = '설정'
|
|
1321
|
+
variables_header = '변수'
|
|
1322
|
+
test_cases_header = '테스트 사례'
|
|
1323
|
+
tasks_header = '작업'
|
|
1324
|
+
keywords_header = '키워드'
|
|
1325
|
+
comments_header = '의견'
|
|
1326
|
+
library_setting = '라이브러리'
|
|
1327
|
+
resource_setting = '자료'
|
|
1328
|
+
variables_setting = '변수'
|
|
1329
|
+
name_setting = '이름'
|
|
1330
|
+
documentation_setting = '문서'
|
|
1331
|
+
metadata_setting = '메타데이터'
|
|
1332
|
+
suite_setup_setting = '스위트 설정'
|
|
1333
|
+
suite_teardown_setting = '스위트 중단'
|
|
1334
|
+
test_setup_setting = '테스트 설정'
|
|
1335
|
+
task_setup_setting = '작업 설정'
|
|
1336
|
+
test_teardown_setting = '테스트 중단'
|
|
1337
|
+
task_teardown_setting = '작업 중단'
|
|
1338
|
+
test_template_setting = '테스트 템플릿'
|
|
1339
|
+
task_template_setting = '작업 템플릿'
|
|
1340
|
+
test_timeout_setting = '테스트 시간 초과'
|
|
1341
|
+
task_timeout_setting = '작업 시간 초과'
|
|
1342
|
+
test_tags_setting = '테스트 태그'
|
|
1343
|
+
task_tags_setting = '작업 태그'
|
|
1344
|
+
keyword_tags_setting = '키워드 태그'
|
|
1345
|
+
setup_setting = '설정'
|
|
1346
|
+
teardown_setting = '중단'
|
|
1347
|
+
template_setting = '템플릿'
|
|
1348
|
+
tags_setting = '태그'
|
|
1349
|
+
timeout_setting = '시간 초과'
|
|
1350
|
+
arguments_setting = '주장'
|
|
1351
|
+
given_prefixes = ['주어진']
|
|
1352
|
+
when_prefixes = ['때']
|
|
1353
|
+
then_prefixes = ['보다']
|
|
1354
|
+
and_prefixes = ['그리고']
|
|
1355
|
+
but_prefixes = ['하지만']
|
|
1356
|
+
true_strings = ['참', '네', '켜기']
|
|
1357
|
+
false_strings = ['거짓', '아니오', '끄기']
|
|
@@ -145,7 +145,7 @@ class _BaseSettings:
|
|
|
145
145
|
def _process_doc(self, value):
|
|
146
146
|
if isinstance(value, Path) or (os.path.isfile(value) and value.strip() == value):
|
|
147
147
|
try:
|
|
148
|
-
with open(value) as f:
|
|
148
|
+
with open(value, encoding='UTF-8') as f:
|
|
149
149
|
value = f.read()
|
|
150
150
|
except (OSError, IOError) as err:
|
|
151
151
|
self._raise_invalid('Doc', f"Reading documentation from '{value}' "
|
|
@@ -272,26 +272,24 @@ window.stats = (function () {
|
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
function calculatePercents(total, passed, failed, skipped) {
|
|
275
|
-
if (total == 0)
|
|
275
|
+
if (total == 0)
|
|
276
276
|
return [0.0, 0.0, 0.0];
|
|
277
|
-
}
|
|
278
|
-
|
|
279
277
|
var pass = 100.0 * passed / total;
|
|
280
278
|
var skip = 100.0 * skipped / total;
|
|
281
279
|
var fail = 100.0 * failed / total;
|
|
282
280
|
if (pass > 0 && pass < 0.1)
|
|
283
|
-
pass = 0.1
|
|
281
|
+
pass = 0.1;
|
|
284
282
|
if (fail > 0 && fail < 0.1)
|
|
285
|
-
fail = 0.1
|
|
283
|
+
fail = 0.1;
|
|
286
284
|
if (skip > 0 && skip < 0.1)
|
|
287
|
-
skip = 0.1
|
|
285
|
+
skip = 0.1;
|
|
288
286
|
if (pass > 99.95 && pass < 100)
|
|
289
|
-
pass = 99.9
|
|
287
|
+
pass = 99.9;
|
|
290
288
|
if (fail > 99.95 && fail < 100)
|
|
291
|
-
fail = 99.9
|
|
289
|
+
fail = 99.9;
|
|
292
290
|
if (skip > 99.95 && skip < 100)
|
|
293
|
-
skip = 99.9
|
|
294
|
-
return [
|
|
291
|
+
skip = 99.9;
|
|
292
|
+
return [round1(pass), round1(skip), round1(fail)];
|
|
295
293
|
}
|
|
296
294
|
|
|
297
295
|
function calculateWidths(num1, num2, num3) {
|
|
@@ -299,34 +297,25 @@ window.stats = (function () {
|
|
|
299
297
|
return [0.0, 0.0, 0.0];
|
|
300
298
|
// Make small percentages better visible
|
|
301
299
|
if (num1 > 0 && num1 < 1)
|
|
302
|
-
num1 = 1
|
|
300
|
+
num1 = 1.0;
|
|
303
301
|
if (num2 > 0 && num2 < 1)
|
|
304
|
-
num2 = 1
|
|
302
|
+
num2 = 1.0;
|
|
305
303
|
if (num3 > 0 && num3 < 1)
|
|
306
|
-
num3 = 1
|
|
307
|
-
|
|
304
|
+
num3 = 1.0;
|
|
308
305
|
// Handle situation where some are rounded up
|
|
309
306
|
while (num1 + num2 + num3 > 100) {
|
|
310
|
-
if (num1
|
|
311
|
-
num1
|
|
312
|
-
else if (num2
|
|
313
|
-
num2
|
|
314
|
-
else
|
|
315
|
-
num3
|
|
316
|
-
else if (num1 > num3 && num1 == num2) {
|
|
317
|
-
num1 -= 0.1;
|
|
318
|
-
num2 -= 0.1;
|
|
319
|
-
}
|
|
320
|
-
else if (num1 > num2 && num1 == num3) {
|
|
321
|
-
num1 -= 0.1;
|
|
322
|
-
num3 -= 0.1;
|
|
323
|
-
}
|
|
324
|
-
else if (num2 > num1 && num2 == num3) {
|
|
325
|
-
num2 -= 0.1;
|
|
326
|
-
num3 -= 0.1;
|
|
327
|
-
}
|
|
307
|
+
if (num1 >= num2 && num1 >= num3)
|
|
308
|
+
num1 = round1(num1 - 0.1);
|
|
309
|
+
else if (num2 >= num1 && num2 >= num3)
|
|
310
|
+
num2 = round1(num2 - 0.1);
|
|
311
|
+
else
|
|
312
|
+
num3 = round1(num3 - 0.1);
|
|
328
313
|
}
|
|
329
|
-
return [
|
|
314
|
+
return [num1, num2, num3];
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
function round1(num) {
|
|
318
|
+
return Math.round(num*10) / 10;
|
|
330
319
|
}
|
|
331
320
|
|
|
332
321
|
return {
|
|
@@ -50,7 +50,7 @@ class JsonDocBuilder:
|
|
|
50
50
|
def _parse_spec_json(self, path):
|
|
51
51
|
if not os.path.isfile(path):
|
|
52
52
|
raise DataError(f"Spec file '{path}' does not exist.")
|
|
53
|
-
with open(path) as json_source:
|
|
53
|
+
with open(path, encoding='UTF-8') as json_source:
|
|
54
54
|
libdoc_dict = json.load(json_source)
|
|
55
55
|
return libdoc_dict
|
|
56
56
|
|
|
@@ -1042,7 +1042,7 @@ class _Verify(_BuiltInBase):
|
|
|
1042
1042
|
ignore_case=False, strip_spaces=False, collapse_spaces=False):
|
|
1043
1043
|
"""Fails if ``container`` does not contain ``item`` one or more times.
|
|
1044
1044
|
|
|
1045
|
-
Works with strings, lists, and anything that supports Python's ``in``
|
|
1045
|
+
Works with strings, lists, bytes, and anything that supports Python's ``in``
|
|
1046
1046
|
operator.
|
|
1047
1047
|
|
|
1048
1048
|
See `Should Be Equal` for an explanation on how to override the default
|
|
@@ -1063,15 +1063,28 @@ class _Verify(_BuiltInBase):
|
|
|
1063
1063
|
arguments are strings, the comparison is done with all white spaces replaced by
|
|
1064
1064
|
a single space character.
|
|
1065
1065
|
|
|
1066
|
+
If the ``container`` is bytes and the ``item`` is a string, the ``item``
|
|
1067
|
+
is automatically converted to bytes. Conversion is done using the ISO-8859-1
|
|
1068
|
+
encoding that maps each Unicode code point directly to a matching byte.
|
|
1069
|
+
|
|
1066
1070
|
Examples:
|
|
1067
1071
|
| Should Contain | ${output} | PASS |
|
|
1068
1072
|
| Should Contain | ${some list} | value | msg=Failure! | values=False |
|
|
1069
1073
|
| Should Contain | ${some list} | value | ignore_case=True |
|
|
1070
1074
|
|
|
1071
|
-
``strip_spaces`` is new in Robot Framework 4.0
|
|
1072
|
-
in Robot Framework 4.1
|
|
1075
|
+
``strip_spaces`` is new in Robot Framework 4.0, ``collapse_spaces`` is new
|
|
1076
|
+
in Robot Framework 4.1 and automatically converting ``item`` to bytes
|
|
1077
|
+
is new in Robot Framework 7.1.
|
|
1073
1078
|
"""
|
|
1074
1079
|
orig_container = container
|
|
1080
|
+
if isinstance(container, (bytes, bytearray)):
|
|
1081
|
+
if isinstance(item, str):
|
|
1082
|
+
try:
|
|
1083
|
+
item = item.encode('ISO-8859-1')
|
|
1084
|
+
except UnicodeEncodeError:
|
|
1085
|
+
raise ValueError(f'{item!r} cannot be encoded into bytes.')
|
|
1086
|
+
elif isinstance(item, int) and item not in range(256):
|
|
1087
|
+
raise ValueError(f'Byte must be in range 0-255, got {item}.')
|
|
1075
1088
|
if ignore_case and is_string(item):
|
|
1076
1089
|
item = item.casefold()
|
|
1077
1090
|
if is_string(container):
|
|
@@ -191,6 +191,7 @@ integers or floating point numbers, the whole format is case and space
|
|
|
191
191
|
insensitive, and it is possible to add a minus prefix to specify negative
|
|
192
192
|
times. The available time specifiers are:
|
|
193
193
|
|
|
194
|
+
- ``weeks``, ``week``, ``w`` (new in RF 7.1)
|
|
194
195
|
- ``days``, ``day``, ``d``
|
|
195
196
|
- ``hours``, ``hour``, ``h``
|
|
196
197
|
- ``minutes``, ``minute``, ``mins``, ``min``, ``m``
|
|
@@ -201,9 +202,9 @@ times. The available time specifiers are:
|
|
|
201
202
|
|
|
202
203
|
When returning a time string, it is possible to select between ``verbose``
|
|
203
204
|
and ``compact`` representations using ``result_format`` argument. The verbose
|
|
204
|
-
format uses long specifiers ``day``, ``hour``, ``minute``, ``second`` and
|
|
205
|
+
format uses long specifiers ``week``, ``day``, ``hour``, ``minute``, ``second`` and
|
|
205
206
|
``millisecond``, and adds ``s`` at the end when needed. The compact format uses
|
|
206
|
-
shorter specifiers ``d``, ``h``, ``min``, ``s`` and ``ms``, and even drops
|
|
207
|
+
shorter specifiers ``w``, ``d``, ``h``, ``min``, ``s`` and ``ms``, and even drops
|
|
207
208
|
the space between the number and the specifier.
|
|
208
209
|
|
|
209
210
|
Examples:
|
|
@@ -83,18 +83,26 @@ def get_value_from_user(message, default_value='', hidden=False):
|
|
|
83
83
|
is_truthy(hidden)))
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
def get_selection_from_user(message, *values):
|
|
86
|
+
def get_selection_from_user(message, *values, default=None):
|
|
87
87
|
"""Pauses execution and asks user to select a value.
|
|
88
88
|
|
|
89
89
|
The selected value is returned. Pressing ``Cancel`` fails the keyword.
|
|
90
90
|
|
|
91
|
-
``message`` is the instruction shown in the dialog
|
|
92
|
-
the options given to the user.
|
|
91
|
+
``message`` is the instruction shown in the dialog, ``values`` are
|
|
92
|
+
the options given to the user and ``default`` is the optional default value.
|
|
93
|
+
|
|
94
|
+
The default value can either be one of the specified values or the index of
|
|
95
|
+
the value starting from ``1``. For example, ``default=user1`` and ``default=1``
|
|
96
|
+
in the examples below have the exact same effect.
|
|
93
97
|
|
|
94
98
|
Example:
|
|
95
99
|
| ${user} = | Get Selection From User | Select user | user1 | user2 | admin |
|
|
100
|
+
| ${user} = | Get Selection From User | Select user | user1 | user2 | admin | default=user1 |
|
|
101
|
+
| ${user} = | Get Selection From User | Select user | user1 | user2 | admin | default=1 |
|
|
102
|
+
|
|
103
|
+
``default`` is new in Robot Framework 7.1.
|
|
96
104
|
"""
|
|
97
|
-
return _validate_user_input(SelectionDialog(message, values))
|
|
105
|
+
return _validate_user_input(SelectionDialog(message, values, default))
|
|
98
106
|
|
|
99
107
|
|
|
100
108
|
def get_selections_from_user(message, *values):
|
|
@@ -29,8 +29,8 @@ from robot.api.deco import keyword
|
|
|
29
29
|
from robot.utils import (abspath, ConnectionCache, console_decode, del_env_var,
|
|
30
30
|
get_env_var, get_env_vars, get_time, is_truthy,
|
|
31
31
|
is_string, normpath, parse_time, plural_or_not,
|
|
32
|
-
safe_str, secs_to_timestr, seq2str,
|
|
33
|
-
|
|
32
|
+
safe_str, secs_to_timestr, seq2str, set_env_var,
|
|
33
|
+
timestr_to_secs, CONSOLE_ENCODING, PY_VERSION, WINDOWS)
|
|
34
34
|
|
|
35
35
|
__version__ = get_version()
|
|
36
36
|
PROCESSES = ConnectionCache('No active processes.')
|
|
@@ -288,7 +288,7 @@ class OperatingSystem:
|
|
|
288
288
|
return f.read().replace('\r\n', '\n')
|
|
289
289
|
|
|
290
290
|
def _map_encoding(self, encoding):
|
|
291
|
-
return {'SYSTEM': None,
|
|
291
|
+
return {'SYSTEM': 'locale' if PY_VERSION > (3, 10) else None,
|
|
292
292
|
'CONSOLE': CONSOLE_ENCODING}.get(encoding.upper(), encoding)
|
|
293
293
|
|
|
294
294
|
def get_binary_file(self, path):
|
|
@@ -1420,7 +1420,7 @@ class OperatingSystem:
|
|
|
1420
1420
|
os.utime(path, (mtime, mtime))
|
|
1421
1421
|
self._link("Touched existing file '%s'.", path)
|
|
1422
1422
|
else:
|
|
1423
|
-
open(path, 'w').close()
|
|
1423
|
+
open(path, 'w', encoding='ASCII').close()
|
|
1424
1424
|
self._link("Touched new file '%s'.", path)
|
|
1425
1425
|
|
|
1426
1426
|
def _absnorm(self, path):
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import os
|
|
17
17
|
import signal as signal_module
|
|
18
18
|
import subprocess
|
|
19
|
+
import sys
|
|
19
20
|
import time
|
|
20
21
|
from tempfile import TemporaryFile
|
|
21
22
|
|
|
@@ -27,6 +28,9 @@ from robot.utils import (cmdline2list, ConnectionCache, console_decode, console_
|
|
|
27
28
|
from robot.version import get_version
|
|
28
29
|
|
|
29
30
|
|
|
31
|
+
LOCALE_ENCODING = 'locale' if sys.version_info >= (3, 10) else None
|
|
32
|
+
|
|
33
|
+
|
|
30
34
|
class Process:
|
|
31
35
|
"""Robot Framework library for running processes.
|
|
32
36
|
|
|
@@ -894,10 +898,10 @@ class ProcessConfiguration:
|
|
|
894
898
|
|
|
895
899
|
def _new_stream(self, name):
|
|
896
900
|
if name == 'DEVNULL':
|
|
897
|
-
return open(os.devnull, 'w')
|
|
901
|
+
return open(os.devnull, 'w', encoding=LOCALE_ENCODING)
|
|
898
902
|
if name:
|
|
899
903
|
path = os.path.normpath(os.path.join(self.cwd, name))
|
|
900
|
-
return open(path, 'w')
|
|
904
|
+
return open(path, 'w', encoding=LOCALE_ENCODING)
|
|
901
905
|
return subprocess.PIPE
|
|
902
906
|
|
|
903
907
|
def _get_stderr(self, stderr, stdout, stdout_stream):
|
|
@@ -918,7 +922,7 @@ class ProcessConfiguration:
|
|
|
918
922
|
return subprocess.PIPE
|
|
919
923
|
path = os.path.normpath(os.path.join(self.cwd, stdin))
|
|
920
924
|
if os.path.isfile(path):
|
|
921
|
-
return open(path)
|
|
925
|
+
return open(path, encoding=LOCALE_ENCODING)
|
|
922
926
|
stdin_file = TemporaryFile()
|
|
923
927
|
stdin_file.write(console_encode(stdin, self.output_encoding, force=True))
|
|
924
928
|
stdin_file.seek(0)
|
|
@@ -184,7 +184,7 @@ class String:
|
|
|
184
184
|
raise TypeError('Cannot decode strings.')
|
|
185
185
|
return bytes.decode(encoding, errors)
|
|
186
186
|
|
|
187
|
-
def format_string(self, template, *positional, **named):
|
|
187
|
+
def format_string(self, template, /, *positional, **named):
|
|
188
188
|
"""Formats a ``template`` using the given ``positional`` and ``named`` arguments.
|
|
189
189
|
|
|
190
190
|
The template can be either be a string or an absolute path to
|
|
@@ -205,6 +205,9 @@ class String:
|
|
|
205
205
|
| ${xx} = | Format String | {:*^30} | centered |
|
|
206
206
|
| ${yy} = | Format String | {0:{width}{base}} | ${42} | base=X | width=10 |
|
|
207
207
|
| ${zz} = | Format String | ${CURDIR}/template.txt | positional | named=value |
|
|
208
|
+
|
|
209
|
+
Prior to Robot Framework 7.1, possible equal signs in the template string must
|
|
210
|
+
be escaped with a backslash like ``x\\={}`.
|
|
208
211
|
"""
|
|
209
212
|
if os.path.isabs(template) and os.path.isfile(template):
|
|
210
213
|
template = template.replace('/', os.sep)
|
|
@@ -154,13 +154,29 @@ class InputDialog(TkDialog):
|
|
|
154
154
|
|
|
155
155
|
class SelectionDialog(TkDialog):
|
|
156
156
|
|
|
157
|
-
def
|
|
157
|
+
def __init__(self, message, values, default=None):
|
|
158
|
+
super().__init__(message, values, default=default)
|
|
159
|
+
|
|
160
|
+
def _create_widget(self, parent, values, default=None) -> Listbox:
|
|
158
161
|
widget = Listbox(parent)
|
|
159
162
|
for item in values:
|
|
160
163
|
widget.insert(END, item)
|
|
164
|
+
if default is not None:
|
|
165
|
+
widget.select_set(self._get_default_value_index(default, values))
|
|
161
166
|
widget.config(width=0)
|
|
162
167
|
return widget
|
|
163
168
|
|
|
169
|
+
def _get_default_value_index(self, default, values) -> int:
|
|
170
|
+
if default in values:
|
|
171
|
+
return values.index(default)
|
|
172
|
+
try:
|
|
173
|
+
index = int(default) - 1
|
|
174
|
+
except ValueError:
|
|
175
|
+
raise ValueError(f"Invalid default value '{default}'.")
|
|
176
|
+
if index < 0 or index >= len(values):
|
|
177
|
+
raise ValueError(f"Default value index is out of bounds.")
|
|
178
|
+
return index
|
|
179
|
+
|
|
164
180
|
def _validate_value(self) -> bool:
|
|
165
181
|
return bool(self.widget.curselection())
|
|
166
182
|
|
|
@@ -224,12 +224,7 @@ class JsonLoader:
|
|
|
224
224
|
def _is_path(self, source):
|
|
225
225
|
if isinstance(source, Path):
|
|
226
226
|
return True
|
|
227
|
-
|
|
228
|
-
return False
|
|
229
|
-
try:
|
|
230
|
-
return Path(source).is_file()
|
|
231
|
-
except OSError: # Can happen on Windows w/ Python < 3.10.
|
|
232
|
-
return False
|
|
227
|
+
return isinstance(source, str) and '{' not in source
|
|
233
228
|
|
|
234
229
|
|
|
235
230
|
class JsonDumper:
|