culerity 0.2.12 → 0.2.13

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.
@@ -1,5 +1,5 @@
1
1
  ---
2
- :major: 0
3
2
  :minor: 2
4
- :patch: 12
5
3
  :build:
4
+ :patch: 13
5
+ :major: 0
@@ -20,7 +20,7 @@ module Culerity
20
20
  result = target(call.first).send call[1], *call[2..-1], &block
21
21
  _out << "[:return, #{proxify result}]\n"
22
22
  rescue => e
23
- _out << "[:exception, \"#{e.class.name}\", #{e.message.inspect}, #{e.backtrace.inspect}]\n"
23
+ _out << "[:exception, \"#{e.class.name}\", #{e.message.inspect}, #{prepend_js_stack_trace(e).inspect}]\n"
24
24
  end
25
25
  end
26
26
 
@@ -77,5 +77,18 @@ module Culerity
77
77
  "Culerity::RemoteObjectProxy.new(#{result.object_id}, @io)"
78
78
  end
79
79
  end
80
+
81
+ def prepend_js_stack_trace(exception)
82
+ def extract_js_strack_trace(e)
83
+ if e.respond_to?(:getScriptStackTrace)
84
+ e.getScriptStackTrace
85
+ elsif e.respond_to?(:cause) && e.cause
86
+ extract_js_strack_trace e.cause
87
+ else
88
+ ""
89
+ end
90
+ end
91
+ extract_js_strack_trace(exception).split("\n") + exception.backtrace
92
+ end
80
93
  end
81
94
  end
@@ -2,10 +2,10 @@ require 'fileutils'
2
2
 
3
3
  module Culerity
4
4
  module PersistentDelivery
5
-
5
+
6
6
  DELIVERIES_PATH =
7
7
  File.join(RAILS_ROOT, 'tmp', 'action_mailer_acceptance_deliveries.cache')
8
-
8
+
9
9
  def self.included(base)
10
10
  base.class_eval do
11
11
  def self.deliveries
@@ -20,14 +20,13 @@ module Culerity
20
20
  end
21
21
  end
22
22
  end
23
-
23
+
24
24
  def perform_delivery_persistent(mail)
25
- deliveries << mail
26
- File.open(DELIVERIES_PATH,'w') do |f|
25
+ deliveries = self.class.deliveries << mail
26
+ File.open(DELIVERIES_PATH,'w') do |f|
27
27
  f << Marshal.dump(deliveries)
28
- end
29
- end
30
-
28
+ end
29
+ end
31
30
  end
32
31
  end
33
32
 
@@ -13,13 +13,15 @@ module Culerity
13
13
  # +time_to_wait+ is 30 seconds by default
14
14
  #
15
15
  # Returns true upon success
16
- # Raises Timeout::Error when +time_to_wait+ is reached.
16
+ # Raises RuntimeError when +time_to_wait+ is reached.
17
17
  #
18
18
  def wait_until time_to_wait=30, &block
19
- Timeout.timeout(time_to_wait) do
20
- until block.call
21
- sleep 0.1
19
+ time_limit = Time.now + time_to_wait
20
+ until block.call
21
+ if Time.now > time_limit
22
+ raise "wait_until timeout after #{time_to_wait} seconds"
22
23
  end
24
+ sleep 0.1
23
25
  end
24
26
  true
25
27
  end
@@ -29,13 +31,15 @@ module Culerity
29
31
  # +time_to_wait+ is 30 seconds by default
30
32
  #
31
33
  # Returns true upon success
32
- # Raises Timeout::Error when +time_to_wait+ is reached.
34
+ # Raises RuntimeError when +time_to_wait+ is reached.
33
35
  #
34
36
  def wait_while time_to_wait=30, &block
35
- Timeout.timeout(time_to_wait) do
36
- while block.call
37
- sleep 0.1
37
+ time_limit = Time.now + time_to_wait
38
+ while block.call
39
+ if Time.now > time_limit
40
+ raise "wait_while timeout after #{time_to_wait} seconds"
38
41
  end
