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,32 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #72: Using 'GHERKIN_COLORS' fails with Exception
|
|
3
|
+
|
|
4
|
+
> Trying: GHERKIN_COLORS=executing=white behave
|
|
5
|
+
> It fails:
|
|
6
|
+
>
|
|
7
|
+
> Traceback (most recent call last):
|
|
8
|
+
> ...
|
|
9
|
+
> File "/.../behave/formatter/ansi_escapes.py", line 38, in <module>
|
|
10
|
+
> escapes[alias] = ''.join([colors[c] for c in aliases[alias].split(',')])
|
|
11
|
+
> TypeError: list indices must be integers, not str
|
|
12
|
+
>
|
|
13
|
+
> The reason is that the global variable colors is defined twice in this module.
|
|
14
|
+
> The second variable overrides/modifies the first (without intention).
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Scenario: Using GHERKIN_COLORS in new working dir
|
|
18
|
+
Given a new working directory
|
|
19
|
+
And I set the environment variable "GHERKIN_COLORS" to "executing=white"
|
|
20
|
+
When I run "behave"
|
|
21
|
+
Then it should fail with:
|
|
22
|
+
"""
|
|
23
|
+
No steps directory in '{__WORKDIR__}/features'
|
|
24
|
+
"""
|
|
25
|
+
But the command output should not contain:
|
|
26
|
+
"""
|
|
27
|
+
Traceback (most recent call last):
|
|
28
|
+
"""
|
|
29
|
+
And the command output should not contain:
|
|
30
|
+
"""
|
|
31
|
+
TypeError: list indices must be integers, not str
|
|
32
|
+
"""
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #73: the current_matcher is not predictable
|
|
3
|
+
|
|
4
|
+
. behave provides 2 matchers: ParseMatcher (parse) and RegexpMatcher (re).
|
|
5
|
+
. The ParseMatcher is used per default when the test runner starts.
|
|
6
|
+
.
|
|
7
|
+
. A step definition file may change the matcher several times
|
|
8
|
+
. by calling `use_step_matcher("re")` or `use_step_matcher("parse")`.
|
|
9
|
+
. In order to make the writing of step definitions more predictable,
|
|
10
|
+
. the matcher should be reset to the default matcher
|
|
11
|
+
. before loading each step definition.
|
|
12
|
+
.
|
|
13
|
+
. A project can define its own default matcher by calling the
|
|
14
|
+
. `use_step_matcher(...)` in the "environment.py" hook.
|
|
15
|
+
. This matcher will be used as default before a step definition is loaded.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Scenario: Verify that ParseMatcher is the default matcher
|
|
19
|
+
Given a new working directory
|
|
20
|
+
And a file named "features/steps/parse_steps.py" with:
|
|
21
|
+
"""
|
|
22
|
+
from behave import step
|
|
23
|
+
|
|
24
|
+
@step(u'a step {outcome:w}')
|
|
25
|
+
def step_passes(context, outcome):
|
|
26
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
27
|
+
"""
|
|
28
|
+
And a file named "features/passing.feature" with:
|
|
29
|
+
"""
|
|
30
|
+
Feature:
|
|
31
|
+
Scenario:
|
|
32
|
+
Given a step passes
|
|
33
|
+
When a step passes
|
|
34
|
+
Then a step passes
|
|
35
|
+
"""
|
|
36
|
+
When I run "behave -f plain features/passing.feature"
|
|
37
|
+
Then it should pass with
|
|
38
|
+
"""
|
|
39
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
40
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
Scenario: Use only RegexMatcher in Step Definitions
|
|
45
|
+
Given a new working directory
|
|
46
|
+
And a file named "features/environment.py" with:
|
|
47
|
+
"""
|
|
48
|
+
from behave import use_step_matcher
|
|
49
|
+
use_step_matcher("re")
|
|
50
|
+
"""
|
|
51
|
+
And a file named "features/steps/regexp_steps.py" with:
|
|
52
|
+
"""
|
|
53
|
+
from behave import step
|
|
54
|
+
|
|
55
|
+
@step(u'a step (?P<outcome>passes|fails)')
|
|
56
|
+
def step_passes(context, outcome):
|
|
57
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
58
|
+
"""
|
|
59
|
+
And a file named "features/passing.feature" with:
|
|
60
|
+
"""
|
|
61
|
+
Feature:
|
|
62
|
+
Scenario:
|
|
63
|
+
Given a step passes
|
|
64
|
+
When a step passes
|
|
65
|
+
Then a step passes
|
|
66
|
+
"""
|
|
67
|
+
When I run "behave -f plain features/passing.feature"
|
|
68
|
+
Then it should pass with
|
|
69
|
+
"""
|
|
70
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
71
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
Scenario: Use ParseMatcher and RegexMatcher in Step Definitions (default=re)
|
|
76
|
+
Given a new working directory
|
|
77
|
+
And a file named "features/environment.py" with:
|
|
78
|
+
"""
|
|
79
|
+
from behave import use_step_matcher
|
|
80
|
+
use_step_matcher("re")
|
|
81
|
+
"""
|
|
82
|
+
And a file named "features/steps/eparse_steps.py" with:
|
|
83
|
+
"""
|
|
84
|
+
from behave import step, use_step_matcher
|
|
85
|
+
use_step_matcher("parse")
|
|
86
|
+
|
|
87
|
+
@step(u'an extraordinary step {outcome:w}')
|
|
88
|
+
def step_passes(context, outcome):
|
|
89
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
90
|
+
"""
|
|
91
|
+
And a file named "features/steps/regexp_steps.py" with:
|
|
92
|
+
"""
|
|
93
|
+
from behave import step
|
|
94
|
+
|
|
95
|
+
@step(u'a step (?P<outcome>passes|fails)')
|
|
96
|
+
def step_passes(context, outcome):
|
|
97
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
98
|
+
"""
|
|
99
|
+
And a file named "features/steps/xparse_steps.py" with:
|
|
100
|
+
"""
|
|
101
|
+
from behave import step, use_step_matcher
|
|
102
|
+
use_step_matcher("parse")
|
|
103
|
+
|
|
104
|
+
@step(u'another step {outcome:w}')
|
|
105
|
+
def step_passes(context, outcome):
|
|
106
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
107
|
+
"""
|
|
108
|
+
And a file named "features/passing3.feature" with:
|
|
109
|
+
"""
|
|
110
|
+
Feature:
|
|
111
|
+
Scenario:
|
|
112
|
+
Given a step passes
|
|
113
|
+
When another step passes
|
|
114
|
+
Then an extraordinary step passes
|
|
115
|
+
"""
|
|
116
|
+
When I run "behave -f plain features/passing3.feature"
|
|
117
|
+
Then it should pass with
|
|
118
|
+
"""
|
|
119
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
120
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
Scenario: Mix ParseMatcher and RegexMatcher in Step Definitions (default=re)
|
|
125
|
+
Given a new working directory
|
|
126
|
+
And a file named "features/environment.py" with:
|
|
127
|
+
"""
|
|
128
|
+
from behave import use_step_matcher
|
|
129
|
+
use_step_matcher("re")
|
|
130
|
+
"""
|
|
131
|
+
And a file named "features/steps/given_steps.py" with:
|
|
132
|
+
"""
|
|
133
|
+
from behave import step, use_step_matcher
|
|
134
|
+
|
|
135
|
+
use_step_matcher("parse")
|
|
136
|
+
@given(u'a step {outcome:w}')
|
|
137
|
+
def given_step_passes(context, outcome):
|
|
138
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
139
|
+
|
|
140
|
+
use_step_matcher("re")
|
|
141
|
+
@given(u'another step (?P<outcome>passes|fails)')
|
|
142
|
+
def given_another_step_passes(context, outcome):
|
|
143
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
144
|
+
|
|
145
|
+
use_step_matcher("parse")
|
|
146
|
+
@given(u'an extraordinary step {outcome:w}')
|
|
147
|
+
def given_extraordinary_step_passes(context, outcome):
|
|
148
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
149
|
+
"""
|
|
150
|
+
And a file named "features/steps/when_steps.py" with:
|
|
151
|
+
"""
|
|
152
|
+
from behave import step, use_step_matcher
|
|
153
|
+
|
|
154
|
+
@when(u'a step (?P<outcome>passes|fails)')
|
|
155
|
+
def when_step_passes(context, outcome):
|
|
156
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
157
|
+
|
|
158
|
+
use_step_matcher("parse")
|
|
159
|
+
@when(u'another step {outcome:w}')
|
|
160
|
+
def when_another_step_passes(context, outcome):
|
|
161
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
162
|
+
|
|
163
|
+
use_step_matcher("re")
|
|
164
|
+
@when(u'an extraordinary step (?P<outcome>passes|fails)')
|
|
165
|
+
def when_extraordinary_step_passes(context, outcome):
|
|
166
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
167
|
+
"""
|
|
168
|
+
And a file named "features/steps/then_steps.py" with:
|
|
169
|
+
"""
|
|
170
|
+
from behave import step, use_step_matcher
|
|
171
|
+
|
|
172
|
+
use_step_matcher("parse")
|
|
173
|
+
@then(u'a step {outcome:w}')
|
|
174
|
+
def then_step_passes(context, outcome):
|
|
175
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
176
|
+
|
|
177
|
+
use_step_matcher("re")
|
|
178
|
+
@then(u'another step (?P<outcome>passes|fails)')
|
|
179
|
+
def then_another_step_passes(context, outcome):
|
|
180
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
181
|
+
|
|
182
|
+
use_step_matcher("parse")
|
|
183
|
+
@then(u'an extraordinary step {outcome:w}')
|
|
184
|
+
def then_extraordinary_step_passes(context, outcome):
|
|
185
|
+
assert outcome == "passes", "FAIL: outcome={0}".format(outcome)
|
|
186
|
+
"""
|
|
187
|
+
And a file named "features/passing3.feature" with:
|
|
188
|
+
"""
|
|
189
|
+
Feature:
|
|
190
|
+
Scenario: 1
|
|
191
|
+
Given a step passes
|
|
192
|
+
When another step passes
|
|
193
|
+
Then an extraordinary step passes
|
|
194
|
+
|
|
195
|
+
Scenario: 2
|
|
196
|
+
Given another step passes
|
|
197
|
+
When an extraordinary step passes
|
|
198
|
+
Then a step passes
|
|
199
|
+
|
|
200
|
+
Scenario: 3
|
|
201
|
+
Given an extraordinary step passes
|
|
202
|
+
When a step passes
|
|
203
|
+
Then another step passes
|
|
204
|
+
"""
|
|
205
|
+
When I run "behave -c -f pretty --no-timings features/passing3.feature"
|
|
206
|
+
Then it should pass with:
|
|
207
|
+
"""
|
|
208
|
+
3 scenarios passed, 0 failed, 0 skipped
|
|
209
|
+
9 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
210
|
+
"""
|
|
211
|
+
And the command output should contain:
|
|
212
|
+
"""
|
|
213
|
+
Feature: # features/passing3.feature:1
|
|
214
|
+
Scenario: 1 # features/passing3.feature:2
|
|
215
|
+
Given a step passes # features/steps/given_steps.py:4
|
|
216
|
+
When another step passes # features/steps/when_steps.py:8
|
|
217
|
+
Then an extraordinary step passes # features/steps/then_steps.py:14
|
|
218
|
+
|
|
219
|
+
Scenario: 2 # features/passing3.feature:7
|
|
220
|
+
Given another step passes # features/steps/given_steps.py:9
|
|
221
|
+
When an extraordinary step passes # features/steps/when_steps.py:13
|
|
222
|
+
Then a step passes # features/steps/then_steps.py:4
|
|
223
|
+
|
|
224
|
+
Scenario: 3 # features/passing3.feature:12
|
|
225
|
+
Given an extraordinary step passes # features/steps/given_steps.py:14
|
|
226
|
+
When a step passes # features/steps/when_steps.py:3
|
|
227
|
+
Then another step passes # features/steps/then_steps.py:9
|
|
228
|
+
"""
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #75: behave @features_from_text_file does not work
|
|
3
|
+
|
|
4
|
+
. Feature of Cucumber. Reading the source code, I see it partly implemented.
|
|
5
|
+
.
|
|
6
|
+
. $ behave @list_of_features.txt
|
|
7
|
+
. https://github.com/jeamland/behave/blob/master/behave/runner.py#L416:L430
|
|
8
|
+
.
|
|
9
|
+
. However it fails because:
|
|
10
|
+
. * it does not remove the @ from the path
|
|
11
|
+
. * it does not search the steps/ directory in the parents of the feature files themselves
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@reuse.colocated_test
|
|
15
|
+
Scenario: Use feature listfile
|
|
16
|
+
Given I use the current directory as working directory
|
|
17
|
+
When I run "behave -f plain features/runner.feature_listfile.feature"
|
|
18
|
+
Then it should pass
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #77: Does not capture stdout from sub-processes
|
|
3
|
+
|
|
4
|
+
. My step functions are using wrapper objects to interact with SUT.
|
|
5
|
+
. Those wrappers use this kind of thing to invoke executables:
|
|
6
|
+
.
|
|
7
|
+
. subprocess.check_call('myprog', ..., stderr=subprocess.STDOUT)
|
|
8
|
+
.
|
|
9
|
+
. However, the output from those calls does not appear in the stdout
|
|
10
|
+
. captured by behave when a step fails.
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Background: Test Setup
|
|
14
|
+
Given a new working directory
|
|
15
|
+
Given a file named "hello.py" with:
|
|
16
|
+
"""
|
|
17
|
+
import sys
|
|
18
|
+
|
|
19
|
+
def hello():
|
|
20
|
+
result = 0
|
|
21
|
+
args = sys.argv[1:]
|
|
22
|
+
if args and args[0].startswith("--fail"):
|
|
23
|
+
result = 1
|
|
24
|
+
args = args[1:]
|
|
25
|
+
message = " ".join(args)
|
|
26
|
+
sys.stdout.write("Hello {0}\n".format(message))
|
|
27
|
+
sys.exit(result)
|
|
28
|
+
|
|
29
|
+
if __name__ == "__main__":
|
|
30
|
+
hello()
|
|
31
|
+
"""
|
|
32
|
+
And a file named "features/steps/subprocess_call_steps.py" with:
|
|
33
|
+
"""
|
|
34
|
+
from behave import given, when, then
|
|
35
|
+
import subprocess
|
|
36
|
+
import os.path
|
|
37
|
+
import sys
|
|
38
|
+
|
|
39
|
+
PYTHON = sys.executable
|
|
40
|
+
HERE = os.path.dirname(__file__)
|
|
41
|
+
|
|
42
|
+
@when(u'I make a subprocess call "hello {commandline}"')
|
|
43
|
+
def step(context, commandline):
|
|
44
|
+
result = subprocess_call_hello(commandline.split())
|
|
45
|
+
assert result == 0
|
|
46
|
+
|
|
47
|
+
def subprocess_call_hello(args):
|
|
48
|
+
command_args = [ PYTHON, "hello.py" ] + args
|
|
49
|
+
result = subprocess.check_call(command_args, stderr=subprocess.STDOUT)
|
|
50
|
+
return result
|
|
51
|
+
# result = subprocess.check_output(command_args, stderr=subprocess.STDOUT)
|
|
52
|
+
# return result
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
Scenario: Subprocess call shows generated output
|
|
56
|
+
Given a file named "features/issue77_hello_OK.feature" with:
|
|
57
|
+
"""
|
|
58
|
+
Feature:
|
|
59
|
+
Scenario:
|
|
60
|
+
When I make a subprocess call "hello world."
|
|
61
|
+
"""
|
|
62
|
+
When I run "behave -f plain features/issue77_hello_OK.feature"
|
|
63
|
+
Then it should pass with:
|
|
64
|
+
"""
|
|
65
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
66
|
+
1 step passed, 0 failed, 0 skipped, 0 undefined
|
|
67
|
+
"""
|
|
68
|
+
And the command output should contain:
|
|
69
|
+
"""
|
|
70
|
+
Hello world.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
Scenario: Subprocess call fails with captured output
|
|
74
|
+
Given a file named "features/issue77_hello_FAIL.feature" with:
|
|
75
|
+
"""
|
|
76
|
+
Feature:
|
|
77
|
+
Scenario:
|
|
78
|
+
When I make a subprocess call "hello --fail FAIL."
|
|
79
|
+
"""
|
|
80
|
+
When I run "behave -f plain features/issue77_hello_FAIL.feature"
|
|
81
|
+
Then it should fail with:
|
|
82
|
+
"""
|
|
83
|
+
0 scenarios passed, 1 failed, 0 skipped
|
|
84
|
+
0 steps passed, 1 failed, 0 skipped, 0 undefined
|
|
85
|
+
"""
|
|
86
|
+
And the command output should contain:
|
|
87
|
+
"""
|
|
88
|
+
Hello FAIL.
|
|
89
|
+
"""
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #80: source file names not properly printed with python3
|
|
3
|
+
|
|
4
|
+
. $ behave -f pretty example/example.feature
|
|
5
|
+
. Scenario: run a simple test # example/example.feature:3
|
|
6
|
+
. Given we have behave installed # <string>:3
|
|
7
|
+
. When we implement a test # <string>:7
|
|
8
|
+
. Then behave will test it for us! # <string>:11
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Background: Test Setup
|
|
12
|
+
Given a new working directory
|
|
13
|
+
And a file named "features/steps/steps.py" with:
|
|
14
|
+
"""
|
|
15
|
+
from behave import given, when, then
|
|
16
|
+
|
|
17
|
+
@given(u'a step passes')
|
|
18
|
+
def step(context):
|
|
19
|
+
pass
|
|
20
|
+
|
|
21
|
+
@when(u'a step passes')
|
|
22
|
+
def step(context):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
@then(u'a step passes')
|
|
26
|
+
def step(context):
|
|
27
|
+
pass
|
|
28
|
+
"""
|
|
29
|
+
And a file named "features/basic.feature" with:
|
|
30
|
+
"""
|
|
31
|
+
Feature:
|
|
32
|
+
Scenario:
|
|
33
|
+
Given a step passes
|
|
34
|
+
When a step passes
|
|
35
|
+
Then a step passes
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
Scenario: Show step locations
|
|
39
|
+
When I run "behave -c -f pretty --no-timings features/basic.feature"
|
|
40
|
+
Then it should pass
|
|
41
|
+
And the command output should contain:
|
|
42
|
+
"""
|
|
43
|
+
Feature: # features/basic.feature:1
|
|
44
|
+
Scenario: # features/basic.feature:2
|
|
45
|
+
Given a step passes # features/steps/steps.py:3
|
|
46
|
+
When a step passes # features/steps/steps.py:7
|
|
47
|
+
Then a step passes # features/steps/steps.py:11
|
|
48
|
+
"""
|
|
49
|
+
And the command output should not contain "# <string>:"
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
@issue
|
|
2
|
+
Feature: Issue #81: Allow defining steps in a separate library
|
|
3
|
+
|
|
4
|
+
. The current design forces steps.py to be in a particular folder.
|
|
5
|
+
. This does not allow to reuse a common library of BDD steps across
|
|
6
|
+
. multiple software projects in a company.
|
|
7
|
+
. It would be great if one could define a separate lib with common steps
|
|
8
|
+
. (e.g. steps4mycompany.py)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Background: Test Setup
|
|
12
|
+
Given a new working directory
|
|
13
|
+
And an empty file named "step_library42/__init__.py"
|
|
14
|
+
And a file named "step_library42/alice_steps.py" with:
|
|
15
|
+
"""
|
|
16
|
+
# -- ALICE-STEPS: Anonymous step names.
|
|
17
|
+
from behave import given, when, then
|
|
18
|
+
|
|
19
|
+
@given(u'I use the step library "{library}"')
|
|
20
|
+
def step(context, library):
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
@when(u'I use steps from this step library')
|
|
24
|
+
def step(context):
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
@then(u'these steps are executed')
|
|
28
|
+
def step(context):
|
|
29
|
+
pass
|
|
30
|
+
"""
|
|
31
|
+
And a file named "features/use_step_library.feature" with:
|
|
32
|
+
"""
|
|
33
|
+
Feature:
|
|
34
|
+
Scenario:
|
|
35
|
+
Given I use the step library "alice"
|
|
36
|
+
When I use steps from this step library
|
|
37
|
+
Then these steps are executed
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
Scenario: Proof of Concept
|
|
41
|
+
Given a file named "features/steps/use_step_libs.py" with:
|
|
42
|
+
"""
|
|
43
|
+
from step_library42.alice_steps import *
|
|
44
|
+
"""
|
|
45
|
+
When I run "behave --no-timings -f plain features/use_step_library.feature"
|
|
46
|
+
Then it should pass with:
|
|
47
|
+
"""
|
|
48
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
49
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
50
|
+
"""
|
|
51
|
+
And the command output should contain:
|
|
52
|
+
"""
|
|
53
|
+
Feature:
|
|
54
|
+
Scenario:
|
|
55
|
+
Given I use the step library "alice" ... passed
|
|
56
|
+
When I use steps from this step library ... passed
|
|
57
|
+
Then these steps are executed ... passed
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
Scenario: With --format=pretty
|
|
61
|
+
Given a file named "features/steps/use_step_libs.py" with:
|
|
62
|
+
"""
|
|
63
|
+
from step_library42.alice_steps import *
|
|
64
|
+
"""
|
|
65
|
+
When I run "behave -c -f pretty features/use_step_library.feature"
|
|
66
|
+
Then it should pass with:
|
|
67
|
+
"""
|
|
68
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
69
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
70
|
+
"""
|
|
71
|
+
And the command output should contain:
|
|
72
|
+
"""
|
|
73
|
+
Feature: # features/use_step_library.feature:1
|
|
74
|
+
Scenario: # features/use_step_library.feature:2
|
|
75
|
+
Given I use the step library "alice" # step_library42/alice_steps.py:4
|
|
76
|
+
When I use steps from this step library # step_library42/alice_steps.py:8
|
|
77
|
+
Then these steps are executed # step_library42/alice_steps.py:12
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
Scenario: Selective step import from step library
|
|
81
|
+
Given a file named "step_library42/bob_steps.py" with:
|
|
82
|
+
"""
|
|
83
|
+
# -- BOB-STEPS: Explicit step function names (otherwise same as alice).
|
|
84
|
+
from behave import given, when, then
|
|
85
|
+
|
|
86
|
+
@given(u'I use the step library "{library}"')
|
|
87
|
+
def given_I_use_the_step_library(context, library):
|
|
88
|
+
pass
|
|
89
|
+
|
|
90
|
+
@when(u'I use steps from this step library')
|
|
91
|
+
def when_I_use_steps_from_this_step_library(context):
|
|
92
|
+
pass
|
|
93
|
+
|
|
94
|
+
@then(u'these steps are executed')
|
|
95
|
+
def then_these_steps_are_executed(context):
|
|
96
|
+
pass
|
|
97
|
+
"""
|
|
98
|
+
And a file named "features/steps/use_step_libs.py" with:
|
|
99
|
+
"""
|
|
100
|
+
from step_library42.bob_steps import given_I_use_the_step_library
|
|
101
|
+
from step_library42.bob_steps import when_I_use_steps_from_this_step_library
|
|
102
|
+
from step_library42.bob_steps import then_these_steps_are_executed
|
|
103
|
+
"""
|
|
104
|
+
When I run "behave -c -f pretty features/use_step_library.feature"
|
|
105
|
+
Then it should pass with:
|
|
106
|
+
"""
|
|
107
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
108
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
109
|
+
"""
|
|
110
|
+
And the command output should contain:
|
|
111
|
+
"""
|
|
112
|
+
Feature: # features/use_step_library.feature:1
|
|
113
|
+
Scenario: # features/use_step_library.feature:2
|
|
114
|
+
Given I use the step library "alice" # step_library42/bob_steps.py:4
|
|
115
|
+
When I use steps from this step library # step_library42/bob_steps.py:8
|
|
116
|
+
Then these steps are executed # step_library42/bob_steps.py:12
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
Scenario: Import step library in "environment.py"
|
|
120
|
+
Given a file named "features/environment.py" with:
|
|
121
|
+
"""
|
|
122
|
+
from step_library42.alice_steps import *
|
|
123
|
+
"""
|
|
124
|
+
And an empty file named "features/steps/__init__.py"
|
|
125
|
+
When I run "behave -c -f pretty features/use_step_library.feature"
|
|
126
|
+
Then it should pass with:
|
|
127
|
+
"""
|
|
128
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
129
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
130
|
+
"""
|
|
131
|
+
And the command output should contain:
|
|
132
|
+
"""
|
|
133
|
+
Feature: # features/use_step_library.feature:1
|
|
134
|
+
Scenario: # features/use_step_library.feature:2
|
|
135
|
+
Given I use the step library "alice" # step_library42/alice_steps.py:4
|
|
136
|
+
When I use steps from this step library # step_library42/alice_steps.py:8
|
|
137
|
+
Then these steps are executed # step_library42/alice_steps.py:12
|
|
138
|
+
"""
|