jcukeforker 0.3.1 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eacfc36a1e04a32f288f0a1bc87c226983276fb6
4
- data.tar.gz: 424e070d33ef9f5e2ff838c78d518db25a346532
3
+ metadata.gz: e32fbbcbe969e537a3c9601b5827789daaf915f2
4
+ data.tar.gz: e00bc3cd309212d5021679ea4909d0150f8afaf6
5
5
  SHA512:
6
- metadata.gz: 9ce41ed903f5ab5e56b4c4ac9bc71042d31f1f6cdf32f87ab1474f925d8ac387dde784188264d9eb95c7abf5067fd3fc26b7233e52d5a80a583562bcc20eb75c
7
- data.tar.gz: af3f360b1638b2760cf5efe60ca9120da8b0b40adf57b0f54aff97d1dad64c37a27753f098d7c330065ef8a3a4851dccf9fdce402c7418fc31ec1e0394459613
6
+ metadata.gz: 6c7ea46aa52c889b3598943fef095808ac47705245535e377d01b9dc175a3883d195721b0899ce58e94884e1242c61453cd7ed2e89f74fa8e0ffe460f3287f1c
7
+ data.tar.gz: e3547b71f9ac1de4c844f406d6849ad6ecffc4e339bbbcfa57cd6cc73c6a37ac0aca61c283d400eb0f90b92d4247247c7448ea70c0b8ef6c7027170861921ff2
data/.travis.yml CHANGED
@@ -3,3 +3,7 @@ rvm:
3
3
  - jruby-19mode
4
4
  - 2.0.0
5
5
  - 2.1.0
6
+ - 2.2.0
7
+
8
+ before_install:
9
+ - gem update bundle
data/jcukeforker.gemspec CHANGED
@@ -14,12 +14,13 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = "jcukeforker"
16
16
 
17
- s.add_dependency "cucumber", ">= 1.1.5", "< 2.0"
17
+ s.add_dependency "cucumber", ">= 2.3.2"
18
18
  s.add_dependency "vnctools", ">= 0.1.1"
19
19
  s.add_dependency "childprocess", ">= 0.5.3"
20
20
  s.add_development_dependency "rspec"
21
21
  s.add_development_dependency "coveralls"
22
22
  s.add_development_dependency "rake", "~> 10"
23
+ s.add_development_dependency "pry"
23
24
 
24
25
  s.files = `git ls-files`.split("\n")
25
26
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,5 +1,5 @@
1
1
  require 'cucumber/formatter/junit'
2
- require 'cucumber/formatter/ordered_xml_markup'
2
+
3
3
  module JCukeForker
4
4
  module Formatters
5
5
  class JunitScenarioFormatter < Cucumber::Formatter::Junit
@@ -19,8 +19,8 @@ module JCukeForker
19
19
  end
20
20
  end
21
21
 
22
- def after_feature_element(feature_element)
23
- @testsuite = Cucumber::Formatter::OrderedXmlMarkup.new( :indent => 2 )
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 JCukeForker
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
@@ -107,8 +107,7 @@ module JCukeForker
107
107
  rescue Interrupt
108
108
  fire :on_run_interrupted
109
109
  stop
110
- rescue StandardError => e
111
- STDERR.puts e.backtrace
110
+ rescue StandardError
112
111
  fire :on_run_interrupted
113
112
  stop
114
113
  raise
@@ -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
@@ -1,4 +1,5 @@
1
- require 'cucumber/runtime/features_loader'
1
+ require 'cucumber/core'
2
+ require 'cucumber/core/filter'
2
3
 
3
4
  module JCukeForker
4
5
 
@@ -14,6 +15,7 @@ module JCukeForker
14
15
  #
15
16
 
16
17
  class Scenarios
18
+ include Cucumber::Core
17
19
  def self.by_args(args)
18
20
  options = Cucumber::Cli::Options.new(STDOUT, STDERR, :default_profile => 'default')
19
21
  tagged(options.parse!(args)[:tag_expressions])
@@ -25,15 +27,13 @@ module JCukeForker
25
27
  end
26
28
 
27
29
  def self.tagged(tags)
