spork 0.5.11 → 0.6.0

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