timcharper-spork 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.
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