parallel_tests 0.3.7 → 0.3.8
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/VERSION +1 -1
- data/lib/parallel_specs.rb +10 -3
- data/lib/parallel_tests.rb +35 -12
- data/parallel_tests.gemspec +2 -2
- data/spec/spec_helper.rb +8 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.8
|
data/lib/parallel_specs.rb
CHANGED
@@ -2,9 +2,6 @@ require File.join(File.dirname(__FILE__), 'parallel_tests')
|
|
2
2
|
|
3
3
|
class ParallelSpecs < ParallelTests
|
4
4
|
def self.run_tests(test_files, process_number, options)
|
5
|
-
spec_opts = ['spec/parallel_spec.opts', 'spec/spec.opts'].detect{|f| File.file?(f) }
|
6
|
-
spec_opts = (spec_opts ? "-O #{spec_opts}" : nil)
|
7
|
-
color = ($stdout.tty? ? 'RSPEC_COLOR=1 ; export RSPEC_COLOR ;' : '')#display color when we are in a terminal
|
8
5
|
cmd = "RAILS_ENV=test ; export RAILS_ENV ; #{color} #{executable} #{options} #{spec_opts} #{test_files*' '}"
|
9
6
|
execute_command(cmd, process_number)
|
10
7
|
end
|
@@ -21,6 +18,16 @@ class ParallelSpecs < ParallelTests
|
|
21
18
|
|
22
19
|
protected
|
23
20
|
|
21
|
+
def self.spec_opts
|
22
|
+
opts = ['spec/parallel_spec.opts', 'spec/spec.opts'].detect{|f| File.file?(f) }
|
23
|
+
opts ? "-O #{opts}" : nil
|
24
|
+
end
|
25
|
+
|
26
|
+
#display color when we are in a terminal
|
27
|
+
def self.color
|
28
|
+
($stdout.tty? ? 'RSPEC_COLOR=1 ; export RSPEC_COLOR ;' : '')
|
29
|
+
end
|
30
|
+
|
24
31
|
def self.test_suffix
|
25
32
|
"_spec.rb"
|
26
33
|
end
|
data/lib/parallel_tests.rb
CHANGED
@@ -4,7 +4,7 @@ class ParallelTests
|
|
4
4
|
VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
|
5
5
|
|
6
6
|
# parallel:spec[2,controller] <-> parallel:spec[controller]
|
7
|
-
def self.parse_rake_args
|
7
|
+
def self.parse_rake_args(args)
|
8
8
|
num_processes = Parallel.processor_count
|
9
9
|
options = ""
|
10
10
|
if args[:count].to_s =~ /^\d*$/ # number or empty
|
@@ -19,18 +19,11 @@ class ParallelTests
|
|
19
19
|
|
20
20
|
# finds all tests and partitions them into groups
|
21
21
|
def self.tests_in_groups(root, num, options={})
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
groups = Array.new(num){{:tests => [], :size => 0}}
|
27
|
-
tests_with_sizes.each do |test, size|
|
28
|
-
smallest = groups.sort_by{|g| g[:size] }.first
|
29
|
-
smallest[:tests] << test
|
30
|
-
smallest[:size] += size
|
22
|
+
if options[:no_sort] == true
|
23
|
+
distribute_tests_in_groups(root, num)
|
24
|
+
else
|
25
|
+
sorted_tests_in_groups(root, num)
|
31
26
|
end
|
32
|
-
|
33
|
-
groups.map{|g| g[:tests] }
|
34
27
|
end
|
35
28
|
|
36
29
|
def self.run_tests(test_files, process_number, options)
|
@@ -71,6 +64,36 @@ class ParallelTests
|
|
71
64
|
|
72
65
|
protected
|
73
66
|
|
67
|
+
|
68
|
+
def self.sorted_tests_in_groups(root, num)
|
69
|
+
# always add to smallest group
|
70
|
+
groups = Array.new(num){{:tests => [], :size => 0}}
|
71
|
+
tests_with_sizes(root).each do |test, size|
|
72
|
+
smallest = groups.sort_by{|g| g[:size] }.first
|
73
|
+
smallest[:tests] << test
|
74
|
+
smallest[:size] += size
|
75
|
+
end
|
76
|
+
|
77
|
+
groups.map{|g| g[:tests] }
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.distribute_tests_in_groups(root, num)
|
81
|
+
tests = find_tests(root)
|
82
|
+
[].tap do |groups|
|
83
|
+
while ! tests.empty?
|
84
|
+
(0...num).map do |group_number|
|
85
|
+
groups[group_number] ||= []
|
86
|
+
groups[group_number] << tests.shift
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.tests_with_sizes(root)
|
93
|
+
tests_with_sizes = find_tests_with_sizes(root)
|
94
|
+
slow_specs_first(tests_with_sizes)
|
95
|
+
end
|
96
|
+
|
74
97
|
def self.slow_specs_first(tests)
|
75
98
|
tests.sort_by{|test, size| size }.reverse
|
76
99
|
end
|
data/parallel_tests.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{parallel_tests}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-17}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.executables = ["parallel_spec", "parallel_cucumber", "parallel_test"]
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/spec_helper.rb
CHANGED
@@ -70,5 +70,13 @@ def test_tests_in_groups(klass, folder, suffix)
|
|
70
70
|
# 7 + 6 + 4 + 2 = 19
|
71
71
|
groups[1].should == [@files[7],@files[6],@files[4],@files[2]]
|
72
72
|
end
|
73
|
+
|
74
|
+
it "partitions by round-robin when not sorting" do
|
75
|
+
files = ["file1.rb", "file2.rb", "file3.rb", "file4.rb"]
|
76
|
+
klass.should_receive(:find_tests).and_return(files)
|
77
|
+
groups = klass.tests_in_groups(files, 2, :no_sort => true)
|
78
|
+
groups[0].should == ["file1.rb", "file3.rb"]
|
79
|
+
groups[1].should == ["file2.rb", "file4.rb"]
|
80
|
+
end
|
73
81
|
end
|
74
82
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 8
|
9
|
+
version: 0.3.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Michael Grosser
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-17 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|