timcharper-spork 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/spork CHANGED
@@ -10,6 +10,8 @@ require 'spork/runner'
10
10
  begin
11
11
  success = Spork::Runner.run(ARGV, STDOUT, STDERR)
12
12
  Kernel.exit(success ? 0 : 1)
13
+ rescue SystemExit => e
14
+ Kernel.exit(e.status)
13
15
  rescue Exception => e
14
16
  STDERR.puts("#{e.message} (#{e.class})")
15
17
  STDERR.puts(e.backtrace.join("\n"))
data/lib/spork/runner.rb CHANGED
@@ -1,50 +1,86 @@
1
1
  require 'optparse'
2
+ require 'spork/server'
2
3
 
3
4
  module Spork
4
5
  class Runner
5
-
6
+ attr_reader :server
7
+
6
8
  def self.run(args, output, error)
7
9
  self.new(args, output, error).run
8
10
  end
9
-
11
+
10
12
  def initialize(args, output, error)
13
+ raise ArgumentError, "expected array of args" unless args.is_a?(Array)
11
14
  @output = output
12
15
  @error = error
13
16
  @options = {}
14
- parser = OptionParser.new
15
- parser.on("-d", "--daemon") {|ignore| @options[:daemon] = true }
16
- parser.on("-b", "--bootstrap") {|ignore| @options[:bootstrap] = true }
17
- parser.on("-p", "--pid PIDFILE"){|pid| @options[:pid] = pid }
18
- parser.parse!(args)
19
- end
20
-
21
-
22
- def run
23
- ENV["DRB"] = 'true'
24
- ENV["RAILS_ENV"] ||= 'test' if Spork.using_rails?
25
-
26
- unless File.exist?(Spork::SPEC_HELPER_FILE)
27
- @output.puts <<-USEFUL_ERROR
28
- Bummer!
29
-
30
- I can't find the file spec/spec_helper.rb, which I need in order to run.
31
-
32
- Are you running me from a project directory that has rspec set up?
33
- USEFUL_ERROR
34
- return false
17
+ opt = OptionParser.new
18
+ opt.banner = "Usage: spork [test framework name] [options]\n\n"
19
+
20
+ opt.separator "Options:"
21
+ opt.on("-b", "--bootstrap") {|ignore| @options[:bootstrap] = true }
22
+ opt.on("-h", "--help") {|ignore| @options[:help] = true }
23
+ non_option_args = args.select { |arg| ! args[0].match(/^-/) }
24
+ @options[:server_matcher] = non_option_args[0]
25
+ opt.parse!(args)
26
+
27
+ if @options[:help]
28
+ @output.puts opt
29
+ @output.puts
30
+ @output.puts supported_servers_text
31
+ exit(0)
35
32
  end
36
-
37
-
38
- return Spork.bootstrap if options[:bootstrap]
39
-
40
- require 'spork/spec_server'
41
- return(false) unless Spork.preload
42
-
43
- if options[:daemon]
44
- ::Spork::SpecServer.daemonize(options[:pid])
33
+ end
34
+
35
+ def supported_servers_text
36
+ text = StringIO.new
37
+
38
+ text.puts "Supported test frameworks:"
39
+ text.puts Spork::Server.supported_servers.sort { |a,b| a.server_name <=> b.server_name }.map { |s| (s.available? ? '(*) ' : '( ) ') + s.server_name }
40
+ text.puts "\nLegend: ( ) - not detected in project (*) - detected\n"
41
+ text.string
42
+ end
43
+
44
+ def find_server
45
+ if options[:server_matcher]
46
+ @server = Spork::Server.supported_servers(options[:server_matcher]).first
47
+ unless @server
48
+ @output.puts <<-ERROR
49
+ #{options[:server_matcher].inspect} didn't match a supported test framework.
50
+
51
+ #{supported_servers_text}
52
+ ERROR
53
+ return
54
+ end
55
+
56
+ unless @server.available?
57
+ @output.puts <<-USEFUL_ERROR
58
+ I can't find the helper file #{@server.helper_file} for the #{@server.server_name} testing framework.
59
+ Are you running me from the project directory?
60
+ USEFUL_ERROR
61
+ return
62
+ end
45
63
  else
