parallel_tests 0.4.18 → 0.4.19

Sign up to get free protection for your applications and to get access to all the features.
data/Readme.md CHANGED
@@ -6,26 +6,35 @@ Setup for Rails
6
6
  ## Install
7
7
  ### Rails 3
8
8
  As gem
9
- sudo gem install parallel_tests
9
+
10
+ gem install parallel_tests
11
+
10
12
  # add to Gemfile
11
- gem "parallel_tests", :group=>:development
13
+ gem "parallel_tests", :group => :development
12
14
 
13
15
  OR as plugin
14
- sudo gem install parallel
16
+
17
+ gem install parallel
15
18
  rails plugin install git://github.com/grosser/parallel_tests.git
16
19
 
20
+ # add to Gemfile
21
+ gem "parallel", :group => :development
22
+
17
23
  ### Rails 2
18
24
 
19
25
  As gem
20
- sudo gem install parallel_tests
26
+
27
+ gem install parallel_tests
28
+
21
29
  # add to config/environments/development.rb
22
30
  config.gem "parallel_tests"
31
+
23
32
  # add to Rakefile
24
33
  begin; require 'parallel_tests/tasks'; rescue LoadError; end
25
34
 
26
35
  OR as plugin
27
36
 
28
- sudo gem install parallel
37
+ gem install parallel
29
38
  ./script/plugin install git://github.com/grosser/parallel_tests.git
30
39
 
31
40
  ## Setup
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.18
1
+ 0.4.19
@@ -3,7 +3,10 @@ require File.join(File.dirname(__FILE__), 'parallel_tests')
3
3
  class ParallelCucumber < ParallelTests
4
4
  def self.run_tests(test_files, process_number, options)
5
5
  color = ($stdout.tty? ? 'AUTOTEST=1 ; export AUTOTEST ;' : '')#display color when we are in a terminal
6
- cmd = "#{color} #{executable} #{options[:test_options]} #{test_files*' '}"
6
+ runtime_logging = "--format ParallelCucumber::RuntimeLogger --out #{runtime_log}"
7
+ cmd = "#{color} #{executable}"
8
+ cmd << runtime_logging if File.directory?(File.dirname(runtime_log))
9
+ cmd << " #{options[:test_options]} #{test_files*' '}"
7
10
  execute_command(cmd, process_number, options)
8
11
  end
9
12
 
@@ -17,6 +20,10 @@ class ParallelCucumber < ParallelTests
17
20
  end
18
21
  end
19
22
 
23
+ def self.runtime_log
24
+ 'tmp/parallel_runtime_cucumber.log'
25
+ end
26
+
20
27
  protected
21
28
 
22
29
  def self.test_suffix
@@ -0,0 +1,57 @@
1
+ class ParallelCucumber
2
+ class RuntimeLogger
3
+
4
+ def initialize(step_mother, path_or_io, options=nil)
5
+ @io = prepare_io(path_or_io)
6
+ @example_times = Hash.new(0)
7
+ end
8
+
9
+ def before_feature(_)
10
+ @start_at = Time.now.to_f
11
+ end
12
+
13
+ def after_feature(feature)
14
+ @example_times[feature.file] += Time.now.to_f - @start_at
15
+ end
16
+
17
+ def after_features(*args)
18
+ lock_output do
19
+ @io.puts @example_times.map { |file, time| "#{file}:#{time}" }
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def prepare_io(path_or_io)
26
+ if path_or_io.respond_to?(:write)
27
+ path_or_io
28
+ else # its a path
29
+ File.open(path_or_io, 'w').close # clean out the file
30
+ file = File.open(path_or_io, 'a')
31
+
32
+ at_exit do
33
+ unless file.closed?
34
+ file.flush
35
+ file.close
36
+ end
37
+ end
38
+
39
+ file
40
+ end
41
+ end
42
+
43
+ # do not let multiple processes get in each others way
44
+ def lock_output
45
+ if File === @io
46
+ begin
47
+ @io.flock File::LOCK_EX
48
+ yield
49
+ ensure
50
+ @io.flock File::LOCK_UN
51
+ end
52
+ else
53
+ yield
54
+ end
55
+ end
56
+ end
57
+ end
@@ -20,6 +20,10 @@ class ParallelSpecs < ParallelTests
20
20
  cmd or raise("Can't find executables rspec or spec")
21
21
  end
22
22
 
23
+ def self.runtime_log
24
+ 'tmp/parallel_profile.log'
25
+ end
26
+
23
27
  protected
24
28
 
25
29
  # so it can be stubbed....
@@ -54,6 +54,10 @@ class ParallelTests
54
54
  process_number == 0 ? '' : process_number + 1
55
55
  end
56
56
 
57
+ def self.runtime_log
58
+ '__foo__'
59
+ end
60
+
57
61
  protected
58
62
 
59
63
  # read output of the process and print in in chucks
@@ -111,7 +115,7 @@ class ParallelTests
111
115
 
112
116
  def self.tests_with_runtime(root)
113
117
  tests = find_tests(root)
114
- lines = File.read("#{root}/../tmp/parallel_profile.log").split("\n") rescue []
118
+ lines = File.read("#{root}/../#{runtime_log}").split("\n") rescue []
115
119
 
116
120
  # use recorded test runtime if we got enough data
117
121
  if lines.size * 1.5 > tests.size
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{parallel_tests}
8
- s.version = "0.4.18"
8
+ s.version = "0.4.19"
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{2011-05-17}
12
+ s.date = %q{2011-06-04}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.executables = ["parallel_cucumber", "parallel_spec", "parallel_test"]
15
15
  s.files = [
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
23
23
  "bin/parallel_spec",
24
24
  "bin/parallel_test",
25
25
  "lib/parallel_cucumber.rb",
26
+ "lib/parallel_cucumber/runtime_logger.rb",
26
27
  "lib/parallel_specs.rb",
27
28
  "lib/parallel_specs/spec_runtime_logger.rb",
28
29
  "lib/parallel_tests.rb",
data/spec/spec_helper.rb CHANGED
@@ -53,7 +53,7 @@ def test_tests_in_groups(klass, folder, suffix)
53
53
  file
54
54
  end
55
55
 
56
- @log = "#{FAKE_RAILS_ROOT}/tmp/parallel_profile.log"
56
+ @log = "#{FAKE_RAILS_ROOT}/#{klass.runtime_log}"
57
57
  `mkdir #{File.dirname(@log)}`
58
58
  `rm -f #{@log}`
59
59
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel_tests
3
3
  version: !ruby/object:Gem::Version
4
- hash: 43
4
+ hash: 41
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 18
10
- version: 0.4.18
9
+ - 19
10
+ version: 0.4.19
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Grosser
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-17 00:00:00 +02:00
18
+ date: 2011-06-04 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ">="
@@ -28,10 +28,10 @@ dependencies:
28
28
  segments:
29
29
  - 0
30
30
  version: "0"
31
- requirement: *id001
32
- prerelease: false
33
31
  type: :runtime
34
32
  name: parallel
33
+ version_requirements: *id001
34
+ prerelease: false
35
35
  description:
36
36
  email: grosser.michael@gmail.com
37
37
  executables:
@@ -53,6 +53,7 @@ files:
53
53
  - bin/parallel_spec
54
54
  - bin/parallel_test
55
55
  - lib/parallel_cucumber.rb
56
+ - lib/parallel_cucumber/runtime_logger.rb
56
57
  - lib/parallel_specs.rb
57
58
  - lib/parallel_specs/spec_runtime_logger.rb
58
59
  - lib/parallel_tests.rb