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,96 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
# pylint: disable=unused-wildcard-import
|
|
3
|
+
from __future__ import absolute_import, with_statement
|
|
4
|
+
from mock import Mock, patch
|
|
5
|
+
from nose.tools import * # pylint: disable=wildcard-import
|
|
6
|
+
from six.moves import range # pylint: disable=redefined-builtin
|
|
7
|
+
from behave import step_registry
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TestStepRegistry(object):
|
|
11
|
+
# pylint: disable=invalid-name, no-self-use
|
|
12
|
+
|
|
13
|
+
def test_add_step_definition_adds_to_lowercased_keyword(self):
|
|
14
|
+
registry = step_registry.StepRegistry()
|
|
15
|
+
# -- MONKEYPATCH-PROBLEM:
|
|
16
|
+
# with patch('behave.matchers.get_matcher') as get_matcher:
|
|
17
|
+
with patch('behave.step_registry.get_matcher') as get_matcher:
|
|
18
|
+
func = lambda x: -x
|
|
19
|
+
string = 'just a test string'
|
|
20
|
+
magic_object = object()
|
|
21
|
+
get_matcher.return_value = magic_object
|
|
22
|
+
|
|
23
|
+
for step_type in list(registry.steps.keys()):
|
|
24
|
+
l = []
|
|
25
|
+
registry.steps[step_type] = l
|
|
26
|
+
|
|
27
|
+
registry.add_step_definition(step_type.upper(), string, func)
|
|
28
|
+
get_matcher.assert_called_with(func, string)
|
|
29
|
+
eq_(l, [magic_object])
|
|
30
|
+
|
|
31
|
+
def test_find_match_with_specific_step_type_also_searches_generic(self):
|
|
32
|
+
registry = step_registry.StepRegistry()
|
|
33
|
+
|
|
34
|
+
given_mock = Mock()
|
|
35
|
+
given_mock.match.return_value = None
|
|
36
|
+
step_mock = Mock()
|
|
37
|
+
step_mock.match.return_value = None
|
|
38
|
+
|
|
39
|
+
registry.steps['given'].append(given_mock)
|
|
40
|
+
registry.steps['step'].append(step_mock)
|
|
41
|
+
|
|
42
|
+
step = Mock()
|
|
43
|
+
step.step_type = 'given'
|
|
44
|
+
step.name = 'just a test step'
|
|
45
|
+
|
|
46
|
+
assert registry.find_match(step) is None
|
|
47
|
+
|
|
48
|
+
given_mock.match.assert_called_with(step.name)
|
|
49
|
+
step_mock.match.assert_called_with(step.name)
|
|
50
|
+
|
|
51
|
+
def test_find_match_with_no_match_returns_none(self):
|
|
52
|
+
registry = step_registry.StepRegistry()
|
|
53
|
+
|
|
54
|
+
step_defs = [Mock() for x in range(0, 10)]
|
|
55
|
+
for mock in step_defs:
|
|
56
|
+
mock.match.return_value = None
|
|
57
|
+
|
|
58
|
+
registry.steps['when'] = step_defs
|
|
59
|
+
|
|
60
|
+
step = Mock()
|
|
61
|
+
step.step_type = 'when'
|
|
62
|
+
step.name = 'just a test step'
|
|
63
|
+
|
|
64
|
+
assert registry.find_match(step) is None
|
|
65
|
+
|
|
66
|
+
def test_find_match_with_a_match_returns_match(self):
|
|
67
|
+
registry = step_registry.StepRegistry()
|
|
68
|
+
|
|
69
|
+
step_defs = [Mock() for x in range(0, 10)]
|
|
70
|
+
for mock in step_defs:
|
|
71
|
+
mock.match.return_value = None
|
|
72
|
+
magic_object = object()
|
|
73
|
+
step_defs[5].match.return_value = magic_object
|
|
74
|
+
|
|
75
|
+
registry.steps['then'] = step_defs
|
|
76
|
+
|
|
77
|
+
step = Mock()
|
|
78
|
+
step.step_type = 'then'
|
|
79
|
+
step.name = 'just a test step'
|
|
80
|
+
|
|
81
|
+
assert registry.find_match(step) is magic_object
|
|
82
|
+
for mock in step_defs[6:]:
|
|
83
|
+
eq_(mock.match.call_count, 0)
|
|
84
|
+
|
|
85
|
+
# pylint: disable=line-too-long
|
|
86
|
+
@patch.object(step_registry.registry, 'add_step_definition')
|
|
87
|
+
def test_make_step_decorator_ends_up_adding_a_step_definition(self, add_step_definition):
|
|
88
|
+
step_type = object()
|
|
89
|
+
string = object()
|
|
90
|
+
func = object()
|
|
91
|
+
|
|
92
|
+
decorator = step_registry.registry.make_decorator(step_type)
|
|
93
|
+
wrapper = decorator(string)
|
|
94
|
+
assert wrapper(func) is func
|
|
95
|
+
add_step_definition.assert_called_with(step_type, string, func)
|
|
96
|
+
|
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
from __future__ import absolute_import
|
|
4
|
+
from behave.tag_expression import TagExpression
|
|
5
|
+
from nose import tools
|
|
6
|
+
import unittest
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# ----------------------------------------------------------------------------
|
|
10
|
+
# BASIC TESTS: 0..1 tags, not @tag
|
|
11
|
+
# ----------------------------------------------------------------------------
|
|
12
|
+
class TestTagExpressionNoTags(unittest.TestCase):
|
|
13
|
+
def setUp(self):
|
|
14
|
+
self.e = TagExpression([])
|
|
15
|
+
|
|
16
|
+
def test_should_match_empty_tags(self):
|
|
17
|
+
assert self.e.check([])
|
|
18
|
+
|
|
19
|
+
def test_should_match_foo(self):
|
|
20
|
+
assert self.e.check(['foo'])
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TestTagExpressionFoo(unittest.TestCase):
|
|
24
|
+
def setUp(self):
|
|
25
|
+
self.e = TagExpression(['foo'])
|
|
26
|
+
|
|
27
|
+
def test_should_not_match_no_tags(self):
|
|
28
|
+
assert not self.e.check([])
|
|
29
|
+
|
|
30
|
+
def test_should_match_foo(self):
|
|
31
|
+
assert self.e.check(['foo'])
|
|
32
|
+
|
|
33
|
+
def test_should_not_match_bar(self):
|
|
34
|
+
assert not self.e.check(['bar'])
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class TestTagExpressionNotFoo(unittest.TestCase):
|
|
38
|
+
def setUp(self):
|
|
39
|
+
self.e = TagExpression(['-foo'])
|
|
40
|
+
|
|
41
|
+
def test_should_match_no_tags(self):
|
|
42
|
+
assert self.e.check([])
|
|
43
|
+
|
|
44
|
+
def test_should_not_match_foo(self):
|
|
45
|
+
assert not self.e.check(['foo'])
|
|
46
|
+
|
|
47
|
+
def test_should_match_bar(self):
|
|
48
|
+
assert self.e.check(['bar'])
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# ----------------------------------------------------------------------------
|
|
52
|
+
# LOGICAL-AND TESTS: With @foo, @bar (2 tags)
|
|
53
|
+
# ----------------------------------------------------------------------------
|
|
54
|
+
class TestTagExpressionFooAndBar(unittest.TestCase):
|
|
55
|
+
# -- LOGIC: @foo and @bar
|
|
56
|
+
|
|
57
|
+
def setUp(self):
|
|
58
|
+
self.e = TagExpression(['foo', 'bar'])
|
|
59
|
+
|
|
60
|
+
def test_should_not_match_no_tags(self):
|
|
61
|
+
assert not self.e.check([])
|
|
62
|
+
|
|
63
|
+
def test_should_not_match_foo(self):
|
|
64
|
+
assert not self.e.check(['foo'])
|
|
65
|
+
|
|
66
|
+
def test_should_not_match_bar(self):
|
|
67
|
+
assert not self.e.check(['bar'])
|
|
68
|
+
|
|
69
|
+
def test_should_not_match_other(self):
|
|
70
|
+
assert not self.e.check(['other'])
|
|
71
|
+
|
|
72
|
+
def test_should_match_foo_bar(self):
|
|
73
|
+
assert self.e.check(['foo', 'bar'])
|
|
74
|
+
assert self.e.check(['bar', 'foo'])
|
|
75
|
+
|
|
76
|
+
def test_should_not_match_foo_other(self):
|
|
77
|
+
assert not self.e.check(['foo', 'other'])
|
|
78
|
+
assert not self.e.check(['other', 'foo'])
|
|
79
|
+
|
|
80
|
+
def test_should_not_match_bar_other(self):
|
|
81
|
+
assert not self.e.check(['bar', 'other'])
|
|
82
|
+
assert not self.e.check(['other', 'bar'])
|
|
83
|
+
|
|
84
|
+
def test_should_not_match_zap_other(self):
|
|
85
|
+
assert not self.e.check(['zap', 'other'])
|
|
86
|
+
assert not self.e.check(['other', 'zap'])
|
|
87
|
+
|
|
88
|
+
def test_should_match_foo_bar_other(self):
|
|
89
|
+
assert self.e.check(['foo', 'bar', 'other'])
|
|
90
|
+
assert self.e.check(['bar', 'other', 'foo'])
|
|
91
|
+
assert self.e.check(['other', 'bar', 'foo'])
|
|
92
|
+
|
|
93
|
+
def test_should_not_match_foo_zap_other(self):
|
|
94
|
+
assert not self.e.check(['foo', 'zap', 'other'])
|
|
95
|
+
assert not self.e.check(['other', 'zap', 'foo'])
|
|
96
|
+
|
|
97
|
+
def test_should_not_match_bar_zap_other(self):
|
|
98
|
+
assert not self.e.check(['bar', 'zap', 'other'])
|
|
99
|
+
assert not self.e.check(['other', 'bar', 'zap'])
|
|
100
|
+
|
|
101
|
+
def test_should_not_match_zap_baz_other(self):
|
|
102
|
+
assert not self.e.check(['zap', 'baz', 'other'])
|
|
103
|
+
assert not self.e.check(['baz', 'other', 'baz'])
|
|
104
|
+
assert not self.e.check(['other', 'baz', 'zap'])
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TestTagExpressionFooAndNotBar(unittest.TestCase):
|
|
108
|
+
# -- LOGIC: @foo and not @bar
|
|
109
|
+
|
|
110
|
+
def setUp(self):
|
|
111
|
+
self.e = TagExpression(['foo', '-bar'])
|
|
112
|
+
|
|
113
|
+
def test_should_not_match_no_tags(self):
|
|
114
|
+
assert not self.e.check([])
|
|
115
|
+
|
|
116
|
+
def test_should_match_foo(self):
|
|
117
|
+
assert self.e.check(['foo'])
|
|
118
|
+
|
|
119
|
+
def test_should_not_match_bar(self):
|
|
120
|
+
assert not self.e.check(['bar'])
|
|
121
|
+
|
|
122
|
+
def test_should_not_match_other(self):
|
|
123
|
+
assert not self.e.check(['other'])
|
|
124
|
+
|
|
125
|
+
def test_should_not_match_foo_bar(self):
|
|
126
|
+
assert not self.e.check(['foo', 'bar'])
|
|
127
|
+
assert not self.e.check(['bar', 'foo'])
|
|
128
|
+
|
|
129
|
+
def test_should_match_foo_other(self):
|
|
130
|
+
assert self.e.check(['foo', 'other'])
|
|
131
|
+
assert self.e.check(['other', 'foo'])
|
|
132
|
+
|
|
133
|
+
def test_should_not_match_bar_other(self):
|
|
134
|
+
assert not self.e.check(['bar', 'other'])
|
|
135
|
+
assert not self.e.check(['other', 'bar'])
|
|
136
|
+
|
|
137
|
+
def test_should_not_match_zap_other(self):
|
|
138
|
+
assert not self.e.check(['bar', 'other'])
|
|
139
|
+
assert not self.e.check(['other', 'bar'])
|
|
140
|
+
|
|
141
|
+
def test_should_not_match_foo_bar_other(self):
|
|
142
|
+
assert not self.e.check(['foo', 'bar', 'other'])
|
|
143
|
+
assert not self.e.check(['bar', 'other', 'foo'])
|
|
144
|
+
assert not self.e.check(['other', 'bar', 'foo'])
|
|
145
|
+
|
|
146
|
+
def test_should_match_foo_zap_other(self):
|
|
147
|
+
assert self.e.check(['foo', 'zap', 'other'])
|
|
148
|
+
assert self.e.check(['other', 'zap', 'foo'])
|
|
149
|
+
|
|
150
|
+
def test_should_not_match_bar_zap_other(self):
|
|
151
|
+
assert not self.e.check(['bar', 'zap', 'other'])
|
|
152
|
+
assert not self.e.check(['other', 'bar', 'zap'])
|
|
153
|
+
|
|
154
|
+
def test_should_not_match_zap_baz_other(self):
|
|
155
|
+
assert not self.e.check(['zap', 'baz', 'other'])
|
|
156
|
+
assert not self.e.check(['baz', 'other', 'baz'])
|
|
157
|
+
assert not self.e.check(['other', 'baz', 'zap'])
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class TestTagExpressionNotBarAndFoo(TestTagExpressionFooAndNotBar):
|
|
161
|
+
# -- REUSE: Test suite due to symmetry in reversed expression
|
|
162
|
+
# LOGIC: not @bar and @foo == @foo and not @bar
|
|
163
|
+
|
|
164
|
+
def setUp(self):
|
|
165
|
+
self.e = TagExpression(['-bar', 'foo'])
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class TestTagExpressionNotFooAndNotBar(unittest.TestCase):
|
|
169
|
+
# -- LOGIC: not @bar and not @foo
|
|
170
|
+
|
|
171
|
+
def setUp(self):
|
|
172
|
+
self.e = TagExpression(['-foo', '-bar'])
|
|
173
|
+
|
|
174
|
+
def test_should_match_no_tags(self):
|
|
175
|
+
assert self.e.check([])
|
|
176
|
+
|
|
177
|
+
def test_should_not_match_foo(self):
|
|
178
|
+
assert not self.e.check(['foo'])
|
|
179
|
+
|
|
180
|
+
def test_should_not_match_bar(self):
|
|
181
|
+
assert not self.e.check(['bar'])
|
|
182
|
+
|
|
183
|
+
def test_should_match_other(self):
|
|
184
|
+
assert self.e.check(['other'])
|
|
185
|
+
|
|
186
|
+
def test_should_not_match_foo_bar(self):
|
|
187
|
+
assert not self.e.check(['foo', 'bar'])
|
|
188
|
+
assert not self.e.check(['bar', 'foo'])
|
|
189
|
+
|
|
190
|
+
def test_should_not_match_foo_other(self):
|
|
191
|
+
assert not self.e.check(['foo', 'other'])
|
|
192
|
+
assert not self.e.check(['other', 'foo'])
|
|
193
|
+
|
|
194
|
+
def test_should_not_match_bar_other(self):
|
|
195
|
+
assert not self.e.check(['bar', 'other'])
|
|
196
|
+
assert not self.e.check(['other', 'bar'])
|
|
197
|
+
|
|
198
|
+
def test_should_match_zap_other(self):
|
|
199
|
+
assert self.e.check(['zap', 'other'])
|
|
200
|
+
assert self.e.check(['other', 'zap'])
|
|
201
|
+
|
|
202
|
+
def test_should_not_match_foo_bar_other(self):
|
|
203
|
+
assert not self.e.check(['foo', 'bar', 'other'])
|
|
204
|
+
assert not self.e.check(['bar', 'other', 'foo'])
|
|
205
|
+
assert not self.e.check(['other', 'bar', 'foo'])
|
|
206
|
+
|
|
207
|
+
def test_should_not_match_foo_zap_other(self):
|
|
208
|
+
assert not self.e.check(['foo', 'zap', 'other'])
|
|
209
|
+
assert not self.e.check(['other', 'zap', 'foo'])
|
|
210
|
+
|
|
211
|
+
def test_should_not_match_bar_zap_other(self):
|
|
212
|
+
assert not self.e.check(['bar', 'zap', 'other'])
|
|
213
|
+
assert not self.e.check(['other', 'bar', 'zap'])
|
|
214
|
+
|
|
215
|
+
def test_should_match_zap_baz_other(self):
|
|
216
|
+
assert self.e.check(['zap', 'baz', 'other'])
|
|
217
|
+
assert self.e.check(['baz', 'other', 'baz'])
|
|
218
|
+
assert self.e.check(['other', 'baz', 'zap'])
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class TestTagExpressionNotBarAndNotFoo(TestTagExpressionNotFooAndNotBar):
|
|
222
|
+
# -- REUSE: Test suite due to symmetry in reversed expression
|
|
223
|
+
# LOGIC: not @bar and not @foo == not @foo and not @bar
|
|
224
|
+
|
|
225
|
+
def setUp(self):
|
|
226
|
+
self.e = TagExpression(['-bar', '-foo'])
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
# ----------------------------------------------------------------------------
|
|
230
|
+
# LOGICAL-OR TESTS: With @foo, @bar (2 tags)
|
|
231
|
+
# ----------------------------------------------------------------------------
|
|
232
|
+
class TestTagExpressionFooOrBar(unittest.TestCase):
|
|
233
|
+
def setUp(self):
|
|
234
|
+
self.e = TagExpression(['foo,bar'])
|
|
235
|
+
|
|
236
|
+
def test_should_not_match_no_tags(self):
|
|
237
|
+
assert not self.e.check([])
|
|
238
|
+
|
|
239
|
+
def test_should_match_foo(self):
|
|
240
|
+
assert self.e.check(['foo'])
|
|
241
|
+
|
|
242
|
+
def test_should_match_bar(self):
|
|
243
|
+
assert self.e.check(['bar'])
|
|
244
|
+
|
|
245
|
+
def test_should_not_match_other(self):
|
|
246
|
+
assert not self.e.check(['other'])
|
|
247
|
+
|
|
248
|
+
def test_should_match_foo_bar(self):
|
|
249
|
+
assert self.e.check(['foo', 'bar'])
|
|
250
|
+
assert self.e.check(['bar', 'foo'])
|
|
251
|
+
|
|
252
|
+
def test_should_match_foo_other(self):
|
|
253
|
+
assert self.e.check(['foo', 'other'])
|
|
254
|
+
assert self.e.check(['other', 'foo'])
|
|
255
|
+
|
|
256
|
+
def test_should_match_bar_other(self):
|
|
257
|
+
assert self.e.check(['bar', 'other'])
|
|
258
|
+
assert self.e.check(['other', 'bar'])
|
|
259
|
+
|
|
260
|
+
def test_should_not_match_zap_other(self):
|
|
261
|
+
assert not self.e.check(['zap', 'other'])
|
|
262
|
+
assert not self.e.check(['other', 'zap'])
|
|
263
|
+
|
|
264
|
+
def test_should_match_foo_bar_other(self):
|
|
265
|
+
assert self.e.check(['foo', 'bar', 'other'])
|
|
266
|
+
assert self.e.check(['bar', 'other', 'foo'])
|
|
267
|
+
assert self.e.check(['other', 'bar', 'foo'])
|
|
268
|
+
|
|
269
|
+
def test_should_match_foo_zap_other(self):
|
|
270
|
+
assert self.e.check(['foo', 'zap', 'other'])
|
|
271
|
+
assert self.e.check(['other', 'zap', 'foo'])
|
|
272
|
+
|
|
273
|
+
def test_should_match_bar_zap_other(self):
|
|
274
|
+
assert self.e.check(['bar', 'zap', 'other'])
|
|
275
|
+
assert self.e.check(['other', 'bar', 'zap'])
|
|
276
|
+
|
|
277
|
+
def test_should_not_match_zap_baz_other(self):
|
|
278
|
+
assert not self.e.check(['zap', 'baz', 'other'])
|
|
279
|
+
assert not self.e.check(['baz', 'other', 'baz'])
|
|
280
|
+
assert not self.e.check(['other', 'baz', 'zap'])
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
class TestTagExpressionBarOrFoo(TestTagExpressionFooOrBar):
|
|
284
|
+
# -- REUSE: Test suite due to symmetry in reversed expression
|
|
285
|
+
# LOGIC: @bar or @foo == @foo or @bar
|
|
286
|
+
def setUp(self):
|
|
287
|
+
self.e = TagExpression(['bar,foo'])
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
class TestTagExpressionFooOrNotBar(unittest.TestCase):
|
|
291
|
+
def setUp(self):
|
|
292
|
+
self.e = TagExpression(['foo,-bar'])
|
|
293
|
+
|
|
294
|
+
def test_should_match_no_tags(self):
|
|
295
|
+
assert self.e.check([])
|
|
296
|
+
|
|
297
|
+
def test_should_match_foo(self):
|
|
298
|
+
assert self.e.check(['foo'])
|
|
299
|
+
|
|
300
|
+
def test_should_not_match_bar(self):
|
|
301
|
+
assert not self.e.check(['bar'])
|
|
302
|
+
|
|
303
|
+
def test_should_match_other(self):
|
|
304
|
+
assert self.e.check(['other'])
|
|
305
|
+
|
|
306
|
+
def test_should_match_foo_bar(self):
|
|
307
|
+
assert self.e.check(['foo', 'bar'])
|
|
308
|
+
assert self.e.check(['bar', 'foo'])
|
|
309
|
+
|
|
310
|
+
def test_should_match_foo_other(self):
|
|
311
|
+
assert self.e.check(['foo', 'other'])
|
|
312
|
+
assert self.e.check(['other', 'foo'])
|
|
313
|
+
|
|
314
|
+
def test_should_not_match_bar_other(self):
|
|
315
|
+
assert not self.e.check(['bar', 'other'])
|
|
316
|
+
assert not self.e.check(['other', 'bar'])
|
|
317
|
+
|
|
318
|
+
def test_should_match_zap_other(self):
|
|
319
|
+
assert self.e.check(['zap', 'other'])
|
|
320
|
+
assert self.e.check(['other', 'zap'])
|
|
321
|
+
|
|
322
|
+
def test_should_match_foo_bar_other(self):
|
|
323
|
+
assert self.e.check(['foo', 'bar', 'other'])
|
|
324
|
+
assert self.e.check(['bar', 'other', 'foo'])
|
|
325
|
+
assert self.e.check(['other', 'bar', 'foo'])
|
|
326
|
+
|
|
327
|
+
def test_should_match_foo_zap_other(self):
|
|
328
|
+
assert self.e.check(['foo', 'zap', 'other'])
|
|
329
|
+
assert self.e.check(['other', 'zap', 'foo'])
|
|
330
|
+
|
|
331
|
+
def test_should_not_match_bar_zap_other(self):
|
|
332
|
+
assert not self.e.check(['bar', 'zap', 'other'])
|
|
333
|
+
assert not self.e.check(['other', 'bar', 'zap'])
|
|
334
|
+
|
|
335
|
+
def test_should_match_zap_baz_other(self):
|
|
336
|
+
assert self.e.check(['zap', 'baz', 'other'])
|
|
337
|
+
assert self.e.check(['baz', 'other', 'baz'])
|
|
338
|
+
assert self.e.check(['other', 'baz', 'zap'])
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
class TestTagExpressionNotBarOrFoo(TestTagExpressionFooOrNotBar):
|
|
342
|
+
# -- REUSE: Test suite due to symmetry in reversed expression
|
|
343
|
+
# LOGIC: not @bar or @foo == @foo or not @bar
|
|
344
|
+
def setUp(self):
|
|
345
|
+
self.e = TagExpression(['-bar,foo'])
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
class TestTagExpressionNotFooOrNotBar(unittest.TestCase):
|
|
349
|
+
def setUp(self):
|
|
350
|
+
self.e = TagExpression(['-foo,-bar'])
|
|
351
|
+
|
|
352
|
+
def test_should_match_no_tags(self):
|
|
353
|
+
assert self.e.check([])
|
|
354
|
+
|
|
355
|
+
def test_should_match_foo(self):
|
|
356
|
+
assert self.e.check(['foo'])
|
|
357
|
+
|
|
358
|
+
def test_should_match_bar(self):
|
|
359
|
+
assert self.e.check(['bar'])
|
|
360
|
+
|
|
361
|
+
def test_should_match_other(self):
|
|
362
|
+
assert self.e.check(['other'])
|
|
363
|
+
|
|
364
|
+
def test_should_not_match_foo_bar(self):
|
|
365
|
+
assert not self.e.check(['foo', 'bar'])
|
|
366
|
+
assert not self.e.check(['bar', 'foo'])
|
|
367
|
+
|
|
368
|
+
def test_should_match_foo_other(self):
|
|
369
|
+
assert self.e.check(['foo', 'other'])
|
|
370
|
+
assert self.e.check(['other', 'foo'])
|
|
371
|
+
|
|
372
|
+
def test_should_match_bar_other(self):
|
|
373
|
+
assert self.e.check(['bar', 'other'])
|
|
374
|
+
assert self.e.check(['other', 'bar'])
|
|
375
|
+
|
|
376
|
+
def test_should_match_zap_other(self):
|
|
377
|
+
assert self.e.check(['zap', 'other'])
|
|
378
|
+
assert self.e.check(['other', 'zap'])
|
|
379
|
+
|
|
380
|
+
def test_should_not_match_foo_bar_other(self):
|
|
381
|
+
assert not self.e.check(['foo', 'bar', 'other'])
|
|
382
|
+
assert not self.e.check(['bar', 'other', 'foo'])
|
|
383
|
+
assert not self.e.check(['other', 'bar', 'foo'])
|
|
384
|
+
|
|
385
|
+
def test_should_match_foo_zap_other(self):
|
|
386
|
+
assert self.e.check(['foo', 'zap', 'other'])
|
|
387
|
+
assert self.e.check(['other', 'zap', 'foo'])
|
|
388
|
+
|
|
389
|
+
def test_should_match_bar_zap_other(self):
|
|
390
|
+
assert self.e.check(['bar', 'zap', 'other'])
|
|
391
|
+
assert self.e.check(['other', 'bar', 'zap'])
|
|
392
|
+
|
|
393
|
+
def test_should_match_zap_baz_other(self):
|
|
394
|
+
assert self.e.check(['zap', 'baz', 'other'])
|
|
395
|
+
assert self.e.check(['baz', 'other', 'baz'])
|
|
396
|
+
assert self.e.check(['other', 'baz', 'zap'])
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
class TestTagExpressionNotBarOrNotFoo(TestTagExpressionNotFooOrNotBar):
|
|
400
|
+
# -- REUSE: Test suite due to symmetry in reversed expression
|
|
401
|
+
# LOGIC: not @bar or @foo == @foo or not @bar
|
|
402
|
+
def setUp(self):
|
|
403
|
+
self.e = TagExpression(['-bar,-foo'])
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
# ----------------------------------------------------------------------------
|
|
407
|
+
# MORE TESTS: With 3 tags
|
|
408
|
+
# ----------------------------------------------------------------------------
|
|
409
|
+
class TestTagExpressionFooOrBarAndNotZap(unittest.TestCase):
|
|
410
|
+
def setUp(self):
|
|
411
|
+
self.e = TagExpression(['foo,bar', '-zap'])
|
|
412
|
+
|
|
413
|
+
def test_should_match_foo(self):
|
|
414
|
+
assert self.e.check(['foo'])
|
|
415
|
+
|
|
416
|
+
def test_should_not_match_foo_zap(self):
|
|
417
|
+
assert not self.e.check(['foo', 'zap'])
|
|
418
|
+
|
|
419
|
+
def test_should_not_match_tags(self):
|
|
420
|
+
assert not self.e.check([])
|
|
421
|
+
|
|
422
|
+
def test_should_match_foo(self):
|
|
423
|
+
assert self.e.check(['foo'])
|
|
424
|
+
|
|
425
|
+
def test_should_match_bar(self):
|
|
426
|
+
assert self.e.check(['bar'])
|
|
427
|
+
|
|
428
|
+
def test_should_not_match_other(self):
|
|
429
|
+
assert not self.e.check(['other'])
|
|
430
|
+
|
|
431
|
+
def test_should_match_foo_bar(self):
|
|
432
|
+
assert self.e.check(['foo', 'bar'])
|
|
433
|
+
assert self.e.check(['bar', 'foo'])
|
|
434
|
+
|
|
435
|
+
def test_should_match_foo_other(self):
|
|
436
|
+
assert self.e.check(['foo', 'other'])
|
|
437
|
+
assert self.e.check(['other', 'foo'])
|
|
438
|
+
|
|
439
|
+
def test_should_match_bar_other(self):
|
|
440
|
+
assert self.e.check(['bar', 'other'])
|
|
441
|
+
assert self.e.check(['other', 'bar'])
|
|
442
|
+
|
|
443
|
+
def test_should_not_match_zap_other(self):
|
|
444
|
+
assert not self.e.check(['zap', 'other'])
|
|
445
|
+
assert not self.e.check(['other', 'zap'])
|
|
446
|
+
|
|
447
|
+
def test_should_match_foo_bar_other(self):
|
|
448
|
+
assert self.e.check(['foo', 'bar', 'other'])
|
|
449
|
+
assert self.e.check(['bar', 'other', 'foo'])
|
|
450
|
+
assert self.e.check(['other', 'bar', 'foo'])
|
|
451
|
+
|
|
452
|
+
def test_should_not_match_foo_bar_zap(self):
|
|
453
|
+
assert not self.e.check(['foo', 'bar', 'zap'])
|
|
454
|
+
assert not self.e.check(['bar', 'zap', 'foo'])
|
|
455
|
+
assert not self.e.check(['zap', 'bar', 'foo'])
|
|
456
|
+
|
|
457
|
+
def test_should_not_match_foo_zap_other(self):
|
|
458
|
+
assert not self.e.check(['foo', 'zap', 'other'])
|
|
459
|
+
assert not self.e.check(['other', 'zap', 'foo'])
|
|
460
|
+
|
|
461
|
+
def test_should_not_match_bar_zap_other(self):
|
|
462
|
+
assert not self.e.check(['bar', 'zap', 'other'])
|
|
463
|
+
assert not self.e.check(['other', 'bar', 'zap'])
|
|
464
|
+
|
|
465
|
+
def test_should_not_match_zap_baz_other(self):
|
|
466
|
+
assert not self.e.check(['zap', 'baz', 'other'])
|
|
467
|
+
assert not self.e.check(['baz', 'other', 'baz'])
|
|
468
|
+
assert not self.e.check(['other', 'baz', 'zap'])
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
# ----------------------------------------------------------------------------
|
|
472
|
+
# TESTS WITH LIMIT
|
|
473
|
+
# ----------------------------------------------------------------------------
|
|
474
|
+
class TestTagExpressionFoo3OrNotBar4AndZap5(unittest.TestCase):
|
|
475
|
+
def setUp(self):
|
|
476
|
+
self.e = TagExpression(['foo:3,-bar', 'zap:5'])
|
|
477
|
+
|
|
478
|
+
def test_should_count_tags_for_positive_tags(self):
|
|
479
|
+
tools.eq_(self.e.limits, {'foo': 3, 'zap': 5})
|
|
480
|
+
|
|
481
|
+
def test_should_match_foo_zap(self):
|
|
482
|
+
assert self.e.check(['foo', 'zap'])
|
|
483
|
+
|
|
484
|
+
class TestTagExpressionParsing(unittest.TestCase):
|
|
485
|
+
def setUp(self):
|
|
486
|
+
self.e = TagExpression([' foo:3 , -bar ', ' zap:5 '])
|
|
487
|
+
|
|
488
|
+
def test_should_have_limits(self):
|
|
489
|
+
tools.eq_(self.e.limits, {'zap': 5, 'foo': 3})
|
|
490
|
+
|
|
491
|
+
class TestTagExpressionTagLimits(unittest.TestCase):
|
|
492
|
+
def test_should_be_counted_for_negative_tags(self):
|
|
493
|
+
e = TagExpression(['-todo:3'])
|
|
494
|
+
tools.eq_(e.limits, {'todo': 3})
|
|
495
|
+
|
|
496
|
+
def test_should_be_counted_for_positive_tags(self):
|
|
497
|
+
e = TagExpression(['todo:3'])
|
|
498
|
+
tools.eq_(e.limits, {'todo': 3})
|
|
499
|
+
|
|
500
|
+
def test_should_raise_an_error_for_inconsistent_limits(self):
|
|
501
|
+
tools.assert_raises(Exception, TagExpression, ['todo:3', '-todo:4'])
|
|
502
|
+
|
|
503
|
+
def test_should_allow_duplicate_consistent_limits(self):
|
|
504
|
+
e = TagExpression(['todo:3', '-todo:3'])
|
|
505
|
+
tools.eq_(e.limits, {'todo': 3})
|
|
506
|
+
|