cucumber 3.0.0.pre.1 → 3.0.0.pre.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.cucumberproignore +6 -0
- data/.rubocop.yml +13 -0
- data/.rubocop_todo.yml +1075 -0
- data/.travis.yml +42 -8
- data/CONTRIBUTING.md +8 -1
- data/Gemfile +16 -10
- data/History.md +96 -36
- data/README.md +12 -3
- data/Rakefile +12 -2
- data/appveyor.yml +26 -0
- data/cucumber.gemspec +15 -10
- data/cucumber.yml +9 -10
- data/examples/i18n/Rakefile +1 -1
- data/examples/i18n/ar/features/step_definitions/calculator_steps.rb +2 -2
- data/examples/i18n/ar/lib/calculator.rb +2 -2
- data/examples/i18n/bg/features/step_definitions/calculator_steps.rb +6 -6
- data/examples/i18n/ca/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/ca/lib/calculadora.rb +2 -2
- data/examples/i18n/cs/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/cs/lib/calculator.rb +3 -3
- data/examples/i18n/da/features/step_definitions/lommeregner_steps.rb +4 -4
- data/examples/i18n/da/lib/lommeregner.rb +2 -2
- data/examples/i18n/de/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/de/lib/calculator.rb +2 -2
- data/examples/i18n/el/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/el/lib/calculator.rb +2 -2
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +4 -4
- data/examples/i18n/en-lol/lib/basket.rb +2 -2
- data/examples/i18n/en-lol/lib/belly.rb +2 -2
- data/examples/i18n/en/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/en/lib/calculator.rb +2 -2
- data/examples/i18n/eo/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/eo/lib/calculator.rb +2 -2
- data/examples/i18n/es/features/step_definitions/calculador_steps.rb +5 -5
- data/examples/i18n/es/lib/calculador.rb +2 -2
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +4 -4
- data/examples/i18n/et/lib/kalkulaator.rb +3 -3
- data/examples/i18n/fi/features/step_definitions/laskin_steps.rb +3 -3
- data/examples/i18n/fi/lib/laskin.rb +1 -1
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +8 -8
- data/examples/i18n/fr/features/support/env.rb +1 -1
- data/examples/i18n/fr/lib/calculatrice.rb +2 -2
- data/examples/i18n/he/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/he/lib/calculator.rb +1 -1
- data/examples/i18n/hi/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/hi/lib/calculator.rb +1 -1
- data/examples/i18n/ht/features/step_definitions/kalkilatris_steps.rb +4 -4
- data/examples/i18n/ht/lib/kalkilatris.rb +2 -2
- data/examples/i18n/hu/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/hu/lib/calculator.rb +1 -1
- data/examples/i18n/id/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/id/lib/calculator.rb +2 -2
- data/examples/i18n/it/features/step_definitions/calcolatrice_steps.rb +4 -4
- data/examples/i18n/it/lib/calcolatrice.rb +3 -3
- data/examples/i18n/ja/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/ja/features/support/env.rb +1 -1
- data/examples/i18n/ja/lib/calculator.rb +2 -2
- data/examples/i18n/ko/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/ko/lib/calculator.rb +2 -2
- data/examples/i18n/lt/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/lt/lib/calculator.rb +2 -2
- data/examples/i18n/lv/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/lv/lib/calculator.rb +2 -2
- data/examples/i18n/no/features/step_definitions/kalkulator_steps.rb +3 -3
- data/examples/i18n/no/features/support/env.rb +1 -1
- data/examples/i18n/no/lib/kalkulator.rb +2 -2
- data/examples/i18n/pl/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/pl/lib/calculator.rb +2 -2
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +3 -3
- data/examples/i18n/pt/features/support/env.rb +1 -1
- data/examples/i18n/pt/lib/calculadora.rb +1 -1
- data/examples/i18n/ro/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/ro/lib/calculator.rb +1 -1
- data/examples/i18n/ru/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/sk/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/sk/lib/calculator.rb +2 -2
- data/examples/i18n/sr-Cyrl/features/step_definitions/calculator_steps.rb +3 -3
- data/examples/i18n/sr-Cyrl/features/support/env.rb +1 -1
- data/examples/i18n/sr-Cyrl/lib/calculator.rb +2 -2
- data/examples/i18n/sr-Latn/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/sr-Latn/lib/calculator.rb +2 -2
- data/examples/i18n/sv/features/step_definitions/kalkulator_steps.rb +3 -3
- data/examples/i18n/sv/lib/kalkulator.rb +2 -2
- data/examples/i18n/tr/features/step_definitions/hesap_makinesi_adimlari.rb +4 -4
- data/examples/i18n/tr/lib/hesap_makinesi.rb +2 -2
- data/examples/i18n/uk/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/uz/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/zh-CN/features/step_definitions/calculator_steps.rb +5 -5
- data/examples/i18n/zh-CN/lib/calculator.rb +2 -2
- data/examples/i18n/zh-TW/features/step_definitions/calculator_steps.rb +4 -4
- data/examples/i18n/zh-TW/lib/calculator.rb +2 -2
- data/examples/rspec_doubles/features/step_definitions/calvin_steps.rb +3 -3
- data/examples/sinatra/features/step_definitions/add_steps.rb +4 -4
- data/examples/tcl/features/step_definitions/fib_steps.rb +2 -2
- data/examples/test_unit/features/step_definitions/test_unit_steps.rb +4 -4
- data/examples/watir/features/step_definitions/search_steps.rb +3 -3
- data/examples/watir/features/support/screenshots.rb +5 -5
- data/features/docs/api/list_step_defs_as_json.feature +21 -7
- data/features/docs/api/listen_for_events.feature +1 -1
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +1 -0
- data/features/docs/cli/dry_run.feature +3 -0
- data/features/docs/cli/execute_with_tag_filter.feature +4 -4
- data/features/docs/cli/fail_fast.feature +2 -0
- data/features/docs/{gherkin/language_help.feature → cli/i18n.feature} +6 -6
- data/features/docs/cli/randomize.feature +2 -2
- data/features/docs/cli/retry_failing_tests.feature +28 -3
- data/features/docs/cli/run_scenarios_matching_name.feature +1 -0
- data/features/docs/cli/specifying_multiple_formatters.feature +3 -0
- data/features/docs/cli/strict_mode.feature +6 -0
- data/features/docs/defining_steps/nested_steps.feature +5 -1
- data/features/docs/defining_steps/nested_steps_i18n.feature +1 -0
- data/features/docs/defining_steps/nested_steps_with_second_arg.feature +2 -0
- data/features/docs/defining_steps/printing_messages.feature +1 -1
- data/features/docs/defining_steps/skip_scenario.feature +1 -0
- data/features/docs/defining_steps/snippets.feature +18 -18
- data/features/docs/events/gherkin_source_read_event.feature +43 -0
- data/features/docs/events/step_activated_event.feature +36 -0
- data/features/docs/events/step_definition_registered_event.feature +29 -0
- data/features/docs/events/test_case_finished_event.feature +35 -0
- data/features/docs/events/test_case_starting_event.feature +54 -0
- data/features/docs/events/test_run_finished_event.feature +40 -0
- data/features/docs/events/test_run_starting_event.feature +41 -0
- data/features/docs/events/test_step_finished_event.feature +47 -0
- data/features/docs/events/test_step_starting_event.feature +43 -0
- data/features/docs/exception_in_after_hook.feature +3 -2
- data/features/docs/exception_in_after_step_hook.feature +2 -0
- data/features/docs/exception_in_around_hook.feature +2 -0
- data/features/docs/exception_in_before_hook.feature +3 -1
- data/features/docs/extending_cucumber/custom_formatter.feature +21 -1
- data/features/docs/formatters/json_formatter.feature +4 -4
- data/features/docs/formatters/junit_formatter.feature +7 -6
- data/features/docs/formatters/pretty_formatter.feature +1 -0
- data/features/docs/formatters/progress_formatter.feature +1 -0
- data/features/docs/formatters/rerun_formatter.feature +2 -0
- data/features/docs/formatters/summary_formatter.feature +1 -0
- data/features/docs/formatters/usage_formatter.feature +3 -0
- data/features/docs/getting_started.feature +2 -1
- data/features/docs/gherkin/background.feature +5 -5
- data/features/docs/gherkin/doc_strings.feature +2 -0
- data/features/docs/gherkin/expand_option_for_outlines.feature +1 -0
- data/features/docs/gherkin/outlines.feature +4 -0
- data/features/docs/gherkin/unicode_table.feature +1 -0
- data/features/docs/gherkin/using_descriptions.feature +1 -0
- data/features/docs/gherkin/using_star_notation.feature +1 -1
- data/features/docs/post_configuration_hook.feature +1 -1
- data/features/docs/rake_task.feature +5 -0
- data/features/docs/raketask.feature +3 -1
- data/features/docs/work_in_progress.feature +5 -2
- data/features/docs/writing_support_code/after_step_hooks.feature +3 -1
- data/features/docs/writing_support_code/around_hooks.feature +6 -0
- data/features/docs/writing_support_code/before_hook.feature +1 -0
- data/features/docs/writing_support_code/hook_order.feature +3 -1
- data/features/docs/writing_support_code/parameter_types.feature +75 -0
- data/features/docs/writing_support_code/tagged_hooks.feature +1 -1
- data/features/lib/step_definitions/aruba_steps.rb +4 -10
- data/features/lib/step_definitions/cli_steps.rb +2 -2
- data/features/lib/step_definitions/cucumber_steps.rb +8 -12
- data/features/lib/step_definitions/iso-8859-1_steps.rb +2 -2
- data/features/lib/step_definitions/json_steps.rb +1 -1
- data/features/lib/step_definitions/junit_steps.rb +1 -1
- data/features/lib/step_definitions/language_steps.rb +2 -2
- data/features/lib/step_definitions/profile_steps.rb +6 -6
- data/features/lib/step_definitions/retry_steps.rb +3 -3
- data/features/lib/step_definitions/ruby_steps.rb +1 -1
- data/features/lib/support/env.rb +1 -1
- data/features/lib/support/fake_wire_server.rb +7 -2
- data/features/lib/support/feature_factory.rb +1 -1
- data/features/lib/support/normalise_output.rb +13 -12
- data/features/lib/support/parameter_types.rb +8 -0
- data/gem_tasks/contributors.rake +9 -6
- data/gem_tasks/environment.rake +1 -5
- data/gem_tasks/examples.rake +1 -1
- data/gem_tasks/fix_cr_lf.rake +1 -1
- data/gem_tasks/flog.rake +2 -2
- data/gem_tasks/rspec.rake +1 -1
- data/lib/autotest/cucumber_mixin.rb +15 -15
- data/lib/autotest/discover.rb +2 -2
- data/lib/cucumber/cli/configuration.rb +7 -13
- data/lib/cucumber/cli/main.rb +6 -6
- data/lib/cucumber/cli/options.rb +163 -126
- data/lib/cucumber/cli/profile_loader.rb +24 -20
- data/lib/cucumber/configuration.rb +12 -17
- data/lib/cucumber/constantize.rb +1 -1
- data/lib/cucumber/core_ext/string.rb +1 -1
- data/lib/cucumber/deprecate.rb +1 -1
- data/lib/cucumber/events.rb +11 -1
- data/lib/cucumber/events/gherkin_source_read.rb +17 -0
- data/lib/cucumber/events/{step_match.rb → step_activated.rb} +2 -2
- data/lib/cucumber/events/step_definition_registered.rb +1 -1
- data/lib/cucumber/events/test_case_finished.rb +18 -0
- data/lib/cucumber/events/test_case_starting.rb +15 -0
- data/lib/cucumber/events/test_run_starting.rb +16 -0
- data/lib/cucumber/events/test_step_finished.rb +20 -0
- data/lib/cucumber/events/test_step_starting.rb +17 -0
- data/lib/cucumber/filters.rb +1 -0
- data/lib/cucumber/filters/activate_steps.rb +1 -1
- data/lib/cucumber/filters/broadcast_test_run_starting_event.rb +27 -0
- data/lib/cucumber/filters/retry.rb +1 -1
- data/lib/cucumber/filters/tag_limits.rb +3 -3
- data/lib/cucumber/filters/tag_limits/verifier.rb +1 -1
- data/lib/cucumber/formatter/ansicolor.rb +8 -11
- data/lib/cucumber/formatter/backtrace_filter.rb +19 -7
- data/lib/cucumber/formatter/console.rb +16 -19
- data/lib/cucumber/formatter/console_counts.rb +8 -21
- data/lib/cucumber/formatter/console_issues.rb +30 -9
- data/lib/cucumber/formatter/duration.rb +1 -1
- data/lib/cucumber/formatter/fail_fast.rb +1 -1
- data/lib/cucumber/formatter/html.rb +168 -242
- data/lib/cucumber/formatter/html_builder.rb +110 -0
- data/lib/cucumber/formatter/inline-js.js +30 -0
- data/lib/cucumber/formatter/interceptor.rb +2 -2
- data/lib/cucumber/formatter/json.rb +12 -12
- data/lib/cucumber/formatter/junit.rb +11 -11
- data/lib/cucumber/formatter/legacy_api/adapter.rb +27 -27
- data/lib/cucumber/formatter/legacy_api/ast.rb +16 -20
- data/lib/cucumber/formatter/legacy_api/results.rb +6 -8
- data/lib/cucumber/formatter/pretty.rb +17 -17
- data/lib/cucumber/formatter/progress.rb +11 -12
- data/lib/cucumber/formatter/rerun.rb +1 -1
- data/lib/cucumber/formatter/steps.rb +1 -1
- data/lib/cucumber/formatter/unicode.rb +1 -1
- data/lib/cucumber/formatter/usage.rb +12 -12
- data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +1 -1
- data/lib/cucumber/gherkin/formatter/escaping.rb +1 -1
- data/lib/cucumber/{rb_support/rb_dsl.rb → glue/dsl.rb} +44 -17
- data/lib/cucumber/glue/hook.rb +43 -0
- data/lib/cucumber/glue/invoke_in_world.rb +70 -0
- data/lib/cucumber/glue/proto_world.rb +225 -0
- data/lib/cucumber/{rb_support/rb_language.rb → glue/registry_and_more.rb} +45 -86
- data/lib/cucumber/{rb_support → glue}/snippet.rb +62 -25
- data/lib/cucumber/glue/step_definition.rb +143 -0
- data/lib/cucumber/glue/world_factory.rb +23 -0
- data/lib/cucumber/hooks.rb +4 -4
- data/lib/cucumber/multiline_argument.rb +2 -2
- data/lib/cucumber/multiline_argument/data_table.rb +40 -178
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +158 -0
- data/lib/cucumber/platform.rb +3 -5
- data/lib/cucumber/rake/task.rb +11 -11
- data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
- data/lib/cucumber/rspec/doubles.rb +1 -1
- data/lib/cucumber/running_test_case.rb +2 -2
- data/lib/cucumber/runtime.rb +46 -34
- data/lib/cucumber/runtime/after_hooks.rb +1 -1
- data/lib/cucumber/runtime/for_programming_languages.rb +1 -36
- data/lib/cucumber/runtime/support_code.rb +19 -15
- data/lib/cucumber/runtime/user_interface.rb +4 -11
- data/lib/cucumber/step_argument.rb +0 -2
- data/lib/cucumber/step_definition_light.rb +1 -0
- data/lib/cucumber/step_match.rb +16 -15
- data/lib/cucumber/step_match_search.rb +2 -3
- data/lib/cucumber/term/ansicolor.rb +1 -1
- data/lib/cucumber/version +1 -1
- data/lib/simplecov_setup.rb +1 -1
- data/scripts/invite-collaborator +40 -0
- data/scripts/update-history +83 -0
- data/spec/cucumber/cli/configuration_spec.rb +95 -97
- data/spec/cucumber/cli/main_spec.rb +7 -7
- data/spec/cucumber/cli/options_spec.rb +112 -78
- data/spec/cucumber/cli/profile_loader_spec.rb +24 -5
- data/spec/cucumber/cli/rerun_spec.rb +20 -20
- data/spec/cucumber/configuration_spec.rb +47 -47
- data/spec/cucumber/constantize_spec.rb +2 -2
- data/spec/cucumber/events_spec.rb +9 -0
- data/spec/cucumber/file_specs_spec.rb +25 -25
- data/spec/cucumber/filters/activate_steps_spec.rb +16 -16
- data/spec/cucumber/filters/gated_receiver_spec.rb +6 -6
- data/spec/cucumber/filters/retry_spec.rb +22 -9
- data/spec/cucumber/filters/tag_limits/test_case_index_spec.rb +11 -11
- data/spec/cucumber/filters/tag_limits/verifier_spec.rb +14 -14
- data/spec/cucumber/filters/tag_limits_spec.rb +8 -8
- data/spec/cucumber/formatter/ansicolor_spec.rb +9 -9
- data/spec/cucumber/formatter/backtrace_filter_spec.rb +32 -0
- data/spec/cucumber/formatter/console_counts_spec.rb +1 -1
- data/spec/cucumber/formatter/duration_spec.rb +3 -3
- data/spec/cucumber/formatter/fail_fast_spec.rb +21 -21
- data/spec/cucumber/formatter/html_spec.rb +58 -58
- data/spec/cucumber/formatter/json_spec.rb +44 -46
- data/spec/cucumber/formatter/junit_spec.rb +43 -45
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +43 -43
- data/spec/cucumber/formatter/pretty_spec.rb +107 -107
- data/spec/cucumber/formatter/progress_spec.rb +20 -20
- data/spec/cucumber/formatter/rerun_spec.rb +1 -1
- data/spec/cucumber/formatter/spec_helper.rb +6 -5
- data/spec/cucumber/{rb_support/rb_world_spec.rb → glue/proto_world_spec.rb} +20 -5
- data/spec/cucumber/glue/registry_and_more_spec.rb +213 -0
- data/spec/cucumber/{rb_support → glue}/snippet_spec.rb +61 -25
- data/spec/cucumber/glue/step_definition_spec.rb +207 -0
- data/spec/cucumber/hooks_spec.rb +3 -3
- data/spec/cucumber/multiline_argument/data_table_spec.rb +177 -133
- data/spec/cucumber/project_initializer_spec.rb +10 -10
- data/spec/cucumber/rake/forked_spec.rb +10 -10
- data/spec/cucumber/rake/task_spec.rb +20 -20
- data/spec/cucumber/running_test_case_spec.rb +35 -35
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +1 -30
- data/spec/cucumber/runtime_spec.rb +2 -2
- data/spec/cucumber/step_argument_spec.rb +5 -5
- data/spec/cucumber/step_match_search_spec.rb +31 -41
- data/spec/cucumber/step_match_spec.rb +33 -33
- data/spec/cucumber/world/pending_spec.rb +10 -10
- metadata +117 -47
- data/features/docs/formatters/debug_formatter.feature +0 -47
- data/features/docs/writing_support_code/transforms.feature +0 -98
- data/features/lib/step_definitions/wire_steps.rb +0 -59
- data/gem_tasks/cucumber.rake +0 -26
- data/lib/cucumber/core_ext/instance_exec.rb +0 -71
- data/lib/cucumber/formatter/debug.rb +0 -36
- data/lib/cucumber/rb_support/rb_hook.rb +0 -20
- data/lib/cucumber/rb_support/rb_step_definition.rb +0 -132
- data/lib/cucumber/rb_support/rb_transform.rb +0 -60
- data/lib/cucumber/rb_support/rb_world.rb +0 -171
- data/spec/cucumber/core_ext/instance_exec_spec.rb +0 -5
- data/spec/cucumber/formatter/debug_spec.rb +0 -65
- data/spec/cucumber/rb_support/rb_language_spec.rb +0 -321
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +0 -200
- data/spec/cucumber/rb_support/rb_transform_spec.rb +0 -47
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'builder'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
module Cucumber
|
6
|
+
module Formatter
|
7
|
+
class HtmlBuilder < Builder::XmlMarkup
|
8
|
+
def embed_text(src: nil, label: nil, id: nil)
|
9
|
+
raise ArgumentError, 'missing required argument' unless src && label && id # for Ruby 2.0 compatibility
|
10
|
+
|
11
|
+
prepend_to_span('embed', %{<a id="#{id}" href="#{src}" title="#{label}">#{label}</a>})
|
12
|
+
end
|
13
|
+
|
14
|
+
def embed_image(src: nil, label: nil, id: nil)
|
15
|
+
raise ArgumentError, 'missing required argument' unless src && label && id # for Ruby 2.0 compatibility
|
16
|
+
|
17
|
+
prepend_to_span(
|
18
|
+
'embed',
|
19
|
+
%{<a href="" onclick="img=document.getElementById('#{id}'); img.style.display = (img.style.display == 'none' ? 'block' : 'none');return false">#{label}</a><br>
|
20
|
+
<img id="#{id}" style="display: none" src="#{src}"/>}
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def declare!
|
25
|
+
super(:DOCTYPE, :html, :PUBLIC, '-//W3C//DTD XHTML 1.0 Strict//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd')
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_document!
|
29
|
+
declare! # <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
30
|
+
|
31
|
+
self << '<html xmlns ="http://www.w3.org/1999/xhtml">'
|
32
|
+
|
33
|
+
set_head_tags
|
34
|
+
end
|
35
|
+
|
36
|
+
def format_features!(features)
|
37
|
+
step_count = features && features.step_count || 0
|
38
|
+
|
39
|
+
self << '<body>'
|
40
|
+
self << "<!-- Step count #{step_count}-->"
|
41
|
+
self << '<div class="cucumber">'
|
42
|
+
|
43
|
+
div(id: 'cucumber-header') do
|
44
|
+
div(id: 'label') do
|
45
|
+
h1 'Cucumber Features'
|
46
|
+
end
|
47
|
+
|
48
|
+
summary_div
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def summary_div
|
55
|
+
div(id: 'summary') do
|
56
|
+
p('', id: 'totals')
|
57
|
+
p('', id: 'duration')
|
58
|
+
|
59
|
+
expand_collapse
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def expand_collapse
|
64
|
+
div(id: 'expand-collapse') do
|
65
|
+
p('Expand All', id: 'expander')
|
66
|
+
p('Collapse All', id: 'collapser')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def prepend_to_span(span_class, content)
|
71
|
+
span(class: span_class) do |pre|
|
72
|
+
pre << content
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def inline_css
|
77
|
+
style(type: 'text/css') do
|
78
|
+
pn = ::Pathname.new(::File.dirname(__FILE__) + '/cucumber.css')
|
79
|
+
self << pn.read
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def inline_js
|
84
|
+
script(type: 'text/javascript') do
|
85
|
+
self << inline_jquery
|
86
|
+
self << inline_js_content
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def inline_jquery
|
91
|
+
pn = ::Pathname.new(::File.dirname(__FILE__) + '/jquery-min.js')
|
92
|
+
pn.read
|
93
|
+
end
|
94
|
+
|
95
|
+
def inline_js_content # rubocop:disable
|
96
|
+
pn = ::Pathname.new(::File.dirname(__FILE__) + '/inline-js.js')
|
97
|
+
pn.read
|
98
|
+
end
|
99
|
+
|
100
|
+
def set_head_tags
|
101
|
+
head do
|
102
|
+
meta('http-equiv' => 'Content-Type', :content => 'text/html;charset=utf-8')
|
103
|
+
title 'Cucumber'
|
104
|
+
inline_css
|
105
|
+
inline_js
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
SCENARIOS = "h3[id^='scenario_'],h3[id^=background_]";
|
2
|
+
|
3
|
+
$(document).ready(function() {
|
4
|
+
$(SCENARIOS).css('cursor', 'pointer');
|
5
|
+
$(SCENARIOS).click(function() {
|
6
|
+
$(this).siblings().toggle(250);
|
7
|
+
});
|
8
|
+
|
9
|
+
$("#collapser").css('cursor', 'pointer');
|
10
|
+
$("#collapser").click(function() {
|
11
|
+
$(SCENARIOS).siblings().hide();
|
12
|
+
});
|
13
|
+
|
14
|
+
$("#expander").css('cursor', 'pointer');
|
15
|
+
$("#expander").click(function() {
|
16
|
+
$(SCENARIOS).siblings().show();
|
17
|
+
});
|
18
|
+
})
|
19
|
+
|
20
|
+
function moveProgressBar(percentDone) {
|
21
|
+
$("cucumber-header").css('width', percentDone +"%");
|
22
|
+
}
|
23
|
+
function makeRed(element_id) {
|
24
|
+
$('#'+element_id).css('background', '#C40D0D');
|
25
|
+
$('#'+element_id).css('color', '#FFFFFF');
|
26
|
+
}
|
27
|
+
function makeYellow(element_id) {
|
28
|
+
$('#'+element_id).css('background', '#FAF834');
|
29
|
+
$('#'+element_id).css('color', '#000000');
|
30
|
+
}
|
@@ -13,7 +13,7 @@ module Cucumber
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def write(str)
|
16
|
-
lock.synchronize do
|
16
|
+
lock.synchronize do
|
17
17
|
@buffer << str if @wrapped
|
18
18
|
return @pipe.write(str)
|
19
19
|
end
|
@@ -71,7 +71,7 @@ module Cucumber
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
|
-
|
74
|
+
private
|
75
75
|
def lock
|
76
76
|
@lock||=Mutex.new
|
77
77
|
end
|
@@ -66,12 +66,12 @@ module Cucumber
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def on_test_case_finished(event)
|
69
|
-
|
69
|
+
_test_case, result = *event.attributes
|
70
70
|
result = result.with_filtered_backtrace(Cucumber::Formatter::BacktraceFilter)
|
71
71
|
add_failed_around_hook(result) if result.failed? && !@any_step_failed
|
72
72
|
end
|
73
73
|
|
74
|
-
def on_test_run_finished(
|
74
|
+
def on_test_run_finished(_event)
|
75
75
|
@io.write(MultiJson.dump(@feature_hashes, pretty: true))
|
76
76
|
end
|
77
77
|
|
@@ -170,7 +170,7 @@ module Cucumber
|
|
170
170
|
end
|
171
171
|
|
172
172
|
def create_doc_string_hash(doc_string)
|
173
|
-
content_type = doc_string.content_type ? doc_string.content_type :
|
173
|
+
content_type = doc_string.content_type ? doc_string.content_type : ''
|
174
174
|
{
|
175
175
|
value: doc_string.content,
|
176
176
|
content_type: content_type,
|
@@ -192,12 +192,12 @@ module Cucumber
|
|
192
192
|
def add_failed_around_hook(result)
|
193
193
|
@step_or_hook_hash = {}
|
194
194
|
around_hooks << @step_or_hook_hash
|
195
|
-
@step_or_hook_hash[:match] = { location:
|
195
|
+
@step_or_hook_hash[:match] = { location: 'unknown_hook_location:1' }
|
196
196
|
|
197
197
|
@step_or_hook_hash[:result] = create_result_hash(result)
|
198
198
|
end
|
199
199
|
|
200
|
-
def create_match_hash(test_step,
|
200
|
+
def create_match_hash(test_step, _result)
|
201
201
|
{ location: test_step.action_location.to_s }
|
202
202
|
end
|
203
203
|
|
@@ -218,7 +218,7 @@ module Cucumber
|
|
218
218
|
|
219
219
|
def encode64(data)
|
220
220
|
# strip newlines from the encoded data
|
221
|
-
Base64.encode64(data).
|
221
|
+
Base64.encode64(data).delete("\n")
|
222
222
|
end
|
223
223
|
|
224
224
|
class Builder
|
@@ -245,11 +245,11 @@ module Cucumber
|
|
245
245
|
}
|
246
246
|
unless feature.tags.empty?
|
247
247
|
@feature_hash[:tags] = create_tags_array(feature.tags)
|
248
|
-
if @test_case_hash[:tags]
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
248
|
+
@test_case_hash[:tags] = if @test_case_hash[:tags]
|
249
|
+
@feature_hash[:tags] + @test_case_hash[:tags]
|
250
|
+
else
|
251
|
+
@feature_hash[:tags]
|
252
|
+
end
|
253
253
|
end
|
254
254
|
@feature_hash[:comments] = Formatter.create_comments_array(feature.comments) unless feature.comments.empty?
|
255
255
|
@test_case_hash[:id].insert(0, @feature_hash[:id] + ';')
|
@@ -316,7 +316,7 @@ module Cucumber
|
|
316
316
|
private
|
317
317
|
|
318
318
|
def create_id(element)
|
319
|
-
element.name.downcase.
|
319
|
+
element.name.downcase.tr(' ', '-')
|
320
320
|
end
|
321
321
|
|
322
322
|
def create_tags_array(tags)
|
@@ -23,7 +23,7 @@ module Cucumber
|
|
23
23
|
config.on_event :test_case_finished, &method(:on_test_case_finished)
|
24
24
|
config.on_event :test_step_finished, &method(:on_test_step_finished)
|
25
25
|
config.on_event :test_run_finished, &method(:on_test_run_finished)
|
26
|
-
@reportdir = ensure_dir(config.out_stream,
|
26
|
+
@reportdir = ensure_dir(config.out_stream, 'junit')
|
27
27
|
@config = config
|
28
28
|
@features_data = Hash.new { |h,k| h[k] = {
|
29
29
|
feature: nil,
|
@@ -68,7 +68,7 @@ module Cucumber
|
|
68
68
|
Interceptor::Pipe.unwrap! :stderr
|
69
69
|
end
|
70
70
|
|
71
|
-
def on_test_run_finished(
|
71
|
+
def on_test_run_finished(_event)
|
72
72
|
@features_data.each { |file, data| end_feature(data) }
|
73
73
|
end
|
74
74
|
|
@@ -92,7 +92,7 @@ module Cucumber
|
|
92
92
|
:errors => feature_data[:errors],
|
93
93
|
:skipped => feature_data[:skipped],
|
94
94
|
:tests => feature_data[:tests],
|
95
|
-
:time =>
|
95
|
+
:time => format('%.6f', feature_data[:time]),
|
96
96
|
:name => feature_data[:feature].name ) do
|
97
97
|
@testsuite << feature_data[:builder].target!
|
98
98
|
end
|
@@ -103,8 +103,8 @@ module Cucumber
|
|
103
103
|
def create_output_string(test_case, scenario, result, row_name)
|
104
104
|
output = "#{test_case.keyword}: #{scenario}\n\n"
|
105
105
|
return output if result.ok?(@config.strict?)
|
106
|
-
if test_case.keyword ==
|
107
|
-
output +=
|
106
|
+
if test_case.keyword == 'Scenario'
|
107
|
+
output += @failing_step_source.keyword.to_s unless hook?(@failing_step_source)
|
108
108
|
output += "#{@failing_step_source.name}\n"
|
109
109
|
else
|
110
110
|
output += "Example row: #{row_name}\n"
|
@@ -113,7 +113,7 @@ module Cucumber
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def hook?(step)
|
116
|
-
[
|
116
|
+
['Before hook', 'After hook', 'AfterStep hook'].include? step.name
|
117
117
|
end
|
118
118
|
|
119
119
|
def build_testcase(result, scenario_designation, output)
|
@@ -122,7 +122,7 @@ module Cucumber
|
|
122
122
|
classname = @current_feature_data[:feature].name
|
123
123
|
name = scenario_designation
|
124
124
|
|
125
|
-
@current_feature_data[:builder].testcase(:classname => classname, :name => name, :time =>
|
125
|
+
@current_feature_data[:builder].testcase(:classname => classname, :name => name, :time => format('%.6f', duration)) do
|
126
126
|
if !result.passed? && result.ok?(@config.strict?)
|
127
127
|
@current_feature_data[:builder].skipped
|
128
128
|
@current_feature_data[:skipped] += 1
|
@@ -182,8 +182,8 @@ module Cucumber
|
|
182
182
|
attr_reader :scenario_name, :name_suffix, :row_name
|
183
183
|
|
184
184
|
def initialize(test_case)
|
185
|
-
@name_suffix =
|
186
|
-
@row_name =
|
185
|
+
@name_suffix = ''
|
186
|
+
@row_name = ''
|
187
187
|
test_case.describe_source_to self
|
188
188
|
end
|
189
189
|
|
@@ -192,12 +192,12 @@ module Cucumber
|
|
192
192
|
end
|
193
193
|
|
194
194
|
def scenario(scenario)
|
195
|
-
@scenario_name = (scenario.name.nil? || scenario.name ==
|
195
|
+
@scenario_name = (scenario.name.nil? || scenario.name == '') ? 'Unnamed scenario' : scenario.name
|
196
196
|
self
|
197
197
|
end
|
198
198
|
|
199
199
|
def scenario_outline(outline)
|
200
|
-
@scenario_name = (outline.name.nil? || outline.name ==
|
200
|
+
@scenario_name = (outline.name.nil? || outline.name == '') ? 'Unnamed scenario outline' : outline.name
|
201
201
|
self
|
202
202
|
end
|
203
203
|
|
@@ -61,7 +61,7 @@ module Cucumber
|
|
61
61
|
|
62
62
|
def collect_matches
|
63
63
|
result = {}
|
64
|
-
config.on_event(:
|
64
|
+
config.on_event(:step_activated) do |event|
|
65
65
|
test_step, step_match = *event.attributes
|
66
66
|
result[test_step.source.last] = step_match
|
67
67
|
end
|
@@ -151,7 +151,7 @@ module Cucumber
|
|
151
151
|
@result = CaseSource.new
|
152
152
|
end
|
153
153
|
|
154
|
-
def method_missing(name, node,
|
154
|
+
def method_missing(name, node, _test_case_result, *_args)
|
155
155
|
result.send "#{name}=", node
|
156
156
|
end
|
157
157
|
end
|
@@ -175,7 +175,7 @@ module Cucumber
|
|
175
175
|
@result = StepSource.new
|
176
176
|
end
|
177
177
|
|
178
|
-
def method_missing(name, node, step_result, *
|
178
|
+
def method_missing(name, node, step_result, *_args)
|
179
179
|
result.send "#{name}=", node
|
180
180
|
result.send "#{name}_result=", LegacyResultBuilder.new(step_result)
|
181
181
|
end
|
@@ -220,7 +220,7 @@ module Cucumber
|
|
220
220
|
|
221
221
|
attr_reader :current_test_step_source
|
222
222
|
|
223
|
-
def before_test_case(
|
223
|
+
def before_test_case(_test_case)
|
224
224
|
@before_hook_results = Ast::HookResultCollection.new
|
225
225
|
@test_step_results = []
|
226
226
|
end
|
@@ -258,22 +258,22 @@ module Cucumber
|
|
258
258
|
@previous_test_case_scenario_outline = current_test_step_source && current_test_step_source.scenario_outline
|
259
259
|
end
|
260
260
|
|
261
|
-
def before_hook(
|
261
|
+
def before_hook(_location, result)
|
262
262
|
@before_hook_results << Ast::HookResult.new(LegacyResultBuilder.new(result), @delayed_messages, @delayed_embeddings)
|
263
263
|
@delayed_messages = []
|
264
264
|
@delayed_embeddings = []
|
265
265
|
end
|
266
266
|
|
267
|
-
def after_hook(
|
267
|
+
def after_hook(_location, result)
|
268
268
|
# if the scenario has no steps, we can hit this before we've created the scenario printer
|
269
269
|
# ideally we should call switch_step_container in before_step_step
|
270
|
-
switch_step_container if !@child
|
270
|
+
switch_step_container if !@child
|
271
271
|
@child.after_hook Ast::HookResult.new(LegacyResultBuilder.new(result), @delayed_messages, @delayed_embeddings)
|
272
272
|
@delayed_messages = []
|
273
273
|
@delayed_embeddings = []
|
274
274
|
end
|
275
275
|
|
276
|
-
def after_step_hook(
|
276
|
+
def after_step_hook(_hook, result)
|
277
277
|
p current_test_step_source if current_test_step_source.step.nil?
|
278
278
|
line = current_test_step_source.step.backtrace_line
|
279
279
|
@child.after_step_hook Ast::HookResult.new(LegacyResultBuilder.new(result).
|
@@ -359,7 +359,7 @@ module Cucumber
|
|
359
359
|
|
360
360
|
if @failed_hidden_background_step
|
361
361
|
indent = Indent.new(@child.node)
|
362
|
-
step_invocation = @failed_hidden_background_step.build_step_invocation(indent, matches, config,
|
362
|
+
step_invocation = @failed_hidden_background_step.build_step_invocation(indent, matches, config, [], [])
|
363
363
|
@child.step_invocation(step_invocation, @failed_hidden_background_step)
|
364
364
|
@failed_hidden_background_step = nil
|
365
365
|
end
|
@@ -388,11 +388,11 @@ module Cucumber
|
|
388
388
|
@previous_outline_child.after unless same_scenario_outline_as_previous_test_case?(source)
|
389
389
|
end
|
390
390
|
end
|
391
|
-
|
392
|
-
@child.after
|
393
|
-
@previous_outline_child = nil
|
394
|
-
else
|
391
|
+
if from_scenario_outline_to_hidden_backgroud(@child, child)
|
395
392
|
@previous_outline_child = @child
|
393
|
+
else
|
394
|
+
@child.after
|
395
|
+
@previous_outline_child = nil
|
396
396
|
end
|
397
397
|
end
|
398
398
|
child.before unless to_scenario_outline(child) and same_scenario_outline_as_previous_test_case?(source)
|
@@ -495,7 +495,7 @@ module Cucumber
|
|
495
495
|
return @source_of_failed_step
|
496
496
|
end
|
497
497
|
|
498
|
-
def step_invocation(
|
498
|
+
def step_invocation(_step_invocation, source)
|
499
499
|
if source.step_result.status == :failed
|
500
500
|
@source_of_failed_step = source
|
501
501
|
end
|
@@ -522,7 +522,7 @@ module Cucumber
|
|
522
522
|
self
|
523
523
|
end
|
524
524
|
|
525
|
-
def step_invocation(step_invocation,
|
525
|
+
def step_invocation(step_invocation, _source)
|
526
526
|
@child ||= StepsPrinter.new(formatter).before
|
527
527
|
@child.step_invocation step_invocation
|
528
528
|
end
|
@@ -531,7 +531,7 @@ module Cucumber
|
|
531
531
|
result.accept formatter
|
532
532
|
end
|
533
533
|
|
534
|
-
def after_test_case(
|
534
|
+
def after_test_case(_test_case, result)
|
535
535
|
@test_case_result = result
|
536
536
|
after
|
537
537
|
end
|
@@ -592,7 +592,7 @@ module Cucumber
|
|
592
592
|
end
|
593
593
|
|
594
594
|
def step_invocation(step_invocation, source)
|
595
|
-
|
595
|
+
_node, result = source.step, source.step_result
|
596
596
|
@last_step_result = result
|
597
597
|
@child.step_invocation(step_invocation, source)
|
598
598
|
end
|
@@ -636,14 +636,14 @@ module Cucumber
|
|
636
636
|
steps_printer.after
|
637
637
|
end
|
638
638
|
|
639
|
-
def scenario_outline(
|
639
|
+
def scenario_outline(_node, &descend)
|
640
640
|
descend.call(self)
|
641
641
|
end
|
642
642
|
|
643
643
|
def outline_step(step)
|
644
644
|
step_match = NoStepMatch.new(step, step.name)
|
645
645
|
step_invocation = LegacyResultBuilder.new(Core::Test::Result::Skipped.new).
|
646
|
-
step_invocation(step_match, step, indent,
|
646
|
+
step_invocation(step_match, step, indent, nil, configuration, [], [])
|
647
647
|
steps_printer.step_invocation step_invocation
|
648
648
|
end
|
649
649
|
|
@@ -699,11 +699,11 @@ module Cucumber
|
|
699
699
|
return if examples_table_row == @current
|
700
700
|
@child.after if @child
|
701
701
|
row = ExampleTableRow.new(examples_table_row)
|
702
|
-
if !configuration.expand?
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
702
|
+
@child = if !configuration.expand?
|
703
|
+
TableRowPrinter.new(formatter, row, before_hook_results).before
|
704
|
+
else
|
705
|
+
ExpandTableRowPrinter.new(formatter, row, before_hook_results).before
|
706
|
+
end
|
707
707
|
@current = examples_table_row
|
708
708
|
end
|
709
709
|
|
@@ -746,7 +746,7 @@ module Cucumber
|
|
746
746
|
descend.call(self)
|
747
747
|
end
|
748
748
|
|
749
|
-
def examples_table_row(row, &
|
749
|
+
def examples_table_row(row, &_descend)
|
750
750
|
width = char_length_of(row.values[index])
|
751
751
|
@result = width if width > result
|
752
752
|
end
|
@@ -771,7 +771,7 @@ module Cucumber
|
|
771
771
|
@after_step_hook_result << result
|
772
772
|
end
|
773
773
|
|
774
|
-
def after_test_case(*
|
774
|
+
def after_test_case(*_args)
|
775
775
|
after
|
776
776
|
end
|
777
777
|
|
@@ -999,7 +999,7 @@ module Cucumber
|
|
999
999
|
Cucumber::Formatter::BacktraceFilter.new(@exception.dup).exception
|
1000
1000
|
end
|
1001
1001
|
|
1002
|
-
def filtered_step_exception(
|
1002
|
+
def filtered_step_exception(_step)
|
1003
1003
|
exception = filtered_exception
|
1004
1004
|
return Cucumber::Formatter::BacktraceFilter.new(exception).exception
|
1005
1005
|
end
|