jcukeforker 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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