cukeforker 0.2.5 → 1.0.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 +13 -5
- data/.travis.yml +4 -1
- data/cukeforker.gemspec +2 -1
- data/lib/cukeforker.rb +2 -1
- data/lib/cukeforker/formatters/junit_scenario_formatter.rb +3 -3
- data/lib/cukeforker/normalised_encoding_file.rb +38 -0
- data/lib/cukeforker/scenario_list.rb +24 -0
- data/lib/cukeforker/scenarios.rb +10 -21
- data/lib/cukeforker/version.rb +1 -1
- data/spec/cukeforker/logging_listener_spec.rb +0 -3
- data/spec/cukeforker/runner_spec.rb +2 -2
- data/spec/cukeforker/scenarios_spec.rb +75 -35
- data/spec/cukeforker/vnc_listener_spec.rb +4 -5
- data/spec/cukeforker/worker_queue_spec.rb +2 -3
- data/spec/cukeforker/worker_spec.rb +5 -5
- data/spec/spec_helper.rb +2 -0
- metadata +29 -16
- data/lib/cukeforker/formatters/scenario_line_logger.rb +0 -28
- data/spec/cukeforker/formatters/scenario_line_logger_spec.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YmRjOTMxNjRlOWViNTk4NWViN2RhZmQwNTljZDI3ZmVjMjg3MzNlYg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MTg0NTZlNjM1NGNkMWExNmI3YTI1MjYwMzMxMjBiOWU2ZmVkMTQ5MQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YTU3YzlkYTZhZjAyZjBjN2EyMzQ0ZTc3NjhlZjJkYmQ4ZDM1NTA2ZjRhZjVk
|
10
|
+
OGNmOTMwMTM1YjMwMTZhNGZhNDM0NmY3ZGI4YWVmYjNiOThiMzc0OWQ3NTkw
|
11
|
+
NzA4Mjg3NjE3ZjA3NmI2N2MzYjVmZjAzZTE1ODNhN2Y3NDQ4ZjA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NDZkYzVmMjIzYWI5N2IzMzkwMDY0YTY0NjVhNzg4Y2U5NzlkNjcxMDgyYjgx
|
14
|
+
YzMyYzQxZDg3OTRjNzUwMzg0OGUzMTBlNzQ4ZGM2YzQzNWNlNWE1N2Q2Yjhk
|
15
|
+
ODgzN2E4OTk1MGYxNzE0MmE3NzI3ODYzMmFlZjU0Y2IwZDJkNjE=
|
data/.travis.yml
CHANGED
data/cukeforker.gemspec
CHANGED
@@ -14,11 +14,12 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.rubyforge_project = "cukeforker"
|
16
16
|
|
17
|
-
s.add_dependency "cucumber", ">=
|
17
|
+
s.add_dependency "cucumber", ">= 2.0.0"
|
18
18
|
s.add_dependency "vnctools", ">= 0.0.5"
|
19
19
|
s.add_development_dependency "rspec", "~> 2.5"
|
20
20
|
s.add_development_dependency "coveralls"
|
21
21
|
s.add_development_dependency "rake", "~> 0.9.2"
|
22
|
+
s.add_development_dependency "pry"
|
22
23
|
|
23
24
|
s.files = `git ls-files`.split("\n")
|
24
25
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/cukeforker.rb
CHANGED
@@ -21,6 +21,7 @@ require 'cukeforker/worker'
|
|
21
21
|
require 'cukeforker/worker_queue'
|
22
22
|
require 'cukeforker/runner'
|
23
23
|
require 'cukeforker/scenarios'
|
24
|
+
require 'cukeforker/normalised_encoding_file'
|
25
|
+
require 'cukeforker/scenario_list'
|
24
26
|
|
25
|
-
require 'cukeforker/formatters/scenario_line_logger'
|
26
27
|
require 'cukeforker/formatters/junit_scenario_formatter'
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'cucumber/formatter/junit'
|
2
|
-
|
2
|
+
|
3
3
|
module CukeForker
|
4
4
|
module Formatters
|
5
5
|
class JunitScenarioFormatter < Cucumber::Formatter::Junit
|
@@ -19,8 +19,8 @@ module CukeForker
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
@testsuite =
|
22
|
+
def end_feature(feature_element)
|
23
|
+
@testsuite = Builder::XmlMarkup.new(:indent => 2)
|
24
24
|
@testsuite.instruct!
|
25
25
|
@testsuite.testsuite(
|
26
26
|
:failures => @failures,
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module CukeForker
|
2
|
+
class NormalisedEncodingFile
|
3
|
+
COMMENT_OR_EMPTY_LINE_PATTERN = /^\s*#|^\s*$/ #:nodoc:
|
4
|
+
ENCODING_PATTERN = /^\s*#\s*encoding\s*:\s*([^\s]+)/ #:nodoc:
|
5
|
+
|
6
|
+
def self.read(path)
|
7
|
+
new(path).read
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(path)
|
11
|
+
begin
|
12
|
+
@file = File.new(path)
|
13
|
+
set_encoding
|
14
|
+
rescue Errno::EACCES => e
|
15
|
+
raise FileNotFoundException.new(e, File.expand_path(path))
|
16
|
+
rescue Errno::ENOENT => e
|
17
|
+
raise FeatureFolderNotFoundException.new(e, path)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def read
|
22
|
+
@file.read.encode("UTF-8")
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def set_encoding
|
28
|
+
@file.each do |line|
|
29
|
+
if ENCODING_PATTERN =~ line
|
30
|
+
@file.set_encoding $1
|
31
|
+
break
|
32
|
+
end
|
33
|
+
break unless COMMENT_OR_EMPTY_LINE_PATTERN =~ line
|
34
|
+
end
|
35
|
+
@file.rewind
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class ScenarioList
|
2
|
+
attr_accessor :scenarios
|
3
|
+
|
4
|
+
def scenarios
|
5
|
+
@scenarios
|
6
|
+
end
|
7
|
+
|
8
|
+
def before_test_step(test_step)
|
9
|
+
end
|
10
|
+
|
11
|
+
def after_test_step(test_step, result)
|
12
|
+
end
|
13
|
+
|
14
|
+
def before_test_case(test_case)
|
15
|
+
end
|
16
|
+
|
17
|
+
def after_test_case(test_case, result)
|
18
|
+
@scenarios ||= []
|
19
|
+
@scenarios << [test_case.feature.file, test_case.location.line].join(':')
|
20
|
+
end
|
21
|
+
|
22
|
+
def done
|
23
|
+
end
|
24
|
+
end
|
data/lib/cukeforker/scenarios.rb
CHANGED
@@ -1,19 +1,10 @@
|
|
1
|
-
require 'cucumber/
|
1
|
+
require 'cucumber/core'
|
2
|
+
require 'cucumber/core/filter'
|
2
3
|
|
3
4
|
module CukeForker
|
4
|
-
|
5
|
-
#
|
6
|
-
# CukeForker::Scenarios.by_args(args)
|
7
|
-
#
|
8
|
-
# where 'args' is a String of cucumber options
|
9
|
-
#
|
10
|
-
# For example:
|
11
|
-
# CukeForker::Scenarios.by_args(%W[-p my_profile -t @edition])
|
12
|
-
# will return an array of scenarios and their line numbers that match
|
13
|
-
# the tags specified in the cucumber profile 'my_profile' AND have the '@edition' tag
|
14
|
-
#
|
15
|
-
|
16
5
|
class Scenarios
|
6
|
+
include Cucumber::Core
|
7
|
+
|
17
8
|
def self.by_args(args)
|
18
9
|
options = Cucumber::Cli::Options.new(STDOUT, STDERR, :default_profile => 'default')
|
19
10
|
tagged(options.parse!(args)[:tag_expressions])
|
@@ -25,15 +16,13 @@ module CukeForker
|
|
25
16
|
end
|
26
17
|
|
27
18
|
def self.tagged(tags)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
feature.accept(scenario_line_logger)
|
19
|
+
scenario_list = ScenarioList.new
|
20
|
+
feature_files.each do |feature|
|
21
|
+
source = CukeForker::NormalisedEncodingFile.read(feature)
|
22
|
+
file = Cucumber::Core::Gherkin::Document.new(feature, source)
|
23
|
+
self.new.execute([file], scenario_list, [Cucumber::Core::Test::TagFilter.new(tags)])
|
34
24
|
end
|
35
|
-
|
36
|
-
scenario_line_logger.scenarios
|
25
|
+
scenario_list.scenarios
|
37
26
|
end
|
38
27
|
|
39
28
|
def self.feature_files
|
data/lib/cukeforker/version.rb
CHANGED
@@ -135,7 +135,7 @@ module CukeForker
|
|
135
135
|
queue.should_receive(:process).with 0.2 # poll interval
|
136
136
|
queue.should_receive(:wait_until_finished)
|
137
137
|
|
138
|
-
expect(runner.run).to
|
138
|
+
expect(runner.run).to be_truthy
|
139
139
|
end
|
140
140
|
|
141
141
|
it 'returns false when there are test failures' do
|
@@ -143,7 +143,7 @@ module CukeForker
|
|
143
143
|
queue.should_receive(:process).with 0.2 # poll interval
|
144
144
|
queue.should_receive(:wait_until_finished)
|
145
145
|
|
146
|
-
expect(runner.run).to
|
146
|
+
expect(runner.run).to be_falsey
|
147
147
|
end
|
148
148
|
end
|
149
149
|
end # Runner
|
@@ -3,65 +3,105 @@ require File.expand_path("../../spec_helper", __FILE__)
|
|
3
3
|
module CukeForker
|
4
4
|
describe Scenarios do
|
5
5
|
it "returns all scenarios and their line numbers" do
|
6
|
-
|
7
|
-
|
6
|
+
Scenarios.stub(:feature_files).and_return(['features/test1.feature', 'features/test2.feature'])
|
7
|
+
allow(CukeForker::NormalisedEncodingFile).to receive(:read).with(/features\/test\d\.feature/).and_return(<<-GHERKIN)
|
8
|
+
Feature: Test Feature
|
9
|
+
|
10
|
+
Scenario: Test Scenario 1
|
11
|
+
Given I do fake precondition
|
12
|
+
When I do fake action
|
13
|
+
Then I get fake assertions
|
14
|
+
|
15
|
+
Scenario: Test Scenario 2
|
16
|
+
Given I do fake precondition
|
17
|
+
When I do fake action
|
18
|
+
Then I get fake assertions
|
19
|
+
GHERKIN
|
8
20
|
|
9
|
-
|
10
|
-
|
21
|
+
all_scenarios = Scenarios.all
|
22
|
+
|
23
|
+
all_scenarios.length.should == 4
|
24
|
+
all_scenarios[0].should == "features/test1.feature:3"
|
25
|
+
all_scenarios[1].should == "features/test1.feature:8"
|
26
|
+
all_scenarios[2].should == "features/test2.feature:3"
|
27
|
+
all_scenarios[3].should == "features/test2.feature:8"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns all scenarios and their line numbers by tags" do
|
31
|
+
Scenarios.stub(:feature_files).and_return(['features/test1.feature'])
|
32
|
+
allow(CukeForker::NormalisedEncodingFile).to receive(:read).with('features/test1.feature').and_return(<<-GHERKIN)
|
33
|
+
Feature: test 1
|
34
|
+
@find_me
|
11
35
|
Scenario: test scenario 1
|
12
36
|
Given nothing happens
|
13
37
|
|
14
38
|
Scenario: test scenario 2
|
15
|
-
Given nothing else happens
|
16
|
-
|
39
|
+
Given nothing else happens
|
40
|
+
GHERKIN
|
17
41
|
|
18
|
-
|
19
|
-
"Feature: test 2
|
42
|
+
all_scenarios = Scenarios.by_args(%W[-t @find_me])
|
20
43
|
|
21
|
-
|
22
|
-
|
44
|
+
all_scenarios.length.should == 1
|
45
|
+
all_scenarios[0].should == "features/test1.feature:3"
|
46
|
+
end
|
23
47
|
|
24
|
-
|
48
|
+
it "returns all scenarios and their line numbers by multiple include tags" do
|
49
|
+
Scenarios.stub(:feature_files).and_return(['features/test1.feature'])
|
50
|
+
allow(CukeForker::NormalisedEncodingFile).to receive(:read).with('features/test1.feature').and_return(<<-GHERKIN)
|
51
|
+
Feature: test 1
|
52
|
+
@find_me
|
53
|
+
Scenario: test scenario 1
|
25
54
|
Given nothing happens
|
26
|
-
Examples:
|
27
|
-
| nothing |
|
28
|
-
| 1 |
|
29
|
-
")
|
30
|
-
|
31
|
-
Cucumber::FeatureFile.stub(:new).with("features/test1.feature").and_return(feature_1)
|
32
|
-
Cucumber::FeatureFile.stub(:new).with("features/test2.feature").and_return(feature_2)
|
33
55
|
|
34
|
-
|
56
|
+
@me_too
|
57
|
+
Scenario: test scenario 2
|
58
|
+
Given nothing else happens
|
59
|
+
GHERKIN
|
35
60
|
|
36
|
-
all_scenarios = Scenarios.
|
61
|
+
all_scenarios = Scenarios.by_args(%W[-t @find_me,@me_too])
|
37
62
|
|
38
|
-
all_scenarios.length.should ==
|
39
|
-
all_scenarios[0].should == "features/test1.feature:
|
40
|
-
all_scenarios[1].should == "features/test1.feature:
|
41
|
-
all_scenarios[2].should == "features/test2.feature:3"
|
42
|
-
all_scenarios[3].should == "features/test2.feature:6"
|
63
|
+
all_scenarios.length.should == 2
|
64
|
+
all_scenarios[0].should == "features/test1.feature:3"
|
65
|
+
all_scenarios[1].should == "features/test1.feature:7"
|
43
66
|
end
|
44
67
|
|
45
|
-
it "returns all scenarios and their line numbers" do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
@find_me
|
68
|
+
it "returns all scenarios and their line numbers by multiple and tags" do
|
69
|
+
Scenarios.stub(:feature_files).and_return(['features/test1.feature'])
|
70
|
+
allow(CukeForker::NormalisedEncodingFile).to receive(:read).with('features/test1.feature').and_return(<<-GHERKIN)
|
71
|
+
Feature: test 1
|
72
|
+
@find_me @me_too
|
51
73
|
Scenario: test scenario 1
|
52
74
|
Given nothing happens
|
53
75
|
|
76
|
+
@me_too
|
54
77
|
Scenario: test scenario 2
|
55
|
-
Given nothing else happens
|
78
|
+
Given nothing else happens
|
79
|
+
GHERKIN
|
80
|
+
|
81
|
+
all_scenarios = Scenarios.by_args(%W[-t @find_me -t @me_too])
|
56
82
|
|
57
|
-
|
83
|
+
all_scenarios.length.should == 1
|
84
|
+
all_scenarios[0].should == "features/test1.feature:3"
|
85
|
+
end
|
58
86
|
|
87
|
+
it "returns all scenarios and their line numbers by exclusion tag" do
|
59
88
|
Scenarios.stub(:feature_files).and_return(['features/test1.feature'])
|
89
|
+
allow(CukeForker::NormalisedEncodingFile).to receive(:read).with('features/test1.feature').and_return(<<-GHERKIN)
|
90
|
+
Feature: test 1
|
91
|
+
@find_me
|
92
|
+
Scenario: test scenario 1
|
93
|
+
Given nothing happens
|
60
94
|
|
61
|
-
|
95
|
+
@me_too
|
96
|
+
Scenario: test scenario 2
|
97
|
+
Given nothing else happens
|
98
|
+
GHERKIN
|
99
|
+
|
100
|
+
all_scenarios = Scenarios.by_args(%W[-t ~@find_me])
|
62
101
|
|
63
102
|
all_scenarios.length.should == 1
|
64
|
-
all_scenarios[0].should == "features/test1.feature:
|
103
|
+
all_scenarios[0].should == "features/test1.feature:7"
|
65
104
|
end
|
66
105
|
end
|
67
106
|
end
|
107
|
+
|
@@ -2,10 +2,10 @@ require File.expand_path("../../spec_helper", __FILE__)
|
|
2
2
|
|
3
3
|
module CukeForker
|
4
4
|
describe VncListener do
|
5
|
-
let(:server)
|
6
|
-
let(:pool)
|
7
|
-
let(:worker)
|
8
|
-
let(:listener)
|
5
|
+
let(:server) { double(VncTools::Server, :display => ":15") }
|
6
|
+
let(:pool) { double(VncTools::ServerPool) }
|
7
|
+
let(:worker) { double(Worker, :data => OpenStruct.new) }
|
8
|
+
let(:listener) { VncListener.new pool }
|
9
9
|
|
10
10
|
it "fetches a display from the pool and assings it to the worker" do
|
11
11
|
pool.should_receive(:get).and_return(server)
|
@@ -34,6 +34,5 @@ module CukeForker
|
|
34
34
|
|
35
35
|
listener.on_worker_forked worker
|
36
36
|
end
|
37
|
-
|
38
37
|
end # VncListenerServer
|
39
38
|
end # CukeForker
|
@@ -183,11 +183,10 @@ module CukeForker
|
|
183
183
|
|
184
184
|
queue.should_not be_backed_up
|
185
185
|
queue.should be_empty
|
186
|
-
queue.instance_variable_get(:@finished).should == [
|
186
|
+
queue.instance_variable_get(:@finished).should == [workers[0], workers[3]]
|
187
187
|
|
188
188
|
queue.should have_failures
|
189
189
|
end
|
190
190
|
end
|
191
|
-
|
192
|
-
end # WorkerQueue
|
191
|
+
end # WorkerQueue
|
193
192
|
end # CukeForker
|
@@ -26,15 +26,15 @@ module CukeForker
|
|
26
26
|
end
|
27
27
|
|
28
28
|
context "running a scenario with multiple report formats" do
|
29
|
-
formats = [
|
30
|
-
path
|
29
|
+
formats = [:json, :junit]
|
30
|
+
path = "some/path"
|
31
31
|
let(:worker) { Worker.new("some/feature:51", formats, path) }
|
32
32
|
|
33
33
|
it "has an output file for each format specified" do
|
34
34
|
expected_args = formats.flat_map do |f|
|
35
35
|
%W[--format #{f} --out #{path}/some_feature_51.#{f}]
|
36
36
|
end
|
37
|
-
worker.args.each_cons(expected_args.size).include?(expected_args).should
|
37
|
+
worker.args.each_cons(expected_args.size).include?(expected_args).should be_truthy
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -60,7 +60,7 @@ module CukeForker
|
|
60
60
|
|
61
61
|
it "runs a passing cuke and exits with 0" do
|
62
62
|
Process.should_receive(:fork).and_yield.and_return(1234)
|
63
|
-
Process.should_receive(:setpgid).with(0,0)
|
63
|
+
Process.should_receive(:setpgid).with(0, 0)
|
64
64
|
|
65
65
|
$stdout.should_receive(:reopen).with("some/path/some_feature.stdout")
|
66
66
|
$stderr.should_receive(:reopen).with("some/path/some_feature.stderr")
|
@@ -73,7 +73,7 @@ module CukeForker
|
|
73
73
|
|
74
74
|
it "runs a failing cuke and exits with 1" do
|
75
75
|
Process.should_receive(:fork).and_yield.and_return(1234)
|
76
|
-
Process.should_receive(:setpgid).with(0,0)
|
76
|
+
Process.should_receive(:setpgid).with(0, 0)
|
77
77
|
|
78
78
|
$stdout.should_receive(:reopen).with("some/path/some_feature.stdout")
|
79
79
|
$stderr.should_receive(:reopen).with("some/path/some_feature.stderr")
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cukeforker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jari Bakken
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - '>='
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - '>='
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: vnctools
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - '>='
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.0.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - '>='
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.0.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
name: coveralls
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - '>='
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - '>='
|
66
|
+
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.9.2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: Library to maintain a forking queue of Cucumber processes, with optional
|
84
98
|
VNC displays.
|
85
99
|
email:
|
@@ -101,17 +115,17 @@ files:
|
|
101
115
|
- lib/cukeforker.rb
|
102
116
|
- lib/cukeforker/abstract_listener.rb
|
103
117
|
- lib/cukeforker/formatters/junit_scenario_formatter.rb
|
104
|
-
- lib/cukeforker/formatters/scenario_line_logger.rb
|
105
118
|
- lib/cukeforker/logging_listener.rb
|
119
|
+
- lib/cukeforker/normalised_encoding_file.rb
|
106
120
|
- lib/cukeforker/rake_task.rb
|
107
121
|
- lib/cukeforker/recording_vnc_listener.rb
|
108
122
|
- lib/cukeforker/runner.rb
|
123
|
+
- lib/cukeforker/scenario_list.rb
|
109
124
|
- lib/cukeforker/scenarios.rb
|
110
125
|
- lib/cukeforker/version.rb
|
111
126
|
- lib/cukeforker/vnc_listener.rb
|
112
127
|
- lib/cukeforker/worker.rb
|
113
128
|
- lib/cukeforker/worker_queue.rb
|
114
|
-
- spec/cukeforker/formatters/scenario_line_logger_spec.rb
|
115
129
|
- spec/cukeforker/logging_listener_spec.rb
|
116
130
|
- spec/cukeforker/rake_task_spec.rb
|
117
131
|
- spec/cukeforker/recording_vnc_listener_spec.rb
|
@@ -130,22 +144,21 @@ require_paths:
|
|
130
144
|
- lib
|
131
145
|
required_ruby_version: !ruby/object:Gem::Requirement
|
132
146
|
requirements:
|
133
|
-
- - '>='
|
147
|
+
- - ! '>='
|
134
148
|
- !ruby/object:Gem::Version
|
135
149
|
version: '0'
|
136
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
151
|
requirements:
|
138
|
-
- - '>='
|
152
|
+
- - ! '>='
|
139
153
|
- !ruby/object:Gem::Version
|
140
154
|
version: '0'
|
141
155
|
requirements: []
|
142
156
|
rubyforge_project: cukeforker
|
143
|
-
rubygems_version: 2.
|
157
|
+
rubygems_version: 2.4.6
|
144
158
|
signing_key:
|
145
159
|
specification_version: 4
|
146
160
|
summary: Library to maintain a forking queue of Cucumber processes
|
147
161
|
test_files:
|
148
|
-
- spec/cukeforker/formatters/scenario_line_logger_spec.rb
|
149
162
|
- spec/cukeforker/logging_listener_spec.rb
|
150
163
|
- spec/cukeforker/rake_task_spec.rb
|
151
164
|
- spec/cukeforker/recording_vnc_listener_spec.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'gherkin/tag_expression'
|
2
|
-
module CukeForker
|
3
|
-
module Formatters
|
4
|
-
class ScenarioLineLogger
|
5
|
-
attr_reader :scenarios
|
6
|
-
|
7
|
-
def initialize(tag_expression = Gherkin::TagExpression.new([]))
|
8
|
-
@scenarios = []
|
9
|
-
@tag_expression = tag_expression
|
10
|
-
end
|
11
|
-
|
12
|
-
def visit_feature_element(feature_element)
|
13
|
-
if @tag_expression.evaluate(feature_element.source_tags)
|
14
|
-
line_number = if feature_element.respond_to?(:line)
|
15
|
-
feature_element.line
|
16
|
-
else
|
17
|
-
feature_element.location.line
|
18
|
-
end
|
19
|
-
|
20
|
-
@scenarios << [feature_element.feature.file, line_number].join(':')
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def method_missing(*args)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.expand_path("../../../spec_helper", __FILE__)
|
2
|
-
require 'cucumber/ast/scenario_outline'
|
3
|
-
|
4
|
-
module CukeForker::Formatters
|
5
|
-
describe ScenarioLineLogger do
|
6
|
-
it "returns scenario names and line numbers for a scenario" do
|
7
|
-
logger = ScenarioLineLogger.new
|
8
|
-
|
9
|
-
feature = double("Cucumber::Ast::Feature")
|
10
|
-
feature_element = double("Cucumber::Ast::Scenario")
|
11
|
-
|
12
|
-
feature.should_receive(:file).twice.and_return('features/test1.feature')
|
13
|
-
feature_element.should_receive(:source_tags).twice.and_return('')
|
14
|
-
feature_element.should_receive(:feature).twice.and_return(feature)
|
15
|
-
feature_element.should_receive(:line).and_return(3)
|
16
|
-
feature_element.should_receive(:line).and_return(6)
|
17
|
-
|
18
|
-
logger.visit_feature_element(feature_element)
|
19
|
-
logger.visit_feature_element(feature_element)
|
20
|
-
|
21
|
-
logger.scenarios.length.should == 2
|
22
|
-
logger.scenarios[0].should == "features/test1.feature:3"
|
23
|
-
logger.scenarios[1].should == "features/test1.feature:6"
|
24
|
-
end
|
25
|
-
|
26
|
-
it "returns scenario names and line numbers for a scenario outline" do
|
27
|
-
logger = ScenarioLineLogger.new
|
28
|
-
|
29
|
-
feature = double("Cucumber::Ast::Feature")
|
30
|
-
location = double("Cucumber::Ast::Location", :line => 4)
|
31
|
-
feature_element = Cucumber::Ast::ScenarioOutline.new(*Array.new(11) {|a| double(a, :each => true) })
|
32
|
-
feature_element.stub(:location => location)
|
33
|
-
|
34
|
-
feature.should_receive(:file).and_return('features/test1.feature')
|
35
|
-
feature_element.should_receive(:source_tags).and_return('')
|
36
|
-
feature_element.should_receive(:feature).and_return(feature)
|
37
|
-
|
38
|
-
logger.visit_feature_element(feature_element)
|
39
|
-
|
40
|
-
logger.scenarios.length.should == 1
|
41
|
-
logger.scenarios[0].should == "features/test1.feature:4"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|