28
- tag_expression = Gherkin::TagExpression.new(tags)
29
- scenario_line_logger = JCukeForker::Formatters::ScenarioLineLogger.new(tag_expression)
30
- loader = Cucumber::Runtime::FeaturesLoader.new(feature_files, [], tag_expression)
31
-
32
- loader.features.each do |feature|
33
- feature.accept(scenario_line_logger)
30
+ scenario_list = ScenarioList.new
31
+ feature_files.each do |feature|
32
+ source = JCukeForker::NormalisedEncodingFile.read(feature)
33
+ file = Cucumber::Core::Gherkin::Document.new(feature, source)
34
+ self.new.execute([file], scenario_list, [Cucumber::Core::Test::TagFilter.new(tags)])
34
35
  end
35
-
36
- scenario_line_logger.scenarios
36
+ scenario_list.scenarios
37
37
  end
38
38
 
39
39
  def self.feature_files
@@ -1,3 +1,3 @@
1
1
  module JCukeForker
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -6,7 +6,6 @@ require 'observer'
6
6
  require 'childprocess'
7
7
  require_relative './abstract_listener'
8
8
  require_relative './recording_vnc_listener'
9
- require_relative './formatters/scenario_line_logger'
10
9
  require_relative './formatters/junit_scenario_formatter'
11
10
 
12
11
  module JCukeForker
data/lib/jcukeforker.rb CHANGED
@@ -20,5 +20,6 @@ require 'jcukeforker/status_server'
20
20
  require 'jcukeforker/task_manager'
21
21
  require 'jcukeforker/configurable_vnc_server'
22
22
 
23
- require 'jcukeforker/formatters/scenario_line_logger'
23
+ require 'jcukeforker/normalised_encoding_file'
24
+ require 'jcukeforker/scenario_list'
24
25
  require 'jcukeforker/formatters/junit_scenario_formatter'
@@ -6,7 +6,7 @@ module JCukeForker
6
6
  let(:listener) { LoggingListener.new stdout }
7
7
 
8
8
  it "logs all events" do
9
- Time.stub(:now => Time.now)
9
+ allow(Time).to receive(:now).and_return(Time.now)
10
10
 
11
11
  mock_worker = {:path => '1', :feature => 'foo/bar', :status => true }
12
12
  mock_worker2 = {:path => '15', :feature => 'foo/baz', :status => false}
@@ -25,7 +25,7 @@ module JCukeForker
25
25
 
26
26
  timestamp = Time.now.strftime("%Y-%m-%d %H:%M:%S##{Process.pid}")
27
27
 
