culerity 0.2.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.
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