spork 0.9.0.rc2 → 0.9.0.rc3
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/README.rdoc +1 -9
- data/assets/bootstrap.rb +29 -11
- data/features/gemfiles/rails3.0/Gemfile.lock +1 -1
- data/lib/spork.rb +5 -1
- data/lib/spork/run_strategy.rb +1 -1
- data/lib/spork/run_strategy/magazine.rb +25 -5
- data/lib/spork/server.rb +2 -0
- data/lib/spork/test_framework.rb +4 -4
- data/spec/spec_helper.rb +4 -0
- data/spec/spork/forker_spec.rb +1 -1
- data/spec/spork/run_strategy/forking_spec.rb +1 -1
- metadata +7 -9
- data/lib/spork/app_framework/rails_stub_files/application.rb +0 -1
- data/lib/spork/app_framework/rails_stub_files/application_controller.rb +0 -22
- data/lib/spork/app_framework/rails_stub_files/application_helper.rb +0 -3
data/README.rdoc
CHANGED
|
@@ -8,18 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
== SYNOPSIS:
|
|
10
10
|
|
|
11
|
-
Spork is Tim Harper's implementation of test server (similar to the script/spec_server provided by rspec-rails), except rather than using the Rails constant unloading to reload your files, it forks a copy of the server each time you run your tests. The result? Spork runs more solid: it doesn't get corrupted over time, and it properly handles modules and any
|
|
11
|
+
Spork is Tim Harper's implementation of test server (similar to the script/spec_server that used to be provided by rspec-rails), except rather than using the Rails constant unloading to reload your files, it forks a copy of the server each time you run your tests. The result? Spork runs more solid: it doesn't get corrupted over time, and it properly handles modules and any voodoo meta programming you may have put in your app.
|
|
12
12
|
|
|
13
13
|
Spork runs on POSIX systems using fork. It also runs on windows by pre-populating a pool of ready processes (referred to here as the "magazine" strategy).
|
|
14
14
|
|
|
15
|
-
== RAILS 3
|
|
16
|
-
|
|
17
|
-
Rails 3.0 support is in progress, but is not ready. The master branch is stable and works with rails 2.3.x.
|
|
18
|
-
|
|
19
|
-
Rspec 2.x support is not ready either.
|
|
20
|
-
|
|
21
|
-
If you want to help, see the rails3 branch.
|
|
22
|
-
|
|
23
15
|
== Supported Testing Frameworks
|
|
24
16
|
|
|
25
17
|
* Rspec
|
data/assets/bootstrap.rb
CHANGED
|
@@ -2,27 +2,45 @@ require 'rubygems'
|
|
|
2
2
|
require 'spork'
|
|
3
3
|
|
|
4
4
|
Spork.prefork do
|
|
5
|
-
# Loading more in this block will cause your tests to run faster. However,
|
|
5
|
+
# Loading more in this block will cause your tests to run faster. However,
|
|
6
6
|
# if you change any configuration or code from libraries loaded here, you'll
|
|
7
7
|
# need to restart spork for it take effect.
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
Spork.each_run do
|
|
12
12
|
# This code will be run each time you run your specs.
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# --- Instructions ---
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
17
|
+
# Sort the contents of this file into a Spork.prefork and a Spork.each_run
|
|
18
|
+
# block.
|
|
19
|
+
#
|
|
20
|
+
# The Spork.prefork block is run only once when the spork server is started.
|
|
21
|
+
# You typically want to place most of your (slow) initializer code in here, in
|
|
22
|
+
# particular, require'ing any 3rd-party gems that you don't normally modify
|
|
23
|
+
# during development.
|
|
24
|
+
#
|
|
25
|
+
# The Spork.each_run block is run each time you run your specs. In case you
|
|
26
|
+
# need to load files that tend to change during development, require them here.
|
|
27
|
+
# With Rails, your application modules are loaded automatically, so sometimes
|
|
28
|
+
# this block can remain empty.
|
|
29
|
+
#
|
|
30
|
+
# Note: You can modify files loaded *from* the Spork.each_run block without
|
|
31
|
+
# restarting the spork server. However, this file itself will not be reloaded,
|
|
32
|
+
# so if you change any of the code inside the each_run block, you still need to
|
|
33
|
+
# restart the server. In general, if you have non-trivial code in this file,
|
|
34
|
+
# it's advisable to move it into a separate file so you can easily edit it
|
|
35
|
+
# without restarting spork. (For example, with RSpec, you could move
|
|
36
|
+
# non-trivial code into a file spec/support/my_helper.rb, making sure that the
|
|
37
|
+
# spec/support/* files are require'd from inside the each_run block.)
|
|
38
|
+
#
|
|
39
|
+
# Any code that is left outside the two blocks will be run during preforking
|
|
40
|
+
# *and* during each_run -- that's probably not what you want.
|
|
25
41
|
#
|
|
42
|
+
# These instructions should self-destruct in 10 seconds. If they don't, feel
|
|
43
|
+
# free to delete them.
|
|
26
44
|
|
|
27
45
|
|
|
28
46
|
|
data/lib/spork.rb
CHANGED
|
@@ -131,7 +131,11 @@ module Spork
|
|
|
131
131
|
def expanded_caller(caller_line)
|
|
132
132
|
file, line = caller_line.split(/:(\d+)/)
|
|
133
133
|
line.gsub(/:.+/, '')
|
|
134
|
-
File.expand_path(file, Dir.pwd) + ":" + line
|
|
134
|
+
expanded = File.expand_path(file, Dir.pwd) + ":" + line
|
|
135
|
+
if ENV['OS'] == 'Windows_NT' # windows
|
|
136
|
+
expanded = expanded[2..-1]
|
|
137
|
+
end
|
|
138
|
+
expanded
|
|
135
139
|
end
|
|
136
140
|
|
|
137
141
|
def already_ran?(caller_script_and_line)
|
data/lib/spork/run_strategy.rb
CHANGED
|
@@ -28,7 +28,7 @@ class Spork::RunStrategy
|
|
|
28
28
|
|
|
29
29
|
protected
|
|
30
30
|
def self.factory(test_framework)
|
|
31
|
-
if RUBY_PLATFORM =~ /mswin|mingw/
|
|
31
|
+
if RUBY_PLATFORM =~ /mswin|mingw|java/
|
|
32
32
|
Spork::RunStrategy::Magazine.new(test_framework)
|
|
33
33
|
else
|
|
34
34
|
Spork::RunStrategy::Forking.new(test_framework)
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
require 'drb'
|
|
5
5
|
require 'rinda/ring'
|
|
6
6
|
require 'win32/process' if RUBY_PLATFORM =~ /mswin|mingw/ and RUBY_VERSION < '1.9.1'
|
|
7
|
+
require 'rubygems' # used for Gem.ruby
|
|
7
8
|
|
|
8
9
|
$:.unshift(File.dirname(__FILE__))
|
|
9
10
|
require 'magazine/magazine_slave'
|
|
10
11
|
|
|
11
|
-
|
|
12
12
|
class Spork::RunStrategy::Magazine < Spork::RunStrategy
|
|
13
13
|
|
|
14
14
|
Slave_Id_Range = 1..2 # Ringserver uses id: 0. Slave use: 1..MAX_SLAVES
|
|
@@ -33,8 +33,8 @@ class Spork::RunStrategy::Magazine < Spork::RunStrategy
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def start_Rinda_ringserver
|
|
36
|
-
app_name =
|
|
37
|
-
spawn_process(app_name)
|
|
36
|
+
app_name = "#{Gem.ruby} ring_server.rb"
|
|
37
|
+
spawn_process(app_name)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def fill_slave_pool
|
|
@@ -49,11 +49,21 @@ class Spork::RunStrategy::Magazine < Spork::RunStrategy
|
|
|
49
49
|
|
|
50
50
|
def start_slave(id)
|
|
51
51
|
app_pwd = Dir.pwd # path running app in
|
|
52
|
-
app = "ruby magazine_slave_provider.rb #{id} '#{app_pwd}' #{@test_framework.short_name}"
|
|
52
|
+
app = "#{Gem.ruby} magazine_slave_provider.rb #{id} '#{app_pwd}' #{@test_framework.short_name}"
|
|
53
53
|
@pids[id] = spawn_process(app)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def spawn_process(app)
|
|
57
|
+
|
|
58
|
+
if RUBY_PLATFORM =~ /java/
|
|
59
|
+
# jruby 1.8 has no easy way to just spawn, so use a thread
|
|
60
|
+
Dir.chdir(@path) do
|
|
61
|
+
io = IO.popen app
|
|
62
|
+
Thread.new { puts io.read }
|
|
63
|
+
return io.pid
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
57
67
|
if RUBY_VERSION < '1.9.1'
|
|
58
68
|
Process.create( :app_name => app, :cwd => @path ).process_id
|
|
59
69
|
else
|
|
@@ -92,9 +102,19 @@ class Spork::RunStrategy::Magazine < Spork::RunStrategy
|
|
|
92
102
|
start_slave(id)
|
|
93
103
|
end
|
|
94
104
|
|
|
105
|
+
def windows?
|
|
106
|
+
ENV['OS'] == 'Windows_NT'
|
|
107
|
+
end
|
|
108
|
+
|
|
95
109
|
def kill_all_processes
|
|
96
110
|
|
|
97
|
-
@pids.each {|pid|
|
|
111
|
+
@pids.each {|pid|
|
|
112
|
+
if windows?
|
|
113
|
+
system("taskkill /f /pid #{pid}")
|
|
114
|
+
else
|
|
115
|
+
Process.kill(9, pid)
|
|
116
|
+
end
|
|
117
|
+
}
|
|
98
118
|
puts "\nKilling processes."; $stdout.flush
|
|
99
119
|
end
|
|
100
120
|
|
data/lib/spork/server.rb
CHANGED
|
@@ -44,7 +44,9 @@ class Spork::Server
|
|
|
44
44
|
#
|
|
45
45
|
# When implementing a test server, don't override this method: override run_tests instead.
|
|
46
46
|
def run(argv, stderr, stdout)
|
|
47
|
+
puts "Running tests with args #{argv.inspect}..."
|
|
47
48
|
run_strategy.run(argv, stderr, stdout)
|
|
49
|
+
puts "Done.\n\n"
|
|
48
50
|
end
|
|
49
51
|
|
|
50
52
|
def abort
|
data/lib/spork/test_framework.rb
CHANGED
|
@@ -9,7 +9,7 @@ class Spork::TestFramework
|
|
|
9
9
|
|
|
10
10
|
class NoFrameworksAvailable < FactoryException
|
|
11
11
|
def message
|
|
12
|
-
"I can't find any testing frameworks to use. Are you running me from a project directory?"
|
|
12
|
+
"I can\'t find any testing frameworks to use. Are you running me from a project directory?"
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -19,7 +19,7 @@ class Spork::TestFramework
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def message
|
|
22
|
-
"I can't find the file #{@framework.helper_file} for the #{@framework.short_name} testing framework.\nAre you running me from the project directory?"
|
|
22
|
+
"I can\'t find the file #{@framework.helper_file} for the #{@framework.short_name} testing framework.\nAre you running me from the project directory?"
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@ class Spork::TestFramework
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def message
|
|
32
|
-
"Couldn't find a supported test framework that begins with '#{@beginning_with}'"
|
|
32
|
+
"Couldn\'t find a supported test framework that begins with '#{@beginning_with}'"
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -123,7 +123,7 @@ class Spork::TestFramework
|
|
|
123
123
|
stderr.flush
|
|
124
124
|
|
|
125
125
|
if framework.bootstrap_required?
|
|
126
|
-
stderr.puts "I can't do anything for you by default for the framework
|
|
126
|
+
stderr.puts "I can't do anything for you by default for the framework you're using: #{framework.short_name}.\nYou must bootstrap #{helper_file} to continue."
|
|
127
127
|
stderr.flush
|
|
128
128
|
return false
|
|
129
129
|
else
|
data/spec/spec_helper.rb
CHANGED
data/spec/spork/forker_spec.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spork
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
5
|
-
prerelease:
|
|
4
|
+
hash: 15424131
|
|
5
|
+
prerelease: 6
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 9
|
|
9
9
|
- 0
|
|
10
|
-
-
|
|
11
|
-
|
|
10
|
+
- rc
|
|
11
|
+
- 3
|
|
12
|
+
version: 0.9.0.rc3
|
|
12
13
|
platform: ruby
|
|
13
14
|
authors:
|
|
14
15
|
- Tim Harper
|
|
@@ -17,7 +18,7 @@ autorequire:
|
|
|
17
18
|
bindir: bin
|
|
18
19
|
cert_chain: []
|
|
19
20
|
|
|
20
|
-
date:
|
|
21
|
+
date: 2011-02-06 00:00:00 -07:00
|
|
21
22
|
default_executable: spork
|
|
22
23
|
dependencies: []
|
|
23
24
|
|
|
@@ -37,9 +38,6 @@ files:
|
|
|
37
38
|
- MIT-LICENSE
|
|
38
39
|
- lib/spork/app_framework/padrino.rb
|
|
39
40
|
- lib/spork/app_framework/rails.rb
|
|
40
|
-
- lib/spork/app_framework/rails_stub_files/application.rb
|
|
41
|
-
- lib/spork/app_framework/rails_stub_files/application_controller.rb
|
|
42
|
-
- lib/spork/app_framework/rails_stub_files/application_helper.rb
|
|
43
41
|
- lib/spork/app_framework/unknown.rb
|
|
44
42
|
- lib/spork/app_framework.rb
|
|
45
43
|
- lib/spork/custom_io_streams.rb
|
|
@@ -124,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
124
122
|
requirements: []
|
|
125
123
|
|
|
126
124
|
rubyforge_project: spork
|
|
127
|
-
rubygems_version: 1.
|
|
125
|
+
rubygems_version: 1.5.0
|
|
128
126
|
signing_key:
|
|
129
127
|
specification_version: 3
|
|
130
128
|
summary: spork
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
load(File.dirname(__FILE__) + "/application_controller.rb")
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# This is a stub used to help Spork delay the loading of the real ApplicationController
|
|
2
|
-
class ::ApplicationController < ActionController::Base
|
|
3
|
-
@@preloading = true
|
|
4
|
-
class << self
|
|
5
|
-
def inherited(klass)
|
|
6
|
-
(@_descendants ||= []) << klass if @@preloading
|
|
7
|
-
super
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def reapply_inheritance!
|
|
11
|
-
@@preloading = false
|
|
12
|
-
Array(@_descendants).each do |descendant|
|
|
13
|
-
descendant.master_helper_module.send(:include, master_helper_module)
|
|
14
|
-
descendant.send(:default_helper_module!)
|
|
15
|
-
|
|
16
|
-
descendant.respond_to?(:reapply_inheritance!) && descendant.reapply_inheritance!
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
Spork.each_run { ApplicationController.reapply_inheritance! }
|