cucumber 3.1.0 → 3.1.1
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 +4 -4
- data/CHANGELOG.md +38 -2
- data/CONTRIBUTING.md +1 -0
- data/README.md +6 -7
- data/lib/autotest/cucumber.rb +1 -0
- data/lib/autotest/cucumber_mixin.rb +1 -0
- data/lib/autotest/cucumber_rails.rb +1 -0
- data/lib/autotest/cucumber_rails_rspec.rb +1 -0
- data/lib/autotest/cucumber_rails_rspec2.rb +1 -0
- data/lib/autotest/cucumber_rspec.rb +1 -0
- data/lib/autotest/cucumber_rspec2.rb +1 -0
- data/lib/autotest/discover.rb +1 -0
- data/lib/cucumber.rb +1 -0
- data/lib/cucumber/cli/configuration.rb +1 -0
- data/lib/cucumber/cli/main.rb +2 -2
- data/lib/cucumber/cli/options.rb +42 -40
- data/lib/cucumber/cli/profile_loader.rb +5 -7
- data/lib/cucumber/cli/rerun_file.rb +1 -0
- data/lib/cucumber/configuration.rb +1 -0
- data/lib/cucumber/constantize.rb +6 -5
- data/lib/cucumber/core_ext/string.rb +1 -0
- data/lib/cucumber/deprecate.rb +1 -1
- data/lib/cucumber/encoding.rb +2 -1
- data/lib/cucumber/errors.rb +1 -0
- data/lib/cucumber/events.rb +1 -1
- data/lib/cucumber/events/gherkin_source_read.rb +1 -4
- data/lib/cucumber/events/step_activated.rb +4 -5
- data/lib/cucumber/events/step_definition_registered.rb +4 -8
- data/lib/cucumber/events/test_case_finished.rb +0 -4
- data/lib/cucumber/events/test_case_started.rb +0 -4
- data/lib/cucumber/events/test_run_finished.rb +2 -3
- data/lib/cucumber/events/test_run_started.rb +2 -4
- data/lib/cucumber/events/test_step_finished.rb +0 -4
- data/lib/cucumber/events/test_step_started.rb +1 -5
- data/lib/cucumber/file_specs.rb +2 -1
- data/lib/cucumber/filters.rb +1 -0
- data/lib/cucumber/filters/activate_steps.rb +1 -1
- data/lib/cucumber/filters/apply_after_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_after_step_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_around_hooks.rb +1 -0
- data/lib/cucumber/filters/apply_before_hooks.rb +1 -0
- data/lib/cucumber/filters/broadcast_test_run_started_event.rb +2 -1
- data/lib/cucumber/filters/gated_receiver.rb +1 -2
- data/lib/cucumber/filters/prepare_world.rb +2 -5
- data/lib/cucumber/filters/quit.rb +2 -3
- data/lib/cucumber/filters/randomizer.rb +6 -7
- data/lib/cucumber/filters/retry.rb +2 -2
- data/lib/cucumber/filters/tag_limits.rb +2 -2
- data/lib/cucumber/filters/tag_limits/test_case_index.rb +1 -2
- data/lib/cucumber/filters/tag_limits/verifier.rb +1 -2
- data/lib/cucumber/formatter/ansicolor.rb +13 -12
- data/lib/cucumber/formatter/backtrace_filter.rb +1 -2
- data/lib/cucumber/formatter/console.rb +10 -11
- data/lib/cucumber/formatter/console_counts.rb +4 -4
- data/lib/cucumber/formatter/console_issues.rb +3 -3
- data/lib/cucumber/formatter/duration.rb +1 -0
- data/lib/cucumber/formatter/duration_extractor.rb +1 -1
- data/lib/cucumber/formatter/fail_fast.rb +9 -6
- data/lib/cucumber/formatter/fanout.rb +1 -3
- data/lib/cucumber/formatter/hook_query_visitor.rb +1 -0
- data/lib/cucumber/formatter/html.rb +27 -31
- data/lib/cucumber/formatter/html_builder.rb +2 -1
- data/lib/cucumber/formatter/ignore_missing_messages.rb +1 -2
- data/lib/cucumber/formatter/interceptor.rb +18 -5
- data/lib/cucumber/formatter/io.rb +1 -0
- data/lib/cucumber/formatter/json.rb +2 -1
- data/lib/cucumber/formatter/json_pretty.rb +1 -0
- data/lib/cucumber/formatter/junit.rb +16 -15
- data/lib/cucumber/formatter/pretty.rb +3 -2
- data/lib/cucumber/formatter/progress.rb +3 -2
- data/lib/cucumber/formatter/rerun.rb +1 -0
- data/lib/cucumber/formatter/stepdefs.rb +1 -0
- data/lib/cucumber/formatter/steps.rb +2 -2
- data/lib/cucumber/formatter/summary.rb +1 -1
- data/lib/cucumber/formatter/unicode.rb +2 -2
- data/lib/cucumber/formatter/usage.rb +21 -18
- data/lib/cucumber/gherkin/data_table_parser.rb +1 -0
- data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +86 -85
- data/lib/cucumber/gherkin/formatter/escaping.rb +13 -12
- data/lib/cucumber/gherkin/i18n.rb +1 -0
- data/lib/cucumber/gherkin/steps_parser.rb +1 -0
- data/lib/cucumber/glue/dsl.rb +1 -0
- data/lib/cucumber/glue/hook.rb +1 -0
- data/lib/cucumber/glue/invoke_in_world.rb +3 -3
- data/lib/cucumber/glue/proto_world.rb +8 -9
- data/lib/cucumber/glue/registry_and_more.rb +13 -12
- data/lib/cucumber/glue/snippet.rb +1 -5
- data/lib/cucumber/glue/step_definition.rb +9 -9
- data/lib/cucumber/glue/world_factory.rb +0 -2
- data/lib/cucumber/hooks.rb +1 -3
- data/lib/cucumber/load_path.rb +1 -0
- data/lib/cucumber/multiline_argument.rb +2 -2
- data/lib/cucumber/multiline_argument/data_table.rb +10 -10
- data/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +4 -7
- data/lib/cucumber/multiline_argument/doc_string.rb +1 -0
- data/lib/cucumber/platform.rb +2 -1
- data/lib/cucumber/project_initializer.rb +1 -1
- data/lib/cucumber/rake/task.rb +7 -4
- data/lib/cucumber/rspec/disable_option_parser.rb +1 -0
- data/lib/cucumber/rspec/doubles.rb +1 -0
- data/lib/cucumber/running_test_case.rb +2 -1
- data/lib/cucumber/runtime.rb +5 -5
- data/lib/cucumber/runtime/after_hooks.rb +1 -0
- data/lib/cucumber/runtime/before_hooks.rb +1 -0
- data/lib/cucumber/runtime/for_programming_languages.rb +8 -7
- data/lib/cucumber/runtime/step_hooks.rb +2 -0
- data/lib/cucumber/runtime/support_code.rb +3 -7
- data/lib/cucumber/runtime/user_interface.rb +2 -3
- data/lib/cucumber/step_argument.rb +1 -0
- data/lib/cucumber/step_definition_light.rb +2 -1
- data/lib/cucumber/step_definitions.rb +1 -0
- data/lib/cucumber/step_match.rb +5 -7
- data/lib/cucumber/step_match_search.rb +1 -2
- data/lib/cucumber/term/ansicolor.rb +30 -30
- data/lib/cucumber/unit.rb +1 -0
- data/lib/cucumber/version +1 -1
- data/lib/simplecov_setup.rb +1 -0
- metadata +61 -117
data/lib/cucumber/constantize.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/platform'
|
3
4
|
module Cucumber
|
4
5
|
module Constantize #:nodoc:
|
@@ -26,11 +27,11 @@ module Cucumber
|
|
26
27
|
|
27
28
|
# Snagged from active_support
|
28
29
|
def underscore(camel_cased_word)
|
29
|
-
camel_cased_word.to_s.gsub(/::/, '/')
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
camel_cased_word.to_s.gsub(/::/, '/')
|
31
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
32
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
33
|
+
.tr('-', '_')
|
34
|
+
.downcase
|
34
35
|
end
|
35
36
|
|
36
37
|
private
|
data/lib/cucumber/deprecate.rb
CHANGED
data/lib/cucumber/encoding.rb
CHANGED
data/lib/cucumber/errors.rb
CHANGED
data/lib/cucumber/events.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Dir[File.dirname(__FILE__) + '/events/*.rb'].map(&method(:require))
|
3
4
|
|
4
5
|
module Cucumber
|
5
|
-
|
6
6
|
# Events tell you what's happening while Cucumber runs your features.
|
7
7
|
#
|
8
8
|
# They're designed to be read-only, appropriate for writing formatters and other
|
@@ -2,16 +2,13 @@ require 'cucumber/core/events'
|
|
2
2
|
|
3
3
|
module Cucumber
|
4
4
|
module Events
|
5
|
-
|
6
|
-
# Fired after we've read in the contents of a feature file
|
5
|
+
# Fired after we've read in the contents of a feature file
|
7
6
|
class GherkinSourceRead < Core::Event.new(:path, :body)
|
8
|
-
|
9
7
|
# The path to the file
|
10
8
|
attr_reader :path
|
11
9
|
|
12
10
|
# The raw Gherkin source
|
13
11
|
attr_reader :body
|
14
12
|
end
|
15
|
-
|
16
13
|
end
|
17
14
|
end
|
@@ -1,23 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/core/events'
|
3
4
|
|
4
5
|
module Cucumber
|
5
6
|
module Events
|
6
|
-
|
7
7
|
# Event fired when a step is activated
|
8
8
|
class StepActivated < Core::Event.new(:test_step, :step_match)
|
9
|
-
|
10
|
-
# The test step that was matched.
|
9
|
+
# The test step that was matched.
|
11
10
|
#
|
12
11
|
# @return [Cucumber::Core::Test::Step]
|
13
12
|
attr_reader :test_step
|
14
13
|
|
15
|
-
#
|
14
|
+
# Information about the matching definition.
|
16
15
|
#
|
17
16
|
# @return [Cucumber::StepMatch]
|
18
17
|
attr_reader :step_match
|
19
18
|
|
20
|
-
#
|
19
|
+
# @private
|
21
20
|
def initialize(test_step, step_match)
|
22
21
|
@test_step, @step_match = test_step, step_match
|
23
22
|
end
|
@@ -1,24 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/core/events'
|
3
4
|
|
4
5
|
module Cucumber
|
5
6
|
module Events
|
6
|
-
|
7
|
-
# Event fired after each step definition has been registered
|
7
|
+
# Event fired after each step definition has been registered
|
8
8
|
class StepDefinitionRegistered < Core::Event.new(:step_definition)
|
9
|
-
|
10
|
-
|
11
|
-
#_The step definition that was just registered.
|
9
|
+
# The step definition that was just registered.
|
12
10
|
#
|
13
11
|
# @return [RbSupport::RbStepDefinition]
|
14
12
|
attr_reader :step_definition
|
15
13
|
|
16
|
-
#_@private
|
14
|
+
# _@private
|
17
15
|
def initialize(step_definition)
|
18
16
|
@step_definition = step_definition
|
19
17
|
end
|
20
|
-
|
21
18
|
end
|
22
|
-
|
23
19
|
end
|
24
20
|
end
|
@@ -2,17 +2,13 @@ require 'cucumber/core/events'
|
|
2
2
|
|
3
3
|
module Cucumber
|
4
4
|
module Events
|
5
|
-
|
6
5
|
# Signals that a {Cucumber::Core::Test::Case} has finished executing
|
7
6
|
class TestCaseFinished < Core::Events::TestCaseFinished
|
8
|
-
|
9
7
|
# @return [Cucumber::Core::Test::Case] that was executed
|
10
8
|
attr_reader :test_case
|
11
9
|
|
12
10
|
# @return [Cucumber::Core::Test::Result] the result of running the {Cucumber::Core::Test::Case}
|
13
11
|
attr_reader :result
|
14
|
-
|
15
12
|
end
|
16
|
-
|
17
13
|
end
|
18
14
|
end
|
@@ -2,14 +2,10 @@ require 'cucumber/core/events'
|
|
2
2
|
|
3
3
|
module Cucumber
|
4
4
|
module Events
|
5
|
-
|
6
5
|
# Signals that a {Cucumber::Core::Test::Case} is about to be executed
|
7
6
|
class TestCaseStarted < Core::Events::TestCaseStarted
|
8
|
-
|
9
7
|
# @return [Cucumber::Core::Test::Case] the test case to be executed
|
10
8
|
attr_reader :test_case
|
11
|
-
|
12
9
|
end
|
13
|
-
|
14
10
|
end
|
15
11
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/core/events'
|
3
4
|
|
4
5
|
module Cucumber
|
5
6
|
module Events
|
6
|
-
|
7
|
-
# Event fired after all test cases have finished executing
|
7
|
+
# Event fired after all test cases have finished executing
|
8
8
|
class TestRunFinished < Core::Event.new
|
9
9
|
end
|
10
|
-
|
11
10
|
end
|
12
11
|
end
|
@@ -1,16 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/core/events'
|
3
4
|
|
4
5
|
module Cucumber
|
5
6
|
module Events
|
6
|
-
|
7
|
-
# Event fired once all test cases have been filtered before
|
7
|
+
# Event fired once all test cases have been filtered before
|
8
8
|
# the first one is executed.
|
9
9
|
class TestRunStarted < Core::Event.new(:test_cases)
|
10
|
-
|
11
10
|
# @return [Array<Cucumber::Core::Test::Case>] the test cases to be executed
|
12
11
|
attr_reader :test_cases
|
13
12
|
end
|
14
|
-
|
15
13
|
end
|
16
14
|
end
|
@@ -2,17 +2,13 @@ require 'cucumber/core/events'
|
|
2
2
|
|
3
3
|
module Cucumber
|
4
4
|
module Events
|
5
|
-
|
6
5
|
# Signals that a {Cucumber::Core::Test::Step} has finished executing
|
7
6
|
class TestStepFinished < Core::Events::TestStepFinished
|
8
|
-
|
9
7
|
# @return [Cucumber::Core::Test::Step] the test step that was executed
|
10
8
|
attr_reader :test_step
|
11
9
|
|
12
10
|
# @return [Cucumber::Core::Test::Result] the result of running the {Cucumber::Core::Test::Step}
|
13
11
|
attr_reader :result
|
14
|
-
|
15
12
|
end
|
16
|
-
|
17
13
|
end
|
18
14
|
end
|
@@ -2,14 +2,10 @@ require 'cucumber/core/events'
|
|
2
2
|
|
3
3
|
module Cucumber
|
4
4
|
module Events
|
5
|
-
|
6
|
-
# Signals that a {Cucumber::Core::Test::Step} is about to be executed
|
5
|
+
# Signals that a {Cucumber::Core::Test::Step} is about to be executed
|
7
6
|
class TestStepStarted < Core::Events::TestStepStarted
|
8
|
-
|
9
7
|
# @return [Cucumber::Core::Test::Step] the test step to be executed
|
10
8
|
attr_reader :test_step
|
11
|
-
|
12
9
|
end
|
13
|
-
|
14
10
|
end
|
15
11
|
end
|
data/lib/cucumber/file_specs.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber'
|
3
4
|
require 'cucumber/core/ast/location'
|
4
5
|
|
@@ -30,7 +31,7 @@ module Cucumber
|
|
30
31
|
attr_reader :file
|
31
32
|
|
32
33
|
def locations
|
33
|
-
return [
|
34
|
+
return [Core::Ast::Location.new(@file)] if @lines.empty?
|
34
35
|
@lines.map { |line| Core::Ast::Location.new(@file, line) }
|
35
36
|
end
|
36
37
|
end
|
data/lib/cucumber/filters.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/core/filter'
|
3
4
|
require 'cucumber/step_match'
|
4
5
|
require 'cucumber/events'
|
@@ -7,7 +8,6 @@ require 'cucumber/errors'
|
|
7
8
|
module Cucumber
|
8
9
|
module Filters
|
9
10
|
class ActivateSteps < Core::Filter.new(:step_match_search, :configuration)
|
10
|
-
|
11
11
|
def test_case(test_case)
|
12
12
|
CaseFilter.new(test_case, step_match_search, configuration).test_case.describe_to receiver
|
13
13
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Cucumber
|
3
4
|
module Filters
|
4
5
|
# Added at the end of the filter chain to broadcast a list of
|
5
6
|
# all of the test cases that have made it through the filters.
|
6
7
|
class BroadcastTestRunStartedEvent < Core::Filter.new(:config)
|
7
|
-
def initialize(config, receiver=nil)
|
8
|
+
def initialize(config, receiver = nil)
|
8
9
|
super
|
9
10
|
@test_cases = []
|
10
11
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'cucumber/core/filter'
|
3
4
|
require 'cucumber/core/ast/location'
|
4
5
|
require 'cucumber/running_test_case'
|
5
6
|
|
6
7
|
module Cucumber
|
7
8
|
module Filters
|
8
|
-
|
9
9
|
class PrepareWorld < Core::Filter.new(:runtime)
|
10
|
-
|
11
10
|
def test_case(test_case)
|
12
11
|
CaseFilter.new(runtime, test_case).test_case.describe_to receiver
|
13
12
|
end
|
@@ -25,7 +24,7 @@ module Cucumber
|
|
25
24
|
end
|
26
25
|
around_hooks = [init_scenario] + @original_test_case.around_hooks
|
27
26
|
|
28
|
-
empty_hook = proc {} #no op - legacy format adapter expects a before hooks
|
27
|
+
empty_hook = proc {} # no op - legacy format adapter expects a before hooks
|
29
28
|
empty_hook_location = Cucumber::Core::Ast::Location.from_source_location(*empty_hook.source_location)
|
30
29
|
default_hook = Cucumber::Hooks.before_hook(@original_test_case.source, empty_hook_location, &empty_hook)
|
31
30
|
steps = [default_hook] + @original_test_case.test_steps
|
@@ -39,8 +38,6 @@ module Cucumber
|
|
39
38
|
@scenario ||= RunningTestCase.new(test_case)
|
40
39
|
end
|
41
40
|
end
|
42
|
-
|
43
41
|
end
|
44
|
-
|
45
42
|
end
|
46
43
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Cucumber
|
3
4
|
module Filters
|
4
|
-
|
5
5
|
class Quit
|
6
|
-
def initialize(receiver=nil)
|
6
|
+
def initialize(receiver = nil)
|
7
7
|
@receiver = receiver
|
8
8
|
end
|
9
9
|
|
@@ -23,6 +23,5 @@ module Cucumber
|
|
23
23
|
self.class.new(receiver)
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
26
|
end
|
28
27
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'digest/sha2'
|
3
4
|
|
4
5
|
module Cucumber
|
5
6
|
module Filters
|
6
|
-
|
7
|
-
# Batches up all test cases, randomizes them, and then sends them on
|
7
|
+
# Batches up all test cases, randomizes them, and then sends them on
|
8
8
|
class Randomizer
|
9
|
-
def initialize(seed, receiver=nil)
|
9
|
+
def initialize(seed, receiver = nil)
|
10
10
|
@receiver = receiver
|
11
11
|
@test_cases = []
|
12
12
|
@seed = seed
|
@@ -33,14 +33,13 @@ module Cucumber
|
|
33
33
|
|
34
34
|
def shuffled_test_cases
|
35
35
|
digester = Digest::SHA2.new(256)
|
36
|
-
@test_cases.map.with_index
|
37
|
-
|
38
|
-
|
36
|
+
@test_cases.map.with_index
|
37
|
+
.sort_by { |_, index| digester.digest((@seed + index).to_s) }
|
38
|
+
.map { |test_case, _| test_case }
|
39
39
|
end
|
40
40
|
|
41
41
|
attr_reader :seed
|
42
42
|
private :seed
|
43
43
|
end
|
44
|
-
|
45
44
|
end
|
46
45
|
end
|