right_develop 3.0.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.swn +0 -0
- data/.swo +0 -0
- data/VERSION +1 -1
- data/lib/right_develop/ci/formatters/rspec_v1.rb +99 -0
- data/lib/right_develop/ci/formatters/rspec_v2.rb +69 -0
- data/lib/right_develop/ci/formatters/rspec_v3.rb +100 -0
- data/lib/right_develop/ci/java_cucumber_formatter.rb +32 -22
- data/lib/right_develop/ci/java_spec_formatter.rb +20 -165
- data/lib/right_develop/ci/rake_task.rb +33 -12
- data/lib/right_develop/ci.rb +1 -1
- data/right_develop.gemspec +11 -6
- metadata +10 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e01b5ce2d7618e152c66735ac44b22fb6e013a66
|
4
|
+
data.tar.gz: 00b2dd83ca8f49e8255ac6b75c665e0588f489a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d835370c83b2c7983dfe9f6dee7ec9751d6b48b3b4ed5ddfa0cac03b8628a87d8915344916478168e1597f6030423a5dd488b40779f91d90def304feadc5a43
|
7
|
+
data.tar.gz: e99561821db8ee543dd3367138ccd30f8e93184437a64cce120a4dbfd815d276b143e70a8f34cf51f30659d2b3f093b4a1a123ee8158600b33d8aa3a941a70d3
|
data/.swn
ADDED
Binary file
|
data/.swo
ADDED
Binary file
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.
|
1
|
+
3.0.1
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module RightDevelop::CI::Formatters
|
2
|
+
# JUnit XML output formatter for RSpec 1.x
|
3
|
+
class RSpecV1 < Spec::Runner::Formatter::BaseTextFormatter
|
4
|
+
def initialize(*args)
|
5
|
+
super(*args)
|
6
|
+
@current_example_group = nil
|
7
|
+
@test_times = {}
|
8
|
+
@test_groups = {}
|
9
|
+
@test_results = {}
|
10
|
+
@test_failures = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def example_group_started(example)
|
14
|
+
@current_example_group = example
|
15
|
+
end
|
16
|
+
|
17
|
+
def example_started(example)
|
18
|
+
@test_groups[example] ||= @current_example_group
|
19
|
+
@example_started_at = Time.now
|
20
|
+
end
|
21
|
+
|
22
|
+
def example_passed(example)
|
23
|
+
@test_groups[example] ||= @current_example_group
|
24
|
+
@test_times[example] = Time.now - @example_started_at
|
25
|
+
@test_results[example] = 'passed'
|
26
|
+
end
|
27
|
+
|
28
|
+
def example_failed(example, counter, failure)
|
29
|
+
@test_groups[example] ||= @current_example_group
|
30
|
+
@test_times[example] = Time.now - @example_started_at
|
31
|
+
@test_results[example] = 'failed'
|
32
|
+
@test_failures[example] = failure
|
33
|
+
end
|
34
|
+
|
35
|
+
def example_pending(example, message, deprecated_pending_location=nil)
|
36
|
+
@test_groups[example] ||= @current_example_group
|
37
|
+
@test_times[example] = Time.now - @example_started_at
|
38
|
+
@test_results[example] = 'pending'
|
39
|
+
end
|
40
|
+
|
41
|
+
def dump_summary(duration, example_count, failure_count, pending_count)
|
42
|
+
builder = Builder::XmlMarkup.new :indent => 2
|
43
|
+
builder.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
|
44
|
+
builder.testsuite :errors => 0, :failures => failure_count, :skipped => pending_count, :tests => example_count, :time => duration, :timestamp => Time.now.iso8601 do
|
45
|
+
builder.properties
|
46
|
+
@test_results.each_pair do |test, result|
|
47
|
+
classname = purify(classname_for(test))
|
48
|
+
full_description = purify(test.description)
|
49
|
+
|
50
|
+
# The full description always begins with the classname, but this is useless info when
|
51
|
+
# generating the XML report.
|
52
|
+
if full_description.start_with?(classname)
|
53
|
+
full_description = full_description[classname.length..-1].strip
|
54
|
+
end
|
55
|
+
|
56
|
+
builder.testcase(:classname => classname.to_sym, :name => full_description, :time => @test_times[test]) do
|
57
|
+
case result
|
58
|
+
when "failed"
|
59
|
+
builder.failure :message => "failed #{full_description}", :type => "failed" do
|
60
|
+
builder.cdata! purify(failure_details_for(test))
|
61
|
+
end
|
62
|
+
when "pending" then
|
63
|
+
builder.skipped
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
output.puts builder.target!
|
69
|
+
end
|
70
|
+
|
71
|
+
def dump_failure(counter, failure)
|
72
|
+
# no-op; our summary contains everything
|
73
|
+
end
|
74
|
+
|
75
|
+
def dump_pending()
|
76
|
+
# no-op; our summary contains everything
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def failure_details_for(example)
|
82
|
+
exception = @test_failures[example].exception
|
83
|
+
exception.nil? ? "" : "#{exception.message}\n#{format_backtrace(exception.backtrace)}"
|
84
|
+
end
|
85
|
+
|
86
|
+
def classname_for(example)
|
87
|
+
# Take our best guess, by looking at the description of the example group
|
88
|
+
# and assuming the first word is a class name
|
89
|
+
group = @test_groups[example]
|
90
|
+
klass = group.description.split(/\s+/).first
|
91
|
+
klass = RightDevelop::CI::Util.pseudo_java_class_name(klass)
|
92
|
+
"rspec.#{klass}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def purify(untrusted)
|
96
|
+
RightDevelop::CI::Util.purify(untrusted)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module RightDevelop::CI::Formatters
|
2
|
+
# JUnit XML output formatter for RSpec 2.x
|
3
|
+
class RSpecV2 < RSpec::Core::Formatters::BaseFormatter
|
4
|
+
def initialize(*args)
|
5
|
+
super(*args)
|
6
|
+
@test_results = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def example_passed(example)
|
10
|
+
@test_results << example
|
11
|
+
end
|
12
|
+
|
13
|
+
def example_failed(example)
|
14
|
+
@test_results << example
|
15
|
+
end
|
16
|
+
|
17
|
+
def example_pending(example)
|
18
|
+
@test_results << example
|
19
|
+
end
|
20
|
+
|
21
|
+
def dump_summary(duration, example_count, failure_count, pending_count)
|
22
|
+
builder = Builder::XmlMarkup.new :indent => 2
|
23
|
+
builder.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
|
24
|
+
builder.testsuite :errors => 0, :failures => failure_count, :skipped => pending_count, :tests => example_count, :time => duration, :timestamp => Time.now.iso8601 do
|
25
|
+
builder.properties
|
26
|
+
@test_results.each do |test|
|
27
|
+
classname = purify(classname_for(test))
|
28
|
+
full_description = purify(test.full_description)
|
29
|
+
time = test.metadata[:execution_result][:run_time]
|
30
|
+
|
31
|
+
# The full description always begins with the classname, but this is useless info when
|
32
|
+
# generating the XML report.
|
33
|
+
if full_description.start_with?(classname)
|
34
|
+
full_description = full_description[classname.length..-1].strip
|
35
|
+
end
|
36
|
+
|
37
|
+
builder.testcase(:classname => classname.to_sym, :name => full_description, :time => time) do
|
38
|
+
case test.metadata[:execution_result][:status]
|
39
|
+
when "failed"
|
40
|
+
builder.failure :message => "failed #{full_description}", :type => "failed" do
|
41
|
+
builder.cdata! purify(failure_details_for(test))
|
42
|
+
end
|
43
|
+
when "pending" then
|
44
|
+
builder.skipped
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
output.puts builder.target!
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
def failure_details_for(example)
|
55
|
+
exception = example.exception
|
56
|
+
exception.nil? ? "" : "#{exception.message}\n#{format_backtrace(exception.backtrace, example).join("\n")}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def classname_for(example)
|
60
|
+
klass = example.example_group.top_level_description || example.example_group.described_class
|
61
|
+
klass = RightDevelop::CI::Util.pseudo_java_class_name(klass.to_s)
|
62
|
+
"rspec.#{klass}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def purify(untrusted)
|
66
|
+
RightDevelop::CI::Util.purify(untrusted)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module RightDevelop::CI::Formatters
|
2
|
+
# JUnit XML output formatter for RSpec 3.x
|
3
|
+
class RSpecV3 < RSpec::Core::Formatters::BaseFormatter
|
4
|
+
RSpec::Core::Formatters.register self,
|
5
|
+
:start, :example_group_started, :start_dump,
|
6
|
+
:example_started, :example_passed, :example_failed,
|
7
|
+
:example_pending, :dump_summary
|
8
|
+
|
9
|
+
def initialize(output)
|
10
|
+
super(output)
|
11
|
+
@failed_examples = []
|
12
|
+
@example_group_number = 0
|
13
|
+
@example_number = 0
|
14
|
+
|
15
|
+
@test_results = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def start(notification)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def example_group_started(notification)
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def start_dump(notification)
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
def example_started(notification)
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def example_passed(passed)
|
35
|
+
@test_results << passed
|
36
|
+
end
|
37
|
+
|
38
|
+
def example_failed(failure)
|
39
|
+
@test_results << failure
|
40
|
+
end
|
41
|
+
|
42
|
+
def example_pending(pending)
|
43
|
+
@test_results << pending
|
44
|
+
end
|
45
|
+
|
46
|
+
def dump_summary(summary)
|
47
|
+
builder = Builder::XmlMarkup.new :indent => 2
|
48
|
+
builder.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
|
49
|
+
builder.testsuite :errors => 0,
|
50
|
+
:failures => summary.failure_count,
|
51
|
+
:skipped => summary.pending_count,
|
52
|
+
:tests => summary.example_count,
|
53
|
+
:time => summary.duration,
|
54
|
+
:timestamp => Time.now.iso8601 do
|
55
|
+
builder.properties
|
56
|
+
@test_results.each do |test|
|
57
|
+
classname = purify(classname_for(test.example))
|
58
|
+
full_description = purify(test.example.full_description)
|
59
|
+
time = test.example.metadata[:execution_result][:run_time]
|
60
|
+
|
61
|
+
# The full description always begins with the classname, but this is useless info when
|
62
|
+
# generating the XML report.
|
63
|
+
if full_description.start_with?(classname)
|
64
|
+
full_description = full_description[classname.length..-1].strip
|
65
|
+
end
|
66
|
+
|
67
|
+
builder.testcase(:classname => classname.to_sym, :name => full_description, :time => time) do
|
68
|
+
case test.example.metadata[:execution_result][:status]
|
69
|
+
when "failed"
|
70
|
+
builder.failure :message => "failed #{full_description}", :type => "failed" do
|
71
|
+
builder.cdata! purify(failure_details_for(test))
|
72
|
+
end
|
73
|
+
when "pending" then
|
74
|
+
builder.skipped
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
output.puts builder.target!
|
81
|
+
end
|
82
|
+
|
83
|
+
protected
|
84
|
+
|
85
|
+
def failure_details_for(failure)
|
86
|
+
exception = failure.example.exception
|
87
|
+
exception.nil? ? "" : "#{exception.message}\n#{failure.formatted_backtrace.join("\n")}"
|
88
|
+
end
|
89
|
+
|
90
|
+
def classname_for(example)
|
91
|
+
klass = example.example_group.top_level_description || example.example_group.described_class
|
92
|
+
klass = RightDevelop::CI::Util.pseudo_java_class_name(klass.to_s)
|
93
|
+
"rspec.#{klass}"
|
94
|
+
end
|
95
|
+
|
96
|
+
def purify(untrusted)
|
97
|
+
RightDevelop::CI::Util.purify(untrusted)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -26,35 +26,45 @@
|
|
26
26
|
# Cucumber sometimes avoids loading us; not sure why!
|
27
27
|
require 'right_develop'
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
|
30
|
+
['cucumber', 'cucumber/formatter/junit'].each do |f|
|
31
|
+
begin
|
32
|
+
require f
|
33
|
+
rescue LoadError
|
34
|
+
# no-op, we will raise later
|
35
|
+
end
|
36
|
+
end
|
31
37
|
|
32
38
|
module RightDevelop::CI
|
33
|
-
|
34
|
-
|
39
|
+
if defined?(Cucumber)
|
40
|
+
class JavaCucumberFormatter < Cucumber::Formatter::Junit
|
41
|
+
private
|
35
42
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
+
def build_testcase(duration, status, exception = nil, suffix = "")
|
44
|
+
@time += duration
|
45
|
+
# Use "cucumber" as a pseudo-package, and the feature name as a pseudo-class
|
46
|
+
classname = "cucumber.#{RightDevelop::CI::Util.pseudo_java_class_name(@feature_name)}"
|
47
|
+
name = "#{@scenario}#{suffix}"
|
48
|
+
pending = [:pending, :undefined].include?(status)
|
49
|
+
passed = (status == :passed || (pending && !@options[:strict]))
|
43
50
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
51
|
+
@builder.testcase(:classname => classname.to_sym, :name => name, :time => "%.6f" % duration) do
|
52
|
+
unless passed
|
53
|
+
@builder.failure(:message => "#{status.to_s} #{name}", :type => status.to_s) do
|
54
|
+
@builder.cdata! @output
|
55
|
+
@builder.cdata!(format_exception(exception)) if exception
|
56
|
+
end
|
57
|
+
@failures += 1
|
58
|
+
end
|
59
|
+
if passed and (status == :skipped || pending)
|
60
|
+
@builder.skipped
|
61
|
+
@skipped += 1
|
49
62
|
end
|
50
|
-
@failures += 1
|
51
|
-
end
|
52
|
-
if passed and (status == :skipped || pending)
|
53
|
-
@builder.skipped
|
54
|
-
@skipped += 1
|
55
63
|
end
|
64
|
+
@tests += 1
|
56
65
|
end
|
57
|
-
@tests += 1
|
58
66
|
end
|
67
|
+
else
|
68
|
+
JavaCucumberFormatter = Object
|
59
69
|
end
|
60
70
|
end
|
@@ -34,171 +34,26 @@ require 'builder'
|
|
34
34
|
end
|
35
35
|
|
36
36
|
module RightDevelop::CI
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
def example_pending(example)
|
54
|
-
@test_results << example
|
55
|
-
end
|
56
|
-
|
57
|
-
def failure_details_for(example)
|
58
|
-
exception = example.exception
|
59
|
-
exception.nil? ? "" : "#{exception.message}\n#{format_backtrace(exception.backtrace, example).join("\n")}"
|
60
|
-
end
|
61
|
-
|
62
|
-
def classname_for(example)
|
63
|
-
klass = example.example_group.top_level_description || example.example_group.described_class
|
64
|
-
klass = RightDevelop::CI::Util.pseudo_java_class_name(klass.to_s)
|
65
|
-
"rspec.#{klass}"
|
66
|
-
end
|
67
|
-
|
68
|
-
def dump_summary(duration, example_count, failure_count, pending_count)
|
69
|
-
builder = Builder::XmlMarkup.new :indent => 2
|
70
|
-
builder.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
|
71
|
-
builder.testsuite :errors => 0, :failures => failure_count, :skipped => pending_count, :tests => example_count, :time => duration, :timestamp => Time.now.iso8601 do
|
72
|
-
builder.properties
|
73
|
-
@test_results.each do |test|
|
74
|
-
classname = purify(classname_for(test))
|
75
|
-
full_description = purify(test.full_description)
|
76
|
-
time = test.metadata[:execution_result][:run_time]
|
77
|
-
|
78
|
-
# The full description always begins with the classname, but this is useless info when
|
79
|
-
# generating the XML report.
|
80
|
-
if full_description.start_with?(classname)
|
81
|
-
full_description = full_description[classname.length..-1].strip
|
82
|
-
end
|
83
|
-
|
84
|
-
builder.testcase(:classname => classname.to_sym, :name => full_description, :time => time) do
|
85
|
-
case test.metadata[:execution_result][:status]
|
86
|
-
when "failed"
|
87
|
-
builder.failure :message => "failed #{full_description}", :type => "failed" do
|
88
|
-
builder.cdata! purify(failure_details_for(test))
|
89
|
-
end
|
90
|
-
when "pending" then
|
91
|
-
builder.skipped
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
output.puts builder.target!
|
97
|
-
end
|
98
|
-
|
99
|
-
def purify(untrusted)
|
100
|
-
RightDevelop::CI::Util.purify(untrusted)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
elsif defined?(::Spec::Runner)
|
104
|
-
# RSpec 1.x
|
105
|
-
class JavaSpecFormatter < Spec::Runner::Formatter::BaseTextFormatter
|
106
|
-
def initialize(*args)
|
107
|
-
super(*args)
|
108
|
-
@current_example_group = nil
|
109
|
-
@test_times = {}
|
110
|
-
@test_groups = {}
|
111
|
-
@test_results = {}
|
112
|
-
@test_failures = {}
|
113
|
-
end
|
114
|
-
|
115
|
-
def example_group_started(example)
|
116
|
-
@current_example_group = example
|
117
|
-
end
|
118
|
-
|
119
|
-
def example_started(example)
|
120
|
-
@test_groups[example] ||= @current_example_group
|
121
|
-
@example_started_at = Time.now
|
122
|
-
end
|
123
|
-
|
124
|
-
def example_passed(example)
|
125
|
-
@test_groups[example] ||= @current_example_group
|
126
|
-
@test_times[example] = Time.now - @example_started_at
|
127
|
-
@test_results[example] = 'passed'
|
128
|
-
end
|
129
|
-
|
130
|
-
def example_failed(example, counter, failure)
|
131
|
-
@test_groups[example] ||= @current_example_group
|
132
|
-
@test_times[example] = Time.now - @example_started_at
|
133
|
-
@test_results[example] = 'failed'
|
134
|
-
@test_failures[example] = failure
|
135
|
-
end
|
136
|
-
|
137
|
-
def example_pending(example, message, deprecated_pending_location=nil)
|
138
|
-
@test_groups[example] ||= @current_example_group
|
139
|
-
@test_times[example] = Time.now - @example_started_at
|
140
|
-
@test_results[example] = 'pending'
|
141
|
-
end
|
142
|
-
|
143
|
-
def dump_summary(duration, example_count, failure_count, pending_count)
|
144
|
-
builder = Builder::XmlMarkup.new :indent => 2
|
145
|
-
builder.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
|
146
|
-
builder.testsuite :errors => 0, :failures => failure_count, :skipped => pending_count, :tests => example_count, :time => duration, :timestamp => Time.now.iso8601 do
|
147
|
-
builder.properties
|
148
|
-
@test_results.each_pair do |test, result|
|
149
|
-
classname = purify(classname_for(test))
|
150
|
-
full_description = purify(test.description)
|
151
|
-
|
152
|
-
# The full description always begins with the classname, but this is useless info when
|
153
|
-
# generating the XML report.
|
154
|
-
if full_description.start_with?(classname)
|
155
|
-
full_description = full_description[classname.length..-1].strip
|
156
|
-
end
|
157
|
-
|
158
|
-
builder.testcase(:classname => classname.to_sym, :name => full_description, :time => @test_times[test]) do
|
159
|
-
case result
|
160
|
-
when "failed"
|
161
|
-
builder.failure :message => "failed #{full_description}", :type => "failed" do
|
162
|
-
builder.cdata! purify(failure_details_for(test))
|
163
|
-
end
|
164
|
-
when "pending" then
|
165
|
-
builder.skipped
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
output.puts builder.target!
|
171
|
-
end
|
172
|
-
|
173
|
-
def dump_failure(counter, failure)
|
174
|
-
# no-op; our summary contains everything
|
175
|
-
end
|
176
|
-
|
177
|
-
def dump_pending()
|
178
|
-
# no-op; our summary contains everything
|
179
|
-
end
|
180
|
-
|
181
|
-
private
|
182
|
-
|
183
|
-
def failure_details_for(example)
|
184
|
-
exception = @test_failures[example].exception
|
185
|
-
exception.nil? ? "" : "#{exception.message}\n#{format_backtrace(exception.backtrace)}"
|
186
|
-
end
|
187
|
-
|
188
|
-
def classname_for(example)
|
189
|
-
# Take our best guess, by looking at the description of the example group
|
190
|
-
# and assuming the first word is a class name
|
191
|
-
group = @test_groups[example]
|
192
|
-
klass = group.description.split(/\s+/).first
|
193
|
-
klass = RightDevelop::CI::Util.pseudo_java_class_name(klass)
|
194
|
-
"rspec.#{klass}"
|
195
|
-
end
|
196
|
-
|
197
|
-
def purify(untrusted)
|
198
|
-
RightDevelop::CI::Util.purify(untrusted)
|
199
|
-
end
|
200
|
-
end
|
37
|
+
spec = Gem.loaded_specs['rspec']
|
38
|
+
ver = spec && spec.version.to_s
|
39
|
+
|
40
|
+
case ver
|
41
|
+
when /^3/
|
42
|
+
require 'right_develop/ci/formatters/rspec_v3'
|
43
|
+
RSpecFormatter = RightDevelop::CI::Formatters::RSpecV3
|
44
|
+
when /^2/
|
45
|
+
require 'right_develop/ci/formatters/rspec_v2'
|
46
|
+
RSpecFormatter = RightDevelop::CI::Formatters::RSpecV2
|
47
|
+
when /^1/
|
48
|
+
require 'right_develop/ci/formatters/rspec_v1'
|
49
|
+
RSpecFormatter = RightDevelop::CI::Formatters::RSpecV1
|
50
|
+
when nil
|
51
|
+
RSpecFormatter = Object
|
201
52
|
else
|
202
|
-
raise LoadError,
|
53
|
+
raise LoadError,
|
54
|
+
"Cannot define RightDevelop::CI::RSpecFormatter: unsupported RSpec version #{ver}"
|
203
55
|
end
|
56
|
+
|
57
|
+
# @deprecated do not refer to this class name; use RSpecFormater instead
|
58
|
+
JavaSpecFormatter = RSpecFormatter
|
204
59
|
end
|
@@ -37,8 +37,13 @@ require 'right_develop/ci'
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
|
40
|
+
['cucumber', 'cucumber/rake/task'].each do |f|
|
41
|
+
begin
|
42
|
+
require f
|
43
|
+
rescue LoadError
|
44
|
+
# no-op, we will raise later
|
45
|
+
end
|
46
|
+
end
|
42
47
|
|
43
48
|
module RightDevelop::CI
|
44
49
|
# A Rake task definition that creates a CI namespace with appropriate
|
@@ -122,9 +127,13 @@ module RightDevelop::CI
|
|
122
127
|
FileUtils.mkdir_p(File.join(@output_path, 'cucumber'))
|
123
128
|
end
|
124
129
|
|
125
|
-
|
130
|
+
spec = Gem.loaded_specs['rspec']
|
131
|
+
ver = spec && spec.version.to_s
|
132
|
+
|
133
|
+
case ver
|
134
|
+
when /^[23]/
|
126
135
|
default_opts = ['-r', 'right_develop/ci',
|
127
|
-
'-f',
|
136
|
+
'-f', 'RightDevelop::CI::RSpecFormatter',
|
128
137
|
'-o', File.join(@output_path, 'rspec', @rspec_output)]
|
129
138
|
|
130
139
|
# RSpec 2
|
@@ -135,9 +144,9 @@ module RightDevelop::CI
|
|
135
144
|
t.pattern = self.rspec_pattern
|
136
145
|
end
|
137
146
|
end
|
138
|
-
|
147
|
+
when /^1/
|
139
148
|
default_opts = ['-r', 'right_develop/ci',
|
140
|
-
'-f',
|
149
|
+
'-f', 'RightDevelop::CI::RSpecFormatter' + ":" + File.join(@output_path, 'rspec', @rspec_output)]
|
141
150
|
|
142
151
|
# RSpec 1
|
143
152
|
Spec::Rake::SpecTask.new(@rspec_name => :prep) do |t|
|
@@ -147,16 +156,28 @@ module RightDevelop::CI
|
|
147
156
|
t.spec_files = FileList[self.rspec_pattern]
|
148
157
|
end
|
149
158
|
end
|
159
|
+
when nil
|
160
|
+
warn "Cannot define right_develop ci:spec task: RSpec gem is unavailable"
|
150
161
|
else
|
151
|
-
raise LoadError, "Cannot define
|
162
|
+
raise LoadError, "Cannot define RightDevelop ci:spec task: unsupported RSpec version #{ver}"
|
152
163
|
end
|
153
164
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
165
|
+
spec = Gem.loaded_specs['cucumber']
|
166
|
+
ver = spec && spec.version.to_s
|
167
|
+
|
168
|
+
case ver
|
169
|
+
when /^1/
|
170
|
+
Cucumber::Rake::Task.new(@cucumber_name, @cucumber_desc) do |t|
|
171
|
+
t.cucumber_opts = ['--no-color',
|
172
|
+
'--format', JavaCucumberFormatter.name,
|
173
|
+
'--out', File.join(@output_path, 'cucumber')]
|
174
|
+
end
|
175
|
+
task :cucumber => [:prep]
|
176
|
+
when nil
|
177
|
+
warn "Cannot define right_develop ci:cucumber task: Cucumber gem is unavailable"
|
178
|
+
else
|
179
|
+
raise LoadError, "Cannot define RightDevelop ci:cucumber task: unsupported Cucumber version #{ver}"
|
158
180
|
end
|
159
|
-
task :cucumber => [:prep]
|
160
181
|
end
|
161
182
|
end
|
162
183
|
end
|
data/lib/right_develop/ci.rb
CHANGED
@@ -31,7 +31,7 @@ module RightDevelop
|
|
31
31
|
|
32
32
|
# Cucumber does not support a -r hook, but it does let you specify class names. Autoload
|
33
33
|
# to the rescue!
|
34
|
-
autoload :
|
34
|
+
autoload :JavaCucumberFormatter, 'right_develop/ci/java_cucumber_formatter'
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
data/right_develop.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: right_develop 3.0.
|
5
|
+
# stub: right_develop 3.0.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "right_develop"
|
9
|
-
s.version = "3.0.
|
9
|
+
s.version = "3.0.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
@@ -20,6 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
"README.rdoc"
|
21
21
|
]
|
22
22
|
s.files = [
|
23
|
+
".swn",
|
24
|
+
".swo",
|
23
25
|
"CHANGELOG.rdoc",
|
24
26
|
"LICENSE",
|
25
27
|
"README.rdoc",
|
@@ -28,6 +30,9 @@ Gem::Specification.new do |s|
|
|
28
30
|
"bin/right_develop",
|
29
31
|
"lib/right_develop.rb",
|
30
32
|
"lib/right_develop/ci.rb",
|
33
|
+
"lib/right_develop/ci/formatters/rspec_v1.rb",
|
34
|
+
"lib/right_develop/ci/formatters/rspec_v2.rb",
|
35
|
+
"lib/right_develop/ci/formatters/rspec_v3.rb",
|
31
36
|
"lib/right_develop/ci/java_cucumber_formatter.rb",
|
32
37
|
"lib/right_develop/ci/java_spec_formatter.rb",
|
33
38
|
"lib/right_develop/ci/rake_task.rb",
|
@@ -75,7 +80,7 @@ Gem::Specification.new do |s|
|
|
75
80
|
]
|
76
81
|
s.homepage = "https://github.com/rightscale/right_develop"
|
77
82
|
s.licenses = ["MIT"]
|
78
|
-
s.rubygems_version = "2.2.
|
83
|
+
s.rubygems_version = "2.2.0"
|
79
84
|
s.summary = "Reusable dev & test code."
|
80
85
|
|
81
86
|
if s.respond_to? :specification_version then
|
@@ -83,7 +88,7 @@ Gem::Specification.new do |s|
|
|
83
88
|
|
84
89
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
85
90
|
s.add_runtime_dependency(%q<right_support>, [">= 2.8.10"])
|
86
|
-
s.add_runtime_dependency(%q<
|
91
|
+
s.add_runtime_dependency(%q<builder>, ["~> 3.0"])
|
87
92
|
s.add_runtime_dependency(%q<trollop>, ["< 3.0", ">= 1.0"])
|
88
93
|
s.add_runtime_dependency(%q<right_git>, [">= 1.0"])
|
89
94
|
s.add_runtime_dependency(%q<right_aws>, [">= 2.1.0"])
|
@@ -97,7 +102,7 @@ Gem::Specification.new do |s|
|
|
97
102
|
s.add_development_dependency(%q<pry-byebug>, [">= 0"])
|
98
103
|
else
|
99
104
|
s.add_dependency(%q<right_support>, [">= 2.8.10"])
|
100
|
-
s.add_dependency(%q<
|
105
|
+
s.add_dependency(%q<builder>, ["~> 3.0"])
|
101
106
|
s.add_dependency(%q<trollop>, ["< 3.0", ">= 1.0"])
|
102
107
|
s.add_dependency(%q<right_git>, [">= 1.0"])
|
103
108
|
s.add_dependency(%q<right_aws>, [">= 2.1.0"])
|
@@ -112,7 +117,7 @@ Gem::Specification.new do |s|
|
|
112
117
|
end
|
113
118
|
else
|
114
119
|
s.add_dependency(%q<right_support>, [">= 2.8.10"])
|
115
|
-
s.add_dependency(%q<
|
120
|
+
s.add_dependency(%q<builder>, ["~> 3.0"])
|
116
121
|
s.add_dependency(%q<trollop>, ["< 3.0", ">= 1.0"])
|
117
122
|
s.add_dependency(%q<right_git>, [">= 1.0"])
|
118
123
|
s.add_dependency(%q<right_aws>, [">= 2.1.0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_develop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Spataro
|
@@ -25,25 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.8.10
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: builder
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "<"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.3.3
|
34
31
|
- - "~>"
|
35
32
|
- !ruby/object:Gem::Version
|
36
|
-
version: '
|
33
|
+
version: '3.0'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- - "<"
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 1.3.3
|
44
38
|
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
40
|
+
version: '3.0'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: trollop
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,6 +207,8 @@ extra_rdoc_files:
|
|
213
207
|
- LICENSE
|
214
208
|
- README.rdoc
|
215
209
|
files:
|
210
|
+
- ".swn"
|
211
|
+
- ".swo"
|
216
212
|
- CHANGELOG.rdoc
|
217
213
|
- LICENSE
|
218
214
|
- README.rdoc
|
@@ -221,6 +217,9 @@ files:
|
|
221
217
|
- bin/right_develop
|
222
218
|
- lib/right_develop.rb
|
223
219
|
- lib/right_develop/ci.rb
|
220
|
+
- lib/right_develop/ci/formatters/rspec_v1.rb
|
221
|
+
- lib/right_develop/ci/formatters/rspec_v2.rb
|
222
|
+
- lib/right_develop/ci/formatters/rspec_v3.rb
|
224
223
|
- lib/right_develop/ci/java_cucumber_formatter.rb
|
225
224
|
- lib/right_develop/ci/java_spec_formatter.rb
|
226
225
|
- lib/right_develop/ci/rake_task.rb
|
@@ -285,7 +284,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
285
284
|
version: '0'
|
286
285
|
requirements: []
|
287
286
|
rubyforge_project:
|
288
|
-
rubygems_version: 2.2.
|
287
|
+
rubygems_version: 2.2.0
|
289
288
|
signing_key:
|
290
289
|
specification_version: 4
|
291
290
|
summary: Reusable dev & test code.
|