smtlaissezfaire-spork 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +129 -0
  3. data/assets/bootstrap.rb +29 -0
  4. data/bin/spork +21 -0
  5. data/features/cucumber_rails_integration.feature +106 -0
  6. data/features/diagnostic_mode.feature +37 -0
  7. data/features/rails_delayed_loading_workarounds.feature +80 -0
  8. data/features/rspec_rails_integration.feature +66 -0
  9. data/features/steps/rails_steps.rb +53 -0
  10. data/features/steps/sandbox_steps.rb +91 -0
  11. data/features/support/env.rb +97 -0
  12. data/features/unknown_app_framework.feature +42 -0
  13. data/lib/spork.rb +96 -0
  14. data/lib/spork/app_framework.rb +74 -0
  15. data/lib/spork/app_framework/rails.rb +158 -0
  16. data/lib/spork/app_framework/rails_stub_files/application.rb +3 -0
  17. data/lib/spork/app_framework/rails_stub_files/application_controller.rb +3 -0
  18. data/lib/spork/app_framework/rails_stub_files/application_helper.rb +3 -0
  19. data/lib/spork/app_framework/unknown.rb +6 -0
  20. data/lib/spork/custom_io_streams.rb +25 -0
  21. data/lib/spork/diagnoser.rb +103 -0
  22. data/lib/spork/forker.rb +70 -0
  23. data/lib/spork/runner.rb +111 -0
  24. data/lib/spork/server.rb +197 -0
  25. data/lib/spork/server/cucumber.rb +28 -0
  26. data/lib/spork/server/rspec.rb +22 -0
  27. data/spec/spec_helper.rb +107 -0
  28. data/spec/spork/app_framework/rails_spec.rb +22 -0
  29. data/spec/spork/app_framework/unknown_spec.rb +12 -0
  30. data/spec/spork/app_framework_spec.rb +16 -0
  31. data/spec/spork/diagnoser_spec.rb +105 -0
  32. data/spec/spork/forker_spec.rb +44 -0
  33. data/spec/spork/runner_spec.rb +63 -0
  34. data/spec/spork/server/rspec_spec.rb +15 -0
  35. data/spec/spork/server_spec.rb +128 -0
  36. data/spec/spork_spec.rb +143 -0
  37. metadata +100 -0
