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
|
+
# =====================================================
|
|
2
|
+
# INVOKE CONFIGURATION:
|
|
3
|
+
# =====================================================
|
|
4
|
+
# -- ON WINDOWS:
|
|
5
|
+
# run:
|
|
6
|
+
# echo: true
|
|
7
|
+
# pty: false
|
|
8
|
+
# shell: C:\Windows\System32\cmd.exe
|
|
9
|
+
# =====================================================
|
|
10
|
+
|
|
11
|
+
run:
|
|
12
|
+
echo: true
|
|
13
|
+
pty: true
|
|
14
|
+
|
|
15
|
+
behave_test:
|
|
16
|
+
scopes:
|
|
17
|
+
- features
|
|
18
|
+
- tools/test-features
|
|
19
|
+
- issue.features
|
|
20
|
+
args: features tools/test-features issue.features
|
|
21
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
issue.features:
|
|
2
|
+
===============================================================================
|
|
3
|
+
|
|
4
|
+
:Status: PREPARED (fixes are being applied).
|
|
5
|
+
:Requires: Python >= 2.6 (due to step implementations)
|
|
6
|
+
|
|
7
|
+
This directory contains behave self-tests to ensure that behave related
|
|
8
|
+
issues are fixed.
|
|
9
|
+
|
|
10
|
+
PROCEDURE:
|
|
11
|
+
|
|
12
|
+
* ONCE: Install python requirements ("requirements.txt")
|
|
13
|
+
* Run the tests with behave
|
|
14
|
+
|
|
15
|
+
::
|
|
16
|
+
|
|
17
|
+
bin/behave -f progress issue.features/
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
# FILE: features/environment.py
|
|
3
|
+
# pylint: disable=unused-argument
|
|
4
|
+
"""
|
|
5
|
+
Functionality:
|
|
6
|
+
|
|
7
|
+
* active tags
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import print_function
|
|
11
|
+
import sys
|
|
12
|
+
import platform
|
|
13
|
+
import os.path
|
|
14
|
+
import six
|
|
15
|
+
from behave.tag_matcher import ActiveTagMatcher
|
|
16
|
+
from behave4cmd0.setup_command_shell import setup_command_shell_processors4behave
|
|
17
|
+
# PREPARED:
|
|
18
|
+
# from behave.tag_matcher import setup_active_tag_values
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def require_tool(tool_name):
|
|
22
|
+
"""Check if a tool (an executable program) is provided on this platform.
|
|
23
|
+
|
|
24
|
+
:params tool_name: Name of the tool to check if it is available.
|
|
25
|
+
:return: True, if tool is found.
|
|
26
|
+
:return: False, if tool is not available (or not in search path).
|
|
27
|
+
"""
|
|
28
|
+
# print("CHECK-TOOL: %s" % tool_name)
|
|
29
|
+
path = os.environ.get("PATH")
|
|
30
|
+
if not path:
|
|
31
|
+
return False
|
|
32
|
+
|
|
33
|
+
for searchdir in path.split(os.pathsep):
|
|
34
|
+
executable1 = os.path.normpath(os.path.join(searchdir, tool_name))
|
|
35
|
+
executables = [executable1]
|
|
36
|
+
if sys.platform.startswith("win"):
|
|
37
|
+
executables.append(executable1 + ".exe")
|
|
38
|
+
|
|
39
|
+
for executable in executables:
|
|
40
|
+
# print("TOOL-CHECK: %s" % os.path.abspath(executable))
|
|
41
|
+
if os.path.isfile(executable):
|
|
42
|
+
# print("TOOL-FOUND: %s" % os.path.abspath(executable))
|
|
43
|
+
return True
|
|
44
|
+
# -- OTHERWISE: Tool not found
|
|
45
|
+
# print("TOOL-NOT-FOUND: %s" % tool_name)
|
|
46
|
+
return False
|
|
47
|
+
|
|
48
|
+
def as_bool_string(value):
|
|
49
|
+
if bool(value):
|
|
50
|
+
return "yes"
|
|
51
|
+
else:
|
|
52
|
+
return "no"
|
|
53
|
+
|
|
54
|
+
def discover_ci_server():
|
|
55
|
+
# pylint: disable=invalid-name
|
|
56
|
+
ci_server = "none"
|
|
57
|
+
CI = os.environ.get("CI", "false").lower() == "true"
|
|
58
|
+
APPVEYOR = os.environ.get("APPVEYOR", "false").lower() == "true"
|
|
59
|
+
TRAVIS = os.environ.get("TRAVIS", "false").lower() == "true"
|
|
60
|
+
if CI:
|
|
61
|
+
if APPVEYOR:
|
|
62
|
+
ci_server = "appveyor"
|
|
63
|
+
elif TRAVIS:
|
|
64
|
+
ci_server = "travis"
|
|
65
|
+
else:
|
|
66
|
+
ci_server = "unknown"
|
|
67
|
+
return ci_server
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# -- MATCHES ANY TAGS: @use.with_{category}={value}
|
|
71
|
+
# NOTE: active_tag_value_provider provides category values for active tags.
|
|
72
|
+
active_tag_value_provider = {
|
|
73
|
+
"python2": str(six.PY2).lower(),
|
|
74
|
+
"python3": str(six.PY3).lower(),
|
|
75
|
+
# -- python.implementation: cpython, pypy, jython, ironpython
|
|
76
|
+
"python.implementation": platform.python_implementation().lower(),
|
|
77
|
+
"pypy": str("__pypy__" in sys.modules).lower(),
|
|
78
|
+
"os": sys.platform,
|
|
79
|
+
"xmllint": as_bool_string(require_tool("xmllint")),
|
|
80
|
+
"ci": discover_ci_server()
|
|
81
|
+
}
|
|
82
|
+
active_tag_matcher = ActiveTagMatcher(active_tag_value_provider)
|
|
83
|
+
|
|
84
|
+
def before_all(context):
|
|
85
|
+
# -- SETUP ACTIVE-TAG MATCHER (with userdata):
|
|
86
|
+
# USE: behave -D browser=safari ...
|
|
87
|
+
# NOT-NEEDED: setup_active_tag_values(active_tag_value_provider,
|
|
88
|
+
# context.config.userdata)
|
|
89
|
+
setup_command_shell_processors4behave()
|
|
90
|
+
|
|
91
|
+
def before_feature(context, feature):
|
|
92
|
+
if active_tag_matcher.should_exclude_with(feature.tags):
|
|
93
|
+
feature.skip(reason=active_tag_matcher.exclude_reason)
|
|
94
|
+
|
|
95
|
+
def before_scenario(context, scenario):
|
|
96
|
+
if active_tag_matcher.should_exclude_with(scenario.effective_tags):
|
|
97
|
+
scenario.skip(reason=active_tag_matcher.exclude_reason)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #30 "behave --version" runs features and shows no version
|
|
3
|
+
|
|
4
|
+
Scenario: Ensure environment assumptions are correct (Sanity Check)
|
|
5
|
+
Given a new working directory
|
|
6
|
+
When I run "behave"
|
|
7
|
+
Then it should fail
|
|
8
|
+
And the command output should contain:
|
|
9
|
+
"""
|
|
10
|
+
No steps directory in '{__WORKDIR__}/features'
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
Scenario: Ensure --version option is processed correctly
|
|
14
|
+
Given a new working directory
|
|
15
|
+
When I run "behave --version"
|
|
16
|
+
Then it should pass
|
|
17
|
+
And the command output should not contain:
|
|
18
|
+
"""
|
|
19
|
+
No steps directory in '{__WORKDIR__}/features'
|
|
20
|
+
"""
|
|
21
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #31 "behave --format help" raises an error
|
|
3
|
+
|
|
4
|
+
Scenario:
|
|
5
|
+
Given a new working directory
|
|
6
|
+
When I run "behave --format=help"
|
|
7
|
+
Then it should pass
|
|
8
|
+
And the command output should contain:
|
|
9
|
+
"""
|
|
10
|
+
Available formatters:
|
|
11
|
+
json JSON dump of test run
|
|
12
|
+
json.pretty JSON dump of test run (human readable)
|
|
13
|
+
null Provides formatter that does not output anything.
|
|
14
|
+
plain Very basic formatter with maximum compatibility
|
|
15
|
+
pretty Standard colourised pretty formatter
|
|
16
|
+
"""
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #32 "behave --junit-directory=xxx" fails if more than 1 level must be created
|
|
3
|
+
|
|
4
|
+
Scenario:
|
|
5
|
+
Given a new working directory
|
|
6
|
+
And a file named "features/steps/steps.py" with:
|
|
7
|
+
"""
|
|
8
|
+
from behave import given, when, then
|
|
9
|
+
|
|
10
|
+
@given(u'passing')
|
|
11
|
+
def step(context):
|
|
12
|
+
pass
|
|
13
|
+
"""
|
|
14
|
+
And a file named "features/issue32_1.feature" with:
|
|
15
|
+
"""
|
|
16
|
+
Feature: One
|
|
17
|
+
Scenario: One
|
|
18
|
+
Given passing
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
When I run "behave --junit --junit-directory=report/test_results"
|
|
22
|
+
Then it should pass with:
|
|
23
|
+
"""
|
|
24
|
+
1 feature passed, 0 failed, 0 skipped
|
|
25
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
26
|
+
1 step passed, 0 failed, 0 skipped, 0 undefined
|
|
27
|
+
"""
|
|
28
|
+
And the directory "report/test_results" should exist
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #35 Plain Formatter shows wrong steps when tag-selection is used
|
|
3
|
+
|
|
4
|
+
Background: Test Setup
|
|
5
|
+
Given a new working directory
|
|
6
|
+
And a file named "features/steps/steps.py" with:
|
|
7
|
+
"""
|
|
8
|
+
from behave import given, when, then
|
|
9
|
+
|
|
10
|
+
@given(u'the ninja has a third level black-belt')
|
|
11
|
+
def step(context):
|
|
12
|
+
pass
|
|
13
|
+
|
|
14
|
+
@when(u'attacked by {opponent}')
|
|
15
|
+
def step(context, opponent):
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
@then(u'the ninja should {reaction}')
|
|
19
|
+
def step(context, reaction):
|
|
20
|
+
pass
|
|
21
|
+
"""
|
|
22
|
+
And a file named "features/issue35_1.feature" with:
|
|
23
|
+
"""
|
|
24
|
+
Feature: Using Tags with Features and Scenarios
|
|
25
|
+
|
|
26
|
+
@one
|
|
27
|
+
Scenario: Weaker opponent
|
|
28
|
+
Given the ninja has a third level black-belt
|
|
29
|
+
When attacked by a samurai
|
|
30
|
+
Then the ninja should engage the opponent
|
|
31
|
+
|
|
32
|
+
@two
|
|
33
|
+
Scenario: Stronger opponent
|
|
34
|
+
Given the ninja has a third level black-belt
|
|
35
|
+
When attacked by Chuck Norris
|
|
36
|
+
Then the ninja should run for his life
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
Scenario: Select First Scenario with Tag
|
|
40
|
+
When I run "behave --no-timings -f plain --tags=@one features/issue35_1.feature"
|
|
41
|
+
Then it should pass with:
|
|
42
|
+
"""
|
|
43
|
+
1 feature passed, 0 failed, 0 skipped
|
|
44
|
+
1 scenario passed, 0 failed, 1 skipped
|
|
45
|
+
3 steps passed, 0 failed, 3 skipped, 0 undefined
|
|
46
|
+
"""
|
|
47
|
+
And the command output should contain:
|
|
48
|
+
"""
|
|
49
|
+
Feature: Using Tags with Features and Scenarios
|
|
50
|
+
Scenario: Weaker opponent
|
|
51
|
+
Given the ninja has a third level black-belt ... passed
|
|
52
|
+
When attacked by a samurai ... passed
|
|
53
|
+
Then the ninja should engage the opponent ... passed
|
|
54
|
+
Scenario: Stronger opponent
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
Scenario: Select Second Scenario with Tag
|
|
58
|
+
When I run "behave --no-timings -f plain --tags=@two features/issue35_1.feature"
|
|
59
|
+
Then it should pass with:
|
|
60
|
+
"""
|
|
61
|
+
1 feature passed, 0 failed, 0 skipped
|
|
62
|
+
1 scenario passed, 0 failed, 1 skipped
|
|
63
|
+
3 steps passed, 0 failed, 3 skipped, 0 undefined
|
|
64
|
+
"""
|
|
65
|
+
And the command output should contain:
|
|
66
|
+
"""
|
|
67
|
+
Feature: Using Tags with Features and Scenarios
|
|
68
|
+
Scenario: Weaker opponent
|
|
69
|
+
Scenario: Stronger opponent
|
|
70
|
+
Given the ninja has a third level black-belt ... passed
|
|
71
|
+
When attacked by Chuck Norris ... passed
|
|
72
|
+
Then the ninja should run for his life ... passed
|
|
73
|
+
"""
|
|
74
|
+
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #40 Test Summary Scenario/Step Counts are incorrect for Scenario Outline
|
|
3
|
+
|
|
4
|
+
As I user
|
|
5
|
+
I want that each passed and each failed scenario is counted
|
|
6
|
+
And I want that each passed and failed step in a ScenarioOutline is counted
|
|
7
|
+
|
|
8
|
+
Background: Test Setup
|
|
9
|
+
Given a new working directory
|
|
10
|
+
And a file named "features/steps/steps.py" with:
|
|
11
|
+
"""
|
|
12
|
+
from behave import given, when, then
|
|
13
|
+
|
|
14
|
+
@given(u'a step {outcome} with "{name}"')
|
|
15
|
+
def step(context, outcome, name):
|
|
16
|
+
context.name = name
|
|
17
|
+
assert outcome == "passes"
|
|
18
|
+
|
|
19
|
+
@when(u'a step {outcome} with "{name}"')
|
|
20
|
+
def step(context, outcome, name):
|
|
21
|
+
assert outcome == "passes"
|
|
22
|
+
assert context.name == name
|
|
23
|
+
|
|
24
|
+
@then(u'a step {outcome} with "{name}"')
|
|
25
|
+
def step(context, outcome, name):
|
|
26
|
+
assert outcome == "passes"
|
|
27
|
+
assert context.name == name
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
Scenario: ScenarioOutline with Passing Steps
|
|
31
|
+
Given a file named "features/issue40_1.feature" with:
|
|
32
|
+
"""
|
|
33
|
+
Feature: Verify Scenario/Step Summary Pass Count with ScenarioOutline
|
|
34
|
+
Scenario Outline:
|
|
35
|
+
Given a step passes with "<name>"
|
|
36
|
+
When a step passes with "<name>"
|
|
37
|
+
Then a step passes with "<name>"
|
|
38
|
+
|
|
39
|
+
Examples:
|
|
40
|
+
|name |
|
|
41
|
+
|Alice|
|
|
42
|
+
|Bob |
|
|
43
|
+
"""
|
|
44
|
+
When I run "behave -c -f plain features/issue40_1.feature"
|
|
45
|
+
Then it should pass with:
|
|
46
|
+
"""
|
|
47
|
+
2 scenarios passed, 0 failed, 0 skipped
|
|
48
|
+
6 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
Scenario: ScenarioOutline with Failing Given-Steps
|
|
52
|
+
Given a file named "features/issue40_2G.feature" with:
|
|
53
|
+
"""
|
|
54
|
+
Feature: Scenario/Step Summary Pass/Fail Count with ScenarioOutline
|
|
55
|
+
Scenario Outline:
|
|
56
|
+
Given a step fails with "<name>"
|
|
57
|
+
When a step passes with "<name>"
|
|
58
|
+
Then a step passes with "<name>"
|
|
59
|
+
|
|
60
|
+
Examples:
|
|
61
|
+
|name |
|
|
62
|
+
|Alice|
|
|
63
|
+
|Bob |
|
|
64
|
+
"""
|
|
65
|
+
When I run "behave -c -f plain features/issue40_2G.feature"
|
|
66
|
+
Then it should fail with:
|
|
67
|
+
"""
|
|
68
|
+
0 scenarios passed, 2 failed, 0 skipped
|
|
69
|
+
0 steps passed, 2 failed, 4 skipped, 0 undefined
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
Scenario: ScenarioOutline with Failing When-Steps
|
|
73
|
+
Given a file named "features/issue40_2W.feature" with:
|
|
74
|
+
"""
|
|
75
|
+
Feature: Scenario/Step Summary Pass/Fail Count with ScenarioOutline
|
|
76
|
+
Scenario Outline:
|
|
77
|
+
Given a step passes with "<name>"
|
|
78
|
+
When a step fails with "<name>"
|
|
79
|
+
Then a step passes with "<name>"
|
|
80
|
+
|
|
81
|
+
Examples:
|
|
82
|
+
|name |
|
|
83
|
+
|Alice|
|
|
84
|
+
|Bob |
|
|
85
|
+
"""
|
|
86
|
+
When I run "behave -c -f plain features/issue40_2W.feature"
|
|
87
|
+
Then it should fail with:
|
|
88
|
+
"""
|
|
89
|
+
0 scenarios passed, 2 failed, 0 skipped
|
|
90
|
+
2 steps passed, 2 failed, 2 skipped, 0 undefined
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
Scenario: ScenarioOutline with Failing Then-Steps
|
|
94
|
+
Given a file named "features/issue40_2T.feature" with:
|
|
95
|
+
"""
|
|
96
|
+
Feature: Scenario/Step Summary Pass/Fail Count with ScenarioOutline
|
|
97
|
+
Scenario Outline:
|
|
98
|
+
Given a step passes with "<name>"
|
|
99
|
+
When a step passes with "<name>"
|
|
100
|
+
Then a step fails with "<name>"
|
|
101
|
+
|
|
102
|
+
Examples:
|
|
103
|
+
|name |
|
|
104
|
+
|Alice|
|
|
105
|
+
|Bob |
|
|
106
|
+
"""
|
|
107
|
+
When I run "behave -c -f plain features/issue40_2T.feature"
|
|
108
|
+
Then it should fail with:
|
|
109
|
+
"""
|
|
110
|
+
0 scenarios passed, 2 failed, 0 skipped
|
|
111
|
+
4 steps passed, 2 failed, 0 skipped, 0 undefined
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
Scenario: ScenarioOutline with Mismatched When-Step Example Row
|
|
115
|
+
Given a file named "features/issue40_3W.feature" with:
|
|
116
|
+
"""
|
|
117
|
+
Feature: Scenario/Step Summary Pass/Fail Count with ScenarioOutline
|
|
118
|
+
Scenario Outline:
|
|
119
|
+
Given a step passes with "<name>"
|
|
120
|
+
When a step passes with "Alice"
|
|
121
|
+
Then a step passes with "<name>"
|
|
122
|
+
|
|
123
|
+
Examples:
|
|
124
|
+
|name |
|
|
125
|
+
|Alice|
|
|
126
|
+
|Bob |
|
|
127
|
+
"""
|
|
128
|
+
When I run "behave -c -f plain features/issue40_3W.feature"
|
|
129
|
+
Then it should fail with:
|
|
130
|
+
"""
|
|
131
|
+
1 scenario passed, 1 failed, 0 skipped
|
|
132
|
+
4 steps passed, 1 failed, 1 skipped, 0 undefined
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
Scenario: ScenarioOutline with Mismatched Then-Step Example Row
|
|
136
|
+
Given a file named "features/issue40_3W.feature" with:
|
|
137
|
+
"""
|
|
138
|
+
Feature: Scenario/Step Summary Pass/Fail Count with ScenarioOutline
|
|
139
|
+
Scenario Outline:
|
|
140
|
+
Given a step passes with "<name>"
|
|
141
|
+
When a step passes with "<name>"
|
|
142
|
+
Then a step passes with "Alice"
|
|
143
|
+
|
|
144
|
+
Examples:
|
|
145
|
+
|name |
|
|
146
|
+
|Alice|
|
|
147
|
+
|Bob |
|
|
148
|
+
"""
|
|
149
|
+
When I run "behave -c -f plain features/issue40_3W.feature"
|
|
150
|
+
Then it should fail with:
|
|
151
|
+
"""
|
|
152
|
+
1 scenario passed, 1 failed, 0 skipped
|
|
153
|
+
5 steps passed, 1 failed, 0 skipped, 0 undefined
|
|
154
|
+
"""
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #41 Missing Steps are duplicated in a Scenario Outline
|
|
3
|
+
|
|
4
|
+
As I user
|
|
5
|
+
I want that missing steps are reported only once.
|
|
6
|
+
|
|
7
|
+
Background: Test Setup
|
|
8
|
+
Given a new working directory
|
|
9
|
+
And a file named "features/steps/steps.py" with:
|
|
10
|
+
"""
|
|
11
|
+
from behave import given, when, then
|
|
12
|
+
|
|
13
|
+
@given(u'I enter a "{name}"')
|
|
14
|
+
def step(context, name):
|
|
15
|
+
context.name = name
|
|
16
|
+
|
|
17
|
+
@when(u'I enter a "{name}"')
|
|
18
|
+
def step(context, name):
|
|
19
|
+
context.name = name
|
|
20
|
+
|
|
21
|
+
@then(u'the name is "{name}"')
|
|
22
|
+
def step(context, name):
|
|
23
|
+
assert context.name == name
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
Scenario: Missing Given Step
|
|
27
|
+
Given a file named "features/issue41_missing1.feature" with:
|
|
28
|
+
"""
|
|
29
|
+
Feature: Missing Given-Step in a Scenario Outline
|
|
30
|
+
Scenario Outline:
|
|
31
|
+
Given an unknown step
|
|
32
|
+
When I enter a "<name>"
|
|
33
|
+
Then the name is "<name>"
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
36
|
+
|name |
|
|
37
|
+
|Alice|
|
|
38
|
+
|Bob |
|
|
39
|
+
"""
|
|
40
|
+
When I run "behave -c -f plain features/issue41_missing1.feature"
|
|
41
|
+
Then it should fail with:
|
|
42
|
+
"""
|
|
43
|
+
0 steps passed, 0 failed, 4 skipped, 2 undefined
|
|
44
|
+
"""
|
|
45
|
+
And the command output should contain:
|
|
46
|
+
"""
|
|
47
|
+
You can implement step definitions for undefined steps with these snippets:
|
|
48
|
+
@given(u'an unknown step')
|
|
49
|
+
def step_impl(context):
|
|
50
|
+
raise NotImplementedError(u'STEP: Given an unknown step')
|
|
51
|
+
"""
|
|
52
|
+
But the command output should not contain:
|
|
53
|
+
"""
|
|
54
|
+
You can implement step definitions for undefined steps with these snippets:
|
|
55
|
+
@given(u'an unknown step')
|
|
56
|
+
def step_impl(context):
|
|
57
|
+
raise NotImplementedError(u'STEP: Given an unknown step')
|
|
58
|
+
@given(u'an unknown step')
|
|
59
|
+
def step_impl(context):
|
|
60
|
+
raise NotImplementedError(u'STEP: Given an unknown step')
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
Scenario: Missing When Step
|
|
64
|
+
Given a file named "features/issue41_missing2.feature" with:
|
|
65
|
+
"""
|
|
66
|
+
Feature: Missing When-Step in a Scenario Outline
|
|
67
|
+
Scenario Outline:
|
|
68
|
+
Given I enter a "<name>"
|
|
69
|
+
When I use an unknown step
|
|
70
|
+
Then the name is "<name>"
|
|
71
|
+
|
|
72
|
+
Examples:
|
|
73
|
+
|name |
|
|
74
|
+
|Alice|
|
|
75
|
+
|Bob |
|
|
76
|
+
"""
|
|
77
|
+
When I run "behave -c -f plain features/issue41_missing2.feature"
|
|
78
|
+
Then it should fail with:
|
|
79
|
+
"""
|
|
80
|
+
2 steps passed, 0 failed, 2 skipped, 2 undefined
|
|
81
|
+
"""
|
|
82
|
+
And the command output should contain:
|
|
83
|
+
"""
|
|
84
|
+
You can implement step definitions for undefined steps with these snippets:
|
|
85
|
+
@when(u'I use an unknown step')
|
|
86
|
+
def step_impl(context):
|
|
87
|
+
raise NotImplementedError(u'STEP: When I use an unknown step')
|
|
88
|
+
"""
|
|
89
|
+
But the command output should not contain:
|
|
90
|
+
"""
|
|
91
|
+
You can implement step definitions for undefined steps with these snippets:
|
|
92
|
+
@when(u'I use an unknown step')
|
|
93
|
+
def step_impl(context):
|
|
94
|
+
raise NotImplementedError(u'STEP: When I use an unknown step')
|
|
95
|
+
@when(u'I use an unknown step')
|
|
96
|
+
def step_impl(context):
|
|
97
|
+
raise NotImplementedError(u'STEP: When I use an unknown step')
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
Scenario: Missing Then Step
|
|
101
|
+
Given a file named "features/issue41_missing3.feature" with:
|
|
102
|
+
"""
|
|
103
|
+
Feature: Missing Then-Step in a Scenario Outline
|
|
104
|
+
Scenario Outline:
|
|
105
|
+
Given I enter a "<name>"
|
|
106
|
+
When I enter a "<name>"
|
|
107
|
+
Then I use an unknown step
|
|
108
|
+
|
|
109
|
+
Examples:
|
|
110
|
+
|name |
|
|
111
|
+
|Alice|
|
|
112
|
+
|Bob |
|
|
113
|
+
"""
|
|
114
|
+
When I run "behave -c -f plain features/issue41_missing3.feature"
|
|
115
|
+
Then it should fail with:
|
|
116
|
+
"""
|
|
117
|
+
4 steps passed, 0 failed, 0 skipped, 2 undefined
|
|
118
|
+
"""
|
|
119
|
+
And the command output should contain:
|
|
120
|
+
"""
|
|
121
|
+
You can implement step definitions for undefined steps with these snippets:
|
|
122
|
+
@then(u'I use an unknown step')
|
|
123
|
+
def step_impl(context):
|
|
124
|
+
raise NotImplementedError(u'STEP: Then I use an unknown step')
|
|
125
|
+
"""
|
|
126
|
+
But the command output should not contain:
|
|
127
|
+
"""
|
|
128
|
+
You can implement step definitions for undefined steps with these snippets:
|
|
129
|
+
@then(u'I use an unknown step')
|
|
130
|
+
def step_impl(context):
|
|
131
|
+
raise NotImplementedError(u'STEP: Then I use an unknown step')
|
|
132
|
+
@then(u'I use an unknown step')
|
|
133
|
+
def step_impl(context):
|
|
134
|
+
raise NotImplementedError(u'STEP: Then I use an unknown step')
|
|
135
|
+
"""
|