28
- stdout.string.should == <<-OUTPUT
28
+ expect(stdout.string).to eql <<-OUTPUT
29
29
  I, [#{timestamp}] INFO -- : [ run ] starting
30
30
  I, [#{timestamp}] INFO -- : [ worker 1 ] register: 1
31
31
  I, [#{timestamp}] INFO -- : [ worker 1 ] starting: foo/bar
@@ -12,7 +12,7 @@ module JCukeForker
12
12
 
13
13
  env = ENV['DISPLAY']
14
14
  ENV['DISPLAY']= ':1'
15
- ChildProcess.should_receive(:build).with(
15
+ expect(ChildProcess).to receive(:build).with(
16
16
  'ffmpeg',
17
17
  '-an',
18
18
  '-y',
@@ -24,34 +24,34 @@ module JCukeForker
24
24
  './feature.webm'
25
25
  ).and_return(recorder)
26
26
 
27
- recorder.should_receive(:start)
27
+ expect(recorder).to receive(:start)
28
28
 
29
29
  listener.on_task_starting worker, feature
30
30
  ENV['DISPLAY'] = env
31
31
  end
32
32
 
33
33
  it "stops recording when the task is finished" do
34
- recorder.should_receive(:stop)
34
+ expect(recorder).to receive(:stop)
35
35
  listener.instance_variable_set(:@recorder, recorder)
36
36
 
37
37
  listener.on_task_finished worker, nil, nil
38
38
 
39
- listener.instance_variable_get(:@recorder).should be_nil
39
+ expect(listener.instance_variable_get(:@recorder)).to be_nil
40
40
  end
41
41
 
42
42
  it "stops recording when worker dies" do
43
43
  listener.instance_variable_set(:@recorder, recorder)
44
- recorder.should_receive(:stop)
44
+ expect(recorder).to receive(:stop)
45
45
 
46
46
  listener.on_worker_dead(nil)
47
47
  end
48
48
 
49
49
  it "deletes the output file if the worker succeeded" do
50
- recorder.stub(:stop)
50
+ allow(recorder).to receive(:stop)
51
51
  listener.instance_variable_set(:@recorder, recorder)
52
52
 
53
- listener.should_receive(:output).and_return("./foo.mp4")
54
- FileUtils.should_receive(:rm_rf).with("./foo.mp4")
53
+ expect(listener).to receive(:output).and_return("./foo.mp4")
54
+ expect(FileUtils).to receive(:rm_rf).with("./foo.mp4")
55
55
 
56
56
  listener.on_task_finished worker, nil, true
57
57
  end
@@ -60,7 +60,7 @@ module JCukeForker
60
60
  listener = RecordingVncListener.new worker, 'codec' => "flv", 'ext' => 'flv'
61
61
  env = ENV['DISPLAY']
62
62
  ENV['DISPLAY']= ':1'
63
- ChildProcess.should_receive(:build).with(
63
+ expect(ChildProcess).to receive(:build).with(
64
64
  'ffmpeg',
65
65
  '-an',
66
66
  '-y',
@@ -20,29 +20,29 @@ module JCukeForker
20
20
  mock_io_out = double(IO, :sync= => nil)
21
21
  mock_tasks = Array.new(2) { |n| double("Worker-#{n}") }
22
22
 
23
- TaskManager.should_receive(:new).with(features, mock_io_out, {format: format, out: out, extra_args: []}).and_return mock_task_manager
24
- StatusServer.should_receive(:new).with('/tmp/in').and_return mock_status_server
25
- File.should_receive(:open).with('/tmp/in', 'w').and_return mock_io_out
26
- File.should_receive(:open).with('/tmp/out', 'w').and_return mock_io_out
27
- File.should_receive(:open).with('/tmp/out', 'a').and_return mock_io_out
23
+ expect(TaskManager).to receive(:new).with(features, mock_io_out, {format: format, out: out, extra_args: []}).and_return mock_task_manager
24
+ expect(StatusServer).to receive(:new).with('/tmp/in').and_return mock_status_server
25
+ expect(File).to receive(:open).with('/tmp/in', 'w').and_return mock_io_out
26
+ expect(File).to receive(:open).with('/tmp/out', 'w').and_return mock_io_out
27
+ expect(File).to receive(:open).with('/tmp/out', 'a').and_return mock_io_out
28
28
 
29
- mock_status_server.should_receive(:add_observer).with listeners.first
30
- mock_status_server.should_receive(:add_observer).with mock_task_manager
29
+ expect(mock_status_server).to receive(:add_observer).with listeners.first
30
+ expect(mock_status_server).to receive(:add_observer).with mock_task_manager
31
31
 
32
- Runner.create(features,
32
+ expect(Runner.create(features,
33
33
  :max => max,
34
34
  :notify => listeners,
35
35
  :format => format,
36
36
  :log => false,
37
37
  :out => out,
38
38
  :delay => 1
39
- ).should be_kind_of(Runner)
39
+ )).to be_kind_of(Runner)
40
40
  end
41
41
 
42
42
  it "creates and runs a new runner" do
43
43
  r = double(Runner)
44
- Runner.should_receive(:create).with(%w[a b], {}).and_return(r)
45
- r.should_receive(:run)
44
+ expect(Runner).to receive(:create).with(%w[a b], {}).and_return(r)
45
+ expect(r).to receive(:run)
46
46
 
47
47
  Runner.run(%w[a b])
48
48
  end
@@ -62,10 +62,9 @@ module JCukeForker
62
62
  it "processes the queue" do
63
63
  runner.add_observer listener
64
64
 
65
- listener.should_receive(:update).with(:on_run_starting)
66
- process.should_receive(:start)
67
- process.should_receive(:wait)
68
- # listener.should_receive(:update).with(:on_run_finished, false)
65
+ expect(listener).to receive(:update).with(:on_run_starting)
66
+ expect(process).to receive(:start)
67
+ expect(process).to receive(:wait)
69
68
 
70
69
  runner.run
71
70
  end
@@ -73,9 +72,9 @@ module JCukeForker
73
72
  it "fires on_run_interrupted and shuts down if the run is interrupted" do
74
73
  runner.add_observer listener
75
74
 
76
- process.stub(:wait).and_raise(Interrupt)
77
- runner.stub(:stop)
78
- listener.should_receive(:update).with(:on_run_interrupted)
75
+ allow(process).to receive(:wait).and_raise(Interrupt)
76
+ allow(runner).to receive(:stop)
77
+ expect(listener).to receive(:update).with(:on_run_interrupted)
79
78
 
80
79
  runner.run
81
80
  end
@@ -83,11 +82,10 @@ module JCukeForker
83
82
  it "fires on_run_interrupted and shuts down if an error occurs" do
84
83
  runner.add_observer listener
85
84
 
86
- process.stub(:wait).and_raise(StandardError)
87
- runner.stub(:stop)
88
- listener.should_receive(:update).with(:on_run_interrupted)
85
+ allow(process).to receive(:wait).and_raise(StandardError)
86
+ allow(runner).to receive(:stop)
89
87
 
90
- lambda { runner.run }.should raise_error(StandardError)
88
+ expect{ runner.run }.to raise_error(StandardError)
91
89
  end
92
90
  end
93
91
 
@@ -3,65 +3,103 @@ require File.expand_path("../../spec_helper", __FILE__)
3
3
  module JCukeForker
4
4
  describe Scenarios do
5
5
  it "returns all scenarios and their line numbers" do
6
- feature_1 = Cucumber::FeatureFile.new("features/test1.feature")
7
- feature_2 = Cucumber::FeatureFile.new("features/test2.feature")
6
+ allow(Scenarios).to receive(:feature_files).and_return(['features/test1.feature', 'features/test2.feature'])
7
+ allow(JCukeForker::NormalisedEncodingFile).to receive(:read).with(/features\/test\d\.feature/).and_return(<<-GHERKIN)
8
+ Feature: Test Feature
8
9
 
9
- feature_1.instance_variable_set(:@source,
10
- "Feature: test 1
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
20
+
21
+ all_scenarios = Scenarios.all
22
+
23
+ expect(all_scenarios.length).to eql 4
24
+ expect(all_scenarios[0]).to eql "features/test1.feature:3"
25
+ expect(all_scenarios[1]).to eql "features/test1.feature:8"
26
+ expect(all_scenarios[2]).to eql "features/test2.feature:3"
27
+ expect(all_scenarios[3]).to eql "features/test2.feature:8"
28
+ end
29
+
30
+ it "returns all scenarios and their line numbers by tags" do
31
+ allow(Scenarios).to receive(:feature_files).and_return(['features/test1.feature'])
32
+ allow(JCukeForker::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
-
14
37
  Scenario: test scenario 2
15
- Given nothing else happens")
38
+ Given nothing else happens
39
+ GHERKIN
16
40
 
41
+ all_scenarios = Scenarios.by_args(%W[-t @find_me])
17
42
 
18
- feature_2.instance_variable_set(:@source,
19
- "Feature: test 2
43
+ expect(all_scenarios.length).to eql 1
44
+ expect(all_scenarios[0]).to eql "features/test1.feature:3"
45
+ end
20
46
 
21
- Scenario: test scenario 3
47
+ it "returns all scenarios and their line numbers by multiple include tags" do
48
+ allow(Scenarios).to receive(:feature_files).and_return(['features/test1.feature'])
49
+ allow(JCukeForker::NormalisedEncodingFile).to receive(:read).with('features/test1.feature').and_return(<<-GHERKIN)
50
+ Feature: test 1
51
+ @find_me
52
+ Scenario: test scenario 1
22
53
  Given nothing happens
23
54
 
24
- Scenario Outline: test scenario 4
25
- Given nothing happens
26
- Examples:
27
- | nothing |
28
- | 1 |
29
- ")
55
+ @me_too
56
+ Scenario: test scenario 2
57
+ Given nothing else happens
58
+ GHERKIN
30
59
 
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)
60
+ all_scenarios = Scenarios.by_args(%W[-t @find_me,@me_too])
33
61
 
34
- Scenarios.stub(:feature_files).and_return(['features/test1.feature', 'features/test2.feature'])
62
+ expect(all_scenarios.length).to eql 2
63
+ expect(all_scenarios[0]).to eql "features/test1.feature:3"
64
+ expect(all_scenarios[1]).to eql "features/test1.feature:7"
65
+ end
35
66
 
36
- all_scenarios = Scenarios.all
67
+ it "returns all scenarios and their line numbers by multiple and tags" do
68
+ allow(Scenarios).to receive(:feature_files).and_return(['features/test1.feature'])
69
+ allow(JCukeForker::NormalisedEncodingFile).to receive(:read).with('features/test1.feature').and_return(<<-GHERKIN)
70
+ Feature: test 1
71
+ @find_me @me_too
72
+ Scenario: test scenario 1
73
+ Given nothing happens
37
74
 
38
- all_scenarios.length.should == 4
39
- all_scenarios[0].should == "features/test1.feature:2"
40
- all_scenarios[1].should == "features/test1.feature:5"
41
- all_scenarios[2].should == "features/test2.feature:3"
42
- all_scenarios[3].should == "features/test2.feature:10"
43
- end
75
+ @me_too
76
+ Scenario: test scenario 2
77
+ Given nothing else happens
78
+ GHERKIN
44
79
 
45
- it "returns all scenarios and their line numbers" do
46
- feature_1 = Cucumber::FeatureFile.new("features/test1.feature")
80
+ all_scenarios = Scenarios.by_args(%W[-t @find_me -t @me_too])
81
+
82
+ expect(all_scenarios.length).to eql 1
83
+ expect(all_scenarios[0]).to eql "features/test1.feature:3"
84
+ end
47
85
 
48
- feature_1.instance_variable_set(:@source,
49
- "Feature: test 1
86
+ it "returns all scenarios and their line numbers by exclusion tag" do
87
+ allow(Scenarios).to receive(:feature_files).and_return(['features/test1.feature'])
88
+ allow(JCukeForker::NormalisedEncodingFile).to receive(:read).with('features/test1.feature').and_return(<<-GHERKIN)
89
+ Feature: test 1
50
90
  @find_me
51
91
  Scenario: test scenario 1
52
92
  Given nothing happens
53
93
 
94
+ @me_too
54
95
  Scenario: test scenario 2
55
- Given nothing else happens")
96
+ Given nothing else happens
97
+ GHERKIN
56
98
 
57
- Cucumber::FeatureFile.stub(:new).with("features/test1.feature").and_return(feature_1)
58
-
59
- Scenarios.stub(:feature_files).and_return(['features/test1.feature'])
60
-
61
- all_scenarios = Scenarios.by_args(%W[-t @find_me])
99
+ all_scenarios = Scenarios.by_args(%W[-t ~@find_me])
62
100
 
63
- all_scenarios.length.should == 1
64
- all_scenarios[0].should == "features/test1.feature:3"
101
+ expect(all_scenarios.length).to eql 1
102
+ expect(all_scenarios[0]).to eql "features/test1.feature:7"
65
103
  end
66
104
  end
67
105
  end
@@ -11,9 +11,9 @@ module JCukeForker
11
11
 
12
12
  # register a listener, just do an end to end test
13
13
  mock_listener = double(AbstractListener, :update => nil)
14
- mock_listener.should_receive(:update).with(status.to_s, worker_path)
14
+ expect(mock_listener).to receive(:update).with(status.to_s, worker_path)
15
15
  mock_io = double(IO, :sync= => nil)
16
- File.should_receive(:open).with('/tmp/in', 'r').and_return(mock_io)
16
+ expect(File).to receive(:open).with('/tmp/in', 'r').and_return(mock_io)
17
17
 
18
18
  # expect the worker to register
19
19
  io_in = '/tmp/in'
@@ -9,7 +9,7 @@ module JCukeForker
9
9
 
10
10
  it "can register a worker" do
11
11
 
12
- mock_file.should_receive(:write).with("{\"worker\":\"/tmp/jcukeforker-test-socket\",\"feature\":\"feature:1\",\"action\":\"feature\"}#{$-0}")
12
+ expect(mock_file).to receive(:write).with("{\"worker\":\"/tmp/jcukeforker-test-socket\",\"feature\":\"feature:1\",\"action\":\"feature\"}#{$-0}")
13
13
 
14
14
  task_manager = TaskManager.new [feature], mock_file
15
15
  task_manager.on_worker_register worker_path
@@ -17,7 +17,7 @@ module JCukeForker
17
17
 
18
18
  it "can finish task" do
19
19
 
20
- mock_file.should_receive(:write).with("{\"worker\":\"/tmp/jcukeforker-test-socket\",\"feature\":\"feature:1\",\"action\":\"feature\"}#{$-0}")
20
+ expect(mock_file).to receive(:write).with("{\"worker\":\"/tmp/jcukeforker-test-socket\",\"feature\":\"feature:1\",\"action\":\"feature\"}#{$-0}")
21
21
 
22
22
  task_manager = TaskManager.new [feature], mock_file
23
23
  task_manager.on_task_finished worker_path, nil, nil
@@ -25,7 +25,7 @@ module JCukeForker
25
25
 
26
26
  it "can send '__KILL__' when there are no tasks left" do
27
27
 
28
- mock_file.should_receive(:write).with("{\"action\":\"__KILL__\",\"worker\":\"/tmp/jcukeforker-test-socket\"}#{$-0}")
28
+ expect(mock_file).to receive(:write).with("{\"action\":\"__KILL__\",\"worker\":\"/tmp/jcukeforker-test-socket\"}#{$-0}")
29
29
 
30
30
  task_manager = TaskManager.new [], mock_file
31
31
  task_manager.on_task_finished worker_path, nil, nil
@@ -35,7 +35,7 @@ module JCukeForker
35
35
  task_manager = TaskManager.new [], mock_file
36
36
  def task_manager.pop_task(*args); end
37
37
  task_manager.on_task_finished worker_path, feature, false
38
- task_manager.has_failures?.should == true
38
+ expect(task_manager.has_failures?).to eql true
39
39
  end
40
40
  end
41
41
  end
@@ -8,8 +8,8 @@ module JCukeForker
8
8
  let(:mock_worker_server) { double(UNIXServer, :close => nil) }
9
9
  let(:mock_worker_socket) { double(UNIXSocket, :close => nil) }
10
10
  let(:worker) do
11
- File.should_receive(:open).with('/tmp/in', 'a').and_return(mock_status_file)
12
- mock_status_file.should_receive(:sync=).with(true)
11
+ expect(File).to receive(:open).with('/tmp/in', 'a').and_return(mock_status_file)
12
+ expect(mock_status_file).to receive(:sync=).with(true)
13
13
  Worker.new status_path, worker_path, '1'
14
14
  end
15
15
 
@@ -19,9 +19,9 @@ module JCukeForker
19
19
 
20
20
  it "can register worker" do
21
21
 
22
- mock_status_file.should_receive(:write).with("[\"on_worker_register\",\"1\"]#{$-0}")
22
+ expect(mock_status_file).to receive(:write).with("[\"on_worker_register\",\"1\"]#{$-0}")
23
23
  mock_event_file = double(IO)
24
- File.should_receive(:open).with(worker_path, 'r').and_return(mock_event_file)
24
+ expect(File).to receive(:open).with(worker_path, 'r').and_return(mock_event_file)
25
25
 
26
26
  worker.register
27
27
  end
@@ -36,7 +36,7 @@ module JCukeForker
36
36
  expected_args = formats.flat_map do |f|
37
37
  %W[--format #{f} --out #{path}/some_feature_51.#{f}]
38
38
  end
39
- worker.args.each_cons(expected_args.size).include?(expected_args).should be true
39
+ expect(worker.args.each_cons(expected_args.size).include?(expected_args)).to be true
40
40
  end
41
41
  end
42
42
  end
metadata CHANGED
@@ -1,108 +1,115 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jcukeforker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Gowan
8
8
  - Jari Bakken
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-02-20 00:00:00.000000000 Z
12
+ date: 2017-05-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: cucumber
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: 1.1.5
21
- - - "<"
17
+ - - '>='
22
18
  - !ruby/object:Gem::Version
23
- version: '2.0'
24
- type: :runtime
19
+ version: 2.3.2
20
+ name: cucumber
25
21
  prerelease: false
22
+ type: :runtime
26
23
  version_requirements: !ruby/object:Gem::Requirement
27
24
  requirements:
28
- - - ">="
25
+ - - '>='
29
26
  - !ruby/object:Gem::Version
30
- version: 1.1.5
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: '2.0'
27
+ version: 2.3.2
34
28
  - !ruby/object:Gem::Dependency
35
- name: vnctools
36
29
  requirement: !ruby/object:Gem::Requirement
37
30
  requirements:
38
- - - ">="
31
+ - - '>='
39
32
  - !ruby/object:Gem::Version
40
33
  version: 0.1.1
41
- type: :runtime
34
+ name: vnctools
42
35
  prerelease: false
36
+ type: :runtime
43
37
  version_requirements: !ruby/object:Gem::Requirement
44
38
  requirements:
45
- - - ">="
39
+ - - '>='
46
40
  - !ruby/object:Gem::Version
47
41
  version: 0.1.1
48
42
  - !ruby/object:Gem::Dependency
49
- name: childprocess
50
43
  requirement: !ruby/object:Gem::Requirement
51
44
  requirements:
52
- - - ">="
45
+ - - '>='
53
46
  - !ruby/object:Gem::Version
54
47
  version: 0.5.3
55
- type: :runtime
48
+ name: childprocess
56
49
  prerelease: false
50
+ type: :runtime
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
52
  requirements:
59
- - - ">="
53
+ - - '>='
60
54
  - !ruby/object:Gem::Version
61
55
  version: 0.5.3
62
56
  - !ruby/object:Gem::Dependency
63
- name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
58
  requirements:
66
- - - ">="
59
+ - - '>='
67
60
  - !ruby/object:Gem::Version
68
61
  version: '0'
69
- type: :development
62
+ name: rspec
70
63
  prerelease: false
64
+ type: :development
71
65
  version_requirements: !ruby/object:Gem::Requirement
72
66
  requirements:
73
- - - ">="
67
+ - - '>='
74
68
  - !ruby/object:Gem::Version
75
69
  version: '0'
76
70
  - !ruby/object:Gem::Dependency
77
- name: coveralls
78
71
  requirement: !ruby/object:Gem::Requirement
79
72
  requirements:
80
- - - ">="
73
+ - - '>='
81
74
  - !ruby/object:Gem::Version
82
75
  version: '0'
83
- type: :development
76
+ name: coveralls
84
77
  prerelease: false
78
+ type: :development
85
79
  version_requirements: !ruby/object:Gem::Requirement
86
80
  requirements:
87
- - - ">="
81
+ - - '>='
88
82
  - !ruby/object:Gem::Version
89
83
  version: '0'
90
84
  - !ruby/object:Gem::Dependency
91
- name: rake
92
85
  requirement: !ruby/object:Gem::Requirement
93
86
  requirements:
94
- - - "~>"
87
+ - - ~>
95
88
  - !ruby/object:Gem::Version
96
89
  version: '10'
97
- type: :development
90
+ name: rake
98
91
  prerelease: false
92
+ type: :development
99
93
  version_requirements: !ruby/object:Gem::Requirement
100
94
  requirements:
101
- - - "~>"
95
+ - - ~>
102
96
  - !ruby/object:Gem::Version
103
97
  version: '10'
104
- description: Library to maintain a forking queue of Cucumber processes, with optional
105
- VNC displays. Designed for JRuby and Windows.
98
+ - !ruby/object:Gem::Dependency
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ name: pry
105
+ prerelease: false
106
+ type: :development
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ description: Library to maintain a forking queue of Cucumber processes, with optional VNC displays. Designed for JRuby and Windows.
106
113
  email:
107
114
  - gowanjason@gmail.com
108
115
  executables:
@@ -110,9 +117,9 @@ executables:
110
117
  extensions: []
111
118
  extra_rdoc_files: []
112
119
  files:
113
- - ".gitignore"
114
- - ".rspec"
115
- - ".travis.yml"
120
+ - .gitignore
121
+ - .rspec
122
+ - .travis.yml
116
123
  - Gemfile
117
124
  - LICENSE
118
125
  - README.mdown
@@ -123,17 +130,17 @@ files:
123
130
  - lib/jcukeforker/abstract_listener.rb
124
131
  - lib/jcukeforker/configurable_vnc_server.rb
125
132
  - lib/jcukeforker/formatters/junit_scenario_formatter.rb
126
- - lib/jcukeforker/formatters/scenario_line_logger.rb
127
133
  - lib/jcukeforker/logging_listener.rb
134
+ - lib/jcukeforker/normalised_encoding_file.rb
128
135
  - lib/jcukeforker/recording_vnc_listener.rb
129
136
  - lib/jcukeforker/runner.rb
137
+ - lib/jcukeforker/scenario_list.rb
130
138
  - lib/jcukeforker/scenarios.rb
131
139
  - lib/jcukeforker/status_server.rb
132
140
  - lib/jcukeforker/task_manager.rb
133
141
  - lib/jcukeforker/version.rb
134
142
  - lib/jcukeforker/worker.rb
135
143
  - lib/jcukeforker/worker_script.rb
136
- - spec/jcukeforker/formatters/scenario_line_logger_spec.rb
137
144
  - spec/jcukeforker/logging_listener_spec.rb
138
145
  - spec/jcukeforker/recording_vnc_listener_spec.rb
139
146
  - spec/jcukeforker/runner_spec.rb
@@ -145,28 +152,27 @@ files:
145
152
  homepage: ''
146
153
  licenses: []
147
154
  metadata: {}
148
- post_install_message:
155
+ post_install_message:
149
156
  rdoc_options: []
150
157
  require_paths:
151
158
  - lib
152
159
  required_ruby_version: !ruby/object:Gem::Requirement
153
160
  requirements:
154
- - - ">="
161
+ - - '>='
155
162
  - !ruby/object:Gem::Version
156
163
  version: '0'
157
164
  required_rubygems_version: !ruby/object:Gem::Requirement
158
165
  requirements:
159
- - - ">="
166
+ - - '>='
160
167
  - !ruby/object:Gem::Version
161
168
  version: '0'
162
169
  requirements: []
163
170
  rubyforge_project: jcukeforker
164
- rubygems_version: 2.2.0
165
- signing_key:
171
+ rubygems_version: 2.1.9
172
+ signing_key:
166
173
  specification_version: 4
167
174
  summary: CukeForker, for JRuby and Windows
168
175
  test_files:
169
- - spec/jcukeforker/formatters/scenario_line_logger_spec.rb
170
176
  - spec/jcukeforker/logging_listener_spec.rb
171
177
  - spec/jcukeforker/recording_vnc_listener_spec.rb
172
178
  - spec/jcukeforker/runner_spec.rb
@@ -1,40 +0,0 @@
1
- require 'gherkin/tag_expression'
2
- module JCukeForker
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
- if feature_element.respond_to?(:each_example_row)
15
- feature_element.each_example_row do |row|
16
- #TODO remove reflection
17
- build_scenario(feature_element, row.instance_variable_get(:@cells).first)
18
- end
19
- else
20
- build_scenario(feature_element, feature_element)
21
- end
22
- end
23
- end
24
-
25
- def method_missing(*args)
26
- end
27
-
28
- private
29
-
30
- def build_scenario(feature_element, sub_element)
31
- line_number = if sub_element.respond_to?(:line)
32
- sub_element.line
33
- else
34
- sub_element.location.line
35
- end
36
- @scenarios << [feature_element.feature.file, line_number].join(':')
37
- end
38
- end
39
- end
40
- end
@@ -1,46 +0,0 @@
1
- require File.expand_path("../../../spec_helper", __FILE__)
2
- require 'cucumber/ast/scenario_outline'
3
-
4
- module JCukeForker::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
- row = double("Cucumber::Ast::OutlineTable::ExampleRow")
31
- cell = double("Cucumber::Ast::Table::Cell", :line => 4)
32
- feature_element = Cucumber::Ast::ScenarioOutline.new(*Array.new(11) {|a| double(a, :each => true) })
33
- feature_element.stub(:each_example_row).and_yield(row)
34
-
35
- row.should_receive(:instance_variable_get).with(:@cells).and_return([cell])
36
- feature.should_receive(:file).and_return('features/test1.feature')
37
- feature_element.should_receive(:source_tags).and_return('')
38
- feature_element.should_receive(:feature).and_return(feature)
39
-
40
- logger.visit_feature_element(feature_element)
41
-
42
- logger.scenarios.length.should == 1
43
- logger.scenarios[0].should == "features/test1.feature:4"
44
- end
45
- end
46
- end