spork 0.5.10 → 0.5.11

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.
@@ -68,6 +68,7 @@ Feature: Rails Integration
68
68
 
69
69
 
70
70
  Scenario: Running spork with a rails app and a non-standard port
71
+ Given this scenario is pending until rspec releases a version that supports --port
71
72
  Given a file named "spec/did_it_work_spec.rb" with:
72
73
  """
73
74
  describe "Did it work?" do
File without changes
@@ -54,7 +54,7 @@ class Spork::AppFramework
54
54
 
55
55
  # Abstract: The path to the file that loads the project environment, ie config/environment.rb. Returns nil if there is none.
56
56
  def entry_point
57
- raise NotImplemented
57
+ raise NotImplementedError
58
58
  end
59
59
 
60
60
  def preload(&block)
@@ -1,10 +1,11 @@
1
1
  require 'optparse'
2
2
  require 'spork/server'
3
+ require 'spork/test_framework'
3
4
 
4
5
  module Spork
5
6
  # This is used by bin/spork. It's wrapped in a class because it's easier to test that way.
6
7
  class Runner
7
- attr_reader :server
8
+ attr_reader :test_framework
8
9
 
9
10
  def self.run(args, output, error)
10
11
  self.new(args, output, error).run
@@ -30,74 +31,48 @@ module Spork
30
31
  if @options[:help]
31
32
  @output.puts opt
32
33
  @output.puts
33
- @output.puts supported_servers_text
34
+ @output.puts supported_test_frameworks_text
34
35
  exit(0)
35
36
  end
36
37
  end
37
38
 
38
- def supported_servers_text
39
+ def supported_test_frameworks_text
39
40
  text = StringIO.new
40
41
 
41
42
  text.puts "Supported test frameworks:"
42
- text.puts Spork::Server.supported_servers.sort { |a,b| a.server_name <=> b.server_name }.map { |s| (s.available? ? '(*) ' : '( ) ') + s.server_name }
43
+ text.puts Spork::TestFramework.supported_test_frameworks.sort { |a,b| a.short_name <=> b.short_name }.map { |s| (s.available? ? '(*) ' : '( ) ') + s.short_name }
43
44
  text.puts "\nLegend: ( ) - not detected in project (*) - detected\n"
44
45
  text.string
45
46
  end
46
47
 
47
48
  # Returns a server for the specified (or the detected default) testing framework. Returns nil if none detected, or if the specified is not supported or available.
48
- def find_server
49
- if options[:server_matcher]
50
- @server = Spork::Server.supported_servers(options[:server_matcher]).first
51
- unless @server
52
- @error.puts <<-ERROR
53
- #{options[:server_matcher].inspect} didn't match a supported test framework.
54
-
55
- #{supported_servers_text}
56
- ERROR
57
- return
58
- end
59
-
60
- unless @server.available?
61
- @error.puts <<-USEFUL_ERROR
62
- I can't find the helper file #{@server.helper_file} for the #{@server.server_name} testing framework.
63
- Are you running me from the project directory?
64
- USEFUL_ERROR
65
- return
66
- end
67
- else
68
- @server = Spork::Server.available_servers.first
69
- if @server.nil?
70
- @error.puts <<-USEFUL_ERROR
71
- I can't find any testing frameworks to use.
72
- Are you running me from a project directory?
73
- USEFUL_ERROR
74
- return
75
- end
76
- end
77
- @server
49
+ def find_test_framework
50
+ Spork::TestFramework.factory(@output, @error, options[:server_matcher])
51
+ rescue Spork::TestFramework::NoFrameworksAvailable => e
52
+ @error.puts e.message
53
+ rescue Spork::TestFramework::FactoryException => e
54
+ @error.puts "#{e.message}\n\n#{supported_test_frameworks_text}"
78
55
  end
79
56
 
80
57
  def run
81
- return false unless find_server
58
+ return false unless test_framework = find_test_framework
82
59
  ENV["DRB"] = 'true'
83
- @error.puts "Using #{server.server_name}"
60
+ @error.puts "Using #{test_framework.short_name}"
84
61
  @error.flush
85
62
 
86
- server.port = options[:port]
87
-
88
63
  case
89
64
  when options[:bootstrap]
90
- server.bootstrap
65
+ test_framework.bootstrap
91
66
  when options[:diagnose]
92
67
  require 'spork/diagnoser'
93
68
 
94
- Spork::Diagnoser.install_hook!(server.entry_point)
95
- server.preload
69
+ Spork::Diagnoser.install_hook!(test_framework.entry_point)
70
+ test_framework.preload
96
71
  Spork::Diagnoser.output_results(@output)
97
72
  return true
98
73
  else
99
- return(false) unless server.preload
100
- server.run
74
+ return(false) unless test_framework.preload
75
+ Spork::Server.run(:port => @options[:port], :test_framework => test_framework)
101
76
  return true
102
77
  end
103
78
  end
@@ -8,78 +8,16 @@ 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
- @@supported_servers = []
12
-
13
- LOAD_PREFERENCE = ['RSpec', 'Cucumber']
14
- BOOTSTRAP_FILE = File.dirname(__FILE__) + "/../../assets/bootstrap.rb"
15
-
11
+ attr_reader :test_framework
16
12
  include Spork::CustomIOStreams
17
13
 
18
- # Abstract method: returns the servers port. Override this to return the port that should be used by the test framework.
19
- def self.port
20
- raise NotImplemented
21
- end
22
-
23
- # Abstract method: returns the entry file that loads the testing environment, such as spec/spec_helper.rb.
24
- def self.helper_file
25
- raise NotImplemented
26
- end
27
-
28
- # Convenience method that turns the class name without the namespace
29
- def self.server_name
30
- self.name.gsub('Spork::Server::', '')
31
- end
32
-
33
- # Returns a list of all testing servers that have detected their testing framework being used in the project.
34
- def self.available_servers
35
- supported_servers.select { |s| s.available? }
36
- end
37
-
38
- # Returns a list of all servers that have been implemented (it keeps track of them automatically via Class.inherited)
39
- def self.supported_servers(starting_with = nil)
40
- @@supported_servers.sort! { |a,b| a.load_preference_index <=> b.load_preference_index }
41
- return @@supported_servers if starting_with.nil?
42
- @@supported_servers.select do |s|
43
- s.server_name.match(/^#{Regexp.escape(starting_with)}/i)
44
- end
45
- end
46
-
47
- # Returns true if the testing frameworks helper file exists. Override if this is not sufficient to detect your testing framework.
48
- def self.available?
49
- File.exist?(helper_file)
50
- end
51
-
52
- # Used to specify
53
- def self.load_preference_index
54
- LOAD_PREFERENCE.index(server_name) || LOAD_PREFERENCE.length
14
+ def initialize(options = {})
15
+ @test_framework = options[:test_framework]
16
+ @port = options[:port]
55
17
  end
56
18
 
57
- # Detects if the test helper has been bootstrapped.
58
- def self.bootstrapped?
59
- File.read(helper_file).include?("Spork.prefork")
60
- end
61
-
62
- # Bootstraps the current test helper file by prepending a Spork.prefork and Spork.each_run block at the beginning.
63
- def self.bootstrap
64
- if bootstrapped?
65
- stderr.puts "Already bootstrapped!"
66
- return
67
- end
68
- stderr.puts "Bootstrapping #{helper_file}."
69
- contents = File.read(helper_file)
70
- bootstrap_code = File.read(BOOTSTRAP_FILE)
71
- File.open(helper_file, "wb") do |f|
72
- f.puts bootstrap_code
73
- f.puts contents
74
- end
75
-
76
- stderr.puts "Done. Edit #{helper_file} now with your favorite text editor and follow the instructions."
77
- true
78
- end
79
-
80
- def self.run
81
- return unless available?
82
- new.listen
19
+ def self.run(options = {})
20
+ new(options).listen
83
21
  end
84
22
 
85
23
  # Sets up signals and starts the DRb service. If it's successful, it doesn't return. Not ever. You don't need to override this.
@@ -93,18 +31,12 @@ class Spork::Server
93
31
  DRb.thread.join
94
32
  end
95
33
 
34
+ attr_writer :port
35
+
96
36
  def port
97
- self.class.instance_variable_get("@port") || self.class.port
37
+ @port || test_framework.class.default_port
98
38
  end
99
39
 
100
- def self.port= p
101
- @port = p
102
- end
103
-
104
- def helper_file
105
- self.class.helper_file
106
- end
107
-
108
40
  # This is the public facing method that is served up by DRb. To use it from the client side (in a testing framework):
109
41
  #
110
42
  # DRb.start_service("druby://localhost:0") # this allows Ruby to do some magical stuff so you can pass an output stream over DRb.
@@ -118,8 +50,9 @@ class Spork::Server
118
50
 
119
51
  @child = ::Spork::Forker.new do
120
52
  $stdout, $stderr = stdout, stderr
121
- Spork.exec_each_run { load helper_file }
122
- run_tests(argv, stderr, stdout)
53
+ load test_framework.helper_file
54
+ Spork.exec_each_run
55
+ test_framework.run_tests(argv, stderr, stdout)
123
56
  end
124
57
  @child.result
125
58
  end
@@ -129,51 +62,7 @@ class Spork::Server
129
62
  @child && @child.running?
130
63
  end
131
64
 
132
- protected
133
- # Abstract method: here is where the server runs the tests.
134
- def run_tests(argv, input, output)
135
- raise NotImplemented
136
- end
137
-
138
65
  private
139
- def self.inherited(subclass)
140
- @@supported_servers << subclass
141
- end
142
-
143
- def self.framework
144
- @framework ||= Spork::AppFramework.detect_framework
145
- end
146
-
147
- def self.entry_point
148
- bootstrapped? ? helper_file : framework.entry_point
149
- end
150
-
151
- def self.preload
152
- Spork.exec_prefork do
153
- unless bootstrapped?
154
- stderr.puts "#{helper_file} has not been bootstrapped. Run spork --bootstrap to do so."
155
- stderr.flush
156
-
157
- if framework.bootstrap_required?
158
- stderr.puts "I can't do anything for you by default for the framework your using: #{framework.short_name}.\nYou must bootstrap #{helper_file} to continue."
159
- stderr.flush
160
- return false
161
- else
162
- load(framework.entry_point)
163
- end
164
- end
165
-
166
- framework.preload do
167
- if bootstrapped?
168
- stderr.puts "Loading Spork.prefork block..."
169
- stderr.flush
170
- load(helper_file)
171
- end
172
- end
173
- end
174
- true
175
- end
176
-
177
66
  def restart
178
67
  stderr.puts "restarting"
179
68
  stderr.flush
@@ -197,5 +86,3 @@ class Spork::Server
197
86
  end
198
87
  end
199
88
  end
200
-
201
- Dir[File.dirname(__FILE__) + "/server/*.rb"].each { |file| require file }
@@ -0,0 +1,163 @@
1
+ class Spork::TestFramework
2
+ LOAD_PREFERENCE = ['RSpec', 'Cucumber']
3
+ BOOTSTRAP_FILE = File.dirname(__FILE__) + "/../../assets/bootstrap.rb"
4
+
5
+ @@supported_test_frameworks = []
6
+ attr_reader :stdout, :stderr
7
+
8
+ class FactoryException < Exception; end
9
+
10
+ class NoFrameworksAvailable < FactoryException
11
+ def message
12
+ "I can't find any testing frameworks to use. Are you running me from a project directory?"
13
+ end
14
+ end
15
+
16
+ class FrameworkNotAvailable < FactoryException
17
+ def initialize(framework)
18
+ @framework = framework
19
+ end
20
+
21
+ def message
22
+ "I can't find the file #{e.test_framework.helper_file} for the #{e.test_framework.short_name} testing framework.\nAre you running me from the project directory?"
23
+ end
24
+ end
25
+
26
+ class NoFrameworkMatched < FactoryException
27
+ def initialize(beginning_with)
28
+ @beginning_with = beginning_with
29
+ end
30
+
31
+ def message
32
+ "Couldn't find a supported test framework that begins with '#{@beginning_with}'"
33
+ end
34
+ end
35
+
36
+ def initialize(stdout = STDOUT, stderr = STDERR)
37
+ @stdout, @stderr = stdout, stderr
38
+ end
39
+
40
+ def self.factory(output = STDOUT, error = STDERR, beginning_with = nil)
41
+ if beginning_with
42
+ @klass = supported_test_frameworks(beginning_with).first
43
+ raise(NoFrameworkMatched.new(beginning_with)) if @klass.nil?
44
+ raise(FrameworkNotAvailable.new(@klass)) unless @klass.available?
45
+ else
46
+ @klass = available_test_frameworks.first
47
+ raise(NoFrameworksAvailable.new) unless @klass
48
+ end
49
+ @klass.new(output, error)
50
+ end
51
+
52
+ def self.helper_file
53
+ self::HELPER_FILE
54
+ end
55
+
56
+ def self.default_port
57
+ (ENV["#{short_name.upcase}_DRB"] || self::DEFAULT_PORT).to_i
58
+ end
59
+
60
+ def self.short_name
61
+ self.name.gsub('Spork::TestFramework::', '')
62
+ end
63
+
64
+ # Returns a list of all testing servers that have detected their testing framework being used in the project.
65
+ def self.available_test_frameworks
66
+ supported_test_frameworks.select { |s| s.available? }
67
+ end
68
+
69
+ # Returns a list of all servers that have been implemented (it keeps track of them automatically via Class.inherited)
70
+ def self.supported_test_frameworks(starting_with = nil)
71
+ @@supported_test_frameworks.sort! { |a,b| a.load_preference_index <=> b.load_preference_index }
72
+ return @@supported_test_frameworks if starting_with.nil?
73
+ @@supported_test_frameworks.select do |s|
74
+ s.short_name.match(/^#{Regexp.escape(starting_with)}/i)
75
+ end
76
+ end
77
+
78
+ def short_name
79
+ self.class.short_name
80
+ end
81
+
82
+ def helper_file
83
+ self.class.helper_file
84
+ end
85
+
86
+ # Detects if the test helper has been bootstrapped.
87
+ def bootstrapped?
88
+ File.read(helper_file).include?("Spork.prefork")
89
+ end
90
+
91
+ # Bootstraps the current test helper file by prepending a Spork.prefork and Spork.each_run block at the beginning.
92
+ def bootstrap
93
+ if bootstrapped?
94
+ stderr.puts "Already bootstrapped!"
95
+ return
96
+ end
97
+ stderr.puts "Bootstrapping #{helper_file}."
98
+ contents = File.read(helper_file)
99
+ bootstrap_code = File.read(BOOTSTRAP_FILE)
100
+ File.open(helper_file, "wb") do |f|
101
+ f.puts bootstrap_code
102
+ f.puts contents
103
+ end
104
+
105
+ stderr.puts "Done. Edit #{helper_file} now with your favorite text editor and follow the instructions."
106
+ true
107
+ end
108
+
109
+ # Returns true if the testing frameworks helper file exists. Override if this is not sufficient to detect your testing framework.
110
+ def self.available?
111
+ File.exist?(helper_file)
112
+ end
113
+
114
+ # Used to specify
115
+ def self.load_preference_index
116
+ LOAD_PREFERENCE.index(short_name) || LOAD_PREFERENCE.length
117
+ end
118
+
119
+ def preload
120
+ Spork.exec_prefork do
121
+ unless bootstrapped?
122
+ stderr.puts "#{helper_file} has not been bootstrapped. Run spork --bootstrap to do so."
123
+ stderr.flush
124
+
125
+ if framework.bootstrap_required?
126
+ stderr.puts "I can't do anything for you by default for the framework your using: #{framework.short_name}.\nYou must bootstrap #{helper_file} to continue."
127
+ stderr.flush
128
+ return false
129
+ else
130
+ load(framework.entry_point)
131
+ end
132
+ end
133
+
134
+ framework.preload do
135
+ if bootstrapped?
136
+ stderr.puts "Loading Spork.prefork block..."
137
+ stderr.flush
138
+ load(helper_file)
139
+ end
140
+ end
141
+ end
142
+ true
143
+ end
144
+
145
+ def run_tests(argv, stderr, stdout)
146
+ raise NotImplementedError
147
+ end
148
+
149
+ def entry_point
150
+ bootstrapped? ? helper_file : framework.entry_point
151
+ end
152
+
153
+ protected
154
+ def self.inherited(subclass)
155
+ @@supported_test_frameworks << subclass
156
+ end
157
+
158
+ def framework
159
+ @framework ||= Spork::AppFramework.detect_framework
160
+ end
161
+ end
162
+
163
+ Dir[File.dirname(__FILE__) + "/test_framework/*.rb"].each { |file| require file }
@@ -0,0 +1,24 @@
1
+ class Spork::TestFramework::Cucumber < Spork::TestFramework
2
+ DEFAULT_PORT = 8990
3
+ HELPER_FILE = File.join(Dir.pwd, "features/support/env.rb")
4
+
5
+ class << self
6
+ # REMOVE WHEN SUPPORT FOR 0.3.95 AND EARLIER IS DROPPED
7
+ attr_accessor :mother_object
8
+ end
9
+
10
+ def preload
11
+ require 'cucumber'
12
+ begin
13
+ @step_mother = ::Cucumber::StepMother.new
14
+ @step_mother.load_programming_language('rb')
15
+ rescue NoMethodError => pre_cucumber_0_4 # REMOVE WHEN SUPPORT FOR PRE-0.4 IS DROPPED
16
+ @step_mother = Spork::Server::Cucumber.mother_object
17
+ end
18
+ super
19
+ end
20
+
21
+ def run_tests(argv, stderr, stdout)
22
+ ::Cucumber::Cli::Main.new(argv, stdout, stderr).execute!(@step_mother)
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ class Spork::TestFramework::RSpec < Spork::TestFramework
2
+ DEFAULT_PORT = 8989
3
+ HELPER_FILE = File.join(Dir.pwd, "spec/spec_helper.rb")
4
+
5
+ def run_tests(argv, stderr, stdout)
6
+ ::Spec::Runner::CommandLine.run(
7
+ ::Spec::Runner::OptionParser.parse(
8
+ argv,
9
+ stderr,
10
+ stdout
11
+ )
12
+ )
13
+ end
14
+ end
@@ -1,3 +1,32 @@
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
+
1
30
  require 'rubygems'
2
31
  require 'spec'
3
32
 
@@ -9,7 +38,6 @@ unless $spec_helper_loaded
9
38
 
10
39
  require 'spork'
11
40
  require 'spork/runner.rb'
12
- require 'spork/server.rb'
13
41
  require 'spork/diagnoser.rb'
14
42
  require 'stringio'
15
43
  require 'fileutils'
@@ -34,7 +62,11 @@ unless $spec_helper_loaded
34
62
  File.open(filename, 'wb') { |f| f << contents }
35
63
  end
36
64
  end
37
-
65
+
66
+ def create_helper_file(test_framework = FakeFramework)
67
+ create_file(test_framework.helper_file, "# stub spec helper file")
68
+ end
69
+
38
70
  def in_current_dir(&block)
39
71
  Dir.chdir(current_dir, &block)
40
72
  end
@@ -104,4 +136,6 @@ unless $spec_helper_loaded
104
136
  end
105
137
  end
106
138
  end
139
+
140
+ Dir.glob(File.dirname(__FILE__) + "/support/*.rb").each { |f| require(f) }
107
141
  end
@@ -1,60 +1,54 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe Spork::Runner do
4
+ def use_test_server(klass = Spork::TestFramework::RSpec)
5
+ @test_framework = klass.new
6
+ Spork::TestFramework.stub!(:factory).and_return(@test_framework)
7
+ end
8
+
4
9
  before(:each) do
5
10
  @out, @err = StringIO.new, StringIO.new
6
11
  end
7
12
 
8
13
  it "finds a matching server with a prefix" do
9
- Spork::Runner.new(["rs"], @out, @err).find_server.should == Spork::Server::RSpec
14
+ Spork::Runner.new(["rs"], @out, @err).find_test_framework.class.should == Spork::TestFramework::RSpec
10
15
  end
11
16
 
12
17
  it "shows an error message if no matching server was found" do
13
18
  Spork::Runner.new(["argle_bargle"], @out, @err).run.should == false
14
- @err.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
19
+ @err.string.should include(%(Couldn't find a supported test framework that begins with 'argle_bargle'))
27
20
  end
28
21
 
29
22
  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)
23
+ use_test_server
24
+ @test_framework.should_receive(:bootstrap)
32
25
  Spork::Runner.new(['rspec', '-b'], @out, @err).run
33
26
  end
34
27
 
35
28
  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)
29
+ use_test_server
30
+ @test_framework.should_receive(:preload).and_return(false)
31
+ Spork::Server.should_not_receive(:run)
39
32
  Spork::Runner.new(['rspec'], @out, @err).run
40
33
  end
41
34
 
42
35
  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)
36
+ use_test_server
37
+ @test_framework.should_receive(:preload).and_return(true)
38
+ Spork::Server.should_receive(:run)
46
39
  Spork::Runner.new(['rspec'], @out, @err).run
47
40
  @err.string.should include("Using RSpec")
48
41
  end
49
42
 
50
43
  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)
44
+ Spork::Server.stub!(:supported_test_frameworks).and_return([Spork::TestFramework::RSpec, Spork::TestFramework::Cucumber])
45
+ Spork::TestFramework::RSpec.stub!(:available?).and_return(true)
46
+ Spork::TestFramework::Cucumber.stub!(:available?).and_return(false)
54
47
 
55
- Spork::Runner.new(['rspec'], @out, @err).supported_servers_text.should == <<-EOF
48
+ Spork::Runner.new(['rspec'], @out, @err).supported_test_frameworks_text.should == <<-EOF
56
49
  Supported test frameworks:
57
50
  ( ) Cucumber
51
+ ( ) FakeFramework
58
52
  (*) RSpec
59
53
 
60
54
  Legend: ( ) - not detected in project (*) - detected
@@ -1,107 +1,18 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
-
4
- class FakeServer < Spork::Server
5
- attr_accessor :wait_time
6
-
7
- include Spork::TestIOStreams
8
-
9
- def self.helper_file
10
- SPEC_TMP_DIR + "/fake/test_helper.rb"
11
- end
12
-
13
- def self.port
14
- 1000
15
- end
16
-
17
- def run_tests(argv, input, output)
18
- sleep(@wait_time || 0.5)
19
- true
20
- end
21
- end
22
-
23
3
  describe Spork::Server do
24
- describe ".available_servers" do
25
- before(:each) do
26
- Spork::Server.supported_servers.each { |s| s.stub!(:available?).and_return(false) }
27
- end
28
-
29
- it "returns a list of all available servers" do
30
- Spork::Server.available_servers.should == []
31
- Spork::Server::RSpec.stub!(:available?).and_return(true)
32
- Spork::Server.available_servers.should == [Spork::Server::RSpec]
33
- end
34
-
35
- it "returns rspec before cucumber when both are available" do
36
- Spork::Server::RSpec.stub!(:available?).and_return(true)
37
- Spork::Server::Cucumber.stub!(:available?).and_return(true)
38
- Spork::Server.available_servers.should == [Spork::Server::RSpec, Spork::Server::Cucumber]
39
- end
40
- end
41
-
42
- describe ".supported_servers" do
43
- it "returns all defined servers" do
44
- Spork::Server.supported_servers.should include(Spork::Server::RSpec)
45
- Spork::Server.supported_servers.should include(Spork::Server::Cucumber)
46
- end
47
-
48
- it "returns a list of servers matching a case-insensitive prefix" do
49
- Spork::Server.supported_servers("rspec").should == [Spork::Server::RSpec]
50
- Spork::Server.supported_servers("rs").should == [Spork::Server::RSpec]
51
- Spork::Server.supported_servers("cuc").should == [Spork::Server::Cucumber]
52
- end
53
- end
54
-
55
4
  describe "a fake server" do
56
- def create_helper_file
57
- create_file(FakeServer.helper_file, "# stub spec helper file")
58
- end
59
-
60
5
  before(:each) do
61
- @fake = FakeServer.new
62
- end
63
-
64
- it "should be available when the helper_file exists" do
65
- FakeServer.available?.should == false
66
- create_helper_file
67
- FakeServer.available?.should == true
68
- end
69
-
70
- it "has a name" do
71
- FakeServer.server_name.should == "FakeServer"
72
- end
73
-
74
- it "tells if it's testing framework is being used" do
75
- Spork::Server.available_servers.should_not include(FakeServer)
76
- create_helper_file
77
- Spork::Server.available_servers.should include(FakeServer)
78
- end
79
-
80
- it "recognizes if the helper_file has been bootstrapped" do
81
- bootstrap_contents = File.read(FakeServer::BOOTSTRAP_FILE)
82
- File.stub!(:read).with(FakeServer.helper_file).and_return("")
83
- FakeServer.bootstrapped?.should == false
84
- File.stub!(:read).with(FakeServer.helper_file).and_return(bootstrap_contents)
85
- FakeServer.bootstrapped?.should == true
86
- end
87
-
88
- it "bootstraps a file" do
89
- create_helper_file
90
- FakeServer.bootstrap
91
-
92
- $test_stderr.string.should include("Bootstrapping")
93
- $test_stderr.string.should include("Edit")
94
- $test_stderr.string.should include("favorite text editor")
95
-
96
- File.read(FakeServer.helper_file).should include(File.read(FakeServer::BOOTSTRAP_FILE))
6
+ @fake_framework = FakeFramework.new
7
+ @server = Spork::Server.new(:test_framework => @fake_framework)
97
8
  end
98
9
 
99
10
  it "aborts the current running thread when another run is started" do
100
11
  create_helper_file
101
- @fake.wait_time = 0.25
102
- first_run = Thread.new { @fake.run("test", STDOUT, STDIN).should == nil }
12
+ @fake_framework.wait_time = 0.25
13
+ first_run = Thread.new { @server.run("test", STDOUT, STDIN).should == nil }
103
14
  sleep(0.05)
104
- @fake.run("test", STDOUT, STDIN).should == true
15
+ @server.run("test", STDOUT, STDIN).should == true
105
16
 
106
17
  # wait for the first to finish
107
18
  first_run.join
@@ -109,33 +20,32 @@ describe Spork::Server do
109
20
 
110
21
  it "can abort the current run" do
111
22
  create_helper_file
112
- @fake.wait_time = 5
23
+ @fake_framework.wait_time = 5
113
24
  started_at = Time.now
114
- first_run = Thread.new { @fake.run("test", STDOUT, STDIN).should == true }
25
+ first_run = Thread.new { @server.run("test", STDOUT, STDIN).should == true }
115
26
  sleep(0.05)
116
- @fake.send(:abort)
117
- sleep(0.01) while @fake.running?
27
+ @server.send(:abort)
28
+ sleep(0.01) while @server.running?
118
29
 
119
- (Time.now - started_at).should < @fake.wait_time
30
+ (Time.now - started_at).should < @fake_framework.wait_time
120
31
  end
121
32
 
122
33
  it "returns the result of the run_tests method from the forked child" do
123
34
  create_helper_file
124
- @fake.stub!(:run_tests).and_return("tests were ran")
125
- @fake.run("test", STDOUT, STDIN).should == "tests were ran"
35
+ @fake_framework.stub!(:run_tests).and_return("tests were ran")
36
+ @server.run("test", STDOUT, STDIN).should == "tests were ran"
126
37
  end
127
38
 
128
39
  it "accepts a port" do
129
40
  create_helper_file
130
- @fake.class.port = 12345
131
- @fake.port.should == 12345
41
+ @server.port = 12345
42
+ @server.port.should == 12345
132
43
  end
133
44
 
134
45
  it "falls back to a default port" do
135
46
  create_helper_file
136
- @fake.class.port = nil
137
- @fake.port.should == FakeServer.port
47
+ @server.port = nil
48
+ @server.port.should == FakeFramework.default_port
138
49
  end
139
-
140
50
  end
141
51
  end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require File.dirname(__FILE__) + "/../test_framework_spec"
3
+
4
+ describe Spork::TestFramework::Cucumber do
5
+ before(:each) do
6
+ @klass = Spork::TestFramework::Cucumber
7
+ @server = @klass.new
8
+ end
9
+
10
+ it_should_behave_like "a TestFramework"
11
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require File.dirname(__FILE__) + "/../test_framework_spec"
3
+
4
+ describe Spork::TestFramework::RSpec do
5
+ before(:each) do
6
+ @klass = Spork::TestFramework::RSpec
7
+ end
8
+
9
+ it_should_behave_like "a TestFramework"
10
+ end
@@ -0,0 +1,114 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "a TestFramework", :shared => true do
4
+ describe ".default_port" do
5
+ it "uses the DEFAULT_PORT when the environment variable is not set" do
6
+ @klass.default_port.should == @klass::DEFAULT_PORT
7
+ end
8
+
9
+ it 'uses ENV["#{short_name.upcase}_DRB"] as port if present' do
10
+ env_name = "#{@klass.short_name.upcase}_DRB"
11
+ orig, ENV[env_name] = ENV[env_name], "9000"
12
+ begin
13
+ @klass.default_port.should == 9000
14
+ ensure
15
+ ENV[env_name] = orig
16
+ end
17
+ end
18
+ end
19
+
20
+ describe ".helper_file" do
21
+ it "returns ::HELPER_FILE for the TestFramework" do
22
+ @klass.helper_file.should == @klass::HELPER_FILE
23
+ end
24
+ end
25
+ end
26
+
27
+ describe Spork::TestFramework do
28
+
29
+ before(:each) do
30
+ @fake = FakeFramework.new
31
+ end
32
+
33
+ describe ".available_test_frameworks" do
34
+ before(:each) do
35
+ Spork::TestFramework.supported_test_frameworks.each { |s| s.stub!(:available?).and_return(false) }
36
+ end
37
+
38
+ it "returns a list of all available servers" do
39
+ Spork::TestFramework.available_test_frameworks.should == []
40
+ Spork::TestFramework::RSpec.stub!(:available?).and_return(true)
41
+ Spork::TestFramework.available_test_frameworks.should == [Spork::TestFramework::RSpec]
42
+ end
43
+
44
+ it "returns rspec before cucumber when both are available" do
45
+ Spork::TestFramework::RSpec.stub!(:available?).and_return(true)
46
+ Spork::TestFramework::Cucumber.stub!(:available?).and_return(true)
47
+ Spork::TestFramework.available_test_frameworks.should == [Spork::TestFramework::RSpec, Spork::TestFramework::Cucumber]
48
+ end
49
+ end
50
+
51
+ describe ".supported_test_frameworks" do
52
+ it "returns all defined servers" do
53
+ Spork::TestFramework.supported_test_frameworks.should include(Spork::TestFramework::RSpec)
54
+ Spork::TestFramework.supported_test_frameworks.should include(Spork::TestFramework::Cucumber)
55
+ end
56
+
57
+ it "returns a list of servers matching a case-insensitive prefix" do
58
+ Spork::TestFramework.supported_test_frameworks("rspec").should == [Spork::TestFramework::RSpec]
59
+ Spork::TestFramework.supported_test_frameworks("rs").should == [Spork::TestFramework::RSpec]
60
+ Spork::TestFramework.supported_test_frameworks("cuc").should == [Spork::TestFramework::Cucumber]
61
+ end
62
+ end
63
+
64
+ describe ".short_name" do
65
+ it "returns the name of the framework, without the namespace prefix" do
66
+ Spork::TestFramework::Cucumber.short_name.should == "Cucumber"
67
+ end
68
+ end
69
+
70
+ describe ".available?" do
71
+ it "returns true when the helper_file exists" do
72
+ FakeFramework.available?.should == false
73
+ create_helper_file(FakeFramework)
74
+ FakeFramework.available?.should == true
75
+ end
76
+ end
77
+
78
+ describe ".bootstrapped?" do
79
+ it "recognizes if the helper_file has been bootstrapped" do
80
+ bootstrap_contents = File.read(FakeFramework::BOOTSTRAP_FILE)
81
+ File.stub!(:read).with(@fake.helper_file).and_return("")
82
+ @fake.bootstrapped?.should == false
83
+ File.stub!(:read).with(@fake.helper_file).and_return(bootstrap_contents)
84
+ @fake.bootstrapped?.should == true
85
+ end
86
+ end
87
+
88
+ describe ".bootstrap" do
89
+ it "bootstraps a file" do
90
+ create_helper_file
91
+ @fake.bootstrap
92
+
93
+ $test_stderr.string.should include("Bootstrapping")
94
+ $test_stderr.string.should include("Edit")
95
+ $test_stderr.string.should include("favorite text editor")
96
+
97
+ File.read(@fake.helper_file).should include(File.read(FakeFramework::BOOTSTRAP_FILE))
98
+ end
99
+ end
100
+
101
+ describe ".factory" do
102
+ it "defaults to use rspec over cucumber" do
103
+ Spork::TestFramework::RSpec.stub!(:available?).and_return(true)
104
+ Spork::TestFramework::Cucumber.stub!(:available?).and_return(true)
105
+ Spork::TestFramework.factory(STDOUT, STDERR).class.should == Spork::TestFramework::RSpec
106
+ end
107
+
108
+ it "defaults to use cucumber when rspec not available" do
109
+ Spork::TestFramework::RSpec.stub!(:available?).and_return(false)
110
+ Spork::TestFramework::Cucumber.stub!(:available?).and_return(true)
111
+ Spork::TestFramework.factory(STDOUT, STDERR).class.should == Spork::TestFramework::Cucumber
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,15 @@
1
+ class FakeFramework < Spork::TestFramework
2
+ include Spork::TestIOStreams
3
+
4
+ attr_accessor :wait_time
5
+ DEFAULT_PORT = 1000
6
+
7
+ def self.helper_file
8
+ SPEC_TMP_DIR + "/fake/test_helper.rb"
9
+ end
10
+
11
+ def run_tests(argv, input, output)
12
+ sleep(@wait_time || 0.5)
13
+ true
14
+ end
15
+ 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.10
4
+ version: 0.5.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Harper
@@ -31,6 +31,7 @@ files:
31
31
  - features/diagnostic_mode.feature
32
32
  - features/rails_delayed_loading_workarounds.feature
33
33
  - features/rspec_rails_integration.feature
34
+ - features/steps/general_steps.rb
34
35
  - features/steps/rails_steps.rb
35
36
  - features/steps/sandbox_steps.rb
36
37
  - features/support/env.rb
@@ -47,8 +48,9 @@ files:
47
48
  - lib/spork/forker.rb
48
49
  - lib/spork/runner.rb
49
50
  - lib/spork/server.rb
50
- - lib/spork/server/cucumber.rb
51
- - lib/spork/server/rspec.rb
51
+ - lib/spork/test_framework.rb
52
+ - lib/spork/test_framework/cucumber.rb
53
+ - lib/spork/test_framework/rspec.rb
52
54
  - spec/spec_helper.rb
53
55
  - spec/spork/app_framework/rails_spec.rb
54
56
  - spec/spork/app_framework/unknown_spec.rb
@@ -56,10 +58,12 @@ files:
56
58
  - spec/spork/diagnoser_spec.rb
57
59
  - spec/spork/forker_spec.rb
58
60
  - spec/spork/runner_spec.rb
59
- - spec/spork/server/cucumber_spec.rb
60
- - spec/spork/server/rspec_spec.rb
61
61
  - spec/spork/server_spec.rb
62
+ - spec/spork/test_framework/cucumber_spec.rb
63
+ - spec/spork/test_framework/rspec_spec.rb
64
+ - spec/spork/test_framework_spec.rb
62
65
  - spec/spork_spec.rb
66
+ - spec/support/fake_framework.rb
63
67
  has_rdoc: true
64
68
  homepage: http://github.com/timcharper/spork
65
69
  licenses: []
@@ -97,7 +101,9 @@ test_files:
97
101
  - spec/spork/diagnoser_spec.rb
98
102
  - spec/spork/forker_spec.rb
99
103
  - spec/spork/runner_spec.rb
100
- - spec/spork/server/cucumber_spec.rb
101
- - spec/spork/server/rspec_spec.rb
102
104
  - spec/spork/server_spec.rb
105
+ - spec/spork/test_framework/cucumber_spec.rb
106
+ - spec/spork/test_framework/rspec_spec.rb
107
+ - spec/spork/test_framework_spec.rb
103
108
  - spec/spork_spec.rb
109
+ - spec/support/fake_framework.rb
@@ -1,35 +0,0 @@
1
- require 'cucumber'
2
-
3
- class Spork::Server::Cucumber < Spork::Server
4
- CUCUMBER_PORT = 8990
5
- CUCUMBER_HELPER_FILE = File.join(Dir.pwd, "features/support/env.rb")
6
-
7
- class << self
8
- def port
9
- (ENV['CUCUMBER_DRB'] || CUCUMBER_PORT).to_i
10
- end
11
-
12
- def helper_file
13
- CUCUMBER_HELPER_FILE
14
- end
15
-
16
- # REMOVE WHEN SUPPORT FOR 0.3.95 AND EARLIER IS DROPPED
17
- attr_accessor :step_mother
18
- end
19
-
20
- # REMOVE WHEN SUPPORT FOR 0.3.95 AND EARLIER IS DROPPED
21
- def step_mother
22
- self.class.step_mother
23
- end
24
-
25
- def run_tests(argv, stderr, stdout)
26
- ::Cucumber::Cli::Main.new(argv, stdout, stderr).execute!(step_mother)
27
- end
28
- end
29
-
30
- begin
31
- Spork::Server::Cucumber.step_mother = ::Cucumber::StepMother.new
32
- Spork::Server::Cucumber.step_mother.load_programming_language('rb') if defined?(Spork::Server)
33
- rescue NoMethodError => pre_cucumber_0_4 # REMOVE WHEN SUPPORT FOR 0.3.95 AND EARLIER IS DROPPED
34
- Spork::Server::Cucumber.step_mother = self
35
- end
@@ -1,22 +0,0 @@
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
- (ENV['RSPEC_DRB'] || RSPEC_PORT).to_i
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
@@ -1,25 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- describe Spork::Server::Cucumber do
4
- before(:each) do
5
- @server = Spork::Server::Cucumber.new
6
- end
7
-
8
- it "uses the CUCUMBER_PORT for it's default port" do
9
- @server.port.should == Spork::Server::Cucumber::CUCUMBER_PORT
10
- end
11
-
12
- it "uses ENV['CUCUMBER_DRB'] as port if present" do
13
- orig = ENV['CUCUMBER_DRB']
14
- begin
15
- ENV['CUCUMBER_DRB'] = "9000"
16
- @server.port.should == 9000
17
- ensure
18
- ENV['CUCUMBER_DRB'] = orig
19
- end
20
- end
21
-
22
- it "uses the CUCUMBER_HELPER_FILE for it's helper_file" do
23
- @server.helper_file.should == Spork::Server::Cucumber::CUCUMBER_HELPER_FILE
24
- end
25
- end
@@ -1,25 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper'
2
-
3
- describe Spork::Server::RSpec do
4
- before(:each) do
5
- @server = Spork::Server::RSpec.new
6
- end
7
-
8
- it "uses the RSPEC_PORT for it's default port" do
9
- @server.port.should == Spork::Server::RSpec::RSPEC_PORT
10
- end
11
-
12
- it "uses ENV['RSPEC_DRB'] as port if present" do
13
- orig = ENV['RSPEC_DRB']
14
- begin
15
- ENV['RSPEC_DRB'] = "9000"
16
- @server.port.should == 9000
17
- ensure
18
- ENV['RSPEC_DRB'] = orig
19
- end
20
- end
21
-
22
- it "uses the RSPEC_HELPER_FILE for it's helper_file" do
23
- @server.helper_file.should == Spork::Server::RSpec::RSPEC_HELPER_FILE
24
- end
25
- end