specjour 0.4.1 → 0.5.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/History.markdown +35 -0
- data/README.markdown +9 -0
- data/Rakefile +4 -5
- data/lib/specjour/cli.rb +54 -30
- data/lib/specjour/configuration.rb +20 -8
- data/lib/specjour/connection.rb +4 -5
- data/lib/specjour/cpu.rb +5 -1
- data/lib/specjour/cucumber/preloader.rb +2 -1
- data/lib/specjour/cucumber.rb +0 -9
- data/lib/specjour/db_scrub.rb +8 -22
- data/lib/specjour/dispatcher.rb +33 -49
- data/lib/specjour/fork.rb +26 -0
- data/lib/specjour/loader.rb +129 -0
- data/lib/specjour/manager.rb +49 -33
- data/lib/specjour/printer.rb +70 -73
- data/lib/specjour/rspec/distributed_formatter.rb +1 -1
- data/lib/specjour/rspec/final_report.rb +2 -2
- data/lib/specjour/rspec/marshalable_exception.rb +4 -0
- data/lib/specjour/rspec/preloader.rb +10 -5
- data/lib/specjour/rspec/runner.rb +8 -7
- data/lib/specjour/rspec.rb +1 -6
- data/lib/specjour/rsync_daemon.rb +10 -7
- data/lib/specjour/worker.rb +5 -27
- data/lib/specjour.rb +15 -5
- metadata +70 -78
- data/lib/specjour/cucumber/main_ext.rb +0 -3
- data/lib/specjour/quiet_fork.rb +0 -11
data/lib/specjour/worker.rb
CHANGED
@@ -1,24 +1,17 @@
|
|
1
1
|
module Specjour
|
2
|
-
require 'specjour/rspec'
|
3
|
-
require 'specjour/cucumber'
|
4
2
|
|
5
3
|
class Worker
|
6
4
|
include Protocol
|
7
5
|
include SocketHelper
|
8
6
|
attr_accessor :printer_uri
|
9
|
-
attr_reader :
|
7
|
+
attr_reader :number
|
10
8
|
|
11
9
|
def initialize(options = {})
|
12
10
|
ARGV.replace []
|
13
11
|
$stdout = StringIO.new if options[:quiet]
|
14
|
-
@project_path = options[:project_path]
|
15
12
|
@number = options[:number].to_i
|
16
|
-
@preload_spec = options[:preload_spec]
|
17
|
-
@preload_feature = options[:preload_feature]
|
18
|
-
@task = options[:task]
|
19
13
|
self.printer_uri = options[:printer_uri]
|
20
14
|
set_env_variables
|
21
|
-
Dir.chdir(project_path)
|
22
15
|
Specjour.load_custom_hooks
|
23
16
|
end
|
24
17
|
|
@@ -27,13 +20,10 @@ module Specjour
|
|
27
20
|
end
|
28
21
|
|
29
22
|
def prepare
|
30
|
-
load_app
|
31
23
|
Configuration.prepare.call
|
32
|
-
Kernel.exit!
|
33
24
|
end
|
34
25
|
|
35
26
|
def run_tests
|
36
|
-
load_app
|
37
27
|
Configuration.after_fork.call
|
38
28
|
run_times = Hash.new(0)
|
39
29
|
|
@@ -42,32 +32,20 @@ module Specjour
|
|
42
32
|
time = Benchmark.realtime { run_test test }
|
43
33
|
profile(test, time)
|
44
34
|
run_times[test_type(test)] += time
|
35
|
+
connection.send_message(:done)
|
45
36
|
end
|
46
37
|
|
47
38
|
send_run_times(run_times)
|
48
|
-
|
39
|
+
ensure
|
49
40
|
connection.disconnect
|
50
41
|
end
|
51
42
|
|
52
|
-
def start
|
53
|
-
send task
|
54
|
-
end
|
55
|
-
|
56
43
|
protected
|
57
44
|
|
58
45
|
def connection
|
59
46
|
@connection ||= printer_connection
|
60
47
|
end
|
61
48
|
|
62
|
-
def load_app
|
63
|
-
RSpec::Preloader.load(preload_spec) if preload_spec
|
64
|
-
Cucumber::Preloader.load(preload_feature) if preload_feature
|
65
|
-
rescue StandardError => exception
|
66
|
-
$stderr.puts "Caught exception: #{exception.class} #{exception.message}"
|
67
|
-
Specjour.logger.debug exception.backtrace.join("\n")
|
68
|
-
$stderr.puts "Proceeding... you may need to re-run the dispatcher."
|
69
|
-
end
|
70
|
-
|
71
49
|
def printer_connection
|
72
50
|
Connection.new printer_uri
|
73
51
|
end
|
@@ -96,11 +74,11 @@ module Specjour
|
|
96
74
|
end
|
97
75
|
|
98
76
|
def run_feature(feature)
|
99
|
-
|
77
|
+
Cucumber::Runner.run(feature, connection)
|
100
78
|
end
|
101
79
|
|
102
80
|
def run_spec(spec)
|
103
|
-
|
81
|
+
RSpec::Runner.run(spec, connection)
|
104
82
|
end
|
105
83
|
|
106
84
|
def send_run_times(run_times)
|
data/lib/specjour.rb
CHANGED
@@ -17,10 +17,11 @@ module Specjour
|
|
17
17
|
autoload :Connection, 'specjour/connection'
|
18
18
|
autoload :DbScrub, 'specjour/db_scrub'
|
19
19
|
autoload :Dispatcher, 'specjour/dispatcher'
|
20
|
+
autoload :Fork, 'specjour/fork'
|
21
|
+
autoload :Loader, 'specjour/loader'
|
20
22
|
autoload :Manager, 'specjour/manager'
|
21
23
|
autoload :Printer, 'specjour/printer'
|
22
24
|
autoload :Protocol, 'specjour/protocol'
|
23
|
-
autoload :QuietFork, 'specjour/quiet_fork'
|
24
25
|
autoload :RsyncDaemon, 'specjour/rsync_daemon'
|
25
26
|
autoload :SocketHelper, 'specjour/socket_helper'
|
26
27
|
autoload :Worker, 'specjour/worker'
|
@@ -28,7 +29,7 @@ module Specjour
|
|
28
29
|
autoload :Cucumber, 'specjour/cucumber'
|
29
30
|
autoload :RSpec, 'specjour/rspec'
|
30
31
|
|
31
|
-
VERSION = "0.
|
32
|
+
VERSION = "0.5.0"
|
32
33
|
HOOKS_PATH = "./.specjour/hooks.rb"
|
33
34
|
|
34
35
|
def self.interrupted?
|
@@ -36,9 +37,18 @@ module Specjour
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def self.interrupted=(bool)
|
39
|
-
Cucumber.wants_to_quit
|
40
|
-
RSpec.wants_to_quit
|
41
40
|
@interrupted = bool
|
41
|
+
if bool
|
42
|
+
will_quit(:RSpec)
|
43
|
+
will_quit(:Cucumber)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.will_quit(framework)
|
48
|
+
if Object.const_defined?(framework)
|
49
|
+
framework = Object.const_get(framework)
|
50
|
+
framework.wants_to_quit = true if framework.respond_to?(:wants_to_quit=)
|
51
|
+
end
|
42
52
|
end
|
43
53
|
|
44
54
|
def self.logger
|
@@ -62,7 +72,7 @@ module Specjour
|
|
62
72
|
def self.trap_interrupt
|
63
73
|
Signal.trap('INT') do
|
64
74
|
self.interrupted = true
|
65
|
-
|
75
|
+
abort("\n")
|
66
76
|
end
|
67
77
|
end
|
68
78
|
|
metadata
CHANGED
@@ -1,109 +1,106 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: specjour
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.4.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Sandro Turriate
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-02-20 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: dnssd
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2156993440 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.0
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: thor
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: *2156993440
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: thor
|
27
|
+
requirement: &2156992940 !ruby/object:Gem::Requirement
|
31
28
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
35
32
|
version: 0.14.0
|
36
33
|
type: :runtime
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: rspec
|
40
34
|
prerelease: false
|
41
|
-
|
35
|
+
version_requirements: *2156992940
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &2156992460 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 2.
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.8.0
|
47
44
|
type: :development
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: rr
|
51
45
|
prerelease: false
|
52
|
-
|
46
|
+
version_requirements: *2156992460
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rr
|
49
|
+
requirement: &2156991900 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: 0.
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.4
|
58
55
|
type: :development
|
59
|
-
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: cucumber
|
62
56
|
prerelease: false
|
63
|
-
|
57
|
+
version_requirements: *2156991900
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: cucumber
|
60
|
+
requirement: &2156991400 !ruby/object:Gem::Requirement
|
64
61
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.1.4
|
69
66
|
type: :development
|
70
|
-
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: yard
|
73
67
|
prerelease: false
|
74
|
-
|
68
|
+
version_requirements: *2156991400
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: &2156990920 !ruby/object:Gem::Requirement
|
75
72
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: 0.
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.7.2
|
80
77
|
type: :development
|
81
|
-
|
82
|
-
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2156990920
|
80
|
+
description: ! " Specjour splits your RSpec suite across multiple machines, and
|
81
|
+
multiple\n cores per machine, to run super-parallel-fast! Also works with Cucumber.\n"
|
83
82
|
email: sandro.turriate@gmail.com
|
84
|
-
executables:
|
83
|
+
executables:
|
85
84
|
- specjour
|
86
85
|
extensions: []
|
87
|
-
|
88
86
|
extra_rdoc_files: []
|
89
|
-
|
90
|
-
files:
|
87
|
+
files:
|
91
88
|
- lib/specjour/cli.rb
|
92
89
|
- lib/specjour/configuration.rb
|
93
90
|
- lib/specjour/connection.rb
|
94
91
|
- lib/specjour/cpu.rb
|
95
92
|
- lib/specjour/cucumber/distributed_formatter.rb
|
96
93
|
- lib/specjour/cucumber/final_report.rb
|
97
|
-
- lib/specjour/cucumber/main_ext.rb
|
98
94
|
- lib/specjour/cucumber/preloader.rb
|
99
95
|
- lib/specjour/cucumber/runner.rb
|
100
96
|
- lib/specjour/cucumber.rb
|
101
97
|
- lib/specjour/db_scrub.rb
|
102
98
|
- lib/specjour/dispatcher.rb
|
99
|
+
- lib/specjour/fork.rb
|
100
|
+
- lib/specjour/loader.rb
|
103
101
|
- lib/specjour/manager.rb
|
104
102
|
- lib/specjour/printer.rb
|
105
103
|
- lib/specjour/protocol.rb
|
106
|
-
- lib/specjour/quiet_fork.rb
|
107
104
|
- lib/specjour/rspec/distributed_formatter.rb
|
108
105
|
- lib/specjour/rspec/final_report.rb
|
109
106
|
- lib/specjour/rspec/marshalable_exception.rb
|
@@ -120,33 +117,28 @@ files:
|
|
120
117
|
- History.markdown
|
121
118
|
- Rakefile
|
122
119
|
- bin/specjour
|
123
|
-
has_rdoc: true
|
124
120
|
homepage: https://github.com/sandro/specjour
|
125
121
|
licenses: []
|
126
|
-
|
127
122
|
post_install_message:
|
128
123
|
rdoc_options: []
|
129
|
-
|
130
|
-
require_paths:
|
124
|
+
require_paths:
|
131
125
|
- lib
|
132
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
127
|
none: false
|
134
|
-
requirements:
|
135
|
-
- -
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version:
|
138
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
133
|
none: false
|
140
|
-
requirements:
|
141
|
-
- -
|
142
|
-
- !ruby/object:Gem::Version
|
134
|
+
requirements:
|
135
|
+
- - ! '>='
|
136
|
+
- !ruby/object:Gem::Version
|
143
137
|
version: 1.3.6
|
144
138
|
requirements: []
|
145
|
-
|
146
139
|
rubyforge_project:
|
147
|
-
rubygems_version: 1.6
|
140
|
+
rubygems_version: 1.8.6
|
148
141
|
signing_key:
|
149
142
|
specification_version: 3
|
150
143
|
summary: Distribute your spec suite amongst your LAN via Bonjour.
|
151
144
|
test_files: []
|
152
|
-
|