culerity 0.2.7 → 0.2.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/CHANGES.md +7 -1
- data/README.md +2 -2
- data/VERSION.yml +1 -1
- data/culerity.gemspec +4 -3
- data/features/installing_culerity.feature +1 -2
- data/features/support/env.rb +0 -1
- data/lib/culerity.rb +9 -2
- data/lib/culerity/remote_browser_proxy.rb +3 -2
- data/lib/culerity/remote_object_proxy.rb +1 -1
- data/lib/tasks/rspec.rake +66 -0
- data/rails_generators/culerity/culerity_generator.rb +2 -4
- data/rails_generators/culerity/templates/config/environments/{culerity_development.rb → culerity.rb} +0 -0
- data/rails_generators/culerity/templates/features/step_definitions/culerity_steps.rb +69 -5
- data/rails_generators/culerity/templates/features/support/env.rb +1 -1
- data/rails_generators/culerity/templates/lib/tasks/culerity.rake +1 -1
- data/spec/culerity_spec.rb +21 -7
- metadata +4 -3
data/CHANGES.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.2.8
|
2
|
+
|
3
|
+
* removed separate development and continuous integration environments and replaced them with a single one (thilo)
|
4
|
+
* more webrat like step definitions (lupine)
|
5
|
+
* improve on stability issues (mattmatt)
|
6
|
+
|
1
7
|
## 0.2.7
|
2
8
|
|
3
9
|
* fixed RemoteBrowser#confirm called celerity remove_listener with invalid arguments
|
@@ -11,4 +17,4 @@
|
|
11
17
|
|
12
18
|
## Before that
|
13
19
|
|
14
|
-
Lots of important contributions from a bunch of people. check the commit logs.
|
20
|
+
Lots of important contributions from a bunch of people. check the commit logs.
|
data/README.md
CHANGED
@@ -41,7 +41,7 @@ After you have written a first feature you can run it just like you would run a
|
|
41
41
|
rake culerity:rails:start
|
42
42
|
cucumber features/my_feature.feature
|
43
43
|
|
44
|
-
The Rails instance uses a special environment
|
44
|
+
The Rails instance uses a special environment culerity.
|
45
45
|
|
46
46
|
When you have finished running culerity/cucumber you can turn off the Rails instance:
|
47
47
|
|
@@ -73,7 +73,7 @@ My database is not cleared automatically between scenarios
|
|
73
73
|
|
74
74
|
Before do
|
75
75
|
[User, .... all your models].each do |model|
|
76
|
-
|
76
|
+
model.delete_all
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
data/VERSION.yml
CHANGED
data/culerity.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{culerity}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Alexander Lang"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-02-06}
|
13
13
|
s.description = %q{Culerity integrates Cucumber and Celerity in order to test your application's full stack.}
|
14
14
|
s.email = %q{alex@upstream-berlin.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -40,10 +40,11 @@ Gem::Specification.new do |s|
|
|
40
40
|
"lib/culerity/persistent_delivery.rb",
|
41
41
|
"lib/culerity/remote_browser_proxy.rb",
|
42
42
|
"lib/culerity/remote_object_proxy.rb",
|
43
|
+
"lib/tasks/rspec.rake",
|
43
44
|
"rails/init.rb",
|
44
45
|
"rails_generators/culerity/culerity_generator.rb",
|
46
|
+
"rails_generators/culerity/templates/config/environments/culerity.rb",
|
45
47
|
"rails_generators/culerity/templates/config/environments/culerity_continuousintegration.rb",
|
46
|
-
"rails_generators/culerity/templates/config/environments/culerity_development.rb",
|
47
48
|
"rails_generators/culerity/templates/features/step_definitions/culerity_steps.rb",
|
48
49
|
"rails_generators/culerity/templates/features/support/env.rb",
|
49
50
|
"rails_generators/culerity/templates/lib/tasks/culerity.rake",
|
@@ -22,8 +22,7 @@ Feature: Installing culerity
|
|
22
22
|
|
23
23
|
Scenario: Install culerity into a Rails app and check it works
|
24
24
|
Then file "features/step_definitions/culerity_steps.rb" is created
|
25
|
-
Then file "config/environments/
|
26
|
-
Then file "config/environments/culerity_continuousintegration.rb" is created
|
25
|
+
Then file "config/environments/culerity.rb" is created
|
27
26
|
|
28
27
|
When I run executable "cucumber" with arguments "features/"
|
29
28
|
Then I should see "0 scenarios"
|
data/features/support/env.rb
CHANGED
@@ -17,7 +17,6 @@ end
|
|
17
17
|
require 'rubigen'
|
18
18
|
require 'rubigen/helpers/generator_test_helper'
|
19
19
|
include RubiGen::GeneratorTestHelper
|
20
|
-
require 'rails_generator'
|
21
20
|
|
22
21
|
SOURCES = Dir[File.dirname(__FILE__) + "/../../generators"].map do |f|
|
23
22
|
RubiGen::PathSource.new(:test, File.expand_path(f))
|
data/lib/culerity.rb
CHANGED
@@ -28,8 +28,15 @@ module Culerity
|
|
28
28
|
if defined?(Rails) && !File.exists?("tmp/culerity_rails_server.pid")
|
29
29
|
puts "WARNING: Speed up execution by running 'rake culerity:rails:start'"
|
30
30
|
port = options[:port] || 3001
|
31
|
-
environment = options[:environment] || '
|
32
|
-
rails_server =
|
31
|
+
environment = options[:environment] || 'culerity'
|
32
|
+
rails_server = fork do
|
33
|
+
$stdin.reopen "/dev/null"
|
34
|
+
$stdout.reopen "/dev/null"
|
35
|
+
$stderr.reopen "/dev/null"
|
36
|
+
Dir.chdir(Rails.root) do
|
37
|
+
exec "script/server -e #{environment} -p #{port}"
|
38
|
+
end
|
39
|
+
end
|
33
40
|
sleep 5
|
34
41
|
rails_server
|
35
42
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Culerity
|
2
|
-
|
3
2
|
class RemoteBrowserProxy < RemoteObjectProxy
|
4
3
|
def initialize(io, browser_options = {})
|
5
4
|
@io = io
|
6
|
-
|
5
|
+
#sets the remote receiver to celerity for the new_browser message.
|
6
|
+
@remote_object_id = "celerity".inspect
|
7
|
+
#celerity server will create a new browser which shall receive the remote calls from now on.
|
7
8
|
@remote_object_id = new_browser(browser_options).inspect
|
8
9
|
end
|
9
10
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
gem 'test-unit', '1.2.3' if RUBY_VERSION.to_f >= 1.9
|
2
|
+
|
3
|
+
# Don't load rspec if running "rake gems:*"
|
4
|
+
unless ARGV.any? {|a| a =~ /^gems/}
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'spec/rake/spectask'
|
8
|
+
rescue MissingSourceFile
|
9
|
+
module Spec
|
10
|
+
module Rake
|
11
|
+
class SpecTask
|
12
|
+
def initialize(name)
|
13
|
+
task name do
|
14
|
+
# if rspec-rails is a configured gem, this will output helpful material and exit ...
|
15
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")
|
16
|
+
|
17
|
+
# ... otherwise, do this:
|
18
|
+
raise <<-MSG
|
19
|
+
|
20
|
+
#{"*" * 80}
|
21
|
+
* You are trying to run an rspec rake task defined in
|
22
|
+
* #{__FILE__},
|
23
|
+
* but rspec can not be found in vendor/gems, vendor/plugins or system gems.
|
24
|
+
#{"*" * 80}
|
25
|
+
MSG
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Rake.application.instance_variable_get('@tasks').delete('default')
|
34
|
+
|
35
|
+
spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop
|
36
|
+
task :noop do
|
37
|
+
end
|
38
|
+
|
39
|
+
task :default => [:spec,:features]
|
40
|
+
task :stats => "spec:statsetup"
|
41
|
+
|
42
|
+
desc "Run all specs in spec directory (excluding plugin specs)"
|
43
|
+
Spec::Rake::SpecTask.new(:spec => spec_prereq) do |t|
|
44
|
+
t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
|
45
|
+
t.spec_files = FileList['spec/**/*/*_spec.rb']
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "Run all specs in the spec directory with html output (excluding plugins specs)"
|
49
|
+
Spec::Rake::SpecTask.new(:spec_html => spec_prereq) do |t|
|
50
|
+
t.spec_opts = ['--colour', '--format html', '--loadby mtime', '--reverse']
|
51
|
+
t.spec_files = FileList['spec/**/*/*_spec.rb']
|
52
|
+
end
|
53
|
+
|
54
|
+
namespace :spec do
|
55
|
+
desc "Run all specs in spec directory with RCov (excluding plugin specs)"
|
56
|
+
Spec::Rake::SpecTask.new(:rcov) do |t|
|
57
|
+
t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
|
58
|
+
t.spec_files = FileList['spec/**/*/*_spec.rb']
|
59
|
+
t.rcov = true
|
60
|
+
t.rcov_opts = lambda do
|
61
|
+
IO.readlines("#{RAILS_ROOT}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -5,13 +5,11 @@ class CulerityGenerator < Rails::Generator::Base
|
|
5
5
|
m.directory 'features/step_definitions'
|
6
6
|
m.file 'features/step_definitions/culerity_steps.rb', 'features/step_definitions/culerity_steps.rb'
|
7
7
|
m.file 'features/support/env.rb', 'features/support/env.rb'
|
8
|
-
m.file 'config/environments/
|
9
|
-
m.file 'config/environments/culerity_development.rb', 'config/environments/culerity_development.rb'
|
8
|
+
m.file 'config/environments/culerity.rb', 'config/environments/culerity.rb'
|
10
9
|
|
11
10
|
m.gsub_file 'config/database.yml', /cucumber:.*\n/, "cucumber: &CUCUMBER\n"
|
12
11
|
|
13
|
-
m.gsub_file 'config/database.yml', /\z/, "\
|
14
|
-
m.gsub_file 'config/database.yml', /\z/, "\nculerity_continuousintegration:\n <<: *CUCUMBER"
|
12
|
+
m.gsub_file 'config/database.yml', /\z/, "\nculerity:\n <<: *CUCUMBER"
|
15
13
|
|
16
14
|
m.file "lib/tasks/culerity.rake", "lib/tasks/culerity.rake"
|
17
15
|
|
data/rails_generators/culerity/templates/config/environments/{culerity_development.rb → culerity.rb}
RENAMED
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'culerity'
|
2
2
|
|
3
3
|
Before do
|
4
|
-
$rails_server ||= Culerity::run_rails(:environment => '
|
4
|
+
$rails_server ||= Culerity::run_rails(:environment => 'culerity', :port => 3001)
|
5
5
|
$server ||= Culerity::run_server
|
6
6
|
$browser = Culerity::RemoteBrowserProxy.new $server, {:browser => :firefox3,
|
7
7
|
:javascript_exceptions => true,
|
@@ -18,8 +18,17 @@ at_exit do
|
|
18
18
|
Process.kill(6, $rails_server.pid.to_i) if $rails_server
|
19
19
|
end
|
20
20
|
|
21
|
+
Given /^(?:|I )am on (.+)$/ do |page_name|
|
22
|
+
$browser.goto @host + path_to(page_name)
|
23
|
+
end
|
24
|
+
|
21
25
|
When /I follow "([^\"]*)"/ do |link|
|
22
|
-
_link = [
|
26
|
+
_link = [
|
27
|
+
[:text, /^#{Regexp.escape(link)}$/ ],
|
28
|
+
[:id, link],
|
29
|
+
[:title, link],
|
30
|
+
[:text, /#{Regexp.escape(link)}/ ],
|
31
|
+
].map{|args| $browser.link(*args)}.find{|__link| __link.exist?}
|
23
32
|
raise "link \"#{link}\" not found" unless _link
|
24
33
|
_link.click
|
25
34
|
assert_successful_response
|
@@ -43,7 +52,7 @@ When /I check "([^\"]*)"/ do |field|
|
|
43
52
|
end
|
44
53
|
|
45
54
|
When /^I uncheck "([^\"]*)"$/ do |field|
|
46
|
-
find_by_label_or_id(:check_box, field).set(
|
55
|
+
find_by_label_or_id(:check_box, field).set(false)
|
47
56
|
end
|
48
57
|
|
49
58
|
When /I select "([^\"]*)" from "([^\"]*)"/ do |value, field|
|
@@ -74,14 +83,69 @@ When /^I wait for the AJAX call to finish$/ do
|
|
74
83
|
end
|
75
84
|
end
|
76
85
|
|
86
|
+
Then /^(?:|I )should be on (.+)$/ do |page_name|
|
87
|
+
current_path = URI.parse($browser.url)
|
88
|
+
expected_path = URI.parse(path_to(page_name))
|
89
|
+
|
90
|
+
# If our expected path doesn't specify a query-string, ignore any query string
|
91
|
+
# in the current path
|
92
|
+
current_path, expected_path = if expected_path.query.nil?
|
93
|
+
[ current_path.path, expected_path.path ]
|
94
|
+
else
|
95
|
+
[ current_path.select(:path, :query).compact.join('?'), path_to(page_name) ]
|
96
|
+
end
|
97
|
+
|
98
|
+
if defined?(Spec::Rails::Matchers)
|
99
|
+
current_path.should == path_to(page_name)
|
100
|
+
else
|
101
|
+
assert_equal path_to(page_name), current_path
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
|
106
|
+
f = find_by_label_or_id(:text_field, field)
|
107
|
+
if defined?(Spec::Rails::Matchers)
|
108
|
+
f.text.should =~ /#{Regexp::escape(value)}/
|
109
|
+
else
|
110
|
+
assert_match(/#{Regexp::escape(value)}/, f.text)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
|
115
|
+
f = find_by_label_or_id(:text_field, field)
|
116
|
+
if defined?(Spec::Rails::Matchers)
|
117
|
+
f.text.should_not =~ /#{Regexp::escape(value)}/
|
118
|
+
else
|
119
|
+
assert_no_match(/#{Regexp::escape(value)}/, f.text)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
|
124
|
+
f = find_by_label_or_id(:check_box, label)
|
125
|
+
if defined?(Spec::Rails::Matchers)
|
126
|
+
f.should be_checked
|
127
|
+
else
|
128
|
+
assert f.checked?
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
Then /^the "([^\"]*)" checkbox should not be checked$/ do |label|
|
133
|
+
f = find_by_label_or_id(:check_box, label)
|
134
|
+
if defined?(Spec::Rails::Matchers)
|
135
|
+
f.should_not be_checked
|
136
|
+
else
|
137
|
+
assert !f.checked?
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
77
141
|
Then /I should see "([^\"]*)"/ do |text|
|
78
142
|
# if we simply check for the browser.html content we don't find content that has been added dynamically, e.g. after an ajax call
|
79
|
-
div = $browser.div(:text, /#{text}/)
|
143
|
+
div = $browser.div(:text, /#{Regexp::escape(text)}/)
|
80
144
|
div.should be_exist
|
81
145
|
end
|
82
146
|
|
83
147
|
Then /I should not see "([^\"]*)"/ do |text|
|
84
|
-
div = $browser.div(:text, /#{text}/)
|
148
|
+
div = $browser.div(:text, /#{Regexp::escape(text)}/)
|
85
149
|
div.should_not be_exist
|
86
150
|
end
|
87
151
|
|
@@ -3,7 +3,7 @@ namespace 'culerity' do
|
|
3
3
|
desc "Starts a rails server for cucumber/culerity tests"
|
4
4
|
task :start do
|
5
5
|
port = ENV['PORT'] || 3001
|
6
|
-
environment = ENV["RAILS_ENV"] || '
|
6
|
+
environment = ENV["RAILS_ENV"] || 'culerity'
|
7
7
|
pid_file = RAILS_ROOT + "/tmp/culerity_rails_server.pid"
|
8
8
|
if File.exists?(pid_file)
|
9
9
|
puts "culerity rails server already running; if not, delete tmp/culerity_rails_server.pid and try again"
|
data/spec/culerity_spec.rb
CHANGED
@@ -4,30 +4,44 @@ describe Culerity, 'run_rails' do
|
|
4
4
|
before(:each) do
|
5
5
|
Kernel.stub!(:sleep)
|
6
6
|
IO.stub!(:popen)
|
7
|
+
Culerity.stub!(:fork).and_yield.and_return(3200)
|
8
|
+
Culerity.stub!(:exec)
|
7
9
|
Culerity.stub!(:sleep)
|
10
|
+
[$stdin, $stdout, $stderr].each{|io| io.stub(:reopen)}
|
8
11
|
end
|
9
12
|
|
10
13
|
it "should not run rails if we are not using rails" do
|
11
|
-
|
14
|
+
Culerity.should_not_receive(:exec)
|
12
15
|
Culerity.run_rails :port => 4000, :environment => 'culerity'
|
13
16
|
end
|
14
17
|
|
15
18
|
it "should run rails with default values" do
|
16
|
-
Rails ||= :rails
|
17
|
-
|
19
|
+
Rails ||= stub(:rails, :root => Dir.pwd)
|
20
|
+
Culerity.should_receive(:exec).with("script/server -e culerity -p 3001")
|
18
21
|
Culerity.run_rails
|
19
22
|
end
|
20
23
|
|
21
24
|
it "should run rails with the given values" do
|
22
|
-
Rails ||= :rails
|
23
|
-
|
25
|
+
Rails ||= stub(:rails, :root => Dir.pwd)
|
26
|
+
Culerity.should_receive(:exec).with("script/server -e culerity -p 4000")
|
27
|
+
Culerity.run_rails :port => 4000, :environment => 'culerity'
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should change into the rails root directory" do
|
31
|
+
Rails ||= stub(:rails, :root => Dir.pwd)
|
32
|
+
Dir.should_receive(:chdir).with(Dir.pwd)
|
24
33
|
Culerity.run_rails :port => 4000, :environment => 'culerity'
|
25
|
-
|
26
34
|
end
|
27
35
|
|
28
36
|
it "should wait for the server to start up" do
|
29
|
-
Rails ||= :rails
|
37
|
+
Rails ||= stub(:rails, :root => Dir.pwd)
|
30
38
|
Culerity.should_receive(:sleep)
|
31
39
|
Culerity.run_rails :port => 4000, :environment => 'culerity'
|
32
40
|
end
|
41
|
+
|
42
|
+
it "should reopen the i/o channels to /dev/null" do
|
43
|
+
Rails ||= stub(:rails, :root => Dir.pwd)
|
44
|
+
[$stdin, $stdout, $stderr].each{|io| io.should_receive(:reopen).with("/dev/null")}
|
45
|
+
Culerity.run_rails :port => 4000, :environment => 'culerity'
|
46
|
+
end
|
33
47
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: culerity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Lang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-06 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -65,10 +65,11 @@ files:
|
|
65
65
|
- lib/culerity/persistent_delivery.rb
|
66
66
|
- lib/culerity/remote_browser_proxy.rb
|
67
67
|
- lib/culerity/remote_object_proxy.rb
|
68
|
+
- lib/tasks/rspec.rake
|
68
69
|
- rails/init.rb
|
69
70
|
- rails_generators/culerity/culerity_generator.rb
|
71
|
+
- rails_generators/culerity/templates/config/environments/culerity.rb
|
70
72
|
- rails_generators/culerity/templates/config/environments/culerity_continuousintegration.rb
|
71
|
-
- rails_generators/culerity/templates/config/environments/culerity_development.rb
|
72
73
|
- rails_generators/culerity/templates/features/step_definitions/culerity_steps.rb
|
73
74
|
- rails_generators/culerity/templates/features/support/env.rb
|
74
75
|
- rails_generators/culerity/templates/lib/tasks/culerity.rake
|