caius-culerity 0.1.7 → 0.1.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/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :major: 0
3
2
  :minor: 1
4
- :patch: 7
3
+ :patch: 8
4
+ :major: 0
data/culerity.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{culerity}
5
- s.version = "0.1.7"
5
+ s.version = "0.1.8"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Alexander Lang"]
9
- s.date = %q{2009-06-08}
9
+ s.date = %q{2009-06-26}
10
10
  s.description = %q{Culerity integrates Cucumber and Celerity in order to test your application's full stack.}
11
11
  s.email = %q{alex@upstream-berlin.com}
12
12
  s.extra_rdoc_files = [
@@ -11,10 +11,17 @@ module Culerity
11
11
 
12
12
  while(true)
13
13
  call = eval _in.gets.to_s.strip
14
- return if call == ["_exit_"]
14
+ return if call == ["_exit_"]
15
15
  unless call.nil?
16
16
  begin
17
- result = target(call.first).send call[1], *call[2..-1]
17
+ # check if last arg is a block
18
+ if call.last.is_a?(Proc)
19
+ # pass as &call[-1]
20
+ result = target(call.first).send call[1], *call[2..-2], &call[-1]
21
+ else
22
+ # just call with args as normal
23
+ result = target(call.first).send call[1], *call[2..-1]
24
+ end
18
25
  _out << "[:return, #{proxify result}]\n"
19
26
  rescue => e
20
27
  _out << "[:exception, \"#{e.class.name}\", #{e.message.inspect}, #{e.backtrace.inspect}]\n"
@@ -44,11 +51,11 @@ module Culerity
44
51
  end
45
52
  end
46
53
 
47
- def proxify(result)
54
+ def proxify(result, in_array = false)
48
55
  if result.is_a?(Array)
49
- result.map {|x| proxify(x) }.inspect
56
+ result.map {|x| proxify(x, true) }.inspect
50
57
  elsif [String, TrueClass, FalseClass, Fixnum, Float, NilClass].include?(result.class)
51
- result.inspect
58
+ in_array ? result : result.inspect
52
59
  else
53
60
  @proxies[result.object_id] = result
54
61
  "Culerity::RemoteObjectProxy.new(#{result.object_id}, @io)"
@@ -42,6 +42,19 @@ module Culerity
42
42
  true
43
43
  end
44
44
 
45
+
46
+ #
47
+ # Specify whether to accept or reject all confirm js dialogs
48
+ # for the code in the block that's run.
49
+ #
50
+ def confirm(bool, &block)
51
+ blk = "lambda { #{bool} }"
52
+
53
+ self.send_remote(:add_listener, :confirm) { blk }
54
+ block.call
55
+ self.send_remote(:remove_listener, :confirm) { blk }
56
+ end
57
+
45
58
  private
46
59
 
47
60
  def remote_object_id
@@ -1,5 +1,5 @@
1
1
  module Culerity
2
-
2
+
3
3
  class CulerityException < StandardError
4
4
  def initialize(message, backtrace)
5
5
  super message
@@ -12,7 +12,7 @@ module Culerity
12
12
  @remote_object_id = remote_object_id
13
13
  @io = io
14
14
  end
15
-
15
+
16
16
  #
17
17
  # Commonly used to get the HTML id attribute
18
18
  # Use `object_id` to get the local objects' id.
@@ -20,26 +20,32 @@ module Culerity
20
20
  def id
21
21
  send_remote(:id)
22
22
  end
23
-
23
+
24
24
  def method_missing(name, *args)
25
25
  send_remote(name, *args)
26
26
  end
27
-
27
+
28
28
  #
29
29
  # Calls the passed method on the remote object with any arguments specified.
30
30
  # Behaves the same as <code>Object#send</code>.
31
31
  #
32
- def send_remote(name, *args)
33
- @io << "[#{remote_object_id}, \"#{name}\", #{args.map{|a| a.inspect}.join(', ')}]\n"
32
+ # If you pass it a block then it will append the block as a "lambda { … }".
33
+ # If your block returns a lambda string ("lambda { }") then it will be passed
34
+ # straight through, otherwise it will be wrapped in a lambda string before sending.
35
+ #
36
+ def send_remote(name, *args, &blk)
37
+ input = [remote_object_id, %Q{"#{name}"}, *args.map{|a| a.inspect}]
38
+ input << block_to_string(&blk) if block_given?
39
+ @io << "[#{input.join(", ")}]\n"
34
40
  process_result @io.gets.to_s.strip
35
41
  end
36
-
42
+
37
43
  def exit
38
44
  @io << '["_exit_"]'
39
45
  end
40
-
46
+
41
47
  private
42
-
48
+
43
49
  def process_result(result)
44
50
  res = eval result
45
51
  if res.first == :return
@@ -48,7 +54,21 @@ module Culerity
48
54
  raise CulerityException.new("#{res[1]}: #{res[2]}", res[3])
49
55
  end
50
56
  end
51
-
57
+
58
+ #
59
+ # Takes a block and either returns the result (if it returns "lambda { … }")
60
+ # or builds the lambda string with the result of the block in it.
61
+ #
62
+ # Returns a string in the format "lambda { … }"
63
+ #
64
+ def block_to_string &block
65
+ result = block.call.to_s
66
+ unless result.is_a?(String) && result[/^lambda \s* \{ .*? \}/x]
67
+ result = "lambda { #{result} }"
68
+ end
69
+ result
70
+ end
71
+
52
72
  def remote_object_id
53
73
  @remote_object_id
54
74
  end
@@ -21,31 +21,39 @@ describe Culerity::RemoteBrowserProxy do
21
21
  end
22
22
 
23
23
  it "should timeout if wait_until takes too long" do
24
- io = stub 'io', :gets => "[:return, :okay]", :<< => nil
25
- proxy = Culerity::RemoteBrowserProxy.new io
24
+ proxy = Culerity::RemoteBrowserProxy.new nil
26
25
  lambda {
27
- proxy.wait_until(1) { false }
26
+ proxy.wait_until(0.1) { false }
28
27
  }.should raise_error(Timeout::Error)
29
28
  end
30
29
 
31
30
  it "should return successfully when wait_until returns true" do
32
- io = stub 'io', :gets => "[:return, :okay]", :<< => nil
33
- proxy = Culerity::RemoteBrowserProxy.new io
34
- proxy.wait_until(1) { true }.should == true
31
+ proxy = Culerity::RemoteBrowserProxy.new nil
32
+ proxy.wait_until(0.1) { true }.should == true
35
33
  end
36
34
 
37
35
  it "should timeout if wait_while takes too long" do
38
- io = stub 'io', :gets => "[:return, :okay]", :<< => nil
39
- proxy = Culerity::RemoteBrowserProxy.new io
36
+ proxy = Culerity::RemoteBrowserProxy.new nil
40
37
  lambda {
41
- proxy.wait_while(1) { true }
38
+ proxy.wait_while(0.1) { true }
42
39
  }.should raise_error(Timeout::Error)
43
40
  end
44
41
 
45
42
  it "should return successfully when wait_while returns !true" do
46
- io = stub 'io', :gets => "[:return, :okay]", :<< => nil
47
- proxy = Culerity::RemoteBrowserProxy.new io
48
- proxy.wait_while(1) { false }.should == true
43
+ proxy = Culerity::RemoteBrowserProxy.new nil
44
+ proxy.wait_while(0.1) { false }.should == true
49
45
  end
50
-
46
+
47
+ it "should accept all javascript confirmation dialogs" do
48
+ proxy = Culerity::RemoteBrowserProxy.new nil
49
+
50
+ proxy.should_receive(:send_remote).with(:add_listener, :confirm).and_return(true)
51
+ proxy.should_receive(:send_remote).with(:goto, "http://example.com").and_return(true)
52
+ proxy.should_receive(:send_remote).with(:remove_listener, :confirm).and_return(true)
53
+
54
+ proxy.confirm(true) do
55
+ proxy.goto "http://example.com"
56
+ end
57
+ end
58
+
51
59
  end
@@ -1,13 +1,45 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
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
+
4
20
  it "should send the serialized method call to the output" do
5
21
  io = stub 'io', :gets => '[:return]'
6
- io.should_receive(:<<).with("[345, \"goto\", \"/homepage\"]\n")
22
+ io.should_receive(:<<).with(%Q{[345, "goto", "/homepage"]\n})
7
23
  proxy = Culerity::RemoteObjectProxy.new 345, io
8
24
  proxy.goto '/homepage'
9
25
  end
10
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
+
11
43
  it "should return the deserialized return value" do
12
44
  io = stub 'io', :gets => "[:return, :okay]\n", :<< => nil
13
45
  proxy = Culerity::RemoteObjectProxy.new 345, io
@@ -15,7 +47,7 @@ describe Culerity::RemoteObjectProxy do
15
47
  end
16
48
 
17
49
  it "should raise the received exception" do
18
- io = stub 'io', :gets => "[:exception, \"RuntimeError\", \"test exception\", []]", :<< => nil
50
+ io = stub 'io', :gets => %Q{[:exception, "RuntimeError", "test exception", []]}, :<< => nil
19
51
  proxy = Culerity::RemoteObjectProxy.new 345, io
20
52
  lambda {
21
53
  proxy.goto '/home'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caius-culerity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.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: 2009-06-08 00:00:00 -07:00
12
+ date: 2009-06-26 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency