right_develop 1.2.0 → 1.2.2
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/Rakefile +4 -0
- data/VERSION +1 -1
- data/lib/right_develop/ci/java_cucumber_formatter.rb +2 -2
- data/lib/right_develop/ci/java_spec_formatter.rb +4 -2
- data/lib/right_develop/ci/util.rb +30 -0
- data/lib/right_develop/ci.rb +1 -0
- data/right_develop.gemspec +88 -19
- metadata +456 -35
- data/.rspec +0 -4
- data/Gemfile +0 -32
- data/Gemfile.lock +0 -98
- data/features/cucumber.feature +0 -27
- data/features/rake_integration.feature +0 -27
- data/features/rspec1.feature +0 -67
- data/features/rspec2.feature +0 -67
- data/features/step_definitions/http_client_steps.rb +0 -27
- data/features/step_definitions/request_balancer_steps.rb +0 -93
- data/features/step_definitions/ruby_steps.rb +0 -206
- data/features/step_definitions/serialization_steps.rb +0 -96
- data/features/step_definitions/server_steps.rb +0 -134
- data/features/support/env.rb +0 -84
- data/features/support/file_utils_bundler_mixin.rb +0 -45
- data/spec/right_develop/parsers/sax_parser_spec.rb +0 -202
- data/spec/spec_helper.rb +0 -28
data/Gemfile.lock
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
right_develop (1.2.0)
|
5
|
-
actionpack (>= 2.3.0, < 4.0)
|
6
|
-
builder (~> 3.0)
|
7
|
-
cucumber (~> 1.0)
|
8
|
-
rake (>= 0.8.7, < 0.10)
|
9
|
-
right_support (~> 2.0)
|
10
|
-
rspec (>= 1.3, < 3.0)
|
11
|
-
trollop (>= 1.0, < 3.0)
|
12
|
-
|
13
|
-
GEM
|
14
|
-
remote: https://rubygems.org/
|
15
|
-
specs:
|
16
|
-
actionpack (2.3.17)
|
17
|
-
activesupport (= 2.3.17)
|
18
|
-
rack (~> 1.1.0)
|
19
|
-
activesupport (2.3.17)
|
20
|
-
archive-tar-minitar (0.5.2)
|
21
|
-
builder (3.2.0)
|
22
|
-
columnize (0.3.6)
|
23
|
-
cucumber (1.2.3)
|
24
|
-
builder (>= 2.1.2)
|
25
|
-
diff-lcs (>= 1.1.3)
|
26
|
-
gherkin (~> 2.11.6)
|
27
|
-
multi_json (~> 1.3)
|
28
|
-
diff-lcs (1.2.1)
|
29
|
-
flexmock (0.8.11)
|
30
|
-
gherkin (2.11.6)
|
31
|
-
json (>= 1.7.6)
|
32
|
-
git (1.2.5)
|
33
|
-
jeweler (1.8.4)
|
34
|
-
bundler (~> 1.0)
|
35
|
-
git (>= 1.2.5)
|
36
|
-
rake
|
37
|
-
rdoc
|
38
|
-
json (1.7.7)
|
39
|
-
libxml-ruby (2.4.0)
|
40
|
-
linecache (0.46)
|
41
|
-
rbx-require-relative (> 0.0.4)
|
42
|
-
linecache19 (0.5.12)
|
43
|
-
ruby_core_source (>= 0.1.4)
|
44
|
-
multi_json (1.6.1)
|
45
|
-
nokogiri (1.5.6)
|
46
|
-
rack (1.1.6)
|
47
|
-
rake (0.9.6)
|
48
|
-
rbx-require-relative (0.0.9)
|
49
|
-
rdoc (4.0.0)
|
50
|
-
json (~> 1.4)
|
51
|
-
right_support (2.6.17)
|
52
|
-
rspec (2.13.0)
|
53
|
-
rspec-core (~> 2.13.0)
|
54
|
-
rspec-expectations (~> 2.13.0)
|
55
|
-
rspec-mocks (~> 2.13.0)
|
56
|
-
rspec-core (2.13.1)
|
57
|
-
rspec-expectations (2.13.0)
|
58
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
59
|
-
rspec-mocks (2.13.0)
|
60
|
-
ruby-debug (0.10.4)
|
61
|
-
columnize (>= 0.1)
|
62
|
-
ruby-debug-base (~> 0.10.4.0)
|
63
|
-
ruby-debug-base (0.10.4)
|
64
|
-
linecache (>= 0.3)
|
65
|
-
ruby-debug-base19 (0.11.25)
|
66
|
-
columnize (>= 0.3.1)
|
67
|
-
linecache19 (>= 0.5.11)
|
68
|
-
ruby_core_source (>= 0.1.4)
|
69
|
-
ruby-debug19 (0.11.6)
|
70
|
-
columnize (>= 0.3.1)
|
71
|
-
linecache19 (>= 0.5.11)
|
72
|
-
ruby-debug-base19 (>= 0.11.19)
|
73
|
-
ruby_core_source (0.1.5)
|
74
|
-
archive-tar-minitar (>= 0.5.2)
|
75
|
-
syntax (1.0.0)
|
76
|
-
trollop (2.0)
|
77
|
-
|
78
|
-
PLATFORMS
|
79
|
-
ruby
|
80
|
-
|
81
|
-
DEPENDENCIES
|
82
|
-
actionpack (>= 2.3.0, < 4.0)
|
83
|
-
activesupport
|
84
|
-
builder (~> 3.0)
|
85
|
-
cucumber (~> 1.0)
|
86
|
-
flexmock (~> 0.8.7)
|
87
|
-
jeweler (~> 1.8.3)
|
88
|
-
libxml-ruby (~> 2.4.0)
|
89
|
-
nokogiri (~> 1.5)
|
90
|
-
rake (>= 0.8.7, < 0.10)
|
91
|
-
rdoc (>= 2.4.2)
|
92
|
-
right_develop!
|
93
|
-
right_support (~> 2.0)
|
94
|
-
rspec (>= 1.3, < 3.0)
|
95
|
-
ruby-debug (>= 0.10)
|
96
|
-
ruby-debug19 (>= 0.11.6)
|
97
|
-
syntax (~> 1.0.0)
|
98
|
-
trollop (>= 1.0, < 3.0)
|
data/features/cucumber.feature
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
Feature: Cucumber 1.x support
|
2
|
-
In order to facilitate TDD and enhance code quality
|
3
|
-
RightDevelop should provide CI tasks with Cucumber with JUnit XML output
|
4
|
-
So any Ruby project can have a beautiful, info-rich Jenkins project
|
5
|
-
|
6
|
-
Background:
|
7
|
-
Given a Ruby application
|
8
|
-
And a Gemfile
|
9
|
-
And a gem dependency on 'rake ~> 0.9'
|
10
|
-
And a gem dependency on 'cucumber ~> 1.0'
|
11
|
-
And the Rakefile contains a RightDevelop::CI::RakeTask
|
12
|
-
|
13
|
-
Scenario: passing Cucumber features
|
14
|
-
Given a trivial Cucumber feature
|
15
|
-
When I install the bundle
|
16
|
-
And I rake 'ci:cucumber'
|
17
|
-
Then the command should succeed
|
18
|
-
And the output should contain '** Execute ci:cucumber'
|
19
|
-
And the directory 'measurement/cucumber' should contain files
|
20
|
-
|
21
|
-
Scenario: failing Cucumber features
|
22
|
-
Given a trivial failing Cucumber feature
|
23
|
-
When I install the bundle
|
24
|
-
And I rake 'ci:cucumber'
|
25
|
-
Then the command should fail
|
26
|
-
And the output should contain '** Execute ci:cucumber'
|
27
|
-
And the directory 'measurement/cucumber' should contain files
|
@@ -1,27 +0,0 @@
|
|
1
|
-
Feature: basic Rake integration
|
2
|
-
In order to promote predictable, reliable Continuous Integration
|
3
|
-
RightDevelop should expose a "ci:" Rake namespace
|
4
|
-
|
5
|
-
Background:
|
6
|
-
Given a Ruby application
|
7
|
-
And a Gemfile
|
8
|
-
And a gem dependency on 'rake ~> 0.9'
|
9
|
-
|
10
|
-
Scenario: list Rake tasks
|
11
|
-
Given the Rakefile contains a RightDevelop::CI::RakeTask
|
12
|
-
When I install the bundle
|
13
|
-
And I rake '-T'
|
14
|
-
And the output should contain 'ci:cucumber'
|
15
|
-
And the output should contain 'ci:spec'
|
16
|
-
|
17
|
-
Scenario: override namespace
|
18
|
-
Given the Rakefile contains:
|
19
|
-
"""
|
20
|
-
RightDevelop::CI::RakeTask.new do |task|
|
21
|
-
task.ci_namespace = :funkalicious
|
22
|
-
end
|
23
|
-
"""
|
24
|
-
When I install the bundle
|
25
|
-
And I rake '-T'
|
26
|
-
Then the output should contain 'funkalicious:cucumber'
|
27
|
-
Then the output should contain 'funkalicious:spec'
|
data/features/rspec1.feature
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
Feature: RSpec 1.x support
|
2
|
-
In order to facilitate TDD and enhance code quality
|
3
|
-
RightDevelop should provide a Rake CI harness with JUnit XML output
|
4
|
-
So any Ruby project can have a beautiful, info-rich Jenkins project
|
5
|
-
|
6
|
-
Background:
|
7
|
-
Given a Ruby application
|
8
|
-
And a Gemfile
|
9
|
-
And a gem dependency on 'rake ~> 0.9'
|
10
|
-
And a gem dependency on 'rspec ~> 1.0'
|
11
|
-
And the Rakefile contains a RightDevelop::CI::RakeTask
|
12
|
-
|
13
|
-
Scenario: passing examples
|
14
|
-
Given a trivial RSpec spec
|
15
|
-
When I install the bundle
|
16
|
-
And I rake 'ci:spec'
|
17
|
-
Then the command should succeed
|
18
|
-
And the file 'measurement/rspec/rspec.xml' should mention 2 passing test cases
|
19
|
-
And the file 'measurement/rspec/rspec.xml' should mention 0 failing test cases
|
20
|
-
|
21
|
-
Scenario: failing examples
|
22
|
-
Given a trivial failing RSpec spec
|
23
|
-
When I install the bundle
|
24
|
-
And I rake 'ci:spec'
|
25
|
-
Then the command should fail
|
26
|
-
And the file 'measurement/rspec/rspec.xml' should mention 2 passing test cases
|
27
|
-
And the file 'measurement/rspec/rspec.xml' should mention 1 failing test case
|
28
|
-
|
29
|
-
Scenario: override input file pattern
|
30
|
-
Given an RSpec spec named 'passing_spec.rb' with content:
|
31
|
-
"""
|
32
|
-
describe String do
|
33
|
-
it 'is cool' do
|
34
|
-
'cool'.should == 'cool'
|
35
|
-
end
|
36
|
-
end
|
37
|
-
"""
|
38
|
-
And an RSpec spec named 'failing_spec.rb' with content:
|
39
|
-
"""
|
40
|
-
describe String do
|
41
|
-
it 'is uncool' do
|
42
|
-
'cool'.should == 'uncool'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
"""
|
46
|
-
And the Rakefile contains:
|
47
|
-
"""
|
48
|
-
RightDevelop::CI::RakeTask.new do |task|
|
49
|
-
task.rspec_pattern = 'spec/passing_spec.rb'
|
50
|
-
end
|
51
|
-
"""
|
52
|
-
When I install the bundle
|
53
|
-
And I rake 'ci:spec'
|
54
|
-
Then the command should succeed
|
55
|
-
|
56
|
-
Scenario: override output file location
|
57
|
-
Given a trivial RSpec spec
|
58
|
-
And the Rakefile contains:
|
59
|
-
"""
|
60
|
-
RightDevelop::CI::RakeTask.new do |task|
|
61
|
-
task.rspec_output = 'awesome.xml'
|
62
|
-
end
|
63
|
-
"""
|
64
|
-
When I install the bundle
|
65
|
-
And I rake 'ci:spec'
|
66
|
-
Then the command should succeed
|
67
|
-
And the file 'measurement/rspec/awesome.xml' should exist
|
data/features/rspec2.feature
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
Feature: RSpec 2.x support
|
2
|
-
In order to facilitate TDD and enhance code quality
|
3
|
-
RightDevelop should provide a Rake CI harness with JUnit XML output
|
4
|
-
So any Ruby project can have a beautiful, info-rich Jenkins project
|
5
|
-
|
6
|
-
Background:
|
7
|
-
Given a Ruby application
|
8
|
-
And a Gemfile
|
9
|
-
And a gem dependency on 'rake ~> 0.9'
|
10
|
-
And a gem dependency on 'rspec ~> 2.0'
|
11
|
-
And the Rakefile contains a RightDevelop::CI::RakeTask
|
12
|
-
|
13
|
-
Scenario: passing examples
|
14
|
-
And a trivial RSpec spec
|
15
|
-
When I install the bundle
|
16
|
-
And I rake 'ci:spec'
|
17
|
-
Then the command should succeed
|
18
|
-
And the file 'measurement/rspec/rspec.xml' should mention 2 passing test cases
|
19
|
-
And the file 'measurement/rspec/rspec.xml' should mention 0 failing test cases
|
20
|
-
|
21
|
-
Scenario: failing examples
|
22
|
-
And a trivial failing RSpec spec
|
23
|
-
When I install the bundle
|
24
|
-
And I rake 'ci:spec'
|
25
|
-
Then the command should fail
|
26
|
-
And the file 'measurement/rspec/rspec.xml' should mention 2 passing test cases
|
27
|
-
And the file 'measurement/rspec/rspec.xml' should mention 1 failing test case
|
28
|
-
|
29
|
-
Scenario: override input file pattern
|
30
|
-
Given an RSpec spec named 'passing_spec.rb' with content:
|
31
|
-
"""
|
32
|
-
describe String do
|
33
|
-
it 'is cool' do
|
34
|
-
'cool'.should == 'cool'
|
35
|
-
end
|
36
|
-
end
|
37
|
-
"""
|
38
|
-
And an RSpec spec named 'failing_spec.rb' with content:
|
39
|
-
"""
|
40
|
-
describe String do
|
41
|
-
it 'is uncool' do
|
42
|
-
'cool'.should == 'uncool'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
"""
|
46
|
-
And the Rakefile contains:
|
47
|
-
"""
|
48
|
-
RightDevelop::CI::RakeTask.new do |task|
|
49
|
-
task.rspec_pattern = 'spec/passing_spec.rb'
|
50
|
-
end
|
51
|
-
"""
|
52
|
-
When I install the bundle
|
53
|
-
And I rake 'ci:spec'
|
54
|
-
Then the command should succeed
|
55
|
-
|
56
|
-
Scenario: override output file location
|
57
|
-
Given a trivial RSpec spec
|
58
|
-
And the Rakefile contains:
|
59
|
-
"""
|
60
|
-
RightDevelop::CI::RakeTask.new do |task|
|
61
|
-
task.rspec_output = 'awesome.xml'
|
62
|
-
end
|
63
|
-
"""
|
64
|
-
When I install the bundle
|
65
|
-
And I rake 'ci:spec'
|
66
|
-
Then the command should succeed
|
67
|
-
And the file 'measurement/rspec/awesome.xml' should exist
|
@@ -1,27 +0,0 @@
|
|
1
|
-
When /^a client makes a (buggy )?request to '(.*)'$/ do |buggy, path|
|
2
|
-
t = RightDevelop::Net::HTTPClient::DEFAULT_OPTIONS[:timeout]
|
3
|
-
o = RightDevelop::Net::HTTPClient::DEFAULT_OPTIONS[:open_timeout]
|
4
|
-
When "a client makes a #{buggy}request to '#{path}' with timeout #{t} and open_timeout #{o}"
|
5
|
-
end
|
6
|
-
|
7
|
-
|
8
|
-
When /^a client makes a (buggy )?request to '(.*)' with timeout (\d+) and open_timeout (\d+)$/ do |buggy, path, timeout, open_timeout|
|
9
|
-
buggy = !(buggy.nil? || buggy.empty?)
|
10
|
-
|
11
|
-
@mock_servers.should_not be_nil
|
12
|
-
@mock_servers.size.should == 1
|
13
|
-
|
14
|
-
timeout = timeout.to_i
|
15
|
-
open_timeout = open_timeout.to_i
|
16
|
-
url = @mock_servers.first.url
|
17
|
-
|
18
|
-
@http_client = RightDevelop::Net::HTTPClient.new(:timeout=>timeout, :open_timeout=>open_timeout)
|
19
|
-
@request_t0 = Time.now
|
20
|
-
begin
|
21
|
-
raise ArgumentError, "Fall down go boom!" if buggy
|
22
|
-
@http_client.get("#{url}#{path}", {:timeout => timeout, :open_timeout => open_timeout})
|
23
|
-
rescue Exception => e
|
24
|
-
@request_error = e
|
25
|
-
end
|
26
|
-
@request_t1 = Time.now
|
27
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
# Rails' constantize method to convert passed in policy to the actual class
|
2
|
-
def constantize(camel_cased_word)
|
3
|
-
names = camel_cased_word.split('::')
|
4
|
-
names.shift if names.empty? || names.first.empty?
|
5
|
-
|
6
|
-
constant = Object
|
7
|
-
names.each do |name|
|
8
|
-
constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
|
9
|
-
end
|
10
|
-
constant
|
11
|
-
end
|
12
|
-
|
13
|
-
Given /^(\w+) balancing policy$/ do |policy|
|
14
|
-
@health_check = Proc.new do |endpoint|
|
15
|
-
begin
|
16
|
-
RightDevelop::Net::HTTPClient.new.get(endpoint, {:timeout => 1, :open_timeout => 1})
|
17
|
-
true
|
18
|
-
rescue Exception => e
|
19
|
-
false
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
@options ||= { :policy => constantize("RightDevelop::Net::LB::" + policy), :health_check => @health_check }
|
24
|
-
end
|
25
|
-
|
26
|
-
When /^a client makes a (buggy )?load-balanced request to '(.*)'$/ do |buggy, path|
|
27
|
-
t = RightDevelop::Net::HTTPClient::DEFAULT_OPTIONS[:timeout]
|
28
|
-
o = RightDevelop::Net::HTTPClient::DEFAULT_OPTIONS[:open_timeout]
|
29
|
-
step "a client makes a #{buggy}load-balanced request to '#{path}' with timeout #{t} and open_timeout #{o}"
|
30
|
-
end
|
31
|
-
|
32
|
-
When /^a client makes a (buggy )?load-balanced request to '(.*)' with timeout (\d+) and open_timeout (\d+)$/ do |buggy, path, timeout, open_timeout|
|
33
|
-
buggy = !(buggy.nil? || buggy.empty?)
|
34
|
-
|
35
|
-
@mock_servers.should_not be_nil
|
36
|
-
@mock_servers.empty?.should be_false
|
37
|
-
|
38
|
-
timeout = timeout.to_i
|
39
|
-
open_timeout = open_timeout.to_i
|
40
|
-
urls = @mock_servers.map { |s| s.url }
|
41
|
-
@request_balancer = RightDevelop::Net::RequestBalancer.new(urls)
|
42
|
-
@request_attempts = 0
|
43
|
-
@request_t0 = Time.now
|
44
|
-
@http_client = RightDevelop::Net::HTTPClient.new
|
45
|
-
begin
|
46
|
-
@request_balancer.request do |url|
|
47
|
-
@request_attempts += 1
|
48
|
-
raise ArgumentError, "Fall down go boom!" if buggy
|
49
|
-
@http_client.get("#{url}#{path}", {:timeout => timeout, :open_timeout => open_timeout})
|
50
|
-
end
|
51
|
-
rescue Exception => e
|
52
|
-
@request_error = e
|
53
|
-
end
|
54
|
-
@request_t1 = Time.now
|
55
|
-
end
|
56
|
-
|
57
|
-
Then /^the request should (\w+ ?\w*)$/ do |behavior|
|
58
|
-
case behavior
|
59
|
-
when 'complete'
|
60
|
-
error_expected = false
|
61
|
-
when 'raise'
|
62
|
-
error_expected = true
|
63
|
-
when /raise (\w+)/
|
64
|
-
error_expected = true
|
65
|
-
error_class_expected = /raise (\w+)/.match(behavior)[1]
|
66
|
-
else
|
67
|
-
raise ArgumentError, "Unknown request behavior #{behavior}"
|
68
|
-
end
|
69
|
-
|
70
|
-
if !error_expected && @request_error
|
71
|
-
puts '!' * 80
|
72
|
-
puts @request_error.class.inspect
|
73
|
-
puts @request_error.class.superclass.inspect
|
74
|
-
puts '!' * 80
|
75
|
-
end
|
76
|
-
@request_error.should be_nil unless error_expected
|
77
|
-
@request_error.should_not be_nil if error_expected
|
78
|
-
@request_error.class.name.should =~ Regexp.new(error_class_expected) if error_class_expected
|
79
|
-
end
|
80
|
-
|
81
|
-
Then /^the request should (\w+ ?\w*) in less than (\d+) seconds?$/ do |behavior, time|
|
82
|
-
step "the request should #{behavior}"
|
83
|
-
#allow 10% margin of error due to Ruby/OS scheduler variance
|
84
|
-
(@request_t1.to_f - @request_t0.to_f).should <= (time.to_f * 1.10)
|
85
|
-
end
|
86
|
-
|
87
|
-
Then /^the request should be attempted once$/ do
|
88
|
-
@request_attempts.should == 1
|
89
|
-
end
|
90
|
-
|
91
|
-
Then /^the request should be attempted ([0-9]+) times$/ do |n|
|
92
|
-
@request_attempts.should == n.to_i
|
93
|
-
end
|
@@ -1,206 +0,0 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
Given /^a Ruby application$/ do
|
4
|
-
ruby_app_root.should_not be_nil
|
5
|
-
end
|
6
|
-
|
7
|
-
Given /^a Gemfile$/ do
|
8
|
-
gemfile = ruby_app_path('Gemfile')
|
9
|
-
unless File.exist?(gemfile)
|
10
|
-
basedir = File.expand_path('../../..', __FILE__)
|
11
|
-
File.open(gemfile, 'w') do |file|
|
12
|
-
file.puts "gem 'right_develop', :path=>'#{basedir}'"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
Given /^a gem dependency on '(.*)'$/ do |dependency|
|
18
|
-
step 'a Gemfile'
|
19
|
-
gem, version = dependency.split(/\s+/, 2)
|
20
|
-
gemfile = ruby_app_path('Gemfile')
|
21
|
-
File.open(gemfile, 'a') do |file|
|
22
|
-
file.puts "gem '#{gem}', '#{version}'"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
Given /^a Rakefile$/ do
|
27
|
-
rakefile = ruby_app_path('Rakefile')
|
28
|
-
unless File.exist?(rakefile)
|
29
|
-
File.open(rakefile, 'w') do |file|
|
30
|
-
file.puts "# Auto-generated by #{__FILE__}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
Given /^the Rakefile contains a RightDevelop::CI::RakeTask$/ do
|
36
|
-
step 'a Rakefile'
|
37
|
-
rakefile = ruby_app_path('Rakefile')
|
38
|
-
File.open(rakefile, 'w') do |file|
|
39
|
-
file.puts "require 'right_develop'"
|
40
|
-
file.puts "RightDevelop::CI::RakeTask.new"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
Given /^the Rakefile contains a RightDevelop::CI::RakeTask with parameter '(.*)'$/ do |ns|
|
45
|
-
step 'a Rakefile'
|
46
|
-
rakefile = ruby_app_path('Rakefile')
|
47
|
-
File.open(rakefile, 'w') do |file|
|
48
|
-
file.puts "require 'right_develop'"
|
49
|
-
file.puts "RightDevelop::CI::RakeTask.new(#{ns})"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
Given /^the Rakefile contains:$/ do |content|
|
54
|
-
step 'a Rakefile'
|
55
|
-
rakefile = ruby_app_path('Rakefile')
|
56
|
-
File.open(rakefile, 'w') do |file|
|
57
|
-
file.puts "require 'right_develop'"
|
58
|
-
content.split("\n").each do |line|
|
59
|
-
file.puts line
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
Given /^a trivial (failing )?RSpec spec$/ do |failing|
|
65
|
-
spec_dir = ruby_app_path('spec')
|
66
|
-
spec = ruby_app_path('spec', 'trivial_spec.rb')
|
67
|
-
FileUtils.mkdir_p(spec_dir)
|
68
|
-
File.open(spec, 'w') do |file|
|
69
|
-
file.puts "describe String do"
|
70
|
-
file.puts " it 'has a size' do"
|
71
|
-
file.puts " 'joe'.size.should == 3"
|
72
|
-
file.puts " end"
|
73
|
-
file.puts
|
74
|
-
file.puts " it 'is stringy' do"
|
75
|
-
file.puts " pending"
|
76
|
-
file.puts " end"
|
77
|
-
unless failing.nil?
|
78
|
-
file.puts
|
79
|
-
file.puts "it 'meets an impossible ideal' do"
|
80
|
-
file.puts " raise NotImplementedError, 'inconceivable!'"
|
81
|
-
file.puts "end"
|
82
|
-
end
|
83
|
-
file.puts "end"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
Given /^an RSpec spec named '([A-Za-z0-9_.]+)' with content:$/ do |name, content|
|
88
|
-
spec_dir = ruby_app_path('spec')
|
89
|
-
spec = ruby_app_path('spec', name)
|
90
|
-
FileUtils.mkdir_p(spec_dir)
|
91
|
-
File.open(spec, 'w') do |file|
|
92
|
-
content.split("\n").each do |line|
|
93
|
-
file.puts line
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
Given /^a trivial (failing )?Cucumber feature$/ do |failing|
|
99
|
-
features_dir = ruby_app_path('features')
|
100
|
-
steps_dir = ruby_app_path('features', 'step_definitions')
|
101
|
-
feature = ruby_app_path('features', 'trivial.feature')
|
102
|
-
steps = ruby_app_path('features', 'step_definitions', 'trivial_steps.rb')
|
103
|
-
FileUtils.mkdir_p(features_dir)
|
104
|
-
FileUtils.mkdir_p(steps_dir)
|
105
|
-
|
106
|
-
unless File.exist?(steps)
|
107
|
-
File.open(steps, 'w') do |file|
|
108
|
-
file.puts "When /^the night has come and the land is dark$/ do; end"
|
109
|
-
file.puts "When /^the moon is the only light we see$/ do; end"
|
110
|
-
file.puts "Then /^I won't be afraid.*$/ do; end"
|
111
|
-
file.puts "Then /^as long as you stand.*by me$/ do; end"
|
112
|
-
file.puts "Then /^you run away as fast as you can$/ do; raise NotImplementedError; end"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
unless File.exist?(feature)
|
116
|
-
File.open(feature, 'w') do |file|
|
117
|
-
file.puts "Feature: Song Lyrics from the 1950s"
|
118
|
-
file.puts
|
119
|
-
file.puts " Scenario: Stand By Me"
|
120
|
-
file.puts " When the night has come and the land is dark"
|
121
|
-
file.puts " And the moon is the only light we see"
|
122
|
-
file.puts " Then I won't be afraid, oh, I won't be afraid"
|
123
|
-
if failing.nil?
|
124
|
-
file.puts " And as long as you stand, stand by me"
|
125
|
-
else
|
126
|
-
file.puts " And you run away as fast as you can"
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
When /^I install the bundle$/ do
|
133
|
-
ruby_app_shell('bundle install')
|
134
|
-
end
|
135
|
-
|
136
|
-
When /^I rake '(.*)'$/ do |task|
|
137
|
-
@ruby_app_output = ruby_app_shell("bundle exec rake #{task} --trace ", :ignore_errors => true)
|
138
|
-
end
|
139
|
-
|
140
|
-
When /^I debug the app shell$/ do
|
141
|
-
STDOUT.puts "Opening shell in a separate window."
|
142
|
-
if RUBY_PLATFORM =~ /darwin/
|
143
|
-
ruby_app_shell("open -a Terminal .")
|
144
|
-
else
|
145
|
-
raise "Don't know how to open an app shell for #{RUBY_PLATFORM}; please contribute your knowledge to #{__FILE__}"
|
146
|
-
end
|
147
|
-
STDOUT.puts "Press Enter to continue Cucumber execution..."
|
148
|
-
STDOUT.flush
|
149
|
-
STDIN.readline
|
150
|
-
end
|
151
|
-
|
152
|
-
Then /^the output should contain '(.*)'$/ do |expected_output|
|
153
|
-
@ruby_app_output.should include(expected_output)
|
154
|
-
end
|
155
|
-
|
156
|
-
Then /^the output should not contain '(.*)'$/ do |expected_output|
|
157
|
-
@ruby_app_output.should_not include(expected_output)
|
158
|
-
end
|
159
|
-
|
160
|
-
Then /^the directory '(.*)' should contain files/ do |dir|
|
161
|
-
dir = ruby_app_path(dir)
|
162
|
-
File.directory?(dir).should be_true
|
163
|
-
Dir[File.join(dir, '*')].should_not be_empty
|
164
|
-
end
|
165
|
-
|
166
|
-
Then /^the file '(.*)' should (not )?exist?$/ do |file, negatory|
|
167
|
-
file = ruby_app_path(file)
|
168
|
-
|
169
|
-
if negatory.nil? || negatory.empty?
|
170
|
-
Pathname.new(file).should exist
|
171
|
-
else
|
172
|
-
Pathname.new(file).should_not exist
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
Then /^the file '(.*)' should mention ([0-9]) (passing|failing) test cases?$/ do |file, n, pass_fail|
|
177
|
-
file = ruby_app_path(file)
|
178
|
-
n = Integer(n)
|
179
|
-
|
180
|
-
Pathname.new(file).should exist
|
181
|
-
|
182
|
-
doc = Nokogiri.XML(File.open(file, 'r'))
|
183
|
-
|
184
|
-
all_testcases = doc.css('testcase').size
|
185
|
-
failing_testcases = doc.css('testcase failure').size
|
186
|
-
passing_testcases = all_testcases - failing_testcases
|
187
|
-
|
188
|
-
case pass_fail
|
189
|
-
when 'passing'
|
190
|
-
passing_testcases.should == n
|
191
|
-
when 'failing'
|
192
|
-
failing_testcases.should == n
|
193
|
-
else
|
194
|
-
raise NotImplementedError, "WTF #{pass_fail}"
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
Then /^the command should (succeed|fail)$/ do |success|
|
199
|
-
if success == 'succeed'
|
200
|
-
$?.exitstatus.should == 0
|
201
|
-
elsif success == 'fail'
|
202
|
-
$?.exitstatus.should_not == 0
|
203
|
-
else
|
204
|
-
raise NotImplementedError, "Unknown expectation #{success}"
|
205
|
-
end
|
206
|
-
end
|