spork 0.5.11 → 0.6.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.
@@ -0,0 +1,3 @@
1
+ Given /^this scenario is pending.+/ do
2
+ pending
3
+ end
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
2
2
  module Spork
3
3
  BINARY = File.expand_path(File.dirname(__FILE__) + '/../bin/spork')
4
- LIBDIR = File.expand_path(File.dirname(__FILE__))
4
+ LIBDIR = File.expand_path("..", File.dirname(__FILE__))
5
5
 
6
6
  class << self
7
7
  # Run a block, during prefork mode. By default, if prefork is called twice in the same file and line number, the supplied block will only be ran once.
@@ -70,6 +70,12 @@ module Spork
70
70
  trap_method((class << klass; self; end), method_name)
71
71
  end
72
72
 
73
+ def detect_and_require(subfolder)
74
+ ([LIBDIR] + Gem.latest_load_paths.grep(/spork/)).uniq.each do |gem_path|
75
+ Dir.glob(File.join(gem_path, subfolder)).each { |file| require file }
76
+ end
77
+ end
78
+
73
79
  private
74
80
  def alias_method_names(method_name, feature)
75
81
  /^(.+?)([\?\!]{0,1})$/.match(method_name.to_s)
@@ -0,0 +1,40 @@
1
+ class Spork::RunStrategy
2
+ attr_reader :test_framework
3
+ @@run_strategies = []
4
+
5
+ def initialize(test_framework)
6
+ @test_framework = test_framework
7
+ end
8
+
9
+ def preload
10
+ raise NotImplementedError
11
+ end
12
+
13
+ def run(argv, input, output)
14
+ raise NotImplementedError
15
+ end
16
+
17
+ def cleanup
18
+ raise NotImplementedError
19
+ end
20
+
21
+ def running?
22
+ raise NotImplementedError
23
+ end
24
+
25
+ def abort
26
+ raise NotImplementedError
27
+ end
28
+
29
+ protected
30
+ def self.factory(test_framework)
31
+ Spork::RunStrategy::Forking.new(test_framework)
32
+ end
33
+
34
+ def self.inherited(subclass)
35
+ @@run_strategies << subclass
36
+ end
37
+
38
+ end
39
+
40
+ Dir[File.dirname(__FILE__) + "/run_strategy/*.rb"].each { |file| require file }
@@ -0,0 +1,30 @@
1
+ class Spork::RunStrategy::Forking < Spork::RunStrategy
2
+ def self.available?
3
+ Kernel.respond_to?(:fork)
4
+ end
5
+
6
+ def run(argv, stderr, stdout)
7
+ abort if running?
8
+
9
+ @child = ::Spork::Forker.new do
10
+ $stdout, $stderr = stdout, stderr
11
+ load test_framework.helper_file
12
+ Spork.exec_each_run
13
+ test_framework.run_tests(argv, stderr, stdout)
14
+ end
15
+ @child.result
16
+ end
17
+
18
+ def abort
19
+ @child && @child.abort
20
+ end
21
+
22
+ def preload
23
+ test_framework.preload
24
+ end
25
+
26
+ def running?
27
+ @child && @child.running?
28
+ end
29
+
30
+ end
@@ -1,6 +1,7 @@
1
1
  require 'optparse'
2
2
  require 'spork/server'
3
3
  require 'spork/test_framework'
4
+ require 'spork/run_strategy'
4
5
 
5
6
  module Spork
6
7
  # This is used by bin/spork. It's wrapped in a class because it's easier to test that way.
@@ -71,8 +72,9 @@ module Spork
71
72
  Spork::Diagnoser.output_results(@output)
72
73
  return true
73
74
  else
74
- return(false) unless test_framework.preload
75
- Spork::Server.run(:port => @options[:port], :test_framework => test_framework)
75
+ run_strategy = Spork::RunStrategy.factory(test_framework)
76
+ return(false) unless run_strategy.preload
77
+ Spork::Server.run(:port => @options[:port] || test_framework.default_port, :run_strategy => run_strategy)
76
78
  return true
77
79
  end
78
80
  end
@@ -8,11 +8,11 @@ require 'spork/app_framework.rb'
8
8
  #
9
9
  # (This was originally based off of spec_server.rb from rspec-rails (David Chelimsky), which was based on Florian Weber's TDDMate)
10
10
  class Spork::Server
11
- attr_reader :test_framework
11
+ attr_reader :run_strategy
12
12
  include Spork::CustomIOStreams
13
13
 
14
14
  def initialize(options = {})
15
- @test_framework = options[:test_framework]
15
+ @run_strategy = options[:run_strategy]
16
16
  @port = options[:port]
17
17
  end
18
18
 
