busser-behave 0.1.3
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.
- checksums.yaml +7 -0
- data/.cane +0 -0
- data/.gitignore +17 -0
- data/.tailor +4 -0
- data/.travis.yml +11 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +3 -0
- data/LICENSE +15 -0
- data/README.md +41 -0
- data/Rakefile +68 -0
- data/busser-behave.gemspec +30 -0
- data/features/plugin_install_command.feature +11 -0
- data/features/plugin_list_command.feature +8 -0
- data/features/support/env.rb +13 -0
- data/features/test_command.feature +31 -0
- data/lib/busser/behave/version.rb +26 -0
- data/lib/busser/runner_plugin/behave.rb +37 -0
- data/vendor/behave/CHANGES.rst +483 -0
- data/vendor/behave/LICENSE +23 -0
- data/vendor/behave/MANIFEST.in +37 -0
- data/vendor/behave/PROJECT_INFO.rst +21 -0
- data/vendor/behave/README.rst +112 -0
- data/vendor/behave/VERSION.txt +1 -0
- data/vendor/behave/behave.ini +22 -0
- data/vendor/behave/behave/__init__.py +30 -0
- data/vendor/behave/behave/__main__.py +187 -0
- data/vendor/behave/behave/_stepimport.py +185 -0
- data/vendor/behave/behave/_types.py +134 -0
- data/vendor/behave/behave/api/__init__.py +7 -0
- data/vendor/behave/behave/api/async_step.py +283 -0
- data/vendor/behave/behave/capture.py +227 -0
- data/vendor/behave/behave/compat/__init__.py +5 -0
- data/vendor/behave/behave/compat/collections.py +20 -0
- data/vendor/behave/behave/configuration.py +788 -0
- data/vendor/behave/behave/contrib/__init__.py +0 -0
- data/vendor/behave/behave/contrib/scenario_autoretry.py +73 -0
- data/vendor/behave/behave/formatter/__init__.py +12 -0
- data/vendor/behave/behave/formatter/_builtins.py +39 -0
- data/vendor/behave/behave/formatter/_registry.py +135 -0
- data/vendor/behave/behave/formatter/ansi_escapes.py +91 -0
- data/vendor/behave/behave/formatter/base.py +200 -0
- data/vendor/behave/behave/formatter/formatters.py +57 -0
- data/vendor/behave/behave/formatter/json.py +253 -0
- data/vendor/behave/behave/formatter/null.py +12 -0
- data/vendor/behave/behave/formatter/plain.py +158 -0
- data/vendor/behave/behave/formatter/pretty.py +351 -0
- data/vendor/behave/behave/formatter/progress.py +287 -0
- data/vendor/behave/behave/formatter/rerun.py +114 -0
- data/vendor/behave/behave/formatter/sphinx_steps.py +372 -0
- data/vendor/behave/behave/formatter/sphinx_util.py +118 -0
- data/vendor/behave/behave/formatter/steps.py +497 -0
- data/vendor/behave/behave/formatter/tags.py +178 -0
- data/vendor/behave/behave/i18n.py +614 -0
- data/vendor/behave/behave/importer.py +102 -0
- data/vendor/behave/behave/json_parser.py +264 -0
- data/vendor/behave/behave/log_capture.py +233 -0
- data/vendor/behave/behave/matchers.py +402 -0
- data/vendor/behave/behave/model.py +1737 -0
- data/vendor/behave/behave/model_core.py +416 -0
- data/vendor/behave/behave/model_describe.py +105 -0
- data/vendor/behave/behave/parser.py +615 -0
- data/vendor/behave/behave/reporter/__init__.py +0 -0
- data/vendor/behave/behave/reporter/base.py +45 -0
- data/vendor/behave/behave/reporter/junit.py +473 -0
- data/vendor/behave/behave/reporter/summary.py +94 -0
- data/vendor/behave/behave/runner.py +753 -0
- data/vendor/behave/behave/runner_util.py +417 -0
- data/vendor/behave/behave/step_registry.py +112 -0
- data/vendor/behave/behave/tag_expression.py +111 -0
- data/vendor/behave/behave/tag_matcher.py +465 -0
- data/vendor/behave/behave/textutil.py +137 -0
- data/vendor/behave/behave/userdata.py +130 -0
- data/vendor/behave/behave4cmd0/__all_steps__.py +12 -0
- data/vendor/behave/behave4cmd0/__init__.py +5 -0
- data/vendor/behave/behave4cmd0/__setup.py +11 -0
- data/vendor/behave/behave4cmd0/command_shell.py +216 -0
- data/vendor/behave/behave4cmd0/command_shell_proc.py +256 -0
- data/vendor/behave/behave4cmd0/command_steps.py +532 -0
- data/vendor/behave/behave4cmd0/command_util.py +147 -0
- data/vendor/behave/behave4cmd0/failing_steps.py +49 -0
- data/vendor/behave/behave4cmd0/log/__init__.py +1 -0
- data/vendor/behave/behave4cmd0/log/steps.py +395 -0
- data/vendor/behave/behave4cmd0/note_steps.py +29 -0
- data/vendor/behave/behave4cmd0/passing_steps.py +36 -0
- data/vendor/behave/behave4cmd0/pathutil.py +146 -0
- data/vendor/behave/behave4cmd0/setup_command_shell.py +24 -0
- data/vendor/behave/behave4cmd0/textutil.py +304 -0
- data/vendor/behave/bin/behave +44 -0
- data/vendor/behave/bin/behave.cmd +10 -0
- data/vendor/behave/bin/behave.junit_filter.py +85 -0
- data/vendor/behave/bin/behave.step_durations.py +163 -0
- data/vendor/behave/bin/behave2cucumber_json.py +63 -0
- data/vendor/behave/bin/behave_cmd.py +44 -0
- data/vendor/behave/bin/convert_i18n_yaml.py +77 -0
- data/vendor/behave/bin/explore_platform_encoding.py +24 -0
- data/vendor/behave/bin/i18n.yml +621 -0
- data/vendor/behave/bin/invoke +8 -0
- data/vendor/behave/bin/invoke.cmd +9 -0
- data/vendor/behave/bin/json.format.py +167 -0
- data/vendor/behave/bin/jsonschema_validate.py +122 -0
- data/vendor/behave/bin/make_localpi.py +279 -0
- data/vendor/behave/bin/project_bootstrap.sh +30 -0
- data/vendor/behave/bin/toxcmd.py +270 -0
- data/vendor/behave/bin/toxcmd3.py +270 -0
- data/vendor/behave/conftest.py +27 -0
- data/vendor/behave/docs/Makefile +154 -0
- data/vendor/behave/docs/_static/agogo.css +501 -0
- data/vendor/behave/docs/_static/behave_logo.png +0 -0
- data/vendor/behave/docs/_static/behave_logo1.png +0 -0
- data/vendor/behave/docs/_static/behave_logo2.png +0 -0
- data/vendor/behave/docs/_static/behave_logo3.png +0 -0
- data/vendor/behave/docs/_themes/LICENSE +45 -0
- data/vendor/behave/docs/_themes/kr/layout.html +17 -0
- data/vendor/behave/docs/_themes/kr/relations.html +19 -0
- data/vendor/behave/docs/_themes/kr/static/flasky.css_t +480 -0
- data/vendor/behave/docs/_themes/kr/static/small_flask.css +90 -0
- data/vendor/behave/docs/_themes/kr/theme.conf +7 -0
- data/vendor/behave/docs/_themes/kr_small/layout.html +22 -0
- data/vendor/behave/docs/_themes/kr_small/static/flasky.css_t +287 -0
- data/vendor/behave/docs/_themes/kr_small/theme.conf +10 -0
- data/vendor/behave/docs/api.rst +408 -0
- data/vendor/behave/docs/appendix.rst +19 -0
- data/vendor/behave/docs/behave.rst +640 -0
- data/vendor/behave/docs/behave.rst-template +86 -0
- data/vendor/behave/docs/behave_ecosystem.rst +81 -0
- data/vendor/behave/docs/comparison.rst +85 -0
- data/vendor/behave/docs/conf.py +293 -0
- data/vendor/behave/docs/context_attributes.rst +66 -0
- data/vendor/behave/docs/django.rst +192 -0
- data/vendor/behave/docs/formatters.rst +61 -0
- data/vendor/behave/docs/gherkin.rst +673 -0
- data/vendor/behave/docs/index.rst +57 -0
- data/vendor/behave/docs/install.rst +60 -0
- data/vendor/behave/docs/more_info.rst +184 -0
- data/vendor/behave/docs/new_and_noteworthy.rst +18 -0
- data/vendor/behave/docs/new_and_noteworthy_v1.2.4.rst +11 -0
- data/vendor/behave/docs/new_and_noteworthy_v1.2.5.rst +814 -0
- data/vendor/behave/docs/new_and_noteworthy_v1.2.6.rst +255 -0
- data/vendor/behave/docs/parse_builtin_types.rst +59 -0
- data/vendor/behave/docs/philosophy.rst +235 -0
- data/vendor/behave/docs/regular_expressions.rst +71 -0
- data/vendor/behave/docs/related.rst +14 -0
- data/vendor/behave/docs/test_domains.rst +62 -0
- data/vendor/behave/docs/tutorial.rst +636 -0
- data/vendor/behave/docs/update_behave_rst.py +100 -0
- data/vendor/behave/etc/json/behave.json-schema +172 -0
- data/vendor/behave/etc/junit.xml/behave_junit.xsd +103 -0
- data/vendor/behave/etc/junit.xml/junit-4.xsd +92 -0
- data/vendor/behave/examples/async_step/README.txt +8 -0
- data/vendor/behave/examples/async_step/behave.ini +14 -0
- data/vendor/behave/examples/async_step/features/async_dispatch.feature +8 -0
- data/vendor/behave/examples/async_step/features/async_run.feature +6 -0
- data/vendor/behave/examples/async_step/features/environment.py +28 -0
- data/vendor/behave/examples/async_step/features/steps/async_dispatch_steps.py +26 -0
- data/vendor/behave/examples/async_step/features/steps/async_steps34.py +10 -0
- data/vendor/behave/examples/async_step/features/steps/async_steps35.py +10 -0
- data/vendor/behave/examples/async_step/testrun_example.async_dispatch.txt +11 -0
- data/vendor/behave/examples/async_step/testrun_example.async_run.txt +9 -0
- data/vendor/behave/examples/env_vars/README.rst +26 -0
- data/vendor/behave/examples/env_vars/behave.ini +15 -0
- data/vendor/behave/examples/env_vars/behave_run.output_example.txt +12 -0
- data/vendor/behave/examples/env_vars/features/env_var.feature +6 -0
- data/vendor/behave/examples/env_vars/features/steps/env_var_steps.py +38 -0
- data/vendor/behave/features/README.txt +12 -0
- data/vendor/behave/features/background.feature +392 -0
- data/vendor/behave/features/capture_stderr.feature +172 -0
- data/vendor/behave/features/capture_stdout.feature +125 -0
- data/vendor/behave/features/cmdline.lang_list.feature +33 -0
- data/vendor/behave/features/configuration.default_paths.feature +116 -0
- data/vendor/behave/features/context.global_params.feature +35 -0
- data/vendor/behave/features/context.local_params.feature +17 -0
- data/vendor/behave/features/directory_layout.advanced.feature +147 -0
- data/vendor/behave/features/directory_layout.basic.feature +75 -0
- data/vendor/behave/features/directory_layout.basic2.feature +87 -0
- data/vendor/behave/features/environment.py +53 -0
- data/vendor/behave/features/exploratory_testing.with_table.feature +141 -0
- data/vendor/behave/features/feature.description.feature +0 -0
- data/vendor/behave/features/feature.exclude_from_run.feature +96 -0
- data/vendor/behave/features/formatter.help.feature +30 -0
- data/vendor/behave/features/formatter.json.feature +420 -0
- data/vendor/behave/features/formatter.progress3.feature +235 -0
- data/vendor/behave/features/formatter.rerun.feature +296 -0
- data/vendor/behave/features/formatter.steps.feature +181 -0
- data/vendor/behave/features/formatter.steps_catalog.feature +100 -0
- data/vendor/behave/features/formatter.steps_doc.feature +140 -0
- data/vendor/behave/features/formatter.steps_usage.feature +404 -0
- data/vendor/behave/features/formatter.tags.feature +134 -0
- data/vendor/behave/features/formatter.tags_location.feature +183 -0
- data/vendor/behave/features/formatter.user_defined.feature +196 -0
- data/vendor/behave/features/i18n.unicode_problems.feature +445 -0
- data/vendor/behave/features/logcapture.clear_handlers.feature +114 -0
- data/vendor/behave/features/logcapture.feature +188 -0
- data/vendor/behave/features/logcapture.filter.feature +130 -0
- data/vendor/behave/features/logging.no_capture.feature +99 -0
- data/vendor/behave/features/logging.setup_format.feature +157 -0
- data/vendor/behave/features/logging.setup_level.feature +168 -0
- data/vendor/behave/features/logging.setup_with_configfile.feature +137 -0
- data/vendor/behave/features/parser.background.sad_cases.feature +129 -0
- data/vendor/behave/features/parser.feature.sad_cases.feature +144 -0
- data/vendor/behave/features/runner.abort_by_user.feature +305 -0
- data/vendor/behave/features/runner.continue_after_failed_step.feature +136 -0
- data/vendor/behave/features/runner.default_format.feature +175 -0
- data/vendor/behave/features/runner.dry_run.feature +184 -0
- data/vendor/behave/features/runner.feature_listfile.feature +223 -0
- data/vendor/behave/features/runner.hook_errors.feature +382 -0
- data/vendor/behave/features/runner.multiple_formatters.feature +285 -0
- data/vendor/behave/features/runner.scenario_autoretry.feature +131 -0
- data/vendor/behave/features/runner.select_files_by_regexp.example.feature +71 -0
- data/vendor/behave/features/runner.select_files_by_regexp.feature +84 -0
- data/vendor/behave/features/runner.select_scenarios_by_file_location.feature +403 -0
- data/vendor/behave/features/runner.select_scenarios_by_name.feature +289 -0
- data/vendor/behave/features/runner.select_scenarios_by_tag.feature +225 -0
- data/vendor/behave/features/runner.stop_after_failure.feature +122 -0
- data/vendor/behave/features/runner.tag_logic.feature +67 -0
- data/vendor/behave/features/runner.unknown_formatter.feature +23 -0
- data/vendor/behave/features/runner.use_stage_implementations.feature +126 -0
- data/vendor/behave/features/scenario.description.feature +171 -0
- data/vendor/behave/features/scenario.exclude_from_run.feature +217 -0
- data/vendor/behave/features/scenario_outline.basics.feature +100 -0
- data/vendor/behave/features/scenario_outline.improved.feature +177 -0
- data/vendor/behave/features/scenario_outline.name_annotation.feature +157 -0
- data/vendor/behave/features/scenario_outline.parametrized.feature +401 -0
- data/vendor/behave/features/scenario_outline.tagged_examples.feature +118 -0
- data/vendor/behave/features/step.async_steps.feature +225 -0
- data/vendor/behave/features/step.duplicated_step.feature +106 -0
- data/vendor/behave/features/step.execute_steps.feature +59 -0
- data/vendor/behave/features/step.execute_steps.with_table.feature +65 -0
- data/vendor/behave/features/step.import_other_step_module.feature +103 -0
- data/vendor/behave/features/step.pending_steps.feature +128 -0
- data/vendor/behave/features/step.undefined_steps.feature +307 -0
- data/vendor/behave/features/step.use_step_library.feature +44 -0
- data/vendor/behave/features/step_dialect.generic_steps.feature +189 -0
- data/vendor/behave/features/step_dialect.given_when_then.feature +89 -0
- data/vendor/behave/features/step_param.builtin_types.with_float.feature +239 -0
- data/vendor/behave/features/step_param.builtin_types.with_integer.feature +305 -0
- data/vendor/behave/features/step_param.custom_types.feature +134 -0
- data/vendor/behave/features/steps/behave_active_tags_steps.py +86 -0
- data/vendor/behave/features/steps/behave_context_steps.py +67 -0
- data/vendor/behave/features/steps/behave_model_tag_logic_steps.py +105 -0
- data/vendor/behave/features/steps/behave_model_util.py +105 -0
- data/vendor/behave/features/steps/behave_select_files_steps.py +83 -0
- data/vendor/behave/features/steps/behave_tag_expression_steps.py +166 -0
- data/vendor/behave/features/steps/behave_undefined_steps.py +101 -0
- data/vendor/behave/features/steps/use_steplib_behave4cmd.py +12 -0
- data/vendor/behave/features/summary.undefined_steps.feature +114 -0
- data/vendor/behave/features/tags.active_tags.feature +385 -0
- data/vendor/behave/features/tags.default_tags.feature +104 -0
- data/vendor/behave/features/tags.tag_expression.feature +105 -0
- data/vendor/behave/features/userdata.feature +331 -0
- data/vendor/behave/invoke.yaml +21 -0
- data/vendor/behave/issue.features/README.txt +17 -0
- data/vendor/behave/issue.features/environment.py +97 -0
- data/vendor/behave/issue.features/issue0030.feature +21 -0
- data/vendor/behave/issue.features/issue0031.feature +16 -0
- data/vendor/behave/issue.features/issue0032.feature +28 -0
- data/vendor/behave/issue.features/issue0035.feature +74 -0
- data/vendor/behave/issue.features/issue0040.feature +154 -0
- data/vendor/behave/issue.features/issue0041.feature +135 -0
- data/vendor/behave/issue.features/issue0042.feature +230 -0
- data/vendor/behave/issue.features/issue0044.feature +51 -0
- data/vendor/behave/issue.features/issue0046.feature +77 -0
- data/vendor/behave/issue.features/issue0052.feature +66 -0
- data/vendor/behave/issue.features/issue0059.feature +29 -0
- data/vendor/behave/issue.features/issue0063.feature +102 -0
- data/vendor/behave/issue.features/issue0064.feature +97 -0
- data/vendor/behave/issue.features/issue0065.feature +18 -0
- data/vendor/behave/issue.features/issue0066.feature +80 -0
- data/vendor/behave/issue.features/issue0067.feature +90 -0
- data/vendor/behave/issue.features/issue0069.feature +64 -0
- data/vendor/behave/issue.features/issue0072.feature +32 -0
- data/vendor/behave/issue.features/issue0073.feature +228 -0
- data/vendor/behave/issue.features/issue0075.feature +18 -0
- data/vendor/behave/issue.features/issue0077.feature +89 -0
- data/vendor/behave/issue.features/issue0080.feature +49 -0
- data/vendor/behave/issue.features/issue0081.feature +138 -0
- data/vendor/behave/issue.features/issue0083.feature +69 -0
- data/vendor/behave/issue.features/issue0084.feature +69 -0
- data/vendor/behave/issue.features/issue0085.feature +119 -0
- data/vendor/behave/issue.features/issue0092.feature +66 -0
- data/vendor/behave/issue.features/issue0096.feature +173 -0
- data/vendor/behave/issue.features/issue0099.feature +130 -0
- data/vendor/behave/issue.features/issue0109.feature +60 -0
- data/vendor/behave/issue.features/issue0111.feature +53 -0
- data/vendor/behave/issue.features/issue0112.feature +64 -0
- data/vendor/behave/issue.features/issue0114.feature +118 -0
- data/vendor/behave/issue.features/issue0116.feature +71 -0
- data/vendor/behave/issue.features/issue0125.feature +49 -0
- data/vendor/behave/issue.features/issue0127.feature +64 -0
- data/vendor/behave/issue.features/issue0139.feature +67 -0
- data/vendor/behave/issue.features/issue0142.feature +37 -0
- data/vendor/behave/issue.features/issue0143.feature +54 -0
- data/vendor/behave/issue.features/issue0145.feature +63 -0
- data/vendor/behave/issue.features/issue0148.feature +105 -0
- data/vendor/behave/issue.features/issue0152.feature +52 -0
- data/vendor/behave/issue.features/issue0159.feature +74 -0
- data/vendor/behave/issue.features/issue0162.feature +86 -0
- data/vendor/behave/issue.features/issue0171.feature +16 -0
- data/vendor/behave/issue.features/issue0172.feature +51 -0
- data/vendor/behave/issue.features/issue0175.feature +91 -0
- data/vendor/behave/issue.features/issue0177.feature +40 -0
- data/vendor/behave/issue.features/issue0181.feature +36 -0
- data/vendor/behave/issue.features/issue0184.feature +144 -0
- data/vendor/behave/issue.features/issue0186.feature +12 -0
- data/vendor/behave/issue.features/issue0188.feature +60 -0
- data/vendor/behave/issue.features/issue0191.feature +178 -0
- data/vendor/behave/issue.features/issue0194.feature +215 -0
- data/vendor/behave/issue.features/issue0197.feature +11 -0
- data/vendor/behave/issue.features/issue0216.feature +129 -0
- data/vendor/behave/issue.features/issue0226.feature +51 -0
- data/vendor/behave/issue.features/issue0228.feature +41 -0
- data/vendor/behave/issue.features/issue0230.feature +46 -0
- data/vendor/behave/issue.features/issue0231.feature +77 -0
- data/vendor/behave/issue.features/issue0238.feature +52 -0
- data/vendor/behave/issue.features/issue0251.feature +15 -0
- data/vendor/behave/issue.features/issue0280.feature +118 -0
- data/vendor/behave/issue.features/issue0288.feature +95 -0
- data/vendor/behave/issue.features/issue0300.feature +49 -0
- data/vendor/behave/issue.features/issue0302.feature +91 -0
- data/vendor/behave/issue.features/issue0309.feature +52 -0
- data/vendor/behave/issue.features/issue0330.feature +124 -0
- data/vendor/behave/issue.features/issue0349.feature +9 -0
- data/vendor/behave/issue.features/issue0361.feature +79 -0
- data/vendor/behave/issue.features/issue0383.feature +76 -0
- data/vendor/behave/issue.features/issue0384.feature +103 -0
- data/vendor/behave/issue.features/issue0385.feature +109 -0
- data/vendor/behave/issue.features/issue0424.feature +66 -0
- data/vendor/behave/issue.features/issue0446.feature +116 -0
- data/vendor/behave/issue.features/issue0449.feature +42 -0
- data/vendor/behave/issue.features/issue0453.feature +42 -0
- data/vendor/behave/issue.features/issue0457.feature +65 -0
- data/vendor/behave/issue.features/issue0462.feature +38 -0
- data/vendor/behave/issue.features/issue0476.feature +39 -0
- data/vendor/behave/issue.features/issue0487.feature +92 -0
- data/vendor/behave/issue.features/issue0506.feature +77 -0
- data/vendor/behave/issue.features/issue0510.feature +51 -0
- data/vendor/behave/issue.features/requirements.txt +12 -0
- data/vendor/behave/issue.features/steps/ansi_steps.py +20 -0
- data/vendor/behave/issue.features/steps/behave_hooks_steps.py +10 -0
- data/vendor/behave/issue.features/steps/use_steplib_behave4cmd.py +13 -0
- data/vendor/behave/more.features/formatter.json.validate_output.feature +37 -0
- data/vendor/behave/more.features/steps/tutorial_steps.py +16 -0
- data/vendor/behave/more.features/steps/use_steplib_behave4cmd.py +7 -0
- data/vendor/behave/more.features/tutorial.feature +6 -0
- data/vendor/behave/py.requirements/README.txt +5 -0
- data/vendor/behave/py.requirements/all.txt +16 -0
- data/vendor/behave/py.requirements/basic.txt +21 -0
- data/vendor/behave/py.requirements/develop.txt +28 -0
- data/vendor/behave/py.requirements/docs.txt +6 -0
- data/vendor/behave/py.requirements/json.txt +7 -0
- data/vendor/behave/py.requirements/more_py26.txt +8 -0
- data/vendor/behave/py.requirements/testing.txt +10 -0
- data/vendor/behave/pytest.ini +24 -0
- data/vendor/behave/setup.cfg +29 -0
- data/vendor/behave/setup.py +118 -0
- data/vendor/behave/setuptools_behave.py +130 -0
- data/vendor/behave/tasks/__behave.py +45 -0
- data/vendor/behave/tasks/__init__.py +55 -0
- data/vendor/behave/tasks/__main__.py +70 -0
- data/vendor/behave/tasks/_setup.py +135 -0
- data/vendor/behave/tasks/_vendor/README.rst +35 -0
- data/vendor/behave/tasks/_vendor/invoke.zip +0 -0
- data/vendor/behave/tasks/_vendor/path.py +1725 -0
- data/vendor/behave/tasks/_vendor/pathlib.py +1280 -0
- data/vendor/behave/tasks/_vendor/six.py +868 -0
- data/vendor/behave/tasks/clean.py +246 -0
- data/vendor/behave/tasks/docs.py +97 -0
- data/vendor/behave/tasks/requirements.txt +17 -0
- data/vendor/behave/tasks/test.py +192 -0
- data/vendor/behave/test/__init__.py +0 -0
- data/vendor/behave/test/_importer_candidate.py +3 -0
- data/vendor/behave/test/reporters/__init__.py +0 -0
- data/vendor/behave/test/reporters/test_summary.py +240 -0
- data/vendor/behave/test/test_ansi_escapes.py +73 -0
- data/vendor/behave/test/test_configuration.py +172 -0
- data/vendor/behave/test/test_formatter.py +265 -0
- data/vendor/behave/test/test_formatter_progress.py +39 -0
- data/vendor/behave/test/test_formatter_rerun.py +97 -0
- data/vendor/behave/test/test_formatter_tags.py +57 -0
- data/vendor/behave/test/test_importer.py +151 -0
- data/vendor/behave/test/test_log_capture.py +29 -0
- data/vendor/behave/test/test_matchers.py +236 -0
- data/vendor/behave/test/test_model.py +871 -0
- data/vendor/behave/test/test_parser.py +1590 -0
- data/vendor/behave/test/test_runner.py +1074 -0
- data/vendor/behave/test/test_step_registry.py +96 -0
- data/vendor/behave/test/test_tag_expression.py +506 -0
- data/vendor/behave/test/test_tag_expression2.py +462 -0
- data/vendor/behave/test/test_tag_matcher.py +729 -0
- data/vendor/behave/test/test_userdata.py +184 -0
- data/vendor/behave/tests/README.txt +12 -0
- data/vendor/behave/tests/__init__.py +0 -0
- data/vendor/behave/tests/api/__ONLY_PY34_or_newer.txt +0 -0
- data/vendor/behave/tests/api/__init__.py +0 -0
- data/vendor/behave/tests/api/_test_async_step34.py +130 -0
- data/vendor/behave/tests/api/_test_async_step35.py +75 -0
- data/vendor/behave/tests/api/test_async_step.py +18 -0
- data/vendor/behave/tests/api/testing_support.py +94 -0
- data/vendor/behave/tests/api/testing_support_async.py +21 -0
- data/vendor/behave/tests/issues/test_issue0336.py +66 -0
- data/vendor/behave/tests/issues/test_issue0449.py +55 -0
- data/vendor/behave/tests/issues/test_issue0453.py +62 -0
- data/vendor/behave/tests/issues/test_issue0458.py +54 -0
- data/vendor/behave/tests/issues/test_issue0495.py +65 -0
- data/vendor/behave/tests/unit/__init__.py +0 -0
- data/vendor/behave/tests/unit/test_behave4cmd_command_shell_proc.py +135 -0
- data/vendor/behave/tests/unit/test_capture.py +280 -0
- data/vendor/behave/tests/unit/test_model_core.py +56 -0
- data/vendor/behave/tests/unit/test_textutil.py +267 -0
- data/vendor/behave/tools/test-features/background.feature +9 -0
- data/vendor/behave/tools/test-features/environment.py +8 -0
- data/vendor/behave/tools/test-features/french.feature +11 -0
- data/vendor/behave/tools/test-features/outline.feature +39 -0
- data/vendor/behave/tools/test-features/parse.feature +10 -0
- data/vendor/behave/tools/test-features/step-data.feature +60 -0
- data/vendor/behave/tools/test-features/steps/steps.py +120 -0
- data/vendor/behave/tools/test-features/tags.feature +18 -0
- data/vendor/behave/tox.ini +159 -0
- metadata +562 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Unit test support for :mod:`behave.api.async_test` tests.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import inspect
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# -----------------------------------------------------------------------------
|
|
10
|
+
# TEST SUPPORT:
|
|
11
|
+
# -----------------------------------------------------------------------------
|
|
12
|
+
class AsyncStepTheory(object):
|
|
13
|
+
@staticmethod
|
|
14
|
+
def ensure_normal_function(func):
|
|
15
|
+
if hasattr(inspect, "isawaitable"):
|
|
16
|
+
# -- SINCE: Python 3.5
|
|
17
|
+
assert not inspect.isawaitable(func)
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def validate(cls, func):
|
|
21
|
+
cls.ensure_normal_function(func)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# -*- coding: UTF-8
|
|
2
|
+
"""
|
|
3
|
+
Test issue #336: Unicode problem w/ exception traceback on Windows (python2.7)
|
|
4
|
+
Default encoding (unicode-escape) of text() causes problems w/
|
|
5
|
+
exception tracebacks.
|
|
6
|
+
|
|
7
|
+
STATUS: BASICS SOLVED (default encoding changed)
|
|
8
|
+
|
|
9
|
+
ALTERNATIVE SOLUTIONS:
|
|
10
|
+
* Use traceback2: Returns unicode-string when calling traceback.
|
|
11
|
+
* Use text(traceback.format_exc(), sys.getfilesystemencoding(), "replace")
|
|
12
|
+
where the text-conversion of a traceback is used.
|
|
13
|
+
MAYBE traceback_to_text(traceback.format_exc())
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import print_function
|
|
17
|
+
from behave.textutil import text
|
|
18
|
+
import pytest
|
|
19
|
+
import six
|
|
20
|
+
|
|
21
|
+
# require_python2 = pytest.mark.skipif(not six.PY2, reason="REQUIRE: Python2")
|
|
22
|
+
# require_python3 = pytest.mark.skipif(six.PY2, reason="REQUIRE: Python3 (or newer)")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TestIssue(object):
|
|
26
|
+
# -- USE SAVED TRACEBACK: No need to require Windows platform.
|
|
27
|
+
traceback_bytes = br"""\
|
|
28
|
+
Traceback (most recent call last):
|
|
29
|
+
File "C:\Users\alice\xxx\behave\model.py", line 1456, in run
|
|
30
|
+
match.run(runner.context)
|
|
31
|
+
File "C:\Users\alice\xxx\behave\model.py", line 1903, in run
|
|
32
|
+
self.func(context, args, *kwargs)
|
|
33
|
+
File "features\steps\my_steps.py", line 210, in step_impl
|
|
34
|
+
directories, task_names, reg_keys)
|
|
35
|
+
AssertionError
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
traceback_file_line_texts = [
|
|
39
|
+
# -- NOTE: Cannot use: ur'C:\Users ..." => \U is a unicode escape char.
|
|
40
|
+
u'File "C:\\Users\\alice\\xxx\\behave\\model.py", line 1456, in run',
|
|
41
|
+
u'File "C:\\Users\\alice\\xxx\\behave\\model.py", line 1903, in run',
|
|
42
|
+
u'File "features\\steps\\my_steps.py", line 210, in step_impl',
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
# @require_python2
|
|
46
|
+
def test_issue__with_default_encoding(self):
|
|
47
|
+
"""Test ensures that problem is fixed with default encoding"""
|
|
48
|
+
text2 = text(self.traceback_bytes)
|
|
49
|
+
assert isinstance(self.traceback_bytes, bytes)
|
|
50
|
+
assert isinstance(text2, six.text_type)
|
|
51
|
+
for file_line_text in self.traceback_file_line_texts:
|
|
52
|
+
assert file_line_text in text2
|
|
53
|
+
|
|
54
|
+
# @require_python2
|
|
55
|
+
def test__problem_exists_with_problematic_encoding(self):
|
|
56
|
+
"""Test ensures that problem exists with encoding=unicode-escape"""
|
|
57
|
+
# -- NOTE: Explicit use of problematic encoding
|
|
58
|
+
problematic_encoding = "unicode-escape"
|
|
59
|
+
text2 = text(self.traceback_bytes, problematic_encoding)
|
|
60
|
+
print("TEXT: "+ text2)
|
|
61
|
+
assert isinstance(self.traceback_bytes, bytes)
|
|
62
|
+
assert isinstance(text2, six.text_type)
|
|
63
|
+
|
|
64
|
+
# -- VERIFY BAD-OUTCOME: With problematic encoding
|
|
65
|
+
file_line_text = self.traceback_file_line_texts[0]
|
|
66
|
+
assert file_line_text not in text2
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
SIMILAR: #453
|
|
4
|
+
NOTE: traceback2 (backport for Python2) solves the problem.
|
|
5
|
+
|
|
6
|
+
Either Exception text (as summary) or traceback python line shows
|
|
7
|
+
special characters correctly.
|
|
8
|
+
|
|
9
|
+
.. code-block:: python
|
|
10
|
+
|
|
11
|
+
# -*- coding=utf-8 -*-
|
|
12
|
+
from behave import *
|
|
13
|
+
from hamcrest.core import assert_that, equal_to
|
|
14
|
+
|
|
15
|
+
@step("Russian text")
|
|
16
|
+
def foo(stop):
|
|
17
|
+
assert_that(False, equal_to(True), u"Всё очень плохо") # cyrillic
|
|
18
|
+
|
|
19
|
+
And I also have UTF-8 as my console charset. Running this code leads to
|
|
20
|
+
"Assertion Failed: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)" error.
|
|
21
|
+
|
|
22
|
+
That is becase behave.textutil.text returns six.text_type(e) where 'e' is exception (https://github.com/behave/behave/blob/master/behave/textutil.py#L83).
|
|
23
|
+
|
|
24
|
+
Changing line 83 to six.text_type(value) solves this issue.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import print_function
|
|
28
|
+
from behave.textutil import text
|
|
29
|
+
from hamcrest.core import assert_that, equal_to
|
|
30
|
+
from hamcrest.library import contains_string
|
|
31
|
+
import six
|
|
32
|
+
import pytest
|
|
33
|
+
if six.PY2:
|
|
34
|
+
import traceback2 as traceback
|
|
35
|
+
else:
|
|
36
|
+
import traceback
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def foo():
|
|
40
|
+
assert_that(False, equal_to(True), u"Всё очень плохо") # cyrillic
|
|
41
|
+
|
|
42
|
+
@pytest.mark.parametrize("encoding", [None, "UTF-8", "unicode_escape"])
|
|
43
|
+
def test_issue(encoding):
|
|
44
|
+
expected = u"Всё очень плохо"
|
|
45
|
+
try:
|
|
46
|
+
foo()
|
|
47
|
+
except Exception as e:
|
|
48
|
+
text2 = traceback.format_exc()
|
|
49
|
+
|
|
50
|
+
text3 = text(text2, encoding)
|
|
51
|
+
print(u"EXCEPTION-TEXT: %s" % text3)
|
|
52
|
+
print(u"text2: "+ text2)
|
|
53
|
+
assert_that(text3, contains_string(u"AssertionError: Всё очень плохо"))
|
|
54
|
+
|
|
55
|
+
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
MAYBE: DUPLICATES: #449
|
|
4
|
+
NOTE: traceback2 (backport for Python2) solves the problem.
|
|
5
|
+
|
|
6
|
+
def foo(stop):
|
|
7
|
+
raise Exception(u"по русски")
|
|
8
|
+
|
|
9
|
+
Result:
|
|
10
|
+
|
|
11
|
+
File "features/steps/steps.py", line 8, in foo
|
|
12
|
+
raise Exception(u"по ����ки") <-- This is not
|
|
13
|
+
Exception: по русски <-- This is OK
|
|
14
|
+
|
|
15
|
+
It happens here (https://github.com/behave/behave/blob/master/behave/model.py#L1299)
|
|
16
|
+
because traceback.format_exc() creates incorrect text.
|
|
17
|
+
You then convert it using _text() and result is also bad.
|
|
18
|
+
|
|
19
|
+
To fix it, you may take e.message which is correct and traceback.format_tb(sys.exc_info()[2])
|
|
20
|
+
which is also correct.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import print_function
|
|
24
|
+
from behave.textutil import text
|
|
25
|
+
from hamcrest.core import assert_that, equal_to
|
|
26
|
+
from hamcrest.library import contains_string
|
|
27
|
+
import six
|
|
28
|
+
import pytest
|
|
29
|
+
if six.PY2:
|
|
30
|
+
import traceback2 as traceback
|
|
31
|
+
else:
|
|
32
|
+
import traceback
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def problematic_step_impl(context):
|
|
36
|
+
raise Exception(u"по русски")
|
|
37
|
+
|
|
38
|
+
@pytest.mark.parametrize("encoding", [None, "UTF-8", "unicode_escape"])
|
|
39
|
+
def test_issue(encoding):
|
|
40
|
+
"""
|
|
41
|
+
with encoding=UTF-8:
|
|
42
|
+
File "/Users/jens/se/behave_main.unicode/tests/issues/test_issue0453.py", line 31, in problematic_step_impl
|
|
43
|
+
raise Exception(u"по русски")
|
|
44
|
+
Exception: \u043f\u043e \u0440\u0443\u0441\u0441\u043a\u0438
|
|
45
|
+
|
|
46
|
+
with encoding=unicode_escape:
|
|
47
|
+
File "/Users/jens/se/behave_main.unicode/tests/issues/test_issue0453.py", line 31, in problematic_step_impl
|
|
48
|
+
raise Exception(u"по ÑÑÑÑки")
|
|
49
|
+
Exception: по русски
|
|
50
|
+
"""
|
|
51
|
+
context = None
|
|
52
|
+
text2 = ""
|
|
53
|
+
expected_text = u"по русски"
|
|
54
|
+
try:
|
|
55
|
+
problematic_step_impl(context)
|
|
56
|
+
except Exception:
|
|
57
|
+
text2 = traceback.format_exc()
|
|
58
|
+
|
|
59
|
+
text3 = text(text2, encoding)
|
|
60
|
+
print(u"EXCEPTION-TEXT: %s" % text3)
|
|
61
|
+
assert_that(text3, contains_string(u'raise Exception(u"по русски"'))
|
|
62
|
+
assert_that(text3, contains_string(u"Exception: по русски"))
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# -*- coding: UTF-8
|
|
2
|
+
"""
|
|
3
|
+
Test issue #458:
|
|
4
|
+
|
|
5
|
+
Traceback (most recent call last):
|
|
6
|
+
File "/usr/local/bin/behave", line 11, in <module>
|
|
7
|
+
sys.exit(main())
|
|
8
|
+
File "/Library/Python/2.7/site-packages/behave/__main__.py", line 123, in main
|
|
9
|
+
print(u"Exception %s: %s" % (e.__class__.__name__, text))
|
|
10
|
+
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 69: ordinal not in range(128)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
failed = runner.run()
|
|
15
|
+
except ParserError as e:
|
|
16
|
+
print(u"ParseError: %s" % e)
|
|
17
|
+
except ConfigError as e:
|
|
18
|
+
print(u"ConfigError: %s" % e)
|
|
19
|
+
except FileNotFoundError as e:
|
|
20
|
+
print(u"FileNotFoundError: %s" % e)
|
|
21
|
+
except InvalidFileLocationError as e:
|
|
22
|
+
print(u"InvalidFileLocationError: %s" % e)
|
|
23
|
+
except InvalidFilenameError as e:
|
|
24
|
+
print(u"InvalidFilenameError: %s" % e)
|
|
25
|
+
except Exception as e:
|
|
26
|
+
# -- DIAGNOSTICS:
|
|
27
|
+
text = _text(e)
|
|
28
|
+
print(u"Exception %s: %s" % (e.__class__.__name__, text))
|
|
29
|
+
raise
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from behave.textutil import text as _text
|
|
33
|
+
import pytest
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def raise_exception(exception_class, message):
|
|
37
|
+
raise exception_class(message)
|
|
38
|
+
|
|
39
|
+
@pytest.mark.parametrize("exception_class, message", [
|
|
40
|
+
(AssertionError, "Ärgernis"),
|
|
41
|
+
(AssertionError, u"Ärgernis"),
|
|
42
|
+
(RuntimeError, "Übermut"),
|
|
43
|
+
(RuntimeError, u"Übermut"),
|
|
44
|
+
])
|
|
45
|
+
def test_issue(exception_class, message):
|
|
46
|
+
with pytest.raises(exception_class) as e:
|
|
47
|
+
# runner.run()
|
|
48
|
+
raise_exception(exception_class, message)
|
|
49
|
+
|
|
50
|
+
# -- SHOULD NOT RAISE EXCEPTION HERE:
|
|
51
|
+
text = _text(e)
|
|
52
|
+
# -- DIAGNOSTICS:
|
|
53
|
+
print(u"text"+ text)
|
|
54
|
+
print(u"exception: %s" % e)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Explore issue #495.
|
|
4
|
+
HINT: Problem can be reproduced if you remove encoding-declaration from above.
|
|
5
|
+
|
|
6
|
+
::
|
|
7
|
+
Traceback (most recent call last):
|
|
8
|
+
File "/usr/local/bin/behave", line 11, in <module>
|
|
9
|
+
sys.exit(main())
|
|
10
|
+
File "/usr/local/lib/python2.7/dist-packages/behave/__main__.py", line 109, in main
|
|
11
|
+
failed = runner.run()
|
|
12
|
+
...
|
|
13
|
+
File "/usr/local/lib/python2.7/dist-packages/behave/model.py", line 919, in run
|
|
14
|
+
runner.run_hook('after_scenario', runner.context, self)
|
|
15
|
+
File "/usr/local/lib/python2.7/dist-packages/behave/runner.py", line 405, in run_hook
|
|
16
|
+
self.hooks[name](context, *args)
|
|
17
|
+
File "/mnt/work/test/lib/logcapture.py", line 22, in f
|
|
18
|
+
v = h.getvalue()
|
|
19
|
+
File "/usr/local/lib/python2.7/dist-packages/behave/log_capture.py", line 99, in getvalue
|
|
20
|
+
return '\n'.join(self.formatter.format(r) for r in self.buffer)
|
|
21
|
+
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 3807: ordinal not in range(128)
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from behave.log_capture import capture
|
|
25
|
+
from behave.configuration import Configuration
|
|
26
|
+
import logging
|
|
27
|
+
import pytest
|
|
28
|
+
|
|
29
|
+
# -----------------------------------------------------------------------------
|
|
30
|
+
# TEST SUPPORT
|
|
31
|
+
# -----------------------------------------------------------------------------
|
|
32
|
+
# def ensure_logging_setup():
|
|
33
|
+
# logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
|
|
34
|
+
|
|
35
|
+
class SimpleContext(object): pass
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# -----------------------------------------------------------------------------
|
|
39
|
+
# TESTS:
|
|
40
|
+
# -----------------------------------------------------------------------------
|
|
41
|
+
@pytest.mark.parametrize("log_message", [
|
|
42
|
+
u"Hello Alice", # case: unproblematic (GOOD CASE)
|
|
43
|
+
u"Ärgernis ist überall", # case: unicode-string
|
|
44
|
+
"Ärgernis", # case: byte-string (use encoding-declaration above)
|
|
45
|
+
])
|
|
46
|
+
def test_issue(log_message):
|
|
47
|
+
@capture(level=logging.INFO)
|
|
48
|
+
def hook_after_scenario(context, message):
|
|
49
|
+
logging.warn(message)
|
|
50
|
+
raise RuntimeError()
|
|
51
|
+
|
|
52
|
+
# -- PREPARE:
|
|
53
|
+
# ensure_logging_setup()
|
|
54
|
+
context = SimpleContext()
|
|
55
|
+
context.config = Configuration("", load_config=False,
|
|
56
|
+
log_capture=True,
|
|
57
|
+
logging_format="%(levelname)s: %(message)s",
|
|
58
|
+
logging_level=logging.INFO
|
|
59
|
+
)
|
|
60
|
+
context.config.setup_logging()
|
|
61
|
+
|
|
62
|
+
# -- EXECUTE:
|
|
63
|
+
with pytest.raises(RuntimeError):
|
|
64
|
+
hook_after_scenario(context, log_message)
|
|
65
|
+
# EXPECT: UnicodeError is not raised
|
|
File without changes
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
|
|
4
|
+
Regular expressions for winpath:
|
|
5
|
+
http://regexlib.com/Search.aspx?k=file+name
|
|
6
|
+
|
|
7
|
+
^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$
|
|
8
|
+
|
|
9
|
+
https://github.com/kgryte/regex-filename-windows/blob/master/lib/index.js
|
|
10
|
+
REGEX: /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+|)([\\\/]|)([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/
|
|
11
|
+
Splits a Windows filename.
|
|
12
|
+
Modified from Node.js [source]{@link https://github.com/nodejs/node/blob/1a3b295d0f46b2189bd853800b1e63ab4d106b66/lib/path.js#L65}.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import absolute_import
|
|
16
|
+
from behave4cmd0.command_shell_proc import \
|
|
17
|
+
BehaveWinCommandOutputProcessor, \
|
|
18
|
+
TracebackLineNormalizer, ExceptionWithPathNormalizer
|
|
19
|
+
import re
|
|
20
|
+
import pytest
|
|
21
|
+
|
|
22
|
+
# -----------------------------------------------------------------------------
|
|
23
|
+
# IMPLEMENTATION
|
|
24
|
+
# -----------------------------------------------------------------------------
|
|
25
|
+
# winpath_pattern = ur"^($([A-Za-z]:(\[^\]+)*)|((\[^\]+)*)|([^\]+\[^\]+)*)$"
|
|
26
|
+
winpath_pattern = u"^([A-Za-z]:(\\[\w\.\-]+)+)|((\\[\w\.\-]+)*)|(\s[\w\.\-]+([\w\.\-]+)*)$"
|
|
27
|
+
winpath_re = re.compile(winpath_pattern, re.UNICODE)
|
|
28
|
+
|
|
29
|
+
class PathNormalizer(object):
|
|
30
|
+
def normalize(self, output):
|
|
31
|
+
pattern = u'^.*$'
|
|
32
|
+
def __call__(self, output):
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
# -----------------------------------------------------------------------------
|
|
36
|
+
# TEST CANDIDATES:
|
|
37
|
+
# -----------------------------------------------------------------------------
|
|
38
|
+
line_processor_configerrors = [
|
|
39
|
+
ExceptionWithPathNormalizer(
|
|
40
|
+
u"ConfigError: No steps directory in '(?P<path>.*)'",
|
|
41
|
+
"ConfigError: No steps directory in"),
|
|
42
|
+
BehaveWinCommandOutputProcessor.line_processors[1],
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
line_processor_parsererrors = [
|
|
46
|
+
ExceptionWithPathNormalizer(
|
|
47
|
+
u'ParserError: Failed to parse "(?P<path>.*)"',
|
|
48
|
+
u'ParserError: Failed to parse'),
|
|
49
|
+
BehaveWinCommandOutputProcessor.line_processors[2],
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
line_processor_ioerrors = [
|
|
53
|
+
ExceptionWithPathNormalizer(
|
|
54
|
+
# ur"No such file or directory: '(?P<path>.*)'",
|
|
55
|
+
# u"No such file or directory:"), # IOError
|
|
56
|
+
# ur"Error: \\[Errno 2\\] No such file or directory: '(?P<path>.*)'",
|
|
57
|
+
u"No such file or directory: '(?P<path>.*)'",
|
|
58
|
+
u"[Errno 2] No such file or directory:"), # IOError
|
|
59
|
+
BehaveWinCommandOutputProcessor.line_processors[3],
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
line_processor_traceback = [
|
|
63
|
+
ExceptionWithPathNormalizer(
|
|
64
|
+
'^\s*File "(?P<path>.*)", line \d+, in ',
|
|
65
|
+
' File "'),
|
|
66
|
+
BehaveWinCommandOutputProcessor.line_processors[4],
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
# -----------------------------------------------------------------------------
|
|
70
|
+
# TEST SUITE
|
|
71
|
+
# -----------------------------------------------------------------------------
|
|
72
|
+
xfail = pytest.mark.xfail()
|
|
73
|
+
|
|
74
|
+
class TestWinpathRegex(object):
|
|
75
|
+
|
|
76
|
+
@pytest.mark.parametrize("winpath", [
|
|
77
|
+
u'C:\\foo\\bar\\alice.txt',
|
|
78
|
+
u'C:\\foo\\bar',
|
|
79
|
+
u'C:\\alice.txt',
|
|
80
|
+
u'C:\\.verbose',
|
|
81
|
+
u'.\\foo\\bar\\alice.txt',
|
|
82
|
+
u'..\\foo\\..\\bar\\alice.txt',
|
|
83
|
+
u'foo\\bar\\alice.txt',
|
|
84
|
+
u'alice.txt',
|
|
85
|
+
])
|
|
86
|
+
def test_match__with_valid_winpath(self, winpath):
|
|
87
|
+
mo = winpath_re.match(winpath)
|
|
88
|
+
assert mo is not None
|
|
89
|
+
|
|
90
|
+
@xfail
|
|
91
|
+
@pytest.mark.parametrize("winpath", [
|
|
92
|
+
u'2:\\foo\\bar\\alice.txt',
|
|
93
|
+
u'C:\\bar\\alice.txt',
|
|
94
|
+
])
|
|
95
|
+
def test_match__with_invalid_winpath(self, winpath):
|
|
96
|
+
mo = winpath_re.match(winpath)
|
|
97
|
+
assert mo is None
|
|
98
|
+
|
|
99
|
+
class TestPathNormalizer(object):
|
|
100
|
+
@pytest.mark.parametrize("output, expected", [
|
|
101
|
+
(u"ConfigError: No steps directory in 'C:\\one\\two\\three.txt'",
|
|
102
|
+
u"ConfigError: No steps directory in 'C:/one/two/three.txt'"),
|
|
103
|
+
])
|
|
104
|
+
def test_call__with_pattern1(self, output, expected):
|
|
105
|
+
for line_processor in line_processor_configerrors:
|
|
106
|
+
actual = line_processor(output)
|
|
107
|
+
assert actual == expected
|
|
108
|
+
|
|
109
|
+
# ParserError: Failed to parse "(?P<path2>.*)"
|
|
110
|
+
@pytest.mark.parametrize("output, expected", [
|
|
111
|
+
(u'ParserError: Failed to parse "C:\\one\\two\\three.txt"',
|
|
112
|
+
u'ParserError: Failed to parse "C:/one/two/three.txt"'),
|
|
113
|
+
])
|
|
114
|
+
def test_call__with_pattern2(self, output, expected):
|
|
115
|
+
for line_processor in line_processor_parsererrors:
|
|
116
|
+
actual = line_processor(output)
|
|
117
|
+
assert actual == expected
|
|
118
|
+
|
|
119
|
+
@pytest.mark.parametrize("output, expected", [
|
|
120
|
+
(u"Error: [Errno 2] No such file or directory: 'C:\\one\\two\\three.txt'",
|
|
121
|
+
u"Error: [Errno 2] No such file or directory: 'C:/one/two/three.txt'"),
|
|
122
|
+
])
|
|
123
|
+
def test_call__with_pattern3(self, output, expected):
|
|
124
|
+
for index, line_processor in enumerate(line_processor_ioerrors):
|
|
125
|
+
actual = line_processor(output)
|
|
126
|
+
assert actual == expected, "line_processor %s" % index
|
|
127
|
+
|
|
128
|
+
@pytest.mark.parametrize("output, expected", [
|
|
129
|
+
(u' File "C:\\one\\two\\three.txt", line 123, in xxx_some_method',
|
|
130
|
+
u' File "C:/one/two/three.txt", line 123, in xxx_some_method'),
|
|
131
|
+
])
|
|
132
|
+
def test_call__with_pattern4(self, output, expected):
|
|
133
|
+
for index, line_processor in enumerate(line_processor_traceback):
|
|
134
|
+
actual = line_processor(output)
|
|
135
|
+
assert actual == expected, "line_processor %s" % index
|