specjour 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.
Files changed (43) hide show
  1. data/History.markdown +12 -1
  2. data/README.markdown +19 -5
  3. data/Rakefile +3 -35
  4. data/lib/specjour/cucumber/preloader.rb +0 -22
  5. data/lib/specjour/cucumber/runner.rb +5 -9
  6. data/lib/specjour/cucumber.rb +0 -1
  7. data/lib/specjour/db_scrub.rb +15 -10
  8. data/lib/specjour/printer.rb +1 -1
  9. data/lib/specjour/rspec/distributed_formatter.rb +32 -56
  10. data/lib/specjour/rspec/final_report.rb +60 -52
  11. data/lib/specjour/rspec/marshalable_exception.rb +1 -1
  12. data/lib/specjour/rspec/preloader.rb +1 -1
  13. data/lib/specjour/rspec/runner.rb +9 -8
  14. data/lib/specjour/{rspec2 → rspec}/shared_example_group_ext.rb +1 -1
  15. data/lib/specjour/rspec.rb +10 -29
  16. data/lib/specjour/socket_helper.rb +2 -0
  17. data/lib/specjour/worker.rb +2 -2
  18. data/lib/specjour.rb +3 -3
  19. metadata +24 -112
  20. data/.dev +0 -3
  21. data/.document +0 -5
  22. data/.gitignore +0 -25
  23. data/.rvmrc +0 -1
  24. data/Gemfile +0 -2
  25. data/VERSION +0 -1
  26. data/lib/specjour/rspec/marshalable_rspec_failure.rb +0 -21
  27. data/lib/specjour/rspec2/distributed_formatter.rb +0 -48
  28. data/lib/specjour/rspec2/final_report.rb +0 -73
  29. data/lib/specjour/rspec2/runner.rb +0 -12
  30. data/sample/features/fail.feature +0 -31
  31. data/sample/features/pass.feature +0 -31
  32. data/sample/features/step_definitions/sample_steps.rb +0 -26
  33. data/sample/features/undefined.feature +0 -17
  34. data/spec/spec.opts +0 -2
  35. data/spec/spec_helper.rb +0 -20
  36. data/spec/specjour/cli_spec.rb +0 -105
  37. data/spec/specjour/configuration_spec.rb +0 -112
  38. data/spec/specjour/cpu_spec.rb +0 -28
  39. data/spec/specjour/manager_spec.rb +0 -21
  40. data/spec/specjour/printer_spec.rb +0 -101
  41. data/spec/specjour/rsync_daemon_spec.rb +0 -90
  42. data/spec/specjour_spec.rb +0 -18
  43. data/specjour.gemspec +0 -125
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specjour
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
4
+ prerelease:
5
+ version: 0.4.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Sandro Turriate
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2010-10-16 00:00:00 -04:00
13
+ date: 2011-03-09 00:00:00 -08:00
19
14
  default_executable: specjour
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,11 +21,6 @@ dependencies:
26
21
  requirements:
27
22
  - - "="
28
23
  - !ruby/object:Gem::Version
29
- hash: 19
30
- segments:
31
- - 1
32
- - 3
33
- - 4
34
24
  version: 1.3.4
35
25
  type: :runtime
36
26
  version_requirements: *id001
@@ -42,11 +32,6 @@ dependencies:
42
32
  requirements:
43
33
  - - ">="
44
34
  - !ruby/object:Gem::Version
45
- hash: 39
46
- segments:
47
- - 0
48
- - 14
49
- - 0
50
35
  version: 0.14.0
51
36
  type: :runtime
52
37
  version_requirements: *id002
@@ -56,14 +41,9 @@ dependencies:
56
41
  requirement: &id003 !ruby/object:Gem::Requirement
57
42
  none: false
58
43
  requirements:
59
- - - "="
44
+ - - ">="
60
45
  - !ruby/object:Gem::Version
61
- hash: 27
62
- segments:
63
- - 1
64
- - 3
65
- - 0
66
- version: 1.3.0
46
+ version: 2.5.0
67
47
  type: :development
68
48
  version_requirements: *id003
69
49
  - !ruby/object:Gem::Dependency
@@ -74,11 +54,6 @@ dependencies:
74
54
  requirements:
75
55
  - - ">="
76
56
  - !ruby/object:Gem::Version
77
- hash: 33
78
- segments:
79
- - 0
80
- - 10
81
- - 11
82
57
  version: 0.10.11
83
58
  type: :development
84
59
  version_requirements: *id004
@@ -90,11 +65,6 @@ dependencies:
90
65
  requirements:
91
66
  - - ">="
