culerity 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/.gitignore +6 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.textile +106 -0
  4. data/Rakefile +43 -0
  5. data/VERSION.yml +4 -0
  6. data/culerity.gemspec +78 -0
  7. data/features/fixtures/sample_feature +14 -0
  8. data/features/installing_culerity.feature +46 -0
  9. data/features/running_cucumber_without_explicitly_running_external_services.feature +24 -0
  10. data/features/step_definitions/common_steps.rb +175 -0
  11. data/features/step_definitions/culerity_setup_steps.rb +7 -0
  12. data/features/step_definitions/jruby_steps.rb +11 -0
  13. data/features/step_definitions/rails_setup_steps.rb +26 -0
  14. data/features/support/common.rb +32 -0
  15. data/features/support/env.rb +24 -0
  16. data/features/support/matchers.rb +11 -0
  17. data/init.rb +1 -0
  18. data/lib/culerity.rb +60 -0
  19. data/lib/culerity/celerity_server.rb +81 -0
  20. data/lib/culerity/remote_browser_proxy.rb +58 -0
  21. data/lib/culerity/remote_object_proxy.rb +76 -0
  22. data/rails/init.rb +1 -0
  23. data/rails_generators/culerity/culerity_generator.rb +25 -0
  24. data/rails_generators/culerity/templates/config/environments/culerity_continuousintegration.rb +28 -0
  25. data/rails_generators/culerity/templates/config/environments/culerity_development.rb +17 -0
  26. data/rails_generators/culerity/templates/features/step_definitions/common_celerity_steps.rb +93 -0
  27. data/rails_generators/culerity/templates/lib/tasks/culerity.rake +38 -0
  28. data/script/console +10 -0
  29. data/script/destroy +14 -0
  30. data/script/generate +14 -0
  31. data/spec/celerity_server_spec.rb +97 -0
  32. data/spec/remote_browser_proxy_spec.rb +62 -0
  33. data/spec/remote_object_proxy_spec.rb +63 -0
  34. data/spec/spec_helper.rb +7 -0
  35. metadata +110 -0