@@ -31,11 +31,7 @@ class Spork::Server
31
31
  DRb.thread.join
32
32
  end
33
33
 
34
- attr_writer :port
35
-
36
- def port
37
- @port || test_framework.class.default_port
38
- end
34
+ attr_accessor :port
39
35
 
40
36
  # This is the public facing method that is served up by DRb. To use it from the client side (in a testing framework):
41
37
  #
@@ -46,20 +42,7 @@ class Spork::Server
46
42
  #
47
43
  # When implementing a test server, don't override this method: override run_tests instead.
48
44
  def run(argv, stderr, stdout)
49
- abort if running?
50
-
51
- @child = ::Spork::Forker.new do
52
- $stdout, $stderr = stdout, stderr
53
- load test_framework.helper_file
54
- Spork.exec_each_run
55
- test_framework.run_tests(argv, stderr, stdout)
56
- end
57
- @child.result
58
- end
59
-
60
- # returns whether or not the child (a test run) is running right now.
61
- def running?
62
- @child && @child.running?
45
+ run_strategy.run(argv, stderr, stdout)
63
46
  end
64
47
 
65
48
  private
@@ -72,12 +55,8 @@ class Spork::Server
72
55
  exec(command_line)
73
56
  end
74
57
 
75
- def abort
76
- @child && @child.abort
77
- end
78
-
79
58
  def sig_int_received
80
- if running?
59
+ if run_strategy.running?
81
60
  abort
82
61
  stderr.puts "Running tests stopped. Press CTRL-C again to stop the server."
83
62
  stderr.flush
@@ -150,6 +150,10 @@ class Spork::TestFramework
150
150
  bootstrapped? ? helper_file : framework.entry_point
151
151
  end
152
152
 
153
+ def default_port
154
+ self.class.default_port
155
+ end
156
+
153
157
  protected
154
158
  def self.inherited(subclass)
155
159
  @@supported_test_frameworks << subclass
@@ -160,4 +164,4 @@ class Spork::TestFramework
160
164
  end
161
165
  end
162
166
 
163
- Dir[File.dirname(__FILE__) + "/test_framework/*.rb"].each { |file| require file }
167
+ Spork.detect_and_require('spork/test_framework/*.rb')
@@ -1,34 +1,4 @@
1
1
  require 'rubygems'
2
- require 'spork'
3
-
4
- Spork.prefork do
5
- # Loading more in this block will cause your tests to run faster. However,
6
- # if you change any configuration or code from libraries loaded here, you'll
7
- # need to restart spork for it take effect.
8
-
9
- end
10
-
11
- Spork.each_run do
12
- # This code will be run each time you run your specs.
13
-
14
- end
15
-
16
- # --- Instructions ---
17
- # - Sort through your spec_helper file. Place as much environment loading
18
- # code that you don't normally modify during development in the
19
- # Spork.prefork block.
20
- # - Place the rest under Spork.each_run block
21
- # - Any code that is left outside of the blocks will be ran during preforking
22
- # and during each_run!
23
- # - These instructions should self-destruct in 10 seconds. If they don't,
24
- # feel free to delete them.
25
- #
26
-
27
-
28
-
29
-
30
- require 'rubygems'
31
- require 'spec'
32
2
 
33
3
  unless $spec_helper_loaded
34
4
  $spec_helper_loaded = true
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Spork::RunStrategy::Forking do
4
+ before(:each) do
5
+ @fake_framework = FakeFramework.new
6
+ @run_strategy = Spork::RunStrategy::Forking.new(@fake_framework)
7
+
8
+ end
9
+
10
+ it "returns the result of the run_tests method from the forked child" do
11
+ create_helper_file
12
+ @fake_framework.stub!(:run_tests).and_return("tests were ran")
13
+ @run_strategy.run("test", STDOUT, STDIN).should == "tests were ran"
14
+ end
15
+
16
+ it "aborts the current running thread when another run is started" do
17
+ create_helper_file
18
+ @fake_framework.wait_time = 0.25
19
+ first_run = Thread.new { @run_strategy.run("test", STDOUT, STDIN).should == nil }
20
+ sleep(0.05)
21
+ @run_strategy.run("test", STDOUT, STDIN).should == true
22
+
23
+ # wait for the first to finish
24
+ first_run.join
25
+ end
26
+
27
+ it "can abort the current run" do
28
+ create_helper_file
29
+ @fake_framework.wait_time = 5
30
+ started_at = Time.now
31
+ first_run = Thread.new { @run_strategy.run("test", STDOUT, STDIN).should == true }
32
+ sleep(0.05)
33
+ @run_strategy.send(:abort)
34
+ sleep(0.01) while @run_strategy.running?
35
+
36
+ (Time.now - started_at).should < @fake_framework.wait_time
37
+ end
38
+ end
@@ -3,49 +3,13 @@ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  describe Spork::Server do
4
4
  describe "a fake server" do