92
67
  - !ruby/object:Gem::Version
93
- hash: 59
94
- segments:
95
- - 0
96
- - 9
97
- - 0
98
68
  version: 0.9.0
99
69
  type: :development
100
70
  version_requirements: *id005
@@ -106,102 +76,57 @@ dependencies:
106
76
  requirements:
107
77
  - - ">="
108
78
  - !ruby/object:Gem::Version
109
- hash: 13
110
- segments:
111
- - 0
112
- - 5
113
- - 3
114
79
  version: 0.5.3
115
80
  type: :development
116
81
  version_requirements: *id006
117
- - !ruby/object:Gem::Dependency
118
- name: jeweler
119
- prerelease: false
120
- requirement: &id007 !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- hash: 7
126
- segments:
127
- - 1
128
- - 4
129
- - 0
130
- version: 1.4.0
131
- type: :development
132
- version_requirements: *id007
133
- description: Distribute your spec suite amongst your LAN via Bonjour.
82
+ description: " Specjour splits your RSpec suite across multiple machines, and multiple\n cores per machine, to run super-parallel-fast! Also works with Cucumber.\n"
134
83
  email: sandro.turriate@gmail.com
135
84
  executables:
136
85
  - specjour
137
86
  extensions: []
138
87
 
139
- extra_rdoc_files:
140
- - README.markdown
88
+ extra_rdoc_files: []
89
+
141
90
  files:
142
- - .dev
143
- - .document
144
- - .gitignore
145
- - .rvmrc
146
- - Gemfile
147
- - History.markdown
148
- - MIT_LICENSE
149
- - README.markdown
150
- - Rakefile
151
- - VERSION
152
- - bin/specjour
153
- - lib/specjour.rb
154
91
  - lib/specjour/cli.rb
155
92
  - lib/specjour/configuration.rb
156
93
  - lib/specjour/connection.rb
157
94
  - lib/specjour/cpu.rb
158
- - lib/specjour/cucumber.rb
159
95
  - lib/specjour/cucumber/distributed_formatter.rb
160
96
  - lib/specjour/cucumber/final_report.rb
161
97
  - lib/specjour/cucumber/main_ext.rb
162
98
  - lib/specjour/cucumber/preloader.rb
163
99
  - lib/specjour/cucumber/runner.rb
100
+ - lib/specjour/cucumber.rb
164
101
  - lib/specjour/db_scrub.rb
165
102
  - lib/specjour/dispatcher.rb
166
103
  - lib/specjour/manager.rb
167
104
  - lib/specjour/printer.rb
168
105
  - lib/specjour/protocol.rb
169
106
  - lib/specjour/quiet_fork.rb
170
- - lib/specjour/rspec.rb
171
107
  - lib/specjour/rspec/distributed_formatter.rb
172
108
  - lib/specjour/rspec/final_report.rb
173
109
  - lib/specjour/rspec/marshalable_exception.rb
174
- - lib/specjour/rspec/marshalable_rspec_failure.rb
175
110
  - lib/specjour/rspec/preloader.rb
176
111
  - lib/specjour/rspec/runner.rb
177
- - lib/specjour/rspec2/distributed_formatter.rb
178
- - lib/specjour/rspec2/final_report.rb
179
- - lib/specjour/rspec2/runner.rb
180
- - lib/specjour/rspec2/shared_example_group_ext.rb
112
+ - lib/specjour/rspec/shared_example_group_ext.rb
113
+ - lib/specjour/rspec.rb
181
114
  - lib/specjour/rsync_daemon.rb
182
115
  - lib/specjour/socket_helper.rb
183
116
  - lib/specjour/worker.rb
184
- - sample/features/fail.feature
185
- - sample/features/pass.feature
186
- - sample/features/step_definitions/sample_steps.rb
187
- - sample/features/undefined.feature
188
- - spec/spec.opts
189
- - spec/spec_helper.rb
190
- - spec/specjour/cli_spec.rb
191
- - spec/specjour/configuration_spec.rb
192
- - spec/specjour/cpu_spec.rb
193
- - spec/specjour/manager_spec.rb
194
- - spec/specjour/printer_spec.rb
195
- - spec/specjour/rsync_daemon_spec.rb
196
- - spec/specjour_spec.rb
197
- - specjour.gemspec
117
+ - lib/specjour.rb
118
+ - MIT_LICENSE
119
+ - README.markdown
120
+ - History.markdown
121
+ - Rakefile
122
+ - bin/specjour
198
123
  has_rdoc: true
199
- homepage: http://github.com/sandro/specjour
124
+ homepage: https://github.com/sandro/specjour
200
125
  licenses: []