@@ -0,0 +1,17 @@
1
+ config.cache_classes = false
2
+
3
+ # Log error messages when you accidentally call methods on nil.
4
+ config.whiny_nils = true
5
+
6
+ # Show full error reports and disable caching
7
+ config.action_controller.consider_all_requests_local = true
8
+ config.action_controller.perform_caching = false
9
+ config.action_view.cache_template_loading = false
10
+
11
+ # Disable request forgery protection in test environment
12
+ config.action_controller.allow_forgery_protection = false
13
+
14
+ # Tell Action Mailer not to deliver emails to the real world.
15
+ # The :test delivery method accumulates sent emails in the
16
+ # ActionMailer::Base.deliveries array.
17
+ config.action_mailer.delivery_method = :test
@@ -0,0 +1,93 @@
1
+ require 'culerity'
2
+
3
+ Before do
4
+ unless $rails_server
5
+ $rails_server = Culerity::run_rails
6
+ sleep 5
7
+ end
8
+
9
+ $server ||= Culerity::run_server
10
+ $browser = Culerity::RemoteBrowserProxy.new $server, {:browser => :firefox}
11
+ @host = 'http://localhost:3001'
12
+ end
13
+
14
+ at_exit do
15
+ $browser.exit if $browser
16
+ $server.exit_server if $server
17
+ Process.kill(6, $rails_server.pid.to_i) if $rails_server
18
+ end
19
+
20
+ When /I press "(.*)"/ do |button|
21
+ $browser.button(:text, button).click
22
+ assert_successful_response
23
+ end
24
+
25
+ When /I follow "(.*)"/ do |link|
26
+ $browser.link(:text, /#{link}/).click
27
+ assert_successful_response
28
+ end
29
+
30
+ When /I fill in "(.*)" for "(.*)"/ do |value, field|
31
+ $browser.text_field(:id, find_label(field).for).set(value)
32
+ end
33
+
34
+ When /I check "(.*)"/ do |field|
35
+ $browser.check_box(:id, find_label(field).for).set(true)
36
+ end
37
+
38
+ When /^I uncheck "(.*)"$/ do |field|
39
+ $browser.check_box(:id, find_label(field).for).set(false)
40
+ end
41
+
42
+ When /I select "(.*)" from "(.*)"/ do |value, field|
43
+ $browser.select_list(:id, find_label(field).for).select value
44
+ end
45
+
46
+ When /I choose "(.*)"/ do |field|
47
+ $browser.radio(:id, find_label(field).for).set(true)
48
+ end
49
+
50
+ When /I go to (.+)/ do |path|
51
+ $browser.goto @host + path_to(path)
52
+ assert_successful_response
53
+ end
54
+
55
+ When /I wait for the AJAX call to finish/ do
56
+ $browser.wait
57
+ end
58
+
59
+ Then /I should see "(.*)"/ do |text|
60
+ # 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
61
+ div = $browser.div(:text, /#{text}/)
62
+ begin
63
+ div.html
64
+ rescue
65
+ #puts $browser.html
66
+ raise("div with '#{text}' not found")
67
+ end
68
+ end
69
+
70
+ Then /I should not see "(.*)"/ do |text|
71
+ div = $browser.div(:text, /#{text}/).html rescue nil
72
+ div.should be_nil
73
+ end
74
+
75
+ def find_label(text)
76
+ $browser.label :text, text
77
+ end
78
+
79
+ def assert_successful_response
80
+ status = $browser.page.web_response.status_code
81
+ if(status == 302 || status == 301)
82
+ location = $browser.page.web_response.get_response_header_value('Location')
83
+ puts "Being redirected to #{location}"
84
+ $browser.goto location
85
+ assert_successful_response
86
+ elsif status != 200
87
+ tmp = Tempfile.new 'culerity_results'
88
+ tmp << $browser.html
89
+ tmp.close
90
+ `open -a /Applications/Safari.app #{tmp.path}`
91
+ raise "Brower returned Response Code #{$browser.page.web_response.status_code}"
92
+ end
93
+ end
@@ -0,0 +1,38 @@
1
+ namespace 'culerity' do
2
+ namespace 'rails' do
3
+ desc "Starts a rails server for cucumber/culerity tests"
4
+ task :start => :environment do
5
+ port = ENV['PORT'] || 3001
6
+ environment = 'culerity_development'
7
+ pid_file = RAILS_ROOT + "/tmp/culerity_rails_server.pid"
8
+ if File.exists?(pid_file)
9
+ puts "culerity rails server already running; if not, delete tmp/culerity_rails_server.pid and try again"
10
+ exit 1
11
+ end
12
+ rails_server = IO.popen("script/server -e #{environment} -p #{port}", 'r+')
13
+ File.open(pid_file, "w") { |file| file << rails_server.pid }
14
+ end
15
+
16
+ desc "Stops the running rails server for cucumber/culerity tests"
17
+ task :stop => :environment do
18
+ pid_file = RAILS_ROOT + "/tmp/culerity_rails_server.pid"
19
+ if File.exists?(pid_file)
20
+ pid = File.read(pid_file).to_i
21
+ Process.kill(6, pid)
22
+ File.delete(pid_file)
23
+ else
24
+ puts "No culerity rails server running. Doing nothing."
25
+ end
26
+ end
27
+
28
+ desc "Restarts the rails server for cucumber/culerity tests"
29
+ task :restart => [:stop, :start]
30
+ end
31
+
32
+ desc "Install required gems into jruby"
33
+ task :install => :environment do
34
+ jgem_cmd = `which jruby`.strip
35
+ raise "ERROR: You need to install jruby to use culerity and celerity." if jgem_cmd.blank?
36
+ sh "#{jgem_cmd} -S gem install jarib-celerity --source=http://gems.github.com"
37
+ end
38
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/culerity.rb'}"
9
+ puts "Loading culerity gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,97 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Culerity::CelerityServer do
4
+ before(:each) do
5
+ @browser = stub 'browser'
6
+ Celerity::Browser.stub!(:new).and_return(@browser)
7
+ end
8
+
9
+ it "should pass the method call to the celerity browser" do
10
+ @browser.should_receive(:goto).with('/homepage')
11
+ _in = stub 'in'
12
+ _in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
13
+ _out = stub 'out', :<< => nil
14
+ Culerity::CelerityServer.new(_in, _out)
15
+ end
16
+
17
+ it "should return the browser id when a new browser is requested" do
18
+ _in = stub 'in'
19
+ _in.stub!(:gets).and_return("[\"celerity\", \"new_browser\", {}]\n", "[\"_exit_\"]\n")
20
+ _out = stub 'out'
21
+ _out.should_receive(:<<).with("[:return, \"browser0\"]\n")
22
+ Culerity::CelerityServer.new(_in, _out)
23
+ end
24
+
25
+ it "should create a new browser with the provided options" do
26
+ _in = stub 'in'
27
+ _in.stub!(:gets).and_return("[\"celerity\", \"new_browser\", {:browser => :firefox}]\n", "[\"_exit_\"]\n")
28
+ Celerity::Browser.should_receive(:new).with(:browser => :firefox)
29
+ Culerity::CelerityServer.new(_in, stub.as_null_object)
30
+ end
31
+
32
+ it "should create multiple browsers and return the appropriate id for each" do
33
+ _in = stub 'in'
34
+ _in.stub!(:gets).and_return("[\"celerity\", \"new_browser\", {}]\n", "[\"celerity\", \"new_browser\", {}]\n", "[\"_exit_\"]\n")
35
+ Celerity::Browser.should_receive(:new).twice
36
+ _out = stub 'out'
37
+ _out.should_receive(:<<).with("[:return, \"browser0\"]\n").ordered
38
+ _out.should_receive(:<<).with("[:return, \"browser1\"]\n").ordered
39
+ Culerity::CelerityServer.new(_in, _out)
40
+
41
+ end
42
+
43
+
44
+ it "should send back the return value of the call" do
45
+ @browser.stub!(:goto).and_return(true)
46
+ _in = stub 'in'
47
+ _in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
48
+ _out = stub 'out'
49
+ _out.should_receive(:<<).with("[:return, true]\n")
50
+ Culerity::CelerityServer.new(_in, _out)
51
+ end
52
+
53
+ it "should ignore empty inputs" do
54
+ _in = stub 'in'
55
+ _in.stub!(:gets).and_return("\n", "[\"_exit_\"]\n")
56
+ _out = stub 'out'
57
+ _out.should_not_receive(:<<)
58
+ Culerity::CelerityServer.new(_in, _out)
59
+ end
60
+
61
+ it "should send back a proxy if the return value is not a string, number, nil or boolean" do
62
+ @browser.stub!(:goto).and_return(stub('123', :object_id => 456))
63
+ _in = stub 'in'
64
+ _in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
65
+ _out = stub 'out'
66
+ _out.should_receive(:<<).with("[:return, Culerity::RemoteObjectProxy.new(456, @io)]\n")
67
+ Culerity::CelerityServer.new(_in, _out)
68
+ end
69
+
70
+ it "should pass the method call to a proxy" do
71
+ proxy = stub('123', :object_id => 456)
72
+ @browser.stub!(:goto).and_return(proxy)
73
+ _in = stub 'in'
74
+ _in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[456, \"goto_2\", \"1\"]", "[\"_exit_\"]\n")
75
+ _out = stub 'out', :<< => nil
76
+ proxy.should_receive(:goto_2).with('1')
77
+ Culerity::CelerityServer.new(_in, _out)
78
+ end
79
+
80
+ it "should pass multiple method calls" do
81
+ @browser.should_receive(:goto).with('/homepage')
82
+ @browser.should_receive(:goto).with('/page2')
83
+ _in = stub 'in'
84
+ _in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"browser0\", \"goto\", \"/page2\"]\n", "[\"_exit_\"]\n")
85
+ _out = stub 'out', :<< => nil
86
+ Culerity::CelerityServer.new(_in, _out)
87
+ end
88
+
89
+ it "should return an exception" do
90
+ @browser.stub!(:goto).and_raise(RuntimeError.new('test exception with "quotes"'))
91
+ _in = stub 'in'
92
+ _in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
93
+ _out = stub 'out'
94
+ _out.should_receive(:<<).with(/^\[:exception, \"RuntimeError\", \"test exception with \\\"quotes\\\"\", \[.*\]\]\n$/)
95
+ Culerity::CelerityServer.new(_in, _out)
96
+ end
97
+ end
@@ -0,0 +1,62 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Culerity::RemoteBrowserProxy do
4
+ before(:each) do
5
+ @io = stub 'io', :gets => "[:return, \"browser0\"]", :<< => nil
6
+ end
7
+ it "should send the serialized method call to the output" do
8
+ @io.should_receive(:<<).with("[\"celerity\", \"new_browser\", {}]\n").ordered
9
+ @io.should_receive(:<<).with("[\"browser0\", \"goto\", \"/homepage\"]\n").ordered
10
+ proxy = Culerity::RemoteBrowserProxy.new @io
11
+ proxy.goto '/homepage'
12
+ end
13
+
14
+ it "should return the deserialized return value" do
15
+ io = stub 'io', :gets => "[:return, :okay]\n", :<< => nil
16
+ proxy = Culerity::RemoteBrowserProxy.new io
17
+ proxy.goto.should == :okay
18
+ end
19
+
20
+ it "should send the brower options to the remote server" do
21
+ io = stub 'io', :gets => "[:return, \"browser0\"]"
22
+ io.should_receive(:<<).with('["celerity", "new_browser", {:browser=>:firefox}]' + "\n")
23
+ proxy = Culerity::RemoteBrowserProxy.new io, {:browser => :firefox}
24
+ end
25
+
26
+ it "should timeout if wait_until takes too long" do
27
+ proxy = Culerity::RemoteBrowserProxy.new @io
28
+ lambda {
29
+ proxy.wait_until(0.1) { false }
30
+ }.should raise_error(Timeout::Error)
31
+ end
32
+
33
+ it "should return successfully when wait_until returns true" do
34
+ proxy = Culerity::RemoteBrowserProxy.new @io
35
+ proxy.wait_until(0.1) { true }.should == true
36
+ end
37
+
38
+ it "should timeout if wait_while takes too long" do
39
+ proxy = Culerity::RemoteBrowserProxy.new @io
40
+ lambda {
41
+ proxy.wait_while(0.1) { true }
42
+ }.should raise_error(Timeout::Error)
43
+ end
44
+
45
+ it "should return successfully when wait_while returns !true" do
46
+ proxy = Culerity::RemoteBrowserProxy.new @io
47
+ proxy.wait_while(0.1) { false }.should == true
48
+ end
49
+
50
+ it "should accept all javascript confirmation dialogs" do
51
+ proxy = Culerity::RemoteBrowserProxy.new @io
52
+
53
+ proxy.should_receive(:send_remote).with(:add_listener, :confirm).and_return(true)
54
+ proxy.should_receive(:send_remote).with(:goto, "http://example.com").and_return(true)
55
+ proxy.should_receive(:send_remote).with(:remove_listener, :confirm).and_return(true)
56
+
57
+ proxy.confirm(true) do
58
+ proxy.goto "http://example.com"
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,63 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Culerity::RemoteObjectProxy do
4
+ describe "block_to_string method" do
5
+ it "should return block result when result is lambda string" do
6
+ proxy = Culerity::RemoteObjectProxy.new nil, nil
7
+ block = lambda { "lambda { true}" }
8
+ proxy.send(:block_to_string, &block).should == "lambda { true}"
9
+ end
10
+
11
+ it "should return lambda string when block result isn't a lambda string" do
12
+ proxy = Culerity::RemoteObjectProxy.new nil, nil
13
+ [true, false, "blah", 5].each do |var|
14
+ block = lambda { var }
15
+ proxy.send(:block_to_string, &block).should == "lambda { #{var} }"
16
+ end
17
+ end
18
+ end
19
+
20
+ it "should send the serialized method call to the output" do
21
+ io = stub 'io', :gets => '[:return]'
22
+ io.should_receive(:<<).with(%Q{[345, "goto", "/homepage"]\n})
23
+ proxy = Culerity::RemoteObjectProxy.new 345, io
24
+ proxy.goto '/homepage'
25
+ end
26
+
27
+ it "should send the serialized method call with argument plus block to the output" do
28
+ io = stub 'io', :gets => "[:return]"
29
+ io.should_receive(:<<).with(%Q{[345, "method", true, lambda { true }]\n})
30
+ proxy = Culerity::RemoteObjectProxy.new 345, io
31
+
32
+ proxy.send_remote(:method, true) { "lambda { true }" }
33
+ end
34
+
35
+ it "should send the serialized method call without argument plus block to the output" do
36
+ io = stub 'io', :gets => "[:return]"
37
+ io.should_receive(:<<).with(%Q{[345, "method", lambda { true }]\n})
38
+ proxy = Culerity::RemoteObjectProxy.new 345, io
39
+
40
+ proxy.send_remote(:method) { "lambda { true }" }
41
+ end
42
+
43
+ it "should return the deserialized return value" do
44
+ io = stub 'io', :gets => "[:return, :okay]\n", :<< => nil
45
+ proxy = Culerity::RemoteObjectProxy.new 345, io
46
+ proxy.goto.should == :okay
47
+ end
48
+
49
+ it "should raise the received exception" do
50
+ io = stub 'io', :gets => %Q{[:exception, "RuntimeError", "test exception", []]}, :<< => nil
51
+ proxy = Culerity::RemoteObjectProxy.new 345, io
52
+ lambda {
53
+ proxy.goto '/home'
54
+ }.should raise_error(Culerity::CulerityException)
55
+ end
56
+
57
+ it "should send exit" do
58
+ io = stub 'io', :gets => '[:return]'
59
+ io.should_receive(:<<).with('["_exit_"]')
60
+ proxy = Culerity::RemoteObjectProxy.new 345, io
61
+ proxy.exit
62
+ end
63
+ end
@@ -0,0 +1,7 @@
1
+ if RUBY_PLATFORM != 'java'
2
+ puts "You need JRuby to run these specs"
3
+ exit -1
4
+ end
5
+
6
+ require File.dirname(__FILE__) + '/../lib/culerity'
7
+ require File.dirname(__FILE__) + '/../lib/culerity/celerity_server'
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: culerity
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Lang
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-08 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: cucumber
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: Culerity integrates Cucumber and Celerity in order to test your application's full stack.
36
+ email: alex@upstream-berlin.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README.textile
43
+ files:
44
+ - .gitignore
45
+ - MIT-LICENSE
46
+ - README.textile
47
+ - Rakefile
48
+ - VERSION.yml
49
+ - culerity.gemspec
50
+ - features/fixtures/sample_feature
51
+ - features/installing_culerity.feature
52
+ - features/running_cucumber_without_explicitly_running_external_services.feature
53
+ - features/step_definitions/common_steps.rb
54
+ - features/step_definitions/culerity_setup_steps.rb
55
+ - features/step_definitions/jruby_steps.rb
56
+ - features/step_definitions/rails_setup_steps.rb
57
+ - features/support/common.rb
58
+ - features/support/env.rb
59
+ - features/support/matchers.rb
60
+ - init.rb
61
+ - lib/culerity.rb
62
+ - lib/culerity/celerity_server.rb
63
+ - lib/culerity/remote_browser_proxy.rb
64
+ - lib/culerity/remote_object_proxy.rb
65
+ - rails/init.rb
66
+ - rails_generators/culerity/culerity_generator.rb
67
+ - rails_generators/culerity/templates/config/environments/culerity_continuousintegration.rb
68
+ - rails_generators/culerity/templates/config/environments/culerity_development.rb
69
+ - rails_generators/culerity/templates/features/step_definitions/common_celerity_steps.rb
70
+ - rails_generators/culerity/templates/lib/tasks/culerity.rake
71
+ - script/console
72
+ - script/destroy
73
+ - script/generate
74
+ - spec/celerity_server_spec.rb
75
+ - spec/remote_browser_proxy_spec.rb
76
+ - spec/remote_object_proxy_spec.rb
77
+ - spec/spec_helper.rb
78
+ has_rdoc: true
79
+ homepage: http://github.com/langalex/culerity
80
+ licenses: []
81
+
82
+ post_install_message:
83
+ rdoc_options:
84
+ - --charset=UTF-8
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: "0"
92
+ version:
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: "0"
98
+ version:
99
+ requirements: []
100
+
101
+ rubyforge_project:
102
+ rubygems_version: 1.3.5
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: Culerity integrates Cucumber and Celerity in order to test your application's full stack.
106
+ test_files:
107
+ - spec/celerity_server_spec.rb
108
+ - spec/remote_browser_proxy_spec.rb
109
+ - spec/remote_object_proxy_spec.rb
110
+ - spec/spec_helper.rb