46
- ::Spork::SpecServer.run
64
+ @server = Spork::Server.available_servers.first
65
+ if @server.nil?
66
+ @output.puts <<-USEFUL_ERROR
67
+ I can't find any testing frameworks to use.
68
+ Are you running me from a project directory?
69
+ USEFUL_ERROR
70
+ return
71
+ end
47
72
  end
73
+ @server
74
+ end
75
+
76
+ def run
77
+ return false unless find_server
78
+ ENV["DRB"] = 'true'
79
+ ENV["RAILS_ENV"] ||= 'test' if server.using_rails?
80
+ @output.puts "Using #{server.server_name}"
81
+ return server.bootstrap if options[:bootstrap]
82
+ return(false) unless server.preload
83
+ server.run
48
84
  return true
49
85
  end
50
86
 
@@ -0,0 +1,24 @@
1
+ class Spork::Server::Cucumber < Spork::Server
2
+ CUCUMBER_PORT = 8990
3
+ CUCUMBER_HELPER_FILE = File.join(Dir.pwd, "features/support/env.rb")
4
+
5
+ def self.port
6
+ CUCUMBER_PORT
7
+ end
8
+
9
+ def self.helper_file
10
+ CUCUMBER_HELPER_FILE
11
+ end
12
+
13
+ def self.step_mother=(value)
14
+ @step_mother = value
15
+ end
16
+
17
+ def run_tests(argv, stderr, stdout)
18
+ require 'cucumber/cli/main'
19
+ ::Cucumber::Cli::Main.step_mother = @step_mother
20
+ ::Cucumber::Cli::Main.new(argv, stderr, stdout).execute!(@step_mother)
21
+ end
22
+ end
23
+
24
+ Spork::Server::Cucumber.step_mother = self
@@ -0,0 +1,22 @@
1
+ class Spork::Server::RSpec < Spork::Server
2
+ RSPEC_PORT = 8989
3
+ RSPEC_HELPER_FILE = File.join(Dir.pwd, "spec/spec_helper.rb")
4
+
5
+ def self.port
6
+ RSPEC_PORT
7
+ end
8
+
9
+ def self.helper_file
10
+ RSPEC_HELPER_FILE
11
+ end
12
+
13
+ def run_tests(argv, stderr, stdout)
14
+ ::Spec::Runner::CommandLine.run(
15
+ ::Spec::Runner::OptionParser.parse(
16
+ argv,
17
+ stderr,
18
+ stdout
19
+ )
20
+ )
21
+ end
22
+ end
@@ -0,0 +1,159 @@
1
+ require 'drb/drb'
2
+ require 'rbconfig'
3
+
4
+ # This is based off of spec_server.rb from rspec-rails (David Chelimsky), which was based on Florian Weber's TDDMate
5
+ class Spork::Server
6
+ @@supported_servers = []
7
+
8
+ LOAD_PREFERENCE = ['RSpec', 'Cucumber']
9
+ BOOTSTRAP_FILE = File.dirname(__FILE__) + "/../../assets/bootstrap.rb"
10
+
11
+ def self.port
12
+ raise NotImplemented
13
+ end
14
+
15
+ def self.helper_file
16
+ raise NotImplemented
17
+ end
18
+
19
+ def self.server_name
20
+ self.name.gsub('Spork::Server::', '')
21
+ end
22
+
23
+ def self.inherited(subclass)
24
+ @@supported_servers << subclass
25
+ end
26
+
27
+ def self.available_servers
28
+ supported_servers.select { |s| s.available? }
29
+ end
30
+
31
+ def self.supported_servers(starting_with = nil)
32
+ @@supported_servers.sort! { |a,b| a.load_preference_index <=> b.load_preference_index }
33
+ return @@supported_servers if starting_with.nil?
34
+ @@supported_servers.select do |s|
35
+ s.server_name.match(/^#{Regexp.escape(starting_with)}/i)
36
+ end
37
+ end
38
+
39
+ def self.available?
40
+ File.exist?(helper_file)
41
+ end
42
+
43
+ def self.load_preference_index
44
+ LOAD_PREFERENCE.index(server_name) || LOAD_PREFERENCE.length
45
+ end
46
+
47
+ def self.using_rails?
48
+ File.exist?("config/environment.rb")
49
+ end
50
+
51
+ def self.bootstrapped?
52
+ File.read(helper_file).include?("Spork.prefork")
53
+ end
54
+
55
+ def self.bootstrap
56
+ if bootstrapped?
57
+ puts "Already bootstrapped!"
58
+ return
59
+ end
60
+ puts "Bootstrapping #{helper_file}."
61
+ contents = File.read(helper_file)
62
+ bootstrap_code = File.read(BOOTSTRAP_FILE)
63
+ File.open(helper_file, "wb") do |f|
64
+ f.puts bootstrap_code
65
+ f.puts contents
66
+ end
67
+
68
+ puts "Done. Edit #{helper_file} now with your favorite text editor and follow the instructions."
69
+ true
70
+ end
71
+
72
+ def self.run
73
+ return unless available?
74
+ new.listen
75
+ end
76
+
77
+ def listen
78
+ trap("SIGINT") { sig_int_received }
79
+ trap("SIGTERM") { abort; exit!(0) }
80
+ trap("USR2") { abort; restart } if Signal.list.has_key?("USR2")
81
+ DRb.start_service("druby://127.0.0.1:#{port}", self)
82
+ puts "Spork is ready and listening on #{port}!"
83
+ DRb.thread.join
84
+ end
85
+
86
+ def port
87
+ self.class.port
88
+ end
89
+
90
+ def helper_file
91
+ self.class.helper_file
92
+ end
93
+
94
+ def run(argv, stderr, stdout)
95
+ return false if running?
96
+ $stdout = stdout
97
+ $stderr = stderr
98
+ @child_pid = Kernel.fork do
99
+ Spork.exec_each_run(helper_file)
100
+ run_tests(argv, stderr, stdout)
101
+ end
102
+ Process.wait(@child_pid)
103
+ @child_pid = nil
104
+ true
105
+ end
106
+
107
+ def running?
108
+ !! @child_pid
109
+ end
110
+
111
+ private
112
+ def self.preload
113
+ if bootstrapped?
114
+ puts "Loading Spork.prefork block..."
115
+ Spork.exec_prefork(helper_file)
116
+ else
117
+ puts "#{helper_file} has not been sporked. Run spork --bootstrap to do so."
118
+ # are we in a rails app?
119
+ if using_rails?
120
+ puts "Preloading Rails environment"
121
+ require "config/environment.rb"
122
+ else
123
+ puts "There's nothing I can really do for you. Bailing."
124
+ return false
125
+ end
126
+ end
127
+ true
128
+ end
129
+
130
+ def run_tests(argv, input, output)
131
+ raise NotImplemented
132
+ end
133
+
134
+ def restart
135
+ puts "restarting"
136
+ config = ::Config::CONFIG
137
+ ruby = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
138
+ command_line = [ruby, $0, ARGV].flatten.join(' ')
139
+ exec(command_line)
140
+ end
141
+
142
+ def abort
143
+ if running?
144
+ Process.kill(Signal.list['TERM'], @child_pid)
145
+ true
146
+ end
147
+ end
148
+
149
+ def sig_int_received
150
+ if running?
151
+ abort
152
+ puts "Running specs stopped. Press CTRL-C again to stop the server."
153
+ else
154
+ exit!(0)
155
+ end
156
+ end
157
+ end
158
+
159
+ Dir[File.dirname(__FILE__) + "/server/*.rb"].each { |file| require file }
data/lib/spork.rb CHANGED
@@ -2,67 +2,39 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.i
2
2
  module Spork
3
3
  SPEC_HELPER_FILE = File.join(Dir.pwd, "spec/spec_helper.rb")
4
4
 
5
- def self.prefork(&block)
6
- return if @already_preforked
7
- @already_preforked = true
8
- yield
9
- end
10
-
11
- def self.each_run(&block)
12
- return if @state == :preforking || (@state != :not_using_spork && @already_run)
13
- @already_run = true
14
- yield
15
- end
16
-
17
- def self.preforking!
18
- @state = :preforking
19
- end
5
+ class << self
6
+ def prefork(&block)
7
+ return if @already_preforked
8
+ @already_preforked = true
9
+ yield
10
+ end
20
11
 
21
- def self.running!
22
- @state = :running
23
- end
12
+ def each_run(&block)
13
+ return if @state == :preforking || (@state != :not_using_spork && @already_run)
14
+ @already_run = true
15
+ yield
16
+ end
24
17
 
25
- def self.state
26
- @state ||= :not_using_spork
27
- end
18
+ def preforking!
19
+ @state = :preforking
20
+ end
28
21
 
29
- def self.using_rails?
30
- File.exist?("config/environment.rb")
31
- end
22
+ def running!
23
+ @state = :running
24
+ end
32
25
 
33
- def self.using_prefork?
34
- File.read(SPEC_HELPER_FILE).include?("Spork.prefork")
35
- end
26
+ def state
27
+ @state ||= :not_using_spork
28
+ end
36
29
 
37
- def self.bootstrap
38
- puts "Bootstrapping #{SPEC_HELPER_FILE}"
39
- contents = File.read(SPEC_HELPER_FILE)
40
- bootstrap_code = File.read(File.dirname(__FILE__) + "/../assets/bootstrap.rb")
41
- File.open(SPEC_HELPER_FILE, "wb") do |f|
42
- f.puts bootstrap_code
43
- f.puts contents
30
+ def exec_prefork(helper_file)
31
+ preforking!
32
+ load(helper_file)
44
33
  end
45
-
46
- puts "Done. Edit #{SPEC_HELPER_FILE} now with your favorite text editor and follow the instructions."
47
- true
48
- end
49
34
 
50
- def self.preload
51
- if using_prefork?
52
- puts "Loading Spork.prefork block..."
53
- Spork.preforking!
54
- load SPEC_HELPER_FILE
55
- else
56
- puts "spec_helper.rb is has not been sporked. Run spork --bootstrap to do so."
57
- # are we in a rails app?
58
- if using_rails?
59
- puts "Preloading Rails environment"
60
- require "config/environment.rb"
61
- else
62
- puts "There's nothing I can really do for you. Bailing."
63
- return false
64
- end
35
+ def exec_each_run(helper_file)
36
+ running!
37
+ load(helper_file)
65
38
  end
66
- true
67
39
  end
68
40
  end
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,49 @@
1
+ require 'rubygems'
2
+ require 'spork'
3
+
4
+ Spork.prefork do
5
+ # Loading more in this block will cause your specs 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'
1
31
  require 'spec'
2
32
 
3
33
  $LOAD_PATH.unshift(File.dirname(__FILE__))
4
34
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
35
+ SPEC_TMP_DIR = File.dirname(__FILE__) + "/tmp"
5
36
  require 'spork'
37
+ require 'spork/runner.rb'
38
+ require 'spork/server.rb'
39
+ require 'stringio'
6
40
 
7
41
  Spec::Runner.configure do |config|
42
+ config.before(:each) do
43
+ $test_stdout = StringIO.new
44
+ end
8
45
 
46
+ config.after(:each) do
47
+ FileUtils.rm_rf(SPEC_TMP_DIR)
48
+ end
9
49
  end
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Spork::Runner do
4
+ before(:each) do
5
+ @out, @err = StringIO.new, StringIO.new
6
+ end
7
+
8
+ it "finds a matching server with a prefix" do
9
+ Spork::Runner.new(["rs"], @out, @err).find_server.should == Spork::Server::RSpec
10
+ end
11
+
12
+ it "shows an error message if no matching server was found" do
13
+ Spork::Runner.new(["argle_bargle"], @out, @err).run.should == false
14
+ @out.string.should include(%("argle_bargle" didn't match a supported test framework))
15
+ end
16
+
17
+ it "defaults to use rspec over cucumber" do
18
+ Spork::Server::RSpec.stub!(:available?).and_return(true)
19
+ Spork::Server::Cucumber.stub!(:available?).and_return(true)
20
+ Spork::Runner.new([], @out, @err).find_server.should == Spork::Server::RSpec
21
+ end
22
+
23
+ it "defaults to use cucumber when rspec not available" do
24
+ Spork::Server::RSpec.stub!(:available?).and_return(false)
25
+ Spork::Server::Cucumber.stub!(:available?).and_return(true)
26
+ Spork::Runner.new([], @out, @err).find_server.should == Spork::Server::Cucumber
27
+ end
28
+
29
+ it "bootstraps a server when -b is passed in" do
30
+ Spork::Server::RSpec.stub!(:available?).and_return(true)
31
+ Spork::Server::RSpec.should_receive(:bootstrap).and_return(true)
32
+ Spork::Runner.new(['rspec', '-b'], @out, @err).run
33
+ end
34
+
35
+ it "aborts if it can't preload" do
36
+ Spork::Server::RSpec.stub!(:available?).and_return(true)
37
+ Spork::Server::RSpec.should_receive(:preload).and_return(false)
38
+ Spork::Server::RSpec.should_not_receive(:run)
39
+ Spork::Runner.new(['rspec'], @out, @err).run
40
+ end
41
+
42
+ it "runs the server if all is well" do
43
+ Spork::Server::RSpec.stub!(:available?).and_return(true)
44
+ Spork::Server::RSpec.should_receive(:preload).and_return(true)
45
+ Spork::Server::RSpec.should_receive(:run).and_return(true)
46
+ Spork::Runner.new(['rspec'], @out, @err).run
47
+ @out.string.should include("Using RSpec")
48
+ end
49
+
50
+ it "outputs a list of supported servers, along with supported asterisk" do
51
+ Spork::Server.stub!(:supported_servers).and_return([Spork::Server::RSpec, Spork::Server::Cucumber])
52
+ Spork::Server::RSpec.stub!(:available?).and_return(true)
53
+ Spork::Server::Cucumber.stub!(:available?).and_return(false)
54
+
55
+ Spork::Runner.new(['rspec'], @out, @err).supported_servers_text.should == <<-EOF
56
+ Supported test frameworks:
57
+ ( ) Cucumber
58
+ (*) RSpec
59
+
60
+ Legend: ( ) - not detected in project (*) - detected
61
+ EOF
62
+ end
63
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Spork::Server::RSpec do
4
+ before(:each) do
5
+ @adapter = Spork::Adapter::RSpec.new
6
+ end
7
+
8
+ it "uses the RSPEC_PORT for it's port" do
9
+ @adapter.port.should == Spork::Adapter::RSpec::RSPEC_PORT
10
+ end
11
+ end
@@ -0,0 +1,126 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ class FakeServer < Spork::Server
4
+ attr_accessor :wait_time
5
+ def self.helper_file
6
+ SPEC_TMP_DIR + "/fake/test_helper.rb"
7
+ end
8
+
9
+ def self.port
10
+ 1000
11
+ end
12
+
13
+ def self.puts(string)
14
+ $test_stdout.puts(string)
15
+ end
16
+
17
+ def puts(string)
18
+ $test_stdout.puts(string)
19
+ end
20
+
21
+ def run_tests(argv, input, output)
22
+ sleep(@wait_time || 0.5)
23
+ end
24
+ end
25
+
26
+ describe Spork::Server do
27
+ describe ".available_servers" do
28
+ before(:each) do
29
+ Spork::Server.supported_servers.each { |s| s.stub!(:available?).and_return(false) }
30
+ end
31
+
32
+ it "returns a list of all available servers" do
33
+ Spork::Server.available_servers.should == []
34
+ Spork::Server::RSpec.stub!(:available?).and_return(true)
35
+ Spork::Server.available_servers.should == [Spork::Server::RSpec]
36
+ end
37
+
38
+ it "returns rspec before cucumber when both are available" do
39
+ Spork::Server::RSpec.stub!(:available?).and_return(true)
40
+ Spork::Server::Cucumber.stub!(:available?).and_return(true)
41
+ Spork::Server.available_servers.should == [Spork::Server::RSpec, Spork::Server::Cucumber]
42
+ end
43
+ end
44
+
45
+ describe ".supported_servers" do
46
+ it "returns all defined servers" do
47
+ Spork::Server.supported_servers.should include(Spork::Server::RSpec)
48
+ Spork::Server.supported_servers.should include(Spork::Server::Cucumber)
49
+ end
50
+
51
+ it "returns a list of servers matching a case-insensitive prefix" do
52
+ Spork::Server.supported_servers("rspec").should == [Spork::Server::RSpec]
53
+ Spork::Server.supported_servers("rs").should == [Spork::Server::RSpec]
54
+ Spork::Server.supported_servers("cuc").should == [Spork::Server::Cucumber]
55
+ end
56
+ end
57
+
58
+ describe "a fake server" do
59
+ def create_helper_file
60
+ FileUtils.mkdir_p(File.dirname(FakeServer.helper_file))
61
+ FileUtils.touch(FakeServer.helper_file)
62
+ end
63
+
64
+ before(:each) do
65
+ @fake = FakeServer.new
66
+ end
67
+
68
+ it "should be available when the helper_file exists" do
69
+ FakeServer.available?.should == false
70
+ create_helper_file
71
+ FakeServer.available?.should == true
72
+ end
73
+
74
+ it "has a name" do
75
+ FakeServer.server_name.should == "FakeServer"
76
+ end
77
+
78
+ it "tells if it's testing framework is being used" do
79
+ Spork::Server.available_servers.should_not include(FakeServer)
80
+ create_helper_file
81
+ Spork::Server.available_servers.should include(FakeServer)
82
+ end
83
+
84
+ it "recognizes if the helper_file has been bootstrapped" do
85
+ bootstrap_contents = File.read(FakeServer::BOOTSTRAP_FILE)
86
+ File.stub!(:read).with(FakeServer.helper_file).and_return("")
87
+ FakeServer.bootstrapped?.should == false
88
+ File.stub!(:read).with(FakeServer.helper_file).and_return(bootstrap_contents)
89
+ FakeServer.bootstrapped?.should == true
90
+ end
91
+
92
+ it "bootstraps a file" do
93
+ create_helper_file
94
+ FakeServer.bootstrap
95
+
96
+ $test_stdout.string.should include("Bootstrapping")
97
+ $test_stdout.string.should include("Edit")
98
+ $test_stdout.string.should include("favorite text editor")
99
+
100
+ File.read(FakeServer.helper_file).should include(File.read(FakeServer::BOOTSTRAP_FILE))
101
+ end
102
+
103
+ it "prevents you from running specs twice in parallel" do
104
+ create_helper_file
105
+ @fake.wait_time = 0.25
106
+ first_run = Thread.new { @fake.run("test", STDOUT, STDIN).should == true }
107
+ sleep(0.05)
108
+ @fake.run("test", STDOUT, STDIN).should == false
109
+
110
+ # wait for the first to finish
111
+ first_run.join
112
+ end
113
+
114
+ it "can abort the current run" do
115
+ create_helper_file
116
+ @fake.wait_time = 5
117
+ started_at = Time.now
118
+ first_run = Thread.new { @fake.run("test", STDOUT, STDIN).should == true }
119
+ sleep(0.05)
120
+ @fake.send(:abort)
121
+ sleep(0.01) while @fake.running?
122
+
123
+ (Time.now - started_at).should < @fake.wait_time
124
+ end
125
+ end
126
+ end
data/spec/spork_spec.rb CHANGED
@@ -1,7 +1,44 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
+ Spork.class_eval do
4
+ def self.reset!
5
+ @state = nil
6
+ @already_run = nil
7
+ @already_preforked = nil
8
+ end
9
+ end
10
+
3
11
  describe Spork do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
12
+ before(:each) do
13
+ Spork.reset!
14
+ end
15
+
16
+ def spec_helper_simulator
17
+ ran = []
18
+ Spork.prefork do
19
+ ran << :prefork
20
+ end
21
+
22
+ Spork.each_run do
23
+ ran << :each_run
24
+ end
25
+ ran
26
+ end
27
+
28
+ it "only runs the preload block when preforking" do
29
+ ran = []
30
+ Spork.preforking!
31
+ spec_helper_simulator.should == [:prefork]
32
+ end
33
+
34
+ it "only runs the each_run block when running" do
35
+ Spork.preforking!
36
+ spec_helper_simulator
37
+ Spork.running!
38
+ spec_helper_simulator.should == [:each_run]
39
+ end
40
+
41
+ it "runs both blocks when Spork not activated" do
42
+ spec_helper_simulator.should == [:prefork, :each_run]
6
43
  end
7
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timcharper-spork
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
  - Tim Harper
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-25 00:00:00 -07:00
12
+ date: 2009-05-29 00:00:00 -07:00
13
13
  default_executable: spork
14
14
  dependencies: []
15
15
 
@@ -23,13 +23,19 @@ extensions: []
23
23
  extra_rdoc_files:
24
24
  - README.rdoc
25
25
  files:
26
- - History.txt
27
26
  - README.rdoc
28
27
  - assets/bootstrap.rb
29
28
  - lib/spork.rb
30
29
  - lib/spork/runner.rb
31
- - lib/spork/spec_server.rb
32
- has_rdoc: false
30
+ - lib/spork/server.rb
31
+ - lib/spork/server/cucumber.rb
32
+ - lib/spork/server/rspec.rb
33
+ - spec/spec_helper.rb
34
+ - spec/spork/runner_spec.rb
35
+ - spec/spork/server/rspec_spec.rb
36
+ - spec/spork/server_spec.rb
37
+ - spec/spork_spec.rb
38
+ has_rdoc: true
33
39
  homepage: http://github.com/timcharper/spork
34
40
  post_install_message:
35
41
  rdoc_options:
@@ -54,8 +60,11 @@ requirements: []
54
60
  rubyforge_project: spork
55
61
  rubygems_version: 1.2.0
56
62
  signing_key:
57
- specification_version: 3
58
- summary: spork 0.3
63
+ specification_version: 2
64
+ summary: spork
59
65
  test_files:
60
66
  - spec/spec_helper.rb
67
+ - spec/spork/runner_spec.rb
68
+ - spec/spork/server/rspec_spec.rb
69
+ - spec/spork/server_spec.rb
61
70
  - spec/spork_spec.rb
data/History.txt DELETED
@@ -1,10 +0,0 @@
1
- == 0.3.x (Git)
2
- === New Features
3
-
4
- === Bugfixes
5
-
6
- == 0.3.1 2009-05-25
7
- * Extracted bin logic into Runner file, improved requiring and load path setup, and cleaned up file organization. (Ben Mabey)
8
-
9
- == 0.3.0 2009-05
10
- * Initial release with SpecServer, Bootstraper, and basic option parsing. (Tim Harper)
@@ -1,58 +0,0 @@
1
- require 'drb/drb'
2
- require 'rbconfig'
3
-
4
- # This is based off of spec_server.rb from rspec-rails (David Chelimsky), which was based on Florian Weber's TDDMate
5
- class Spork::SpecServer
6
- DRB_PORT = 8989
7
- def self.restart_test_server
8
- puts "restarting"
9
- config = ::Config::CONFIG
10
- ruby = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
11
- command_line = [ruby, $0, ARGV].flatten.join(' ')
12
- exec(command_line)
13
- end
14
-
15
- def self.daemonize(pid_file = nil)
16
- return yield if $DEBUG
17
- pid = Process.fork{
18
- Process.setsid
19
- trap("SIGINT"){ exit! 0 }
20
- trap("SIGTERM"){ exit! 0 }
21
- trap("SIGHUP"){ restart_test_server }
22
- File.open("/dev/null"){|f|
23
- STDERR.reopen f
24
- STDIN.reopen f
25
- STDOUT.reopen f
26
- }
27
- run
28
- }
29
- puts "spec_server launched (PID: %d)" % pid
30
- File.open(pid_file,"w"){|f| f.puts pid } if pid_file
31
- exit! 0
32
- end
33
-
34
- def self.run
35
- trap("USR2") { ::Spork::SpecServer.restart_test_server } if Signal.list.has_key?("USR2")
36
- DRb.start_service("druby://127.0.0.1:#{DRB_PORT}", ::Spork::SpecServer.new)
37
- puts "Spork is ready and listening on #{DRB_PORT}!"
38
- DRb.thread.join
39
- end
40
-
41
- def run(argv, stderr, stdout)
42
- $stdout = stdout
43
- $stderr = stderr
44
- child_pid = Kernel.fork do
45
- Spork.running!
46
- load ::Spork::SPEC_HELPER_FILE
47
-
48
- ::Spec::Runner::CommandLine.run(
49
- ::Spec::Runner::OptionParser.parse(
50
- argv,
51
- $stderr,
52
- $stdout
53
- )
54
- )
55
- end
56
- Process.wait(child_pid)
57
- end
58
- end