201
126
 
202
127
  post_install_message:
203
- rdoc_options:
204
- - --charset=UTF-8
128
+ rdoc_options: []
129
+
205
130
  require_paths:
206
131
  - lib
207
132
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -209,32 +134,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
134
  requirements:
210
135
  - - ">="
211
136
  - !ruby/object:Gem::Version
212
- hash: 3
213
- segments:
214
- - 0
215
137
  version: "0"
216
138
  required_rubygems_version: !ruby/object:Gem::Requirement
217
139
  none: false
218
140
  requirements:
219
141
  - - ">="
220
142
  - !ruby/object:Gem::Version
221
- hash: 3
222
- segments:
223
- - 0
224
- version: "0"
143
+ version: 1.3.6
225
144
  requirements: []
226
145
 
227
146
  rubyforge_project:
228
- rubygems_version: 1.3.7
147
+ rubygems_version: 1.6.0
229
148
  signing_key:
230
149
  specification_version: 3
231
150
  summary: Distribute your spec suite amongst your LAN via Bonjour.
232
- test_files:
233
- - spec/spec_helper.rb
234
- - spec/specjour/cli_spec.rb
235
- - spec/specjour/configuration_spec.rb
236
- - spec/specjour/cpu_spec.rb
237
- - spec/specjour/manager_spec.rb
238
- - spec/specjour/printer_spec.rb
239
- - spec/specjour/rsync_daemon_spec.rb
240
- - spec/specjour_spec.rb
151
+ test_files: []
152
+
data/.dev DELETED
@@ -1,3 +0,0 @@
1
- export RUBYLIB=`pwd`/lib
2
- export RUBYOPT=rubygems
3
- export PATH=`pwd`/bin:$PATH
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,25 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
22
- .specjour
23
- spec/spec.opts
24
- .bundle
25
- Gemfile.lock
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm gemset use specjour
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source :rubygems
2
- gemspec
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.3.1
@@ -1,21 +0,0 @@
1
- module Specjour
2
- module Rspec
3
- class ::Spec::Runner::Reporter::Failure
4
-
5
- def initialize(group_description, example_description, exception)
6
- @example_name = "#{group_description} #{example_description}"
7
- @exception = MarshalableException.new(exception)
8
- @pending_fixed = exception.is_a?(Spec::Example::PendingExampleFixedError)
9
- @exception_not_met = exception.is_a?(Spec::Expectations::ExpectationNotMetError)
10
- end
11
-
12
- def pending_fixed?
13
- @pending_fixed
14
- end
15
-
16
- def expectation_not_met?
17
- @exception_not_met
18
- end
19
- end
20
- end
21
- end
@@ -1,48 +0,0 @@
1
- module Specjour::Rspec
2
- class DistributedFormatter < ::RSpec::Core::Formatters::ProgressFormatter
3
-
4
- def metadata_for_examples
5
- examples.map do |example|
6
- metadata = example.metadata
7
- {
8
- :execution_result => marshalable_execution_result(example.execution_result),
9
- :description => metadata[:description],
10
- :file_path => metadata[:file_path],
11
- :full_description => metadata[:full_description],
12
- :line_number => metadata[:line_number],
13
- :location => metadata[:location]
14
- }
15
- end
16
- end
17
-
18
- def noop(*args)
19
- end
20
- alias dump_pending noop
21
- alias dump_failures noop
22
- alias start_dump noop
23
- alias message noop
24
-
25
- def color_enabled?
26
- true
27
- end
28
-
29
- def dump_summary(*args)
30
- output.send_message :rspec_summary=, metadata_for_examples
31
- end
32
-
33
- def close
34
- @examples = []
35
- super
36
- end
37
-
38
- protected
39
-
40
- def marshalable_execution_result(execution_result)
41
- if exception = execution_result[:exception_encountered]
42
- execution_result[:exception_encountered] = MarshalableException.new(exception)
43
- end
44
- execution_result
45
- end
46
-
47
- end
48
- end
@@ -1,73 +0,0 @@
1
- module Specjour::Rspec
2
- class FinalReport
3
- attr_reader :examples
4
- attr_reader :duration
5
-
6
- def initialize
7
- @examples = []
8
- @duration = 0.0
9
- ::Rspec.configuration.color_enabled = true
10
- ::Rspec.configuration.output_stream = $stdout
11
- end
12
-
13
- def add(data)
14
- if data.respond_to?(:has_key?) && data.has_key?(:duration)
15
- self.duration = data[:duration]
16
- else
17
- metadata_for_examples(data)
18
- end
19
- end
20
-
21
- def duration=(value)
22
- @duration = value.to_f if duration < value.to_f
23
- end
24
-
25
- def exit_status
26
- formatter.failed_examples.empty?
27
- end
28
-
29
- def metadata_for_examples(metadata_collection)
30
- examples.concat(
31
- metadata_collection.map do |partial_metadata|
32
- example = ::Rspec::Core::Example.allocate
33
- example.instance_variable_set(:@example_group_class,
34
- OpenStruct.new(:metadata => {}, :ancestors => [])
35
- )
36
- metadata = ::Rspec::Core::Metadata.new
37
- metadata.merge! partial_metadata
38
- example.instance_variable_set(:@metadata, metadata)
39
- example
40
- end
41
- )
42
- end
43
-
44
- def pending_examples
45
- ::RSpec.world.find(examples, :execution_result => { :status => 'pending' })
46
- end
47
-
48
- def failed_examples
49
- ::RSpec.world.find(examples, :execution_result => { :status => 'failed' })
50
- end
51
-
52
- def formatter
53
- @formatter ||= new_progress_formatter
54
- end
55
-
56
- def summarize
57
- if examples.size > 0
58
- formatter.start_dump
59
- formatter.dump_pending
60
- formatter.dump_failures
61
- formatter.dump_summary(duration, examples.size, failed_examples.size, pending_examples.size)
62
- end
63
- end
64
-
65
- protected
66
- def new_progress_formatter
67
- new_formatter = ::Rspec::Core::Formatters::ProgressFormatter.new($stdout)
68
- new_formatter.instance_variable_set(:@failed_examples, failed_examples)
69
- new_formatter.instance_variable_set(:@pending_examples, pending_examples)
70
- new_formatter
71
- end
72
- end
73
- end
@@ -1,12 +0,0 @@
1
- module Specjour::Rspec::Runner
2
- def self.run(spec, output)
3
- reset
4
- args = ['--format=Specjour::Rspec::DistributedFormatter', spec]
5
- ::Rspec::Core::Runner.run_in_process args, $stderr, output
6
- end
7
-
8
- def self.reset
9
- ::Rspec.world.instance_variable_set(:@example_groups, [])
10
- ::Rspec.configuration.instance_variable_set(:@formatter, nil)
11
- end
12
- end
@@ -1,31 +0,0 @@
1
- Feature: Failing sample
2
-
3
- Background:
4
- Given anything
5
-
6
- Scenario: Winning
7
- When I do something good
8
- Then fail
9
-
10
- Scenario: Losing
11
- When I do something bad
12
- Then fail
13
-
14
- Scenario Outline: Passing wins
15
- When I do something good with <thing>
16
- Then fail
17
-
18
- Examples:
19
- | thing |
20
- | money |
21
- | time |
22
-
23
- Scenario Outline: Passing flops
24
- When I do something bad with <thing>
25
- Then fail
26
-
27
- Examples:
28
- | thing |
29
- | money |
30
- | time |
31
-
@@ -1,31 +0,0 @@
1
- Feature: Passing sample
2
-
3
- Background:
4
- Given anything
5
-
6
- Scenario: Winning
7
- When I do something good
8
- Then I should be successful
9
-
10
- Scenario: Losing
11
- When I do something bad
12
- Then I should not be successful
13
-
14
- Scenario Outline: Passing wins
15
- When I do something good with <thing>
16
- Then I should be successful
17
-
18
- Examples:
19
- | thing |
20
- | money |
21
- | time |
22
-
23
- Scenario Outline: Passing flops
24
- When I do something bad with <thing>
25
- Then I should not be successful
26
-
27
- Examples:
28
- | thing |
29
- | money |
30
- | time |
31
-
@@ -1,26 +0,0 @@
1
- Given /^anything$/ do
2
- end
3
-
4
- When /^I do something good$/ do
5
- end
6
-
7
- When /^I do something bad$/ do
8
- end
9
-
10
- When /^I do something good with (.+)$/ do |thing|
11
- end
12
-
13
- When /^I do something bad with (.+)$/ do |thing|
14
- end
15
-
16
- Then /^I should not be successful$/ do
17
- false.should_not == true
18
- end
19
-
20
- Then /^I should be successful$/ do
21
- true.should == true
22
- end
23
-
24
- Then /^fail$/ do
25
- false.should == true
26
- end
@@ -1,17 +0,0 @@
1
- Feature: Undefined step definitions sample
2
-
3
- Background:
4
- Given anything
5
-
6
- Scenario:
7
- When I have this undefined step definition
8
- Then fail
9
-
10
- Scenario Outline:
11
- When I have this undefined step definition
12
- Then fail
13
-
14
- Examples:
15
- | thing |
16
- | money |
17
- | time |
data/spec/spec.opts DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --format specdoc
data/spec/spec_helper.rb DELETED
@@ -1,20 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'specjour'
4
- require 'spec/autorun'
5
-
6
- class NullObject
7
- def method_missing(name, *args)
8
- self
9
- end
10
- end
11
-
12
- begin
13
- Specjour::DbScrub
14
- rescue LoadError
15
- $stderr.puts "DbScrub failed to load properly, that's okay though"
16
- end
17
-
18
- Spec::Runner.configure do |config|
19
- config.mock_with :rr
20
- end
@@ -1,105 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Specjour::CLI do
4
- subject { Specjour::CLI.new }
5
- let(:fake_pid) { 100_000_000 }
6
- before do
7
- stub(Specjour::CPU).cores.returns(27)
8
- stub(Specjour::Dispatcher).new.returns(stub!)
9
- stub(Specjour::Manager).new.returns(stub!)
10
- stub(Specjour::Worker).new.returns(stub!)
11
- end
12
-
13
- describe "#listen" do
14
- let(:manager) { NullObject.new }
15
-
16
- before do
17
- stub(Dir).pwd { '/home/someone/foo-bar' }
18
- end
19
-
20
- def manager_receives_options(options)
21
- expected_options = hash_including(options)
22
- mock(Specjour::Manager).new(expected_options).returns(manager)
23
- end
24
-
25
- it "defaults workers to system cores" do
26
- manager_receives_options("worker_size" => 27)
27
- Specjour::CLI.start %w(listen -p none)
28
- end
29
-
30
- it "accepts an array of projects to listen to" do
31
- manager_receives_options("registered_projects" => %w(one two three))
32
- Specjour::CLI.start %w(listen --projects one two three)
33
- end
34
-
35
- it "listens to the current path by default" do
36
- manager_receives_options("registered_projects" => %w(foo-bar))
37
- Specjour::CLI.start %w(listen)
38
- end
39
- end
40
-
41
- describe "#dispatch" do
42
- let(:dispatcher) { NullObject.new }
43
-
44
- def dispatcher_receives_options(options)
45
- expected_options = hash_including(options)
46
- mock(Specjour::Dispatcher).new(expected_options).returns(dispatcher)
47
- end
48
-
49
- it "defaults path to the current directory" do
50
- stub(Dir).pwd.returns("eh")
51
- dispatcher_receives_options("project_path" => "eh")
52
- Specjour::CLI.start %w(dispatch)
53
- end
54
-
55
- it "defaults workers to system cores" do
56
- dispatcher_receives_options("worker_size" => 27)
57
- Specjour::CLI.start %w(dispatch)
58
- end
59
-
60
- it "accepts a project alias" do
61
- dispatcher_receives_options("project_alias" => "eh")
62
- Specjour::CLI.start %w(dispatch --alias eh)
63
- end
64
- end
65
-
66
- describe "#work" do
67
- it "starts a worker with the required parameters" do
68
- worker = NullObject.new
69
- args = {'project_path' => "eh", 'printer_uri' => "specjour://1.1.1.1:12345", 'number' => 1, 'task' => 'run_tests'}
70
- mock(Specjour::Worker).new(hash_including(args)).returns(worker)
71
- Specjour::CLI.start %w(work --project-path eh --printer-uri specjour://1.1.1.1:12345 --number 1 --task run_tests)
72
- end
73
- end
74
-
75
- describe "#handle_logging" do
76
- before do
77
- stub(subject).options.returns({})
78
- end
79
-
80
- it "enables logging" do
81
- subject.options['log'] = true
82
- mock(Specjour).new_logger(Logger::DEBUG).returns(stub!)
83
- subject.send(:handle_logging)
84
- end
85
-
86
- it "doesn't enable logging" do
87
- dont_allow(Specjour).new_logger
88
- subject.send(:handle_logging)
89
- end
90
- end
91
-
92
- describe "#prepare" do
93
- let(:dispatcher) { NullObject.new }
94
-
95
- def dispatcher_receives_options(options)
96
- expected_options = hash_including(options)
97
- mock(Specjour::Dispatcher).new(expected_options).returns(dispatcher)
98
- end
99
-
100
- it "sets the worker task to 'prepare'" do
101
- dispatcher_receives_options("worker_task" => "prepare")
102
- Specjour::CLI.start %w(prepare)
103
- end
104
- end
105
- end