42
+ sleep 0.1
39
43
  end
40
44
  true
41
45
  end
@@ -20,7 +20,11 @@ module Culerity
20
20
  def id
21
21
  send_remote(:id)
22
22
  end
23
-
23
+
24
+ def inspect
25
+ send_remote(:inspect)
26
+ end
27
+
24
28
  def method_missing(name, *args, &block)
25
29
  send_remote(name, *args, &block)
26
30
  end
@@ -51,7 +55,11 @@ module Culerity
51
55
  if res.first == :return
52
56
  res[1]
53
57
  elsif res.first == :exception
54
- raise CulerityException.new("#{res[1]}: #{res[2]}", res[3])
58
+ begin
59
+ raise "local trace"
60
+ rescue => ex
61
+ raise CulerityException.new("#{res[1]}: #{res[2]}", res[3] + ex.backtrace)
62
+ end
55
63
  end
56
64
  end
57
65
 
@@ -133,4 +133,16 @@ describe Culerity::CelerityServer do
133
133
  _out.should_receive(:<<).with(/^\[:exception, \"RuntimeError\", \"test exception with \\\"quotes\\\"\", \[.*\]\]\n$/)
134
134
  Culerity::CelerityServer.new(_in, _out)
135
135
  end
136
+
137
+ it "should extract a js stack trace if available and prepend it on the regular backtrace" do
138
+ exception = RuntimeError.new("the exception")
139
+ exception.stub!(:cause => stub('ex2', :cause => stub('ex3', :getScriptStackTrace => "The\nStack\nTrace")))
140
+
141
+ @browser.stub!(:goto).and_raise(exception)
142
+ _in = stub 'in'
143
+ _in.stub!(:gets).and_return("[[\"browser0\", \"goto\", \"/homepage\"]]\n", "[\"_exit_\"]\n")
144
+ _out = stub 'out'
145
+ _out.should_receive(:<<).with(/^\[:exception, \"RuntimeError\", \"the exception\", \[\"The\", \"Stack\", \"Trace\", \".*\"\]\]\n$/)
146
+ Culerity::CelerityServer.new(_in, _out)
147
+ end
136
148
  end
@@ -28,7 +28,7 @@ describe Culerity::RemoteBrowserProxy do
28
28
  proxy = Culerity::RemoteBrowserProxy.new @io
29
29
  lambda {
30
30
  proxy.wait_until(0.1) { false }
31
- }.should raise_error(Timeout::Error)
31
+ }.should raise_error(RuntimeError)
32
32
  end
33
33
 
34
34
  it "should return successfully when wait_until returns true" do
@@ -40,7 +40,7 @@ describe Culerity::RemoteBrowserProxy do
40
40
  proxy = Culerity::RemoteBrowserProxy.new @io
41
41
  lambda {
42
42
  proxy.wait_while(0.1) { true }
43
- }.should raise_error(Timeout::Error)
43
+ }.should raise_error(RuntimeError)
44
44
  end
45
45
 
46
46
  it "should return successfully when wait_while returns !true" do
@@ -41,6 +41,13 @@ describe Culerity::RemoteObjectProxy do
41
41
  proxy = Culerity::RemoteObjectProxy.new 345, io
42
42
  proxy.goto '/homepage'
43
43
  end
44
+
45
+ it "should send inspect as a serialized method call to the output" do
46
+ io = stub 'io', :gets => '[:return, "inspect output"]'
47
+ io.should_receive(:<<).with(%Q{[[345, "inspect"]]\n})
48
+ proxy = Culerity::RemoteObjectProxy.new 345, io
49
+ proxy.inspect.should == "inspect output"
50
+ end
44
51
 
45
52
  it "should send the serialized method call with a proc argument to the output" do
46
53
  io = stub 'io', :gets => "[:return]"
@@ -57,7 +64,7 @@ describe Culerity::RemoteObjectProxy do
57
64
 
58
65
  proxy.send_remote(:method) { "lambda { true }" }
59
66
  end
60
-
67
+
61
68
  it "should return the deserialized return value" do
62
69
  io = stub 'io', :gets => "[:return, :okay]\n", :<< => nil
63
70
  proxy = Culerity::RemoteObjectProxy.new 345, io
@@ -72,6 +79,20 @@ describe Culerity::RemoteObjectProxy do
72
79
  }.should raise_error(Culerity::CulerityException)
73
80
  end
74
81
 
82
+ it "should include the full 'local' back trace in addition to the 'remote' backtrace" do
83
+ io = stub 'io', :gets => %Q{[:exception, "RuntimeError", "test exception", ["Remote", "Backtrace"]]}, :<< => nil
84
+ proxy = Culerity::RemoteObjectProxy.new 345, io
85
+ begin
86
+ proxy.goto '/home'
87
+ rescue => ex
88
+ puts ex.backtrace
89
+ ex.backtrace[0].should == "Remote"
90
+ ex.backtrace[1].should == "Backtrace"
91
+ ex.backtrace.detect {|line| line =~ /lib\/culerity\/remote_object_proxy\.rb/}.should_not be_nil
92
+ ex.backtrace.detect {|line| line =~ /spec\/remote_object_proxy_spec\.rb/}.should_not be_nil
93
+ end
94
+ end
95
+
75
96
  it "should send exit" do
76
97
  io = stub 'io', :gets => '[:return]'
77
98
  io.should_receive(:<<).with('["_exit_"]')
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: culerity
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 13
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 2
8
- - 12
9
- version: 0.2.12
9
+ - 13
10
+ version: 0.2.13
10
11
  platform: ruby
11
12
  authors:
12
13
  - Alexander Lang
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-08-20 00:00:00 +02:00
18
+ date: 2010-12-19 00:00:00 +01:00
18
19
  default_executable: run_celerity_server.rb
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: cucumber
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 3
27
30
  segments:
28
31
  - 0
29
32
  version: "0"
@@ -33,9 +36,11 @@ dependencies:
33
36
  name: rspec
34
37
  prerelease: false
35
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
36
40
  requirements:
37
41
  - - ">="
38
42
  - !ruby/object:Gem::Version
43
+ hash: 3
39
44
  segments:
40
45
  - 0
41
46
  version: "0"
@@ -50,7 +55,6 @@ extensions: []
50
55
  extra_rdoc_files:
51
56
  - README.md
52
57
  files:
53
- - .gitignore
54
58
  - CHANGES.md
55
59
  - MIT-LICENSE
56
60
  - README.md
@@ -98,28 +102,32 @@ homepage: http://github.com/langalex/culerity
98
102
  licenses: []
99
103
 
100
104
  post_install_message:
101
- rdoc_options:
102
- - --charset=UTF-8
105
+ rdoc_options: []
106
+
103
107
  require_paths:
104
108
  - lib
105
109
  required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
106
111
  requirements:
107
112
  - - ">="
108
113
  - !ruby/object:Gem::Version
114
+ hash: 3
109
115
  segments:
110
116
  - 0
111
117
  version: "0"
112
118
  required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
113
120
  requirements:
114
121
  - - ">="
115
122
  - !ruby/object:Gem::Version
123
+ hash: 3
116
124
  segments:
117
125
  - 0
118
126
  version: "0"
119
127
  requirements: []
120
128
 
121
129
  rubyforge_project:
122
- rubygems_version: 1.3.6
130
+ rubygems_version: 1.3.7
123
131
  signing_key:
124
132
  specification_version: 3
125
133
  summary: Culerity integrates Cucumber and Celerity in order to test your application's full stack.
data/.gitignore DELETED
@@ -1,6 +0,0 @@
1
- coverage
2
- rdoc
3
- pkg
4
- tmp
5
- *.sw?
6
- *.gem