cucumber 2.1.0 → 2.2.0
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/.travis.yml +10 -0
- data/Gemfile +3 -1
- data/History.md +18 -2
- data/README.md +5 -1
- data/cucumber.gemspec +3 -4
- data/cucumber.yml +2 -2
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +4 -7
- data/features/docs/defining_steps/skip_scenario.feature +6 -2
- data/features/docs/formatters/api_methods.feature +36 -0
- data/features/docs/profiles.feature +2 -2
- data/features/lib/step_definitions/profile_steps.rb +1 -1
- data/lib/cucumber.rb +11 -4
- data/lib/cucumber/cli/configuration.rb +2 -2
- data/lib/cucumber/cli/options.rb +2 -2
- data/lib/cucumber/configuration.rb +25 -3
- data/lib/cucumber/deprecate.rb +29 -0
- data/lib/cucumber/filters/activate_steps.rb +39 -5
- data/lib/cucumber/formatter/console.rb +4 -4
- data/lib/cucumber/formatter/io.rb +1 -1
- data/lib/cucumber/formatter/legacy_api/adapter.rb +30 -30
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +4 -9
- data/lib/cucumber/platform.rb +2 -7
- data/lib/cucumber/rb_support/rb_language.rb +72 -26
- data/lib/cucumber/rb_support/rb_step_definition.rb +2 -2
- data/lib/cucumber/rb_support/rb_world.rb +6 -1
- data/lib/cucumber/rb_support/snippet.rb +21 -0
- data/lib/cucumber/running_test_case.rb +5 -1
- data/lib/cucumber/runtime.rb +11 -15
- data/lib/cucumber/runtime/support_code.rb +20 -128
- data/lib/cucumber/step_argument.rb +25 -0
- data/lib/cucumber/step_match.rb +6 -12
- data/lib/cucumber/step_match_search.rb +67 -0
- data/lib/cucumber/version +1 -0
- data/spec/cucumber/configuration_spec.rb +3 -2
- data/spec/cucumber/filters/activate_steps_spec.rb +95 -3
- data/spec/cucumber/formatter/html_spec.rb +1 -1
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +55 -28
- data/spec/cucumber/formatter/pretty_spec.rb +2 -2
- data/spec/cucumber/formatter/spec_helper.rb +22 -12
- data/spec/cucumber/rb_support/rb_language_spec.rb +9 -45
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +2 -2
- data/spec/cucumber/rb_support/rb_world_spec.rb +47 -0
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +1 -1
- data/spec/cucumber/runtime/support_code_spec.rb +4 -111
- data/spec/cucumber/step_argument_spec.rb +18 -0
- data/spec/cucumber/step_match_search_spec.rb +122 -0
- data/spec/cucumber/step_match_spec.rb +8 -2
- data/spec/cucumber/world/pending_spec.rb +2 -1
- data/spec/cucumber_spec.rb +39 -0
- metadata +45 -50
- data/features/docs/wire_protocol/erb_configuration.feature +0 -56
- data/features/docs/wire_protocol/handle_unexpected_response.feature +0 -30
- data/features/docs/wire_protocol/invoke_message.feature +0 -216
- data/features/docs/wire_protocol/readme.md +0 -26
- data/features/docs/wire_protocol/snippets_message.feature +0 -51
- data/features/docs/wire_protocol/step_matches_message.feature +0 -81
- data/features/docs/wire_protocol/table_diffing.feature +0 -126
- data/features/docs/wire_protocol/tags.feature +0 -87
- data/features/docs/wire_protocol/timeouts.feature +0 -64
- data/lib/cucumber/events/bus.rb +0 -86
- data/lib/cucumber/gherkin/formatter/argument.rb +0 -17
- data/lib/cucumber/gherkin/formatter/hashable.rb +0 -27
- data/lib/cucumber/language_support.rb +0 -30
- data/lib/cucumber/language_support/language_methods.rb +0 -72
- data/lib/cucumber/rb_support/regexp_argument_matcher.rb +0 -21
- data/lib/cucumber/wire_support/configuration.rb +0 -38
- data/lib/cucumber/wire_support/connection.rb +0 -61
- data/lib/cucumber/wire_support/request_handler.rb +0 -32
- data/lib/cucumber/wire_support/wire_exception.rb +0 -32
- data/lib/cucumber/wire_support/wire_language.rb +0 -68
- data/lib/cucumber/wire_support/wire_packet.rb +0 -34
- data/lib/cucumber/wire_support/wire_protocol.rb +0 -43
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +0 -133
- data/lib/cucumber/wire_support/wire_step_definition.rb +0 -21
- data/spec/cucumber/events/bus_spec.rb +0 -94
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +0 -22
- data/spec/cucumber/wire_support/configuration_spec.rb +0 -64
- data/spec/cucumber/wire_support/connection_spec.rb +0 -64
- data/spec/cucumber/wire_support/wire_exception_spec.rb +0 -50
- data/spec/cucumber/wire_support/wire_language_spec.rb +0 -46
- data/spec/cucumber/wire_support/wire_packet_spec.rb +0 -44
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'cucumber/core/ast/location'
|
2
|
-
|
3
|
-
module Cucumber
|
4
|
-
module WireSupport
|
5
|
-
class WireStepDefinition
|
6
|
-
attr_reader :regexp_source, :location
|
7
|
-
|
8
|
-
def initialize(connection, data)
|
9
|
-
@connection = connection
|
10
|
-
@id = data['id']
|
11
|
-
@regexp_source = data['regexp'] || "Unknown"
|
12
|
-
@location = data['source'] ? Cucumber::Core::Ast::Location.from_file_colon_line(data['source']) : Cucumber::Core::Ast::Location.new("Unknown")
|
13
|
-
end
|
14
|
-
|
15
|
-
def invoke(args)
|
16
|
-
@connection.invoke(@id, args)
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
require "cucumber/events/bus"
|
2
|
-
|
3
|
-
module Cucumber
|
4
|
-
module Events
|
5
|
-
class TestEvent
|
6
|
-
end
|
7
|
-
|
8
|
-
class AnotherTestEvent
|
9
|
-
end
|
10
|
-
|
11
|
-
describe Bus do
|
12
|
-
let(:bus) { Bus.new(Cucumber::Events) }
|
13
|
-
let(:test_event) { TestEvent.new }
|
14
|
-
let(:another_test_event) { AnotherTestEvent.new }
|
15
|
-
|
16
|
-
it "calls subscriber with event payload" do
|
17
|
-
received_payload = nil
|
18
|
-
bus.register(TestEvent) do |event|
|
19
|
-
received_payload = event
|
20
|
-
end
|
21
|
-
|
22
|
-
bus.notify test_event
|
23
|
-
|
24
|
-
expect(received_payload).to eq(test_event)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "does not call subscribers for other events" do
|
28
|
-
handler_called = false
|
29
|
-
bus.register(TestEvent) do |event|
|
30
|
-
handler_called = true
|
31
|
-
end
|
32
|
-
|
33
|
-
bus.notify another_test_event
|
34
|
-
|
35
|
-
expect(handler_called).to eq(false)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "broadcasts to multiple subscribers" do
|
39
|
-
received_events = []
|
40
|
-
bus.register(TestEvent) do |event|
|
41
|
-
received_events << event
|
42
|
-
end
|
43
|
-
bus.register(TestEvent) do |event|
|
44
|
-
received_events << event
|
45
|
-
end
|
46
|
-
|
47
|
-
bus.notify test_event
|
48
|
-
|
49
|
-
expect(received_events.length).to eq 2
|
50
|
-
expect(received_events).to all eq test_event
|
51
|
-
end
|
52
|
-
|
53
|
-
it "allows subscription by string" do
|
54
|
-
received_payload = nil
|
55
|
-
bus.register('Cucumber::Events::TestEvent') do |event|
|
56
|
-
received_payload = event
|
57
|
-
end
|
58
|
-
|
59
|
-
bus.notify test_event
|
60
|
-
|
61
|
-
expect(received_payload).to eq(test_event)
|
62
|
-
end
|
63
|
-
|
64
|
-
it "allows subscription by symbol (for events in the Cucumber::Events namespace)" do
|
65
|
-
received_payload = nil
|
66
|
-
bus.register(:test_event) do |event|
|
67
|
-
received_payload = event
|
68
|
-
end
|
69
|
-
|
70
|
-
bus.notify test_event
|
71
|
-
|
72
|
-
expect(received_payload).to eq(test_event)
|
73
|
-
end
|
74
|
-
|
75
|
-
it "allows handlers that are objects with a `call` method" do
|
76
|
-
class MyHandler
|
77
|
-
attr_reader :received_payload
|
78
|
-
|
79
|
-
def call(event)
|
80
|
-
@received_payload = event
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
handler = MyHandler.new
|
85
|
-
bus.register(TestEvent, handler)
|
86
|
-
|
87
|
-
bus.notify test_event
|
88
|
-
|
89
|
-
expect(handler.received_payload).to eq test_event
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cucumber/rb_support/regexp_argument_matcher'
|
3
|
-
|
4
|
-
module Cucumber
|
5
|
-
module RbSupport
|
6
|
-
describe RegexpArgumentMatcher do
|
7
|
-
include RSpec::WorkInProgress
|
8
|
-
|
9
|
-
it "creates 2 arguments" do
|
10
|
-
arguments = RegexpArgumentMatcher.arguments_from(/I (\w+) (\w+)/, "I like fish")
|
11
|
-
|
12
|
-
expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [["like", 2], ["fish", 7]]
|
13
|
-
end
|
14
|
-
|
15
|
-
it "creates 2 arguments when first group is optional" do
|
16
|
-
arguments = RegexpArgumentMatcher.arguments_from(/should( not)? be flashed '([^']*?)'$/, "I should be flashed 'Login failed.'")
|
17
|
-
|
18
|
-
expect(arguments.map{|argument| [argument.val, argument.offset]}).to eq [[nil, nil], ["Login failed.", 21]]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cucumber/wire_support/wire_language'
|
3
|
-
require 'tempfile'
|
4
|
-
|
5
|
-
module Cucumber
|
6
|
-
module WireSupport
|
7
|
-
describe Configuration do
|
8
|
-
let(:wire_file) { Tempfile.new('wire') }
|
9
|
-
let(:config) { Configuration.from_file(wire_file.path) }
|
10
|
-
|
11
|
-
def write_wire_file(contents)
|
12
|
-
wire_file << contents
|
13
|
-
wire_file.close
|
14
|
-
end
|
15
|
-
|
16
|
-
it "reads the hostname / port from the file" do
|
17
|
-
write_wire_file %q{
|
18
|
-
host: localhost
|
19
|
-
port: 54321
|
20
|
-
}
|
21
|
-
|
22
|
-
expect(config.host).to eq 'localhost'
|
23
|
-
expect(config.port).to eq 54321
|
24
|
-
end
|
25
|
-
|
26
|
-
it "reads the timeout for a specific message" do
|
27
|
-
write_wire_file %q{
|
28
|
-
host: localhost
|
29
|
-
port: 54321
|
30
|
-
timeout:
|
31
|
-
invoke: 99
|
32
|
-
}
|
33
|
-
|
34
|
-
expect(config.timeout('invoke')).to eq 99
|
35
|
-
end
|
36
|
-
|
37
|
-
it "reads the timeout for a connect message" do
|
38
|
-
write_wire_file %q{
|
39
|
-
host: localhost
|
40
|
-
port: 54321
|
41
|
-
timeout:
|
42
|
-
connect: 99
|
43
|
-
}
|
44
|
-
|
45
|
-
expect(config.timeout('connect')).to eq 99
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "a wire file with no timeouts specified" do
|
49
|
-
before(:each) do
|
50
|
-
write_wire_file %q{
|
51
|
-
host: localhost
|
52
|
-
port: 54321
|
53
|
-
}
|
54
|
-
end
|
55
|
-
|
56
|
-
%w(invoke begin_scenario end_scenario).each do |message|
|
57
|
-
it "sets the default timeout for '#{message}' to 120 seconds" do
|
58
|
-
expect(config.timeout(message)).to eq 120
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cucumber/wire_support/wire_language'
|
3
|
-
|
4
|
-
module Cucumber
|
5
|
-
module WireSupport
|
6
|
-
describe Connection do
|
7
|
-
class TestConnection < Connection
|
8
|
-
attr_accessor :socket
|
9
|
-
end
|
10
|
-
|
11
|
-
class TestConfiguration
|
12
|
-
attr_reader :custom_timeout
|
13
|
-
|
14
|
-
def initialize
|
15
|
-
@custom_timeout = {}
|
16
|
-
end
|
17
|
-
|
18
|
-
def timeout(message = nil)
|
19
|
-
return :default_timeout if message.nil?
|
20
|
-
@custom_timeout[message] || Configuration::DEFAULT_TIMEOUTS.fetch(message)
|
21
|
-
end
|
22
|
-
|
23
|
-
def host
|
24
|
-
'localhost'
|
25
|
-
end
|
26
|
-
|
27
|
-
def port
|
28
|
-
'3902'
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
before(:each) do
|
33
|
-
@config = TestConfiguration.new
|
34
|
-
@connection = TestConnection.new(@config)
|
35
|
-
@connection.socket = @socket = double('socket').as_null_object
|
36
|
-
@response = %q{["response"]}
|
37
|
-
end
|
38
|
-
|
39
|
-
it "re-raises a timeout error" do
|
40
|
-
allow(Timeout).to receive(:timeout).and_raise(Timeout::Error.new(''))
|
41
|
-
expect(-> { @connection.call_remote(nil, :foo, []) }).to raise_error(Timeout::Error)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "ignores timeout errors when configured to do so" do
|
45
|
-
@config.custom_timeout[:foo] = :never
|
46
|
-
|
47
|
-
allow(@socket).to receive(:gets) { @response }
|
48
|
-
|
49
|
-
handler = double(:handle_response => :response)
|
50
|
-
|
51
|
-
expect(@connection.call_remote(handler, :foo, [])).to eq :response
|
52
|
-
end
|
53
|
-
|
54
|
-
it "raises an exception on remote connection closed" do
|
55
|
-
@config.custom_timeout[:foo] = :never
|
56
|
-
|
57
|
-
allow(@socket).to receive(:gets)
|
58
|
-
expect(-> {
|
59
|
-
@connection.call_remote(nil, :foo, [])
|
60
|
-
}).to raise_error(WireException, 'Remote Socket with localhost:3902 closed.')
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cucumber/wire_support/wire_language'
|
3
|
-
|
4
|
-
module Cucumber
|
5
|
-
module WireSupport
|
6
|
-
describe WireException do
|
7
|
-
before(:each) do
|
8
|
-
@config = Configuration.new('host' => 'localhost', 'port' => 54321)
|
9
|
-
end
|
10
|
-
|
11
|
-
def exception
|
12
|
-
WireException.new(@data, @config)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "with just a message" do
|
16
|
-
before(:each) do
|
17
|
-
@data = {'message' => 'foo'}
|
18
|
-
end
|
19
|
-
|
20
|
-
it "#to_s as expecteds" do
|
21
|
-
expect(exception.to_s).to eq "foo"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "with a message and an exception" do
|
26
|
-
before(:each) do
|
27
|
-
@data = {'message' => 'foo', 'exception' => 'Bar'}
|
28
|
-
end
|
29
|
-
|
30
|
-
it "#to_s as expecteds" do
|
31
|
-
expect(exception.to_s).to eq "foo"
|
32
|
-
end
|
33
|
-
|
34
|
-
it "#class.to_s returns the name of the exception" do
|
35
|
-
expect(exception.class.to_s).to eq 'Bar from localhost:54321'
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "with a custom backtrace" do
|
40
|
-
before(:each) do
|
41
|
-
@data = {'message' => 'foo', 'backtrace' => ['foo', 'bar', 'baz']}
|
42
|
-
end
|
43
|
-
|
44
|
-
it "#backrace returns the custom backtrace" do
|
45
|
-
expect(exception.backtrace).to eq ['foo', 'bar', 'baz']
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cucumber/wire_support/wire_language'
|
3
|
-
|
4
|
-
module Cucumber
|
5
|
-
module WireSupport
|
6
|
-
describe WireLanguage do
|
7
|
-
def stub_wire_file!(filename, config)
|
8
|
-
allow(Configuration).to receive(:from_file).with(filename) { config }
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "#load_code_file" do
|
12
|
-
before(:each) do
|
13
|
-
stub_wire_file! 'foo.wire', :config
|
14
|
-
end
|
15
|
-
|
16
|
-
it "creates a RemoteSteps object" do
|
17
|
-
expect(Connection).to receive(:new).with(:config)
|
18
|
-
|
19
|
-
WireLanguage.new.load_code_file('foo.wire')
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#step_matches" do
|
24
|
-
def stub_remote_steps!(config, attributes)
|
25
|
-
expect(Connection).to receive(:new).with(config) { double('remote_steps', attributes) }
|
26
|
-
end
|
27
|
-
|
28
|
-
before(:each) do
|
29
|
-
stub_wire_file! 'one.wire', :config_one
|
30
|
-
stub_wire_file! 'two.wire', :config_two
|
31
|
-
end
|
32
|
-
|
33
|
-
it "returns the matches from each of the RemoteSteps" do
|
34
|
-
stub_remote_steps! :config_one, :step_matches => [:a, :b]
|
35
|
-
stub_remote_steps! :config_two, :step_matches => [:c]
|
36
|
-
|
37
|
-
wire_language = WireLanguage.new
|
38
|
-
wire_language.load_code_file('one.wire')
|
39
|
-
wire_language.load_code_file('two.wire')
|
40
|
-
|
41
|
-
expect(wire_language.step_matches('','')).to eq [:a, :b, :c]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'cucumber/wire_support/wire_language'
|
3
|
-
|
4
|
-
module Cucumber
|
5
|
-
module WireSupport
|
6
|
-
describe WirePacket do
|
7
|
-
describe "#to_json" do
|
8
|
-
it "converts params to a JSON hash" do
|
9
|
-
packet = WirePacket.new('test_message', :foo => :bar)
|
10
|
-
|
11
|
-
expect(packet.to_json).to eq "[\"test_message\",{\"foo\":\"bar\"}]"
|
12
|
-
end
|
13
|
-
|
14
|
-
it "does not pass blank params" do
|
15
|
-
packet = WirePacket.new('test_message')
|
16
|
-
|
17
|
-
expect(packet.to_json).to eq "[\"test_message\"]"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe ".parse" do
|
22
|
-
it "understands a raw packet containing null parameters" do
|
23
|
-
packet = WirePacket.parse("[\"test_message\",null]")
|
24
|
-
|
25
|
-
expect(packet.message).to eq 'test_message'
|
26
|
-
expect(packet.params).to be_nil
|
27
|
-
end
|
28
|
-
|
29
|
-
it "understands a raw packet containing no parameters" do
|
30
|
-
packet = WirePacket.parse("[\"test_message\"]")
|
31
|
-
|
32
|
-
expect(packet.message).to eq 'test_message'
|
33
|
-
expect(packet.params).to be_nil
|
34
|
-
end
|
35
|
-
|
36
|
-
it "understands a raw packet containging parameters data" do
|
37
|
-
packet = WirePacket.parse("[\"test_message\",{\"foo\":\"bar\"}]")
|
38
|
-
|
39
|
-
expect(packet.params['foo']).to eq 'bar'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|