forked from langalex/culerity
-
Notifications
You must be signed in to change notification settings - Fork 1
/
celerity_server_spec.rb
106 lines (92 loc) · 4.42 KB
/
celerity_server_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
require File.dirname(__FILE__) + '/spec_helper'
describe Culerity::CelerityServer do
before(:each) do
@browser = stub 'browser'
Celerity::Browser.stub!(:new).and_return(@browser)
end
it "should pass the method call to the celerity browser" do
@browser.should_receive(:goto).with('/homepage')
_in = stub 'in'
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
_out = stub 'out', :<< => nil
Culerity::CelerityServer.new(_in, _out)
end
it "should return the browser id when a new browser is requested" do
_in = stub 'in'
_in.stub!(:gets).and_return("[\"celerity\", \"new_browser\", {}]\n", "[\"_exit_\"]\n")
_out = stub 'out'
_out.should_receive(:<<).with("[:return, \"browser0\"]\n")
Culerity::CelerityServer.new(_in, _out)
end
it "should create a new browser with the provided options" do
_in = stub 'in'
_in.stub!(:gets).and_return("[\"celerity\", \"new_browser\", {:browser => :firefox}]\n", "[\"_exit_\"]\n")
Celerity::Browser.should_receive(:new).with(:browser => :firefox)
Culerity::CelerityServer.new(_in, stub.as_null_object)
end
it "should create multiple browsers and return the appropriate id for each" do
_in = stub 'in'
_in.stub!(:gets).and_return("[\"celerity\", \"new_browser\", {}]\n", "[\"celerity\", \"new_browser\", {}]\n", "[\"_exit_\"]\n")
Celerity::Browser.should_receive(:new).twice
_out = stub 'out'
_out.should_receive(:<<).with("[:return, \"browser0\"]\n").ordered
_out.should_receive(:<<).with("[:return, \"browser1\"]\n").ordered
Culerity::CelerityServer.new(_in, _out)
end
it "should send back the return value of the call" do
@browser.stub!(:goto).and_return(true)
_in = stub 'in'
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
_out = stub 'out'
_out.should_receive(:<<).with("[:return, true]\n")
Culerity::CelerityServer.new(_in, _out)
end
it "should ignore empty inputs" do
_in = stub 'in'
_in.stub!(:gets).and_return("\n", "[\"_exit_\"]\n")
_out = stub 'out'
_out.should_not_receive(:<<)
Culerity::CelerityServer.new(_in, _out)
end
it "should send back a proxy if the return value is not a string, number, nil or boolean" do
@browser.stub!(:goto).and_return(stub('123', :object_id => 456))
_in = stub 'in'
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
_out = stub 'out'
_out.should_receive(:<<).with("[:return, Culerity::RemoteObjectProxy.new(456, @io)]\n")
Culerity::CelerityServer.new(_in, _out)
end
it "should send back arrays" do
@browser.stub!(:goto).and_return([true, false, "test", 1, 12.3, nil, stub('123', :object_id => 456), ["test2", 32.1, 5000, nil, false, true, stub('789', :object_id => 101)]])
_in = stub 'in'
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
_out = stub 'out'
_out.should_receive(:<<).with("[:return, [true, false, \"test\", 1, 12.3, nil, Culerity::RemoteObjectProxy.new(456, @io), [\"test2\", 32.1, 5000, nil, false, true, Culerity::RemoteObjectProxy.new(101, @io)]]]\n")
Culerity::CelerityServer.new(_in, _out)
end
it "should pass the method call to a proxy" do
proxy = stub('123', :object_id => 456)
@browser.stub!(:goto).and_return(proxy)
_in = stub 'in'
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[456, \"goto_2\", \"1\"]", "[\"_exit_\"]\n")
_out = stub 'out', :<< => nil
proxy.should_receive(:goto_2).with('1')
Culerity::CelerityServer.new(_in, _out)
end
it "should pass multiple method calls" do
@browser.should_receive(:goto).with('/homepage')
@browser.should_receive(:goto).with('/page2')
_in = stub 'in'
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"browser0\", \"goto\", \"/page2\"]\n", "[\"_exit_\"]\n")
_out = stub 'out', :<< => nil
Culerity::CelerityServer.new(_in, _out)
end
it "should return an exception" do
@browser.stub!(:goto).and_raise(RuntimeError.new('test exception with "quotes"'))
_in = stub 'in'
_in.stub!(:gets).and_return("[\"browser0\", \"goto\", \"/homepage\"]\n", "[\"_exit_\"]\n")
_out = stub 'out'
_out.should_receive(:<<).with(/^\[:exception, \"RuntimeError\", \"test exception with \\\"quotes\\\"\", \[.*\]\]\n$/)
Culerity::CelerityServer.new(_in, _out)
end
end