5
5
  before(:each) do
6
- @fake_framework = FakeFramework.new
7
- @server = Spork::Server.new(:test_framework => @fake_framework)
6
+ @fake_run_strategy = FakeRunStrategy.new
7
+ @server = Spork::Server.new(:run_strategy => @fake_run_strategy)
8
8
  end
9
-
10
- it "aborts the current running thread when another run is started" do
11
- create_helper_file
12
- @fake_framework.wait_time = 0.25
13
- first_run = Thread.new { @server.run("test", STDOUT, STDIN).should == nil }
14
- sleep(0.05)
15
- @server.run("test", STDOUT, STDIN).should == true
16
9
 
17
- # wait for the first to finish
18
- first_run.join
19
- end
20
-
21
- it "can abort the current run" do
22
- create_helper_file
23
- @fake_framework.wait_time = 5
24
- started_at = Time.now
25
- first_run = Thread.new { @server.run("test", STDOUT, STDIN).should == true }
26
- sleep(0.05)
27
- @server.send(:abort)
28
- sleep(0.01) while @server.running?
29
-
30
- (Time.now - started_at).should < @fake_framework.wait_time
31
- end
32
-
33
- it "returns the result of the run_tests method from the forked child" do
34
- create_helper_file
35
- @fake_framework.stub!(:run_tests).and_return("tests were ran")
36
- @server.run("test", STDOUT, STDIN).should == "tests were ran"
37
- end
38
-
39
10
  it "accepts a port" do
40
- create_helper_file
41
11
  @server.port = 12345
42
12
  @server.port.should == 12345
43
13
  end
44
-
45
- it "falls back to a default port" do
46
- create_helper_file
47
- @server.port = nil
48
- @server.port.should == FakeFramework.default_port
49
- end
50
14
  end
51
15
  end
@@ -0,0 +1,21 @@
1
+ class FakeRunStrategy < Spork::RunStrategy
2
+ def initialize(*args)
3
+ end
4
+
5
+ def self.available?
6
+ true
7
+ end
8
+
9
+ def run(argv, stderr, stdout)
10
+ sleep(@wait_time || 0.5)
11
+ true
12
+ end
13
+
14
+ def running?
15
+ false
16
+ end
17
+
18
+ def preload
19
+ true
20
+ end
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.11
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Harper
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-31 00:00:00 -06:00
12
+ date: 2009-09-12 00:00:00 -04:00
13
13
  default_executable: spork
14
14
  dependencies: []
15
15
 
@@ -46,6 +46,8 @@ files:
46
46
  - lib/spork/custom_io_streams.rb
47
47
  - lib/spork/diagnoser.rb
48
48
  - lib/spork/forker.rb
49
+ - lib/spork/run_strategy.rb
50
+ - lib/spork/run_strategy/forking.rb
49
51
  - lib/spork/runner.rb
50
52
  - lib/spork/server.rb
51
53
  - lib/spork/test_framework.rb
@@ -57,6 +59,7 @@ files:
57
59
  - spec/spork/app_framework_spec.rb
58
60
  - spec/spork/diagnoser_spec.rb
59
61
  - spec/spork/forker_spec.rb
62
+ - spec/spork/run_strategy/forking_spec.rb
60
63
  - spec/spork/runner_spec.rb
61
64
  - spec/spork/server_spec.rb
62
65
  - spec/spork/test_framework/cucumber_spec.rb
@@ -64,6 +67,7 @@ files:
64
67
  - spec/spork/test_framework_spec.rb
65
68
  - spec/spork_spec.rb
66
69
  - spec/support/fake_framework.rb
70
+ - spec/support/fake_run_strategy.rb
67
71
  has_rdoc: true
68
72
  homepage: http://github.com/timcharper/spork
69
73
  licenses: []
@@ -100,6 +104,7 @@ test_files:
100
104
  - spec/spork/app_framework_spec.rb
101
105
  - spec/spork/diagnoser_spec.rb
102
106
  - spec/spork/forker_spec.rb
107
+ - spec/spork/run_strategy/forking_spec.rb
103
108
  - spec/spork/runner_spec.rb
104
109
  - spec/spork/server_spec.rb
105
110
  - spec/spork/test_framework/cucumber_spec.rb
@@ -107,3 +112,4 @@ test_files:
107
112
  - spec/spork/test_framework_spec.rb
108
113
  - spec/spork_spec.rb
109
114
  - spec/support/fake_framework.rb
115
+ - spec/support/fake_run_strategy.rb