drnic-culerity 0.2.1 → 0.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/.gitignore +2 -0
- data/VERSION.yml +2 -2
- data/culerity.gemspec +3 -6
- data/lib/culerity/celerity_server.rb +23 -7
- data/lib/culerity/remote_browser_proxy.rb +4 -11
- data/lib/culerity/remote_object_proxy.rb +1 -1
- data/lib/culerity.rb +12 -1
- data/spec/celerity_server_spec.rb +36 -16
- data/spec/remote_browser_proxy_spec.rb +14 -11
- metadata +2 -2
data/VERSION.yml
CHANGED
data/culerity.gemspec
CHANGED
@@ -1,15 +1,12 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
2
|
|
6
3
|
Gem::Specification.new do |s|
|
7
4
|
s.name = %q{culerity}
|
8
|
-
s.version = "0.2.
|
5
|
+
s.version = "0.2.2"
|
9
6
|
|
10
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
8
|
s.authors = ["Alexander Lang"]
|
12
|
-
s.date = %q{2009-08-
|
9
|
+
s.date = %q{2009-08-16}
|
13
10
|
s.description = %q{Culerity integrates Cucumber and Celerity in order to test your application's full stack.}
|
14
11
|
s.email = %q{alex@upstream-berlin.com}
|
15
12
|
s.extra_rdoc_files = [
|
@@ -52,7 +49,7 @@ Gem::Specification.new do |s|
|
|
52
49
|
s.homepage = %q{http://github.com/langalex/culerity}
|
53
50
|
s.rdoc_options = ["--charset=UTF-8"]
|
54
51
|
s.require_paths = ["lib"]
|
55
|
-
s.rubygems_version = %q{1.3.
|
52
|
+
s.rubygems_version = %q{1.3.3}
|
56
53
|
s.summary = %q{Culerity integrates Cucumber and Celerity in order to test your application's full stack.}
|
57
54
|
s.test_files = [
|
58
55
|
"spec/celerity_server_spec.rb",
|
@@ -7,11 +7,12 @@ module Culerity
|
|
7
7
|
|
8
8
|
def initialize(_in, _out)
|
9
9
|
@proxies = {}
|
10
|
-
@
|
11
|
-
|
10
|
+
@browsers = []
|
11
|
+
|
12
12
|
while(true)
|
13
13
|
call = eval _in.gets.to_s.strip
|
14
14
|
return if call == ["_exit_"]
|
15
|
+
next(close_browsers) if call == ["_close_browsers_"]
|
15
16
|
unless call.nil?
|
16
17
|
begin
|
17
18
|
# check if last arg is a block
|
@@ -27,6 +28,7 @@ module Culerity
|
|
27
28
|
_out << "[:exception, \"#{e.class.name}\", #{e.message.inspect}, #{e.backtrace.inspect}]\n"
|
28
29
|
end
|
29
30
|
end
|
31
|
+
|
30
32
|
end
|
31
33
|
|
32
34
|
end
|
@@ -37,13 +39,27 @@ module Culerity
|
|
37
39
|
@browser_options = options
|
38
40
|
end
|
39
41
|
|
40
|
-
def
|
41
|
-
|
42
|
+
def new_browser(options, number = nil)
|
43
|
+
number ||= @browsers.size
|
44
|
+
@browsers[number] = Celerity::Browser.new(options || @browser_options || {})
|
45
|
+
"browser#{number}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def close_browsers
|
49
|
+
@browsers.each { |browser| browser.close }
|
50
|
+
@browsers = []
|
51
|
+
end
|
52
|
+
|
53
|
+
def browser(number)
|
54
|
+
unless @browsers[number]
|
55
|
+
new_browser(nil, number)
|
56
|
+
end
|
57
|
+
@browsers[number]
|
42
58
|
end
|
43
59
|
|
44
60
|
def target(object_id)
|
45
|
-
if object_id
|
46
|
-
browser
|
61
|
+
if object_id =~ /browser(\d+)/
|
62
|
+
browser($1.to_i)
|
47
63
|
elsif object_id == 'celerity'
|
48
64
|
self
|
49
65
|
else
|
@@ -62,4 +78,4 @@ module Culerity
|
|
62
78
|
end
|
63
79
|
end
|
64
80
|
end
|
65
|
-
end
|
81
|
+
end
|
@@ -3,11 +3,8 @@ module Culerity
|
|
3
3
|
class RemoteBrowserProxy < RemoteObjectProxy
|
4
4
|
def initialize(io, browser_options = {})
|
5
5
|
@io = io
|
6
|
-
|
7
|
-
|
8
|
-
configure_browser browser_options
|
9
|
-
@remote_object_id = nil
|
10
|
-
end
|
6
|
+
@remote_object_id = "celerity".inspect
|
7
|
+
@remote_object_id = new_browser(browser_options).inspect
|
11
8
|
end
|
12
9
|
|
13
10
|
#
|
@@ -55,11 +52,7 @@ module Culerity
|
|
55
52
|
self.send_remote(:remove_listener, :confirm) { blk }
|
56
53
|
end
|
57
54
|
|
58
|
-
private
|
59
|
-
|
60
|
-
def remote_object_id
|
61
|
-
(@remote_object_id || 'browser').inspect
|
62
|
-
end
|
63
55
|
end
|
64
56
|
|
65
|
-
|
57
|
+
|
58
|
+
end
|
data/lib/culerity.rb
CHANGED
@@ -3,8 +3,19 @@ require File.dirname(__FILE__) + '/culerity/remote_browser_proxy'
|
|
3
3
|
|
4
4
|
module Culerity
|
5
5
|
|
6
|
+
module ServerCommands
|
7
|
+
def exit_server
|
8
|
+
self << '["_exit_"]'
|
9
|
+
close
|
10
|
+
end
|
11
|
+
|
12
|
+
def close_browsers
|
13
|
+
self.puts '["_close_browsers_"]'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
6
17
|
def self.run_server
|
7
|
-
IO.popen("jruby #{__FILE__}", 'r+')
|
18
|
+
IO.popen("jruby #{__FILE__}", 'r+').extend(ServerCommands)
|
8
19
|
|
9
20
|
# open the two pipes that were created below
|
10
21
|
# while(!File.exists?("tmp/culerity_in.pipe"))
|
@@ -6,18 +6,45 @@ describe Culerity::CelerityServer do
|
|
6
6
|
Celerity::Browser.stub!(:new).and_return(@browser)
|
7
7
|
end
|
8
8
|
|
9
|
-
it "should pass the method call to the
|
9
|
+
it "should pass the method call to the celerity browser" do
|
10
10
|
@browser.should_receive(:goto).with('/homepage')
|
11
11
|
_in = stub 'in'
|
12
|
-
_in.stub!(:gets).and_return("[\"
|
12
|
+
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
|
13
13
|
_out = stub 'out', :<< => nil
|
14
14
|
Culerity::CelerityServer.new(_in, _out)
|
15
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
|
+
|
16
43
|
|
17
44
|
it "should send back the return value of the call" do
|
18
45
|
@browser.stub!(:goto).and_return(true)
|
19
46
|
_in = stub 'in'
|
20
|
-
_in.stub!(:gets).and_return("[\"
|
47
|
+
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
|
21
48
|
_out = stub 'out'
|
22
49
|
_out.should_receive(:<<).with("[:return, true]\n")
|
23
50
|
Culerity::CelerityServer.new(_in, _out)
|
@@ -34,7 +61,7 @@ describe Culerity::CelerityServer do
|
|
34
61
|
it "should send back a proxy if the return value is not a string, number, nil or boolean" do
|
35
62
|
@browser.stub!(:goto).and_return(stub('123', :object_id => 456))
|
36
63
|
_in = stub 'in'
|
37
|
-
_in.stub!(:gets).and_return("[\"
|
64
|
+
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
|
38
65
|
_out = stub 'out'
|
39
66
|
_out.should_receive(:<<).with("[:return, Culerity::RemoteObjectProxy.new(456, @io)]\n")
|
40
67
|
Culerity::CelerityServer.new(_in, _out)
|
@@ -44,24 +71,17 @@ describe Culerity::CelerityServer do
|
|
44
71
|
proxy = stub('123', :object_id => 456)
|
45
72
|
@browser.stub!(:goto).and_return(proxy)
|
46
73
|
_in = stub 'in'
|
47
|
-
_in.stub!(:gets).and_return("[\"
|
74
|
+
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[456, \"goto_2\", \"1\"]", "[\"_exit_\"]\n")
|
48
75
|
_out = stub 'out', :<< => nil
|
49
76
|
proxy.should_receive(:goto_2).with('1')
|
50
77
|
Culerity::CelerityServer.new(_in, _out)
|
51
78
|
end
|
52
|
-
|
53
|
-
it "should configure the browser" do
|
54
|
-
_in = stub 'in'
|
55
|
-
_in.stub!(:gets).and_return('["celerity", "configure_browser", {:browser=>:firefox}]' + "\n", '["browser", "goto", "/homepage"]' + "\n", "[\"_exit_\"]\n")
|
56
|
-
Celerity::Browser.should_receive(:new).with(:browser => :firefox)
|
57
|
-
Culerity::CelerityServer.new(_in, stub.as_null_object)
|
58
|
-
end
|
59
|
-
|
79
|
+
|
60
80
|
it "should pass multiple method calls" do
|
61
81
|
@browser.should_receive(:goto).with('/homepage')
|
62
82
|
@browser.should_receive(:goto).with('/page2')
|
63
83
|
_in = stub 'in'
|
64
|
-
_in.stub!(:gets).and_return("[\"
|
84
|
+
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"browser0\", \"goto\", \"/page2\"]\n", "[\"_exit_\"]\n")
|
65
85
|
_out = stub 'out', :<< => nil
|
66
86
|
Culerity::CelerityServer.new(_in, _out)
|
67
87
|
end
|
@@ -69,9 +89,9 @@ describe Culerity::CelerityServer do
|
|
69
89
|
it "should return an exception" do
|
70
90
|
@browser.stub!(:goto).and_raise(RuntimeError.new('test exception with "quotes"'))
|
71
91
|
_in = stub 'in'
|
72
|
-
_in.stub!(:gets).and_return("[\"
|
92
|
+
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
|
73
93
|
_out = stub 'out'
|
74
94
|
_out.should_receive(:<<).with(/^\[:exception, \"RuntimeError\", \"test exception with \\\"quotes\\\"\", \[.*\]\]\n$/)
|
75
95
|
Culerity::CelerityServer.new(_in, _out)
|
76
96
|
end
|
77
|
-
end
|
97
|
+
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
3
|
describe Culerity::RemoteBrowserProxy do
|
4
|
+
before(:each) do
|
5
|
+
@io = stub 'io', :gets => "[:return, \"browser0\"]", :<< => nil
|
6
|
+
end
|
4
7
|
it "should send the serialized method call to the output" do
|
5
|
-
io
|
6
|
-
io.should_receive(:<<).with("[\"
|
7
|
-
proxy = Culerity::RemoteBrowserProxy.new io
|
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
|
8
11
|
proxy.goto '/homepage'
|
9
12
|
end
|
10
13
|
|
@@ -15,37 +18,37 @@ describe Culerity::RemoteBrowserProxy do
|
|
15
18
|
end
|
16
19
|
|
17
20
|
it "should send the brower options to the remote server" do
|
18
|
-
io = stub 'io', :gets => "[:return,
|
19
|
-
io.should_receive(:<<).with('["celerity", "
|
21
|
+
io = stub 'io', :gets => "[:return, \"browser0\"]"
|
22
|
+
io.should_receive(:<<).with('["celerity", "new_browser", {:browser=>:firefox}]' + "\n")
|
20
23
|
proxy = Culerity::RemoteBrowserProxy.new io, {:browser => :firefox}
|
21
24
|
end
|
22
25
|
|
23
26
|
it "should timeout if wait_until takes too long" do
|
24
|
-
proxy = Culerity::RemoteBrowserProxy.new
|
27
|
+
proxy = Culerity::RemoteBrowserProxy.new @io
|
25
28
|
lambda {
|
26
29
|
proxy.wait_until(0.1) { false }
|
27
30
|
}.should raise_error(Timeout::Error)
|
28
31
|
end
|
29
32
|
|
30
33
|
it "should return successfully when wait_until returns true" do
|
31
|
-
proxy = Culerity::RemoteBrowserProxy.new
|
34
|
+
proxy = Culerity::RemoteBrowserProxy.new @io
|
32
35
|
proxy.wait_until(0.1) { true }.should == true
|
33
36
|
end
|
34
37
|
|
35
38
|
it "should timeout if wait_while takes too long" do
|
36
|
-
proxy = Culerity::RemoteBrowserProxy.new
|
39
|
+
proxy = Culerity::RemoteBrowserProxy.new @io
|
37
40
|
lambda {
|
38
41
|
proxy.wait_while(0.1) { true }
|
39
42
|
}.should raise_error(Timeout::Error)
|
40
43
|
end
|
41
44
|
|
42
45
|
it "should return successfully when wait_while returns !true" do
|
43
|
-
proxy = Culerity::RemoteBrowserProxy.new
|
46
|
+
proxy = Culerity::RemoteBrowserProxy.new @io
|
44
47
|
proxy.wait_while(0.1) { false }.should == true
|
45
48
|
end
|
46
49
|
|
47
50
|
it "should accept all javascript confirmation dialogs" do
|
48
|
-
proxy = Culerity::RemoteBrowserProxy.new
|
51
|
+
proxy = Culerity::RemoteBrowserProxy.new @io
|
49
52
|
|
50
53
|
proxy.should_receive(:send_remote).with(:add_listener, :confirm).and_return(true)
|
51
54
|
proxy.should_receive(:send_remote).with(:goto, "http://example.com").and_return(true)
|
@@ -56,4 +59,4 @@ describe Culerity::RemoteBrowserProxy do
|
|
56
59
|
end
|
57
60
|
end
|
58
61
|
|
59
|
-
end
|
62
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drnic-culerity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
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: 2009-08-
|
12
|
+
date: 2009-08-16 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|