@@ -0,0 +1,44 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Spork::Forker do
4
+ describe ".new" do
5
+ it "runs a block in a fork" do
6
+ $var = "hello world"
7
+ Spork::Forker.new { $var = "booyah" }.result
8
+ $var.should == "hello world"
9
+ end
10
+ end
11
+
12
+ describe "#result" do
13
+ it "returns the result" do
14
+ Spork::Forker.new { "results" }.result.should == "results"
15
+ end
16
+ end
17
+
18
+ describe "#running?" do
19
+ it "reports when the fork is running" do
20
+ forker = Spork::Forker.new { sleep 0.1 }
21
+ forker.running?.should == true
22
+ forker.result
23
+ sleep 0.1
24
+ forker.running?.should == false
25
+ end
26
+ end
27
+
28
+ describe "#abort" do
29
+ it "aborts a fork and returns nil for the result" do
30
+ started_at = Time.now
31
+ ended_at = nil
32
+ forker = Spork::Forker.new { sleep 5 }
33
+ Thread.new do
34
+ forker.result.should == nil
35
+ ended_at = Time.now
36
+ end
37
+ sleep 0.5
38
+ forker.abort
39
+ sleep 0.1
40
+ (ended_at - started_at).should be_close(0.5, 0.1)
41
+ forker.running?.should == false
42
+ end
43
+ end
44
+ 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
+ @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
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
+ @err.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,15 @@
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 port" do
9
+ @server.port.should == Spork::Server::RSpec::RSPEC_PORT
10
+ end
11
+
12
+ it "uses the RSPEC_HELPER_FILE for it's helper_file" do
13
+ @server.helper_file.should == Spork::Server::RSpec::RSPEC_HELPER_FILE
14
+ end
15
+ end
@@ -0,0 +1,128 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
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
+ 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
+ describe "a fake server" do
56
+ def create_helper_file
57
+ create_file(FakeServer.helper_file, "# stub spec helper file")
58
+ end
59
+
60
+ 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))
97
+ end
98
+
99
+ it "aborts the current running thread when another run is started" do
100
+ create_helper_file
101
+ @fake.wait_time = 0.25
102
+ first_run = Thread.new { @fake.run("test", STDOUT, STDIN).should == nil }
103
+ sleep(0.05)
104
+ @fake.run("test", STDOUT, STDIN).should == true
105
+
106
+ # wait for the first to finish
107
+ first_run.join
108
+ end
109
+
110
+ it "can abort the current run" do
111
+ create_helper_file
112
+ @fake.wait_time = 5
113
+ started_at = Time.now
114
+ first_run = Thread.new { @fake.run("test", STDOUT, STDIN).should == true }
115
+ sleep(0.05)
116
+ @fake.send(:abort)
117
+ sleep(0.01) while @fake.running?
118
+
119
+ (Time.now - started_at).should < @fake.wait_time
120
+ end
121
+
122
+ it "returns the result of the run_tests method from the forked child" do
123
+ create_helper_file
124
+ @fake.stub!(:run_tests).and_return("tests were ran")
125
+ @fake.run("test", STDOUT, STDIN).should == "tests were ran"
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,143 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ Spork.class_eval do
4
+ def self.reset!
5
+ @state = nil
6
+ @already_ran = nil
7
+ end
8
+ end
9
+
10
+ describe Spork do
11
+ before(:each) do
12
+ Spork.reset!
13
+ end
14
+
15
+ def spec_helper_simulator
16
+ @ran ||= []
17
+ Spork.prefork do
18
+ @ran << :prefork
19
+ end
20
+
21
+ Spork.each_run do
22
+ @ran << :each_run
23
+ end
24
+ @ran
25
+ end
26
+
27
+ it "only runs the preload block when preforking" do
28
+ Spork.exec_prefork { spec_helper_simulator }
29
+ @ran.should == [:prefork]
30
+ end
31
+
32
+ it "only runs the each_run block when running" do
33
+ Spork.exec_prefork { spec_helper_simulator }
34
+ @ran.should == [:prefork]
35
+
36
+ Spork.exec_each_run
37
+ @ran.should == [:prefork, :each_run]
38
+ end
39
+
40
+ it "runs both blocks when Spork not activated" do
41
+ spec_helper_simulator.should == [:prefork, :each_run]
42
+ end
43
+
44
+ it "prevents blocks from being ran twice" do
45
+ Spork.exec_prefork { spec_helper_simulator }
46
+ Spork.exec_each_run
47
+ @ran.clear
48
+ Spork.exec_prefork { spec_helper_simulator }
49
+ Spork.exec_each_run
50
+ @ran.should == []
51
+ end
52
+
53
+ it "runs multiple prefork and each_run blocks at different locations" do
54
+ Spork.prefork { }
55
+ Spork.each_run { }
56
+ spec_helper_simulator.should == [:prefork, :each_run]
57
+ end
58
+
59
+ it "expands a caller line, preserving the line number" do
60
+ Spork.send(:expanded_caller, "/boo/../yah.rb:31").should == "/yah.rb:31"
61
+ end
62
+
63
+ describe "#trap_method" do
64
+ before(:each) do
65
+ Spork.using_spork!
66
+
67
+ Object.class_eval do
68
+ class TrapTest
69
+ def self.output
70
+ @output ||= []
71
+ end
72
+
73
+ def hello
74
+ TrapTest.output << 'hello'
75
+ end
76
+
77
+ def goodbye
78
+ TrapTest.output << 'goodbye'
79
+ end
80
+
81
+ def say_something!
82
+ TrapTest.output << 'something'
83
+ end
84
+ end
85
+ end
86
+ @trap_test = TrapTest.new
87
+ end
88
+
89
+ after(:each) do
90
+ Object.send(:remove_const, :TrapTest)
91
+ end
92
+
93
+ it "delays execution of a method until after Spork.exec_each_run is called" do
94
+ Spork.using_spork!
95
+ Spork.trap_method(TrapTest, :hello)
96
+ @trap_test.hello
97
+ @trap_test.goodbye
98
+ Spork.exec_each_run
99
+ TrapTest.output.should == ['goodbye', 'hello']
100
+ end
101
+
102
+ it "works with methods that have punctuation" do
103
+ Spork.trap_method(TrapTest, :say_something!)
104
+ @trap_test.say_something!
105
+ TrapTest.output.should == []
106
+ Spork.exec_each_run
107
+ TrapTest.output.should == ['something']
108
+ end
109
+ end
110
+
111
+ describe "#trap_class_method" do
112
+ before(:each) do
113
+ Object.class_eval do
114
+ class TrapTest
115
+ def self.output
116
+ @output ||= []
117
+ end
118
+
119
+ def self.hello
120
+ output << 'hello'
121
+ end
122
+
123
+ def self.goodbye
124
+ output << 'goodbye'
125
+ end
126
+ end
127
+ end
128
+ end
129
+
130
+ after(:each) do
131
+ Object.send(:remove_const, :TrapTest)
132
+ end
133
+
134
+ it "delays execution of a method until after Spork.exec_each_run is called" do
135
+ Spork.using_spork!
136
+ Spork.trap_class_method(TrapTest, :hello)
137
+ TrapTest.hello
138
+ TrapTest.goodbye
139
+ Spork.exec_each_run
140
+ TrapTest.output.should == ['goodbye', 'hello']
141
+ end
142
+ end
143
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smtlaissezfaire-spork
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.7
5
+ platform: ruby
6
+ authors:
7
+ - Tim Harper
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-17 00:00:00 -07:00
13
+ default_executable: spork
14
+ dependencies: []
15
+
16
+ description: A forking Drb spec server
17
+ email:
18
+ - timcharper+spork@gmail.com
19
+ executables:
20
+ - spork
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - MIT-LICENSE
25
+ - README.rdoc
26
+ files:
27
+ - MIT-LICENSE
28
+ - README.rdoc
29
+ - assets/bootstrap.rb
30
+ - features/cucumber_rails_integration.feature
31
+ - features/diagnostic_mode.feature
32
+ - features/rails_delayed_loading_workarounds.feature
33
+ - features/rspec_rails_integration.feature
34
+ - features/steps/rails_steps.rb
35
+ - features/steps/sandbox_steps.rb
36
+ - features/support/env.rb
37
+ - features/unknown_app_framework.feature
38
+ - lib/spork.rb
39
+ - lib/spork/app_framework.rb
40
+ - lib/spork/app_framework/rails.rb
41
+ - lib/spork/app_framework/rails_stub_files/application.rb
42
+ - lib/spork/app_framework/rails_stub_files/application_controller.rb
43
+ - lib/spork/app_framework/rails_stub_files/application_helper.rb
44
+ - lib/spork/app_framework/unknown.rb
45
+ - lib/spork/custom_io_streams.rb
46
+ - lib/spork/diagnoser.rb
47
+ - lib/spork/forker.rb
48
+ - lib/spork/runner.rb
49
+ - lib/spork/server.rb
50
+ - lib/spork/server/cucumber.rb
51
+ - lib/spork/server/rspec.rb
52
+ - spec/spec_helper.rb
53
+ - spec/spork/app_framework/rails_spec.rb
54
+ - spec/spork/app_framework/unknown_spec.rb
55
+ - spec/spork/app_framework_spec.rb
56
+ - spec/spork/diagnoser_spec.rb
57
+ - spec/spork/forker_spec.rb
58
+ - spec/spork/runner_spec.rb
59
+ - spec/spork/server/rspec_spec.rb
60
+ - spec/spork/server_spec.rb
61
+ - spec/spork_spec.rb
62
+ has_rdoc: true
63
+ homepage: http://github.com/timcharper/spork
64
+ licenses:
65
+ post_install_message:
66
+ rdoc_options:
67
+ - --main
68
+ - README.rdoc
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ version:
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ version:
83
+ requirements: []
84
+
85
+ rubyforge_project: spork
86
+ rubygems_version: 1.3.5
87
+ signing_key:
88
+ specification_version: 2
89
+ summary: spork
90
+ test_files:
91
+ - spec/spec_helper.rb
92
+ - spec/spork/app_framework/rails_spec.rb
93
+ - spec/spork/app_framework/unknown_spec.rb
94
+ - spec/spork/app_framework_spec.rb
95
+ - spec/spork/diagnoser_spec.rb
96
+ - spec/spork/forker_spec.rb
97
+ - spec/spork/runner_spec.rb
98
+ - spec/spork/server/rspec_spec.rb
99
+ - spec/spork/server_spec.rb
100
+ - spec/spork_spec.rb