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,23 @@
|
|
|
1
|
+
Copyright (c) 2012-2014 Benno Rice, Richard Jones, Jens Engel and others, except where noted.
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
|
5
|
+
modification, are permitted provided that the following conditions
|
|
6
|
+
are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright
|
|
9
|
+
notice, this list of conditions and the following disclaimer.
|
|
10
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
11
|
+
notice, this list of conditions and the following disclaimer in the
|
|
12
|
+
documentation and/or other materials provided with the distribution.
|
|
13
|
+
|
|
14
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
15
|
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
16
|
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
17
|
+
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
18
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
19
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
20
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
21
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
22
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
23
|
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
include README.rst
|
|
2
|
+
include CHANGES.rst
|
|
3
|
+
include MANIFEST.in
|
|
4
|
+
include LICENSE
|
|
5
|
+
include .coveragerc
|
|
6
|
+
include .editorconfig
|
|
7
|
+
include .pycheckrc
|
|
8
|
+
include .pylintrc
|
|
9
|
+
include *.cfg
|
|
10
|
+
include *.ini
|
|
11
|
+
include *.py
|
|
12
|
+
include *.rst
|
|
13
|
+
include *.txt
|
|
14
|
+
include *.yml
|
|
15
|
+
include *.yaml
|
|
16
|
+
include bin/behave*
|
|
17
|
+
include bin/invoke*
|
|
18
|
+
recursive-include .ci *.yml
|
|
19
|
+
recursive-include bin *.py *.cmd *.sh *.zip *.yml
|
|
20
|
+
recursive-include behave4cmd0 *.py
|
|
21
|
+
recursive-include etc *.xsd *.txt *.json-schema
|
|
22
|
+
recursive-include examples *.py *.feature *.txt *.rst *.ini
|
|
23
|
+
recursive-include docs *.rst *.txt *.css *.py *.html *.rst-* *.png Makefile
|
|
24
|
+
recursive-include docs/_themes *.html *.conf *.css *.css_t LICENSE*
|
|
25
|
+
recursive-include test *.py
|
|
26
|
+
recursive-include tests *.py *.txt
|
|
27
|
+
recursive-include tasks *.py *.zip *.txt *.rst
|
|
28
|
+
recursive-include tools *.feature *.py *.yml *.sh
|
|
29
|
+
recursive-include features *.feature *.py *.txt
|
|
30
|
+
recursive-include issue.features *.feature *.py *.txt
|
|
31
|
+
recursive-include more.features *.feature *.py *.txt
|
|
32
|
+
recursive-include py.requirements *.txt
|
|
33
|
+
|
|
34
|
+
prune .tox
|
|
35
|
+
prune .venv*
|
|
36
|
+
prune paver_ext
|
|
37
|
+
exclude pavement.py
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Project Info
|
|
2
|
+
===============================================================================
|
|
3
|
+
|
|
4
|
+
=============== ===============================================================
|
|
5
|
+
Category Hyperlink
|
|
6
|
+
=============== ===============================================================
|
|
7
|
+
Documentation: http://pythonhosted.org/behave/
|
|
8
|
+
(or: http://behave.readthedocs.org/ for latest and stable)
|
|
9
|
+
Download: http://pypi.python.org/pypi/behave (or: `github archive`_)
|
|
10
|
+
Development: https://github.com/behave/behave
|
|
11
|
+
Issue Tracker: https://github.com/behave/behave/issues
|
|
12
|
+
Changelog: `CHANGES.rst <CHANGES.rst>`_
|
|
13
|
+
Newsgroup: https://groups.google.com/forum/#!forum/behave-users
|
|
14
|
+
=============== ===============================================================
|
|
15
|
+
|
|
16
|
+
.. hint::
|
|
17
|
+
|
|
18
|
+
The PyPI version is the latest stable version.
|
|
19
|
+
Otherwise, use the latest stable tag or the "bleeding edge" from Github.
|
|
20
|
+
|
|
21
|
+
.. _`github archive`: https://github.com/behave/behave/tags
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
======
|
|
2
|
+
Behave
|
|
3
|
+
======
|
|
4
|
+
|
|
5
|
+
.. image:: https://badges.gitter.im/Join%20Chat.svg
|
|
6
|
+
:alt: Join the chat at https://gitter.im/behave/behave
|
|
7
|
+
:target: https://gitter.im/behave/behave?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
|
8
|
+
|
|
9
|
+
.. image:: https://img.shields.io/travis/behave/behave/master.svg
|
|
10
|
+
:target: https://travis-ci.org/behave/behave
|
|
11
|
+
:alt: Travis CI Build Status
|
|
12
|
+
|
|
13
|
+
.. image:: https://img.shields.io/pypi/v/behave.svg
|
|
14
|
+
:target: https://pypi.python.org/pypi/behave
|
|
15
|
+
:alt: Latest Version
|
|
16
|
+
|
|
17
|
+
.. image:: https://img.shields.io/pypi/dm/behave.svg
|
|
18
|
+
:target: https://pypi.python.org/pypi/behave
|
|
19
|
+
:alt: Downloads
|
|
20
|
+
|
|
21
|
+
.. image:: https://img.shields.io/pypi/l/behave.svg
|
|
22
|
+
:target: https://pypi.python.org/pypi/behave/
|
|
23
|
+
:alt: License
|
|
24
|
+
|
|
25
|
+
.. |logo| image:: https://raw.github.com/behave/behave/master/docs/_static/behave_logo1.png
|
|
26
|
+
|
|
27
|
+
behave is behavior-driven development, Python style.
|
|
28
|
+
|
|
29
|
+
|logo|
|
|
30
|
+
|
|
31
|
+
Behavior-driven development (or BDD) is an agile software development
|
|
32
|
+
technique that encourages collaboration between developers, QA and
|
|
33
|
+
non-technical or business participants in a software project.
|
|
34
|
+
|
|
35
|
+
*behave* uses tests written in a natural language style, backed up by Python
|
|
36
|
+
code.
|
|
37
|
+
|
|
38
|
+
First, `install *behave*.`_
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Now make a directory called "features/".
|
|
42
|
+
In that directory create a file called "example.feature" containing:
|
|
43
|
+
|
|
44
|
+
.. code-block:: gherkin
|
|
45
|
+
|
|
46
|
+
# -- FILE: features/example.feature
|
|
47
|
+
Feature: Showing off behave
|
|
48
|
+
|
|
49
|
+
Scenario: Run a simple test
|
|
50
|
+
Given we have behave installed
|
|
51
|
+
When we implement 5 tests
|
|
52
|
+
Then behave will test them for us!
|
|
53
|
+
|
|
54
|
+
Make a new directory called "features/steps/".
|
|
55
|
+
In that directory create a file called "example_steps.py" containing:
|
|
56
|
+
|
|
57
|
+
.. code-block:: python
|
|
58
|
+
|
|
59
|
+
# -- FILE: features/steps/example_steps.py
|
|
60
|
+
from behave import given, when, then, step
|
|
61
|
+
|
|
62
|
+
@given('we have behave installed')
|
|
63
|
+
def step_impl(context):
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
@when('we implement {number:d} tests')
|
|
67
|
+
def step_impl(context, number): # -- NOTE: number is converted into integer
|
|
68
|
+
assert number > 1 or number == 0
|
|
69
|
+
context.tests_count = number
|
|
70
|
+
|
|
71
|
+
@then('behave will test them for us!')
|
|
72
|
+
def step_impl(context):
|
|
73
|
+
assert context.failed is False
|
|
74
|
+
assert context.tests_count >= 0
|
|
75
|
+
|
|
76
|
+
Run behave:
|
|
77
|
+
|
|
78
|
+
.. code-block:: bash
|
|
79
|
+
|
|
80
|
+
$ behave
|
|
81
|
+
Feature: Showing off behave # features/example.feature:2
|
|
82
|
+
|
|
83
|
+
Scenario: Run a simple test # features/example.feature:4
|
|
84
|
+
Given we have behave installed # features/steps/example_steps.py:4
|
|
85
|
+
When we implement 5 tests # features/steps/example_steps.py:8
|
|
86
|
+
Then behave will test them for us! # features/steps/example_steps.py:13
|
|
87
|
+
|
|
88
|
+
1 feature passed, 0 failed, 0 skipped
|
|
89
|
+
1 scenario passed, 0 failed, 0 skipped
|
|
90
|
+
3 steps passed, 0 failed, 0 skipped, 0 undefined
|
|
91
|
+
|
|
92
|
+
Now, continue reading to learn how to get the most out of *behave*. To get started,
|
|
93
|
+
we recommend the `tutorial`_ and then the `feature testing language`_ and
|
|
94
|
+
`api`_ references.
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
.. _`Install *behave*.`: http://pythonhosted.org/behave/install.html
|
|
98
|
+
.. _`tutorial`: http://pythonhosted.org/behave/tutorial.html#features
|
|
99
|
+
.. _`feature testing language`: http://pythonhosted.org/behave/gherkin.html
|
|
100
|
+
.. _`api`: http://pythonhosted.org/behave/api.html
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
More Information
|
|
104
|
+
-------------------------------------------------------------------------------
|
|
105
|
+
|
|
106
|
+
* `behave documentation`_ (`latest changes`_)
|
|
107
|
+
* `behave.example`_: Behave Examples and Tutorials (docs, executable examples).
|
|
108
|
+
|
|
109
|
+
.. _behave documentation: http://pythonhosted.org/behave/
|
|
110
|
+
.. _latest changes: https://github.com/behave/behave/blob/master/CHANGES.rst
|
|
111
|
+
.. _behave.example: https://github.com/behave/behave.example
|
|
112
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.2.6.dev0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# BEHAVE CONFIGURATION
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# FILE: .behaverc, behave.ini, setup.cfg, tox.ini
|
|
5
|
+
#
|
|
6
|
+
# SEE ALSO:
|
|
7
|
+
# * http://packages.python.org/behave/behave.html#configuration-files
|
|
8
|
+
# * https://github.com/behave/behave
|
|
9
|
+
# * http://pypi.python.org/pypi/behave/
|
|
10
|
+
# =============================================================================
|
|
11
|
+
|
|
12
|
+
[behave]
|
|
13
|
+
default_tags = -@xfail -@not_implemented
|
|
14
|
+
show_skipped = false
|
|
15
|
+
format = rerun
|
|
16
|
+
progress3
|
|
17
|
+
outfiles = rerun.txt
|
|
18
|
+
reports/report_progress3.txt
|
|
19
|
+
junit = true
|
|
20
|
+
logging_level = INFO
|
|
21
|
+
# logging_format = LOG.%(levelname)-8s %(name)-10s: %(message)s
|
|
22
|
+
# logging_format = LOG.%(levelname)-8s %(asctime)s %(name)-10s: %(message)s
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
"""behave is behaviour-driven development, Python style
|
|
3
|
+
|
|
4
|
+
Behavior-driven development (or BDD) is an agile software development
|
|
5
|
+
technique that encourages collaboration between developers, QA and
|
|
6
|
+
non-technical or business participants in a software project.
|
|
7
|
+
|
|
8
|
+
*behave* uses tests written in a natural language style, backed up by Python
|
|
9
|
+
code.
|
|
10
|
+
|
|
11
|
+
To get started, we recommend the `tutorial`_ and then the `test language`_ and
|
|
12
|
+
`api`_ references.
|
|
13
|
+
|
|
14
|
+
.. _`tutorial`: tutorial.html
|
|
15
|
+
.. _`test language`: gherkin.html
|
|
16
|
+
.. _`api`: api.html
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import absolute_import
|
|
20
|
+
from behave.step_registry import * # pylint: disable=wildcard-import
|
|
21
|
+
from behave.matchers import use_step_matcher, step_matcher, register_type
|
|
22
|
+
|
|
23
|
+
# pylint: disable=undefined-all-variable
|
|
24
|
+
__all__ = [
|
|
25
|
+
"given", "when", "then", "step", "use_step_matcher", "register_type",
|
|
26
|
+
"Given", "When", "Then", "Step",
|
|
27
|
+
# -- DEPRECATING:
|
|
28
|
+
"step_matcher"
|
|
29
|
+
]
|
|
30
|
+
__version__ = '1.2.6.dev0'
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
from __future__ import absolute_import, print_function
|
|
4
|
+
import codecs
|
|
5
|
+
import sys
|
|
6
|
+
import six
|
|
7
|
+
from behave import __version__
|
|
8
|
+
from behave.configuration import Configuration, ConfigError
|
|
9
|
+
from behave.parser import ParserError
|
|
10
|
+
from behave.runner import Runner
|
|
11
|
+
from behave.runner_util import print_undefined_step_snippets, reset_runtime, \
|
|
12
|
+
InvalidFileLocationError, InvalidFilenameError, FileNotFoundError
|
|
13
|
+
from behave.textutil import compute_words_maxsize, text as _text
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
TAG_HELP = """
|
|
17
|
+
Scenarios inherit tags declared on the Feature level. The simplest
|
|
18
|
+
TAG_EXPRESSION is simply a tag::
|
|
19
|
+
|
|
20
|
+
--tags @dev
|
|
21
|
+
|
|
22
|
+
You may even leave off the "@" - behave doesn't mind.
|
|
23
|
+
|
|
24
|
+
When a tag in a tag expression starts with a ~, this represents boolean NOT::
|
|
25
|
+
|
|
26
|
+
--tags ~@dev
|
|
27
|
+
|
|
28
|
+
A tag expression can have several tags separated by a comma, which represents
|
|
29
|
+
logical OR::
|
|
30
|
+
|
|
31
|
+
--tags @dev,@wip
|
|
32
|
+
|
|
33
|
+
The --tags option can be specified several times, and this represents logical
|
|
34
|
+
AND, for instance this represents the boolean expression
|
|
35
|
+
"(@foo or not @bar) and @zap"::
|
|
36
|
+
|
|
37
|
+
--tags @foo,~@bar --tags @zap.
|
|
38
|
+
|
|
39
|
+
Beware that if you want to use several negative tags to exclude several tags
|
|
40
|
+
you have to use logical AND::
|
|
41
|
+
|
|
42
|
+
--tags ~@fixme --tags ~@buggy.
|
|
43
|
+
""".strip()
|
|
44
|
+
|
|
45
|
+
# TODO
|
|
46
|
+
# Positive tags can be given a threshold to limit the number of occurrences.
|
|
47
|
+
# Which can be practical if you are practicing Kanban or CONWIP. This will fail
|
|
48
|
+
# if there are more than 3 occurrences of the @qa tag:
|
|
49
|
+
#
|
|
50
|
+
# --tags @qa:3
|
|
51
|
+
# """.strip()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def run_behave(config, runner_class=None):
|
|
55
|
+
"""Run behave with configuration.
|
|
56
|
+
|
|
57
|
+
:param config: Configuration object for behave.
|
|
58
|
+
:param runner_class: Runner class to use or none (use Runner class).
|
|
59
|
+
:return: 0, if successful. Non-zero on failure.
|
|
60
|
+
|
|
61
|
+
.. note:: BEST EFFORT, not intended for multi-threaded usage.
|
|
62
|
+
"""
|
|
63
|
+
# pylint: disable=too-many-branches, too-many-statements, too-many-return-statements
|
|
64
|
+
if runner_class is None:
|
|
65
|
+
runner_class = Runner
|
|
66
|
+
|
|
67
|
+
if config.version:
|
|
68
|
+
print("behave " + __version__)
|
|
69
|
+
return 0
|
|
70
|
+
|
|
71
|
+
if config.tags_help:
|
|
72
|
+
print(TAG_HELP)
|
|
73
|
+
return 0
|
|
74
|
+
|
|
75
|
+
if config.lang_list:
|
|
76
|
+
from behave.i18n import languages
|
|
77
|
+
stdout = sys.stdout
|
|
78
|
+
if six.PY2:
|
|
79
|
+
# -- PYTHON2: Overcome implicit encode problems (encoding=ASCII).
|
|
80
|
+
stdout = codecs.getwriter("UTF-8")(sys.stdout)
|
|
81
|
+
iso_codes = languages.keys()
|
|
82
|
+
print("Languages available:")
|
|
83
|
+
for iso_code in sorted(iso_codes):
|
|
84
|
+
native = languages[iso_code]["native"][0]
|
|
85
|
+
name = languages[iso_code]["name"][0]
|
|
86
|
+
print(u"%s: %s / %s" % (iso_code, native, name), file=stdout)
|
|
87
|
+
return 0
|
|
88
|
+
|
|
89
|
+
if config.lang_help:
|
|
90
|
+
from behave.i18n import languages
|
|
91
|
+
if config.lang_help not in languages:
|
|
92
|
+
print("%s is not a recognised language: try --lang-list" % \
|
|
93
|
+
config.lang_help)
|
|
94
|
+
return 1
|
|
95
|
+
trans = languages[config.lang_help]
|
|
96
|
+
print(u"Translations for %s / %s" % (trans["name"][0],
|
|
97
|
+
trans["native"][0]))
|
|
98
|
+
for kw in trans:
|
|
99
|
+
if kw in "name native".split():
|
|
100
|
+
continue
|
|
101
|
+
print(u"%16s: %s" % (kw.title().replace("_", " "),
|
|
102
|
+
u", ".join(w for w in trans[kw] if w != "*")))
|
|
103
|
+
return 0
|
|
104
|
+
|
|
105
|
+
if not config.format:
|
|
106
|
+
config.format = [config.default_format]
|
|
107
|
+
elif config.format and "format" in config.defaults:
|
|
108
|
+
# -- CASE: Formatter are specified in behave configuration file.
|
|
109
|
+
# Check if formatter are provided on command-line, too.
|
|
110
|
+
if len(config.format) == len(config.defaults["format"]):
|
|
111
|
+
# -- NO FORMATTER on command-line: Add default formatter.
|
|
112
|
+
config.format.append(config.default_format)
|
|
113
|
+
if "help" in config.format:
|
|
114
|
+
print_formatters("Available formatters:")
|
|
115
|
+
return 0
|
|
116
|
+
|
|
117
|
+
if len(config.outputs) > len(config.format):
|
|
118
|
+
print("CONFIG-ERROR: More outfiles (%d) than formatters (%d)." % \
|
|
119
|
+
(len(config.outputs), len(config.format)))
|
|
120
|
+
return 1
|
|
121
|
+
|
|
122
|
+
# -- MAIN PART:
|
|
123
|
+
failed = True
|
|
124
|
+
try:
|
|
125
|
+
reset_runtime()
|
|
126
|
+
runner = runner_class(config)
|
|
127
|
+
failed = runner.run()
|
|
128
|
+
except ParserError as e:
|
|
129
|
+
print(u"ParserError: %s" % e)
|
|
130
|
+
except ConfigError as e:
|
|
131
|
+
print(u"ConfigError: %s" % e)
|
|
132
|
+
except FileNotFoundError as e:
|
|
133
|
+
print(u"FileNotFoundError: %s" % e)
|
|
134
|
+
except InvalidFileLocationError as e:
|
|
135
|
+
print(u"InvalidFileLocationError: %s" % e)
|
|
136
|
+
except InvalidFilenameError as e:
|
|
137
|
+
print(u"InvalidFilenameError: %s" % e)
|
|
138
|
+
except Exception as e:
|
|
139
|
+
# -- DIAGNOSTICS:
|
|
140
|
+
text = _text(e)
|
|
141
|
+
print(u"Exception %s: %s" % (e.__class__.__name__, text))
|
|
142
|
+
raise
|
|
143
|
+
|
|
144
|
+
if config.show_snippets and runner.undefined_steps:
|
|
145
|
+
print_undefined_step_snippets(runner.undefined_steps,
|
|
146
|
+
colored=config.color)
|
|
147
|
+
|
|
148
|
+
return_code = 0
|
|
149
|
+
if failed:
|
|
150
|
+
return_code = 1
|
|
151
|
+
return return_code
|
|
152
|
+
|
|
153
|
+
def print_formatters(title=None, stream=None):
|
|
154
|
+
"""Prints the list of available formatters and their description.
|
|
155
|
+
|
|
156
|
+
:param title: Optional title (as string).
|
|
157
|
+
:param stream: Optional, output stream to use (default: sys.stdout).
|
|
158
|
+
"""
|
|
159
|
+
from behave.formatter._registry import format_items
|
|
160
|
+
from operator import itemgetter
|
|
161
|
+
|
|
162
|
+
if stream is None:
|
|
163
|
+
stream = sys.stdout
|
|
164
|
+
if title:
|
|
165
|
+
stream.write(u"%s\n" % title)
|
|
166
|
+
|
|
167
|
+
format_items = sorted(format_items(resolved=True), key=itemgetter(0))
|
|
168
|
+
format_names = [item[0] for item in format_items]
|
|
169
|
+
column_size = compute_words_maxsize(format_names)
|
|
170
|
+
schema = u" %-"+ _text(column_size) +"s %s\n"
|
|
171
|
+
for name, formatter_class in format_items:
|
|
172
|
+
formatter_description = getattr(formatter_class, "description", "")
|
|
173
|
+
stream.write(schema % (name, formatter_description))
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def main(args=None):
|
|
177
|
+
"""Main function to run behave (as program).
|
|
178
|
+
|
|
179
|
+
:param args: Command-line args (or string) to use.
|
|
180
|
+
:return: 0, if successful. Non-zero, in case of errors/failures.
|
|
181
|
+
"""
|
|
182
|
+
config = Configuration(args)
|
|
183
|
+
return run_behave(config)
|
|
184
|
+
|
|
185
|
+
if __name__ == "__main__":
|
|
186
|
+
# -- EXAMPLE: main("--version")
|
|
187
|
+
sys.exit(main())
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
This module provides low-level helper functionality during step imports.
|
|
4
|
+
|
|
5
|
+
.. warn:: Do not use directly
|
|
6
|
+
|
|
7
|
+
It should not be used directly except in behave Runner classes
|
|
8
|
+
that need to provide the correct context (step_registry, matchers, etc.)
|
|
9
|
+
instead of using the global module specific variables.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import absolute_import
|
|
13
|
+
from contextlib import contextmanager
|
|
14
|
+
from threading import Lock
|
|
15
|
+
from types import ModuleType
|
|
16
|
+
import os.path
|
|
17
|
+
import sys
|
|
18
|
+
from behave import step_registry as _step_registry
|
|
19
|
+
# from behave import matchers as _matchers
|
|
20
|
+
import six
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# -----------------------------------------------------------------------------
|
|
24
|
+
# UTILITY FUNCTIONS:
|
|
25
|
+
# -----------------------------------------------------------------------------
|
|
26
|
+
def setup_api_with_step_decorators(module, step_registry):
|
|
27
|
+
_step_registry.setup_step_decorators(module, step_registry)
|
|
28
|
+
|
|
29
|
+
def setup_api_with_matcher_functions(module, matcher_factory):
|
|
30
|
+
module.use_step_matcher = matcher_factory.use_step_matcher
|
|
31
|
+
module.step_matcher = matcher_factory.use_step_matcher
|
|
32
|
+
module.register_type = matcher_factory.register_type
|
|
33
|
+
|
|
34
|
+
# -----------------------------------------------------------------------------
|
|
35
|
+
# FAKE MODULE CLASSES: For step imports
|
|
36
|
+
# -----------------------------------------------------------------------------
|
|
37
|
+
# class FakeModule(object):
|
|
38
|
+
class FakeModule(ModuleType):
|
|
39
|
+
ensure_fake = True
|
|
40
|
+
|
|
41
|
+
# -- SUPPORT FOR: behave.step_registry.setup_step_decorators()
|
|
42
|
+
def __setitem__(self, name, value):
|
|
43
|
+
assert "." not in name
|
|
44
|
+
setattr(self, name, value)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class StepRegistryModule(FakeModule):
|
|
48
|
+
"""Provides a fake :mod:`behave.step_registry` module
|
|
49
|
+
that can be used during step imports.
|
|
50
|
+
"""
|
|
51
|
+
__all__ = [
|
|
52
|
+
"given", "when", "then", "step",
|
|
53
|
+
"Given", "When", "Then", "Step",
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
def __init__(self, step_registry):
|
|
57
|
+
super(StepRegistryModule, self).__init__("behave.step_registry")
|
|
58
|
+
self.registry = step_registry
|
|
59
|
+
setup_api_with_step_decorators(self, step_registry)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class StepMatchersModule(FakeModule):
|
|
63
|
+
__all__ = ["use_step_matcher", "register_type", "step_matcher"]
|
|
64
|
+
|
|
65
|
+
def __init__(self, matcher_factory):
|
|
66
|
+
super(StepMatchersModule, self).__init__("behave.matchers")
|
|
67
|
+
self.matcher_factory = matcher_factory
|
|
68
|
+
setup_api_with_matcher_functions(self, matcher_factory)
|
|
69
|
+
self.use_default_step_matcher = matcher_factory.use_default_step_matcher
|
|
70
|
+
self.get_matcher = matcher_factory.make_matcher
|
|
71
|
+
# self.matcher_mapping = matcher_mapping or _matchers.matcher_mapping.copy()
|
|
72
|
+
# self.current_matcher = current_matcher or _matchers.current_matcher
|
|
73
|
+
|
|
74
|
+
# -- INJECT PYTHON PACKAGE META-DATA:
|
|
75
|
+
# REQUIRED-FOR: Non-fake submodule imports (__path__).
|
|
76
|
+
here = os.path.dirname(__file__)
|
|
77
|
+
self.__file__ = os.path.abspath(os.path.join(here, "matchers.py"))
|
|
78
|
+
self.__name__ = "behave.matchers"
|
|
79
|
+
# self.__path__ = [os.path.abspath(here)]
|
|
80
|
+
|
|
81
|
+
# def use_step_matcher(self, name):
|
|
82
|
+
# self.matcher_factory.use_step_matcher(name)
|
|
83
|
+
# # self.current_matcher = self.matcher_mapping[name]
|
|
84
|
+
#
|
|
85
|
+
# def use_default_step_matcher(self, name=None):
|
|
86
|
+
# self.matcher_factory.use_default_step_matcher(name=None)
|
|
87
|
+
#
|
|
88
|
+
# def get_matcher(self, func, string):
|
|
89
|
+
# # return self.current_matcher
|
|
90
|
+
# return self.matcher_factory.make_matcher(func, string)
|
|
91
|
+
#
|
|
92
|
+
# def register_type(self, **kwargs):
|
|
93
|
+
# # _matchers.register_type(**kwargs)
|
|
94
|
+
# self.matcher_factory.register_type(**kwargs)
|
|
95
|
+
#
|
|
96
|
+
# step_matcher = use_step_matcher
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class BehaveModule(FakeModule):
|
|
100
|
+
__all__ = StepRegistryModule.__all__ + StepMatchersModule.__all__
|
|
101
|
+
|
|
102
|
+
def __init__(self, step_registry, matcher_factory=None):
|
|
103
|
+
if matcher_factory is None:
|
|
104
|
+
matcher_factory = step_registry.step_matcher_factory
|
|
105
|
+
assert matcher_factory is not None
|
|
106
|
+
super(BehaveModule, self).__init__("behave")
|
|
107
|
+
setup_api_with_step_decorators(self, step_registry)
|
|
108
|
+
setup_api_with_matcher_functions(self, matcher_factory)
|
|
109
|
+
self.use_default_step_matcher = matcher_factory.use_default_step_matcher
|
|
110
|
+
assert step_registry.matcher_factory == matcher_factory
|
|
111
|
+
|
|
112
|
+
# -- INJECT PYTHON PACKAGE META-DATA:
|
|
113
|
+
# REQUIRED-FOR: Non-fake submodule imports (__path__).
|
|
114
|
+
here = os.path.dirname(__file__)
|
|
115
|
+
self.__file__ = os.path.abspath(os.path.join(here, "__init__.py"))
|
|
116
|
+
self.__name__ = "behave"
|
|
117
|
+
self.__path__ = [os.path.abspath(here)]
|
|
118
|
+
self.__package__ = None
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class StepImportModuleContext(object):
|
|
122
|
+
|
|
123
|
+
def __init__(self, step_container):
|
|
124
|
+
self.step_registry = step_container.step_registry
|
|
125
|
+
self.matcher_factory = step_container.matcher_factory
|
|
126
|
+
assert self.step_registry.matcher_factory == self.matcher_factory
|
|
127
|
+
self.step_registry.matcher_factory = self.matcher_factory
|
|
128
|
+
|
|
129
|
+
step_registry_module = StepRegistryModule(self.step_registry)
|
|
130
|
+
step_matchers_module = StepMatchersModule(self.matcher_factory)
|
|
131
|
+
behave_module = BehaveModule(self.step_registry, self.matcher_factory)
|
|
132
|
+
self.modules = {
|
|
133
|
+
"behave": behave_module,
|
|
134
|
+
"behave.matchers": step_matchers_module,
|
|
135
|
+
"behave.step_registry": step_registry_module,
|
|
136
|
+
}
|
|
137
|
+
# self.default_matcher = self.step_matchers_module.current_matcher
|
|
138
|
+
|
|
139
|
+
def reset_current_matcher(self):
|
|
140
|
+
self.matcher_factory.use_default_step_matcher()
|
|
141
|
+
|
|
142
|
+
_step_import_lock = Lock()
|
|
143
|
+
unknown = object()
|
|
144
|
+
|
|
145
|
+
@contextmanager
|
|
146
|
+
def use_step_import_modules(step_container):
|
|
147
|
+
"""Redirect any step/type registration to the runner's step-context object
|
|
148
|
+
during step imports by using fake modules (instead of using module-globals).
|
|
149
|
+
|
|
150
|
+
This allows that multiple runners can be used without polluting the
|
|
151
|
+
global variables in problematic modules
|
|
152
|
+
(:mod:`behave.step_registry`, mod:`behave.matchers`).
|
|
153
|
+
|
|
154
|
+
.. sourcecode:: python
|
|
155
|
+
|
|
156
|
+
# -- RUNNER-IMPLEMENTATION:
|
|
157
|
+
def load_step_definitions(self, ...):
|
|
158
|
+
step_container = self.step_container
|
|
159
|
+
with use_step_import_modules(step_container) as import_context:
|
|
160
|
+
# -- USE: Fake modules during step imports
|
|
161
|
+
...
|
|
162
|
+
import_context.reset_current_matcher()
|
|
163
|
+
|
|
164
|
+
:param step_container: Step context object with step_registry, matcher_factory.
|
|
165
|
+
"""
|
|
166
|
+
orig_modules = {}
|
|
167
|
+
import_context = StepImportModuleContext(step_container)
|
|
168
|
+
with _step_import_lock:
|
|
169
|
+
# -- CRITICAL-SECTION (multi-threading protected)
|
|
170
|
+
try:
|
|
171
|
+
# -- SCOPE-GUARD SETUP: Replace original modules with fake ones.
|
|
172
|
+
for module_name, fake_module in six.iteritems(import_context.modules):
|
|
173
|
+
orig_module = sys.modules.get(module_name, unknown)
|
|
174
|
+
orig_modules[module_name] = orig_module
|
|
175
|
+
sys.modules[module_name] = fake_module
|
|
176
|
+
|
|
177
|
+
# -- USE: Fake modules for step imports.
|
|
178
|
+
yield import_context
|
|
179
|
+
finally:
|
|
180
|
+
# -- SCOPE-GUARD CLEANUP: Restore original modules.
|
|
181
|
+
for module_name, orig_module in six.iteritems(orig_modules):
|
|
182
|
+
if orig_module is unknown:
|
|
183
|
+
del sys.modules[module_name]
|
|
184
|
+
else:
|
|
185
|
+
sys.modules[module_name] = orig_module
|