multicuke 0.1.2 → 0.1.3
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/Gemfile +2 -1
- data/lib/multicuke/runner.rb +19 -16
- data/lib/multicuke/version.rb +1 -1
- data/lib/multicuke.rb +1 -4
- data/spec/runner_spec.rb +5 -2
- data/spec/system_command_spec.rb +0 -1
- metadata +3 -3
data/Gemfile
CHANGED
data/lib/multicuke/runner.rb
CHANGED
@@ -4,15 +4,15 @@ module Multicuke
|
|
4
4
|
|
5
5
|
# Wrapper of {Kernel#system} method for test/mock
|
6
6
|
class SystemCommand
|
7
|
-
|
7
|
+
|
8
8
|
def run(full_command_as_array)
|
9
9
|
system *full_command_as_array
|
10
|
-
end
|
10
|
+
end
|
11
11
|
|
12
12
|
def exit(status = 0)
|
13
13
|
Kernel.exit(status == 0)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
end
|
17
17
|
|
18
18
|
# Set of features under one specific directory
|
@@ -45,11 +45,11 @@ module Multicuke
|
|
45
45
|
(scenarios_results.include?"failed") || (steps_results.include?"failed")
|
46
46
|
end
|
47
47
|
|
48
|
-
# Human readable name used for index page (ex: user_logout --> User logout)
|
48
|
+
# Human readable name used for index page (ex: user_logout --> User logout)
|
49
49
|
def human_name
|
50
50
|
name.gsub(/[_-]/, " ").capitalize
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
end
|
54
54
|
|
55
55
|
# Actual clas that will spawn one command process per directory of features collected
|
@@ -65,7 +65,7 @@ module Multicuke
|
|
65
65
|
# Optional full path for generated reports. Default to ../{features_root_path}.
|
66
66
|
attr_accessor :output_path
|
67
67
|
|
68
|
-
# Optional regexp for name of features directories to exclude.
|
68
|
+
# Optional regexp for name of features directories to exclude.
|
69
69
|
attr_accessor :excluded_dirs
|
70
70
|
|
71
71
|
# Optional only the features directories to be included
|
@@ -74,6 +74,9 @@ module Multicuke
|
|
74
74
|
# Array of extra options to pass to the command. Ex: ["-p", "my_profile", "--backtrace"]
|
75
75
|
attr_accessor :extra_options
|
76
76
|
|
77
|
+
# Define the size for the pool of forks. Default is 5
|
78
|
+
attr_accessor :forks_pool_size
|
79
|
+
|
77
80
|
# Full final path where html reports will be generated
|
78
81
|
attr_reader :reports_path
|
79
82
|
|
@@ -92,14 +95,15 @@ module Multicuke
|
|
92
95
|
yield self if block_given?
|
93
96
|
|
94
97
|
@dry_run = false if dry_run.nil?
|
98
|
+
@forks_pool_size ||= 5
|
95
99
|
@require_features_root_option = true if require_features_root_option.nil?
|
96
100
|
@output_dir_name = "cucumber_reports" unless output_dir_name
|
97
101
|
@output_path = File.expand_path("..", features_root_path) unless output_path
|
98
|
-
@excluded_dirs
|
99
|
-
@included_only_dirs
|
100
|
-
@extra_options
|
102
|
+
@excluded_dirs ||= []
|
103
|
+
@included_only_dirs ||= []
|
104
|
+
@extra_options ||= []
|
101
105
|
@reports_path = File.join(output_path, output_dir_name)
|
102
|
-
@system_command
|
106
|
+
@system_command ||= SystemCommand.new
|
103
107
|
end
|
104
108
|
|
105
109
|
def start
|
@@ -117,10 +121,9 @@ module Multicuke
|
|
117
121
|
if dry_run
|
118
122
|
0
|
119
123
|
else
|
120
|
-
features_dirs.
|
121
|
-
|
122
|
-
|
123
|
-
fork {
|
124
|
+
features_dirs.forkoff!(:processes => forks_pool_size){ |features_dir|
|
125
|
+
report_file_path = File.join(reports_path, "#{features_dir.name}.html")
|
126
|
+
feature_full_path = File.join(features_root_path, "#{features_dir.name}")
|
124
127
|
main_command = %W[bundle exec cucumber #{feature_full_path}]
|
125
128
|
options = %W[--format html --out #{report_file_path}]
|
126
129
|
options.concat %W[--require #{features_root_path}] if require_features_root_option
|
@@ -128,8 +131,8 @@ module Multicuke
|
|
128
131
|
result = system_command.run full_command
|
129
132
|
puts "Features '#{features_dir.name}' finished. #{result ? 'SUCCESS' : 'FAILURE'} (pid: #{Process.pid})"
|
130
133
|
exit(result)
|
131
|
-
}
|
132
134
|
}
|
135
|
+
|
133
136
|
global_exit_status = Process.waitall.inject(0) {|result, process|
|
134
137
|
pid, status = *process
|
135
138
|
result + status.exitstatus
|
@@ -148,7 +151,7 @@ module Multicuke
|
|
148
151
|
scenarios = scenarios_match ? scenarios_match.captures.first : ""
|
149
152
|
steps_match = content.match(/\d+ steps? \((.*?)\)/)
|
150
153
|
steps = steps_match ? steps_match.captures.first : ""
|
151
|
-
|
154
|
+
|
152
155
|
features_dir.scenarios_results = scenarios
|
153
156
|
features_dir.steps_results = steps
|
154
157
|
features_dir.duration = duration
|
data/lib/multicuke/version.rb
CHANGED
data/lib/multicuke.rb
CHANGED
data/spec/runner_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module Multicuke
|
4
4
|
|
@@ -9,6 +9,7 @@ module Multicuke
|
|
9
9
|
r.output_path = "my_output_path"
|
10
10
|
r.dry_run = true
|
11
11
|
r.require_features_root_option = false
|
12
|
+
r.forks_pool_size = 10
|
12
13
|
r.excluded_dirs = ["my_first_dir", "my_second_dir"]
|
13
14
|
r.extra_options = ["-p", "profile"]
|
14
15
|
end
|
@@ -17,6 +18,7 @@ module Multicuke
|
|
17
18
|
runner.output_dir_name.should == "my_reports"
|
18
19
|
runner.output_path.should == "my_output_path"
|
19
20
|
runner.dry_run.should be_true
|
21
|
+
runner.forks_pool_size.should == 10
|
20
22
|
runner.require_features_root_option.should be_false
|
21
23
|
runner.excluded_dirs.should include("my_first_dir", "my_second_dir")
|
22
24
|
runner.extra_options.should include("-p", "profile")
|
@@ -27,10 +29,11 @@ module Multicuke
|
|
27
29
|
runner.output_dir_name.should == "cucumber_reports"
|
28
30
|
runner.output_path.should match "multicuke/spec$"
|
29
31
|
runner.dry_run.should be_false
|
32
|
+
runner.forks_pool_size.should == 5
|
30
33
|
runner.require_features_root_option.should be_true
|
31
34
|
runner.excluded_dirs.should be_empty
|
32
35
|
runner.extra_options.should be_empty
|
33
36
|
end
|
34
|
-
end
|
37
|
+
end
|
35
38
|
|
36
39
|
end
|
data/spec/system_command_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multicuke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
111
|
version: '0'
|
112
112
|
requirements: []
|
113
113
|
rubyforge_project:
|
114
|
-
rubygems_version: 1.8.
|
114
|
+
rubygems_version: 1.8.25
|
115
115
|
signing_key:
|
116
116
|
specification_version: 3
|
117
117
|
summary: Run one cucumber process per features directory
|