therubyrhino 1.73.3 → 1.73.4

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/Gemfile CHANGED
@@ -2,4 +2,6 @@ source :rubygems
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'redjs', :git => 'git://github.com/cowboyd/redjs.git', :branch => "0.4", :group => :test
5
+ # NOTE: some specs might be excluded @see #spec/spec_helper.rb
6
+ gem 'redjs', :git => 'git://github.com/cowboyd/redjs.git', :group => :test,
7
+ :ref => "8656639e99d52b8d5414250db2e27db4bb531506"
@@ -1,3 +1,12 @@
1
+ === 1.73.4 2012-05-21
2
+
3
+ * allow rhino.jar path overrides with Rhino::JAR_PATH
4
+ * 'correct' JSError#inspect - show thrown value
5
+ * fix JSError#javascript_backtrace to be an array and add it on top of the
6
+ (ruby) backtrace
7
+ * make sure JSError#cause always points to native rhino cause (#19)
8
+ * avoid using instance variables with 'native' JS::Context (JRuby 1.7 warnings)
9
+
1
10
  === 1.73.3 2012-04-23
2
11
  RedJS 0.4 compatible
3
12
 
@@ -1,9 +1,9 @@
1
1
  require 'java'
2
2
 
3
- require 'rhino/rhino-1.7R3.jar'
4
-
5
3
  module Rhino
6
4
 
5
+ require defined?(Rhino::JAR_PATH) ? JAR_PATH : 'rhino/rhino-1.7R3.jar'
6
+
7
7
  # This module contains all the native Rhino objects implemented in Java
8
8
  # e.g. Rhino::JS::NativeObject # => org.mozilla.javascript.NativeObject
9
9
  module JS
@@ -1,4 +1,3 @@
1
-
2
1
  module Rhino
3
2
 
4
3
  class JSError < StandardError
@@ -9,9 +8,20 @@ module Rhino
9
8
  super(message)
10
9
  end
11
10
 
11
+ def inspect
12
+ "#<#{self.class.name}: #{message}>"
13
+ end
14
+
12
15
  # most likely a Rhino::JS::JavaScriptException
13
16
  def cause
14
- @native.respond_to?(:cause) ? @native.cause : nil
17
+ return @cause if defined?(@cause)
18
+ @cause = begin
19
+ if @native.respond_to?(:cause) && @native.cause
20
+ @native.cause
21
+ else
22
+ @native.is_a?(JS::RhinoException) ? @native : nil
23
+ end
24
+ end
15
25
  end
16
26
 
17
27
  def value
@@ -40,10 +50,26 @@ module Rhino
40
50
  end
41
51
  end
42
52
 
43
- def javascript_backtrace
44
- cause.is_a?(JS::RhinoException) ? cause.getScriptStackTrace : nil
53
+ def backtrace
54
+ if js_backtrace = javascript_backtrace
55
+ js_backtrace.push(*super)
56
+ else
57
+ super
58
+ end
59
+ end
60
+
61
+ def javascript_backtrace(keep_elements = false)
62
+ if cause.is_a?(JS::RhinoException)
63
+ cause.getScriptStack.map do |element| # ScriptStackElement[]
64
+ keep_elements ? element : element.to_s
65
+ end
66
+ else
67
+ nil
68
+ end
45
69
  end
46
70
 
71
+ Rhino::JS::RhinoException.useMozillaStackStyle(false)
72
+
47
73
  end
48
74
 
49
75
  end
@@ -196,18 +196,35 @@ class Java::OrgMozillaJavascript::BaseFunction
196
196
 
197
197
  end
198
198
 
199
+ class Java::OrgMozillaJavascript::ScriptStackElement
200
+
201
+ def file_name; fileName; end # public final String fileName;
202
+ def function_name; functionName; end # public final String functionName;
203
+ def line_number; lineNumber; end # public final int lineNumber;
204
+
205
+ def to_s
206
+ str = "at #{fileName}"
207
+ str << ':' << lineNumber.to_s if lineNumber > -1
208
+ str << " (#{funcionName})" if functionName
209
+ str
210
+ end
211
+
212
+ end
213
+
199
214
  class Java::OrgMozillaJavascript::Context
200
215
 
216
+ CACHE = java.util.WeakHashMap.new
217
+
201
218
  def reset_cache!
202
- @cache = java.util.WeakHashMap.new
219
+ CACHE[self] = java.util.WeakHashMap.new
203
220
  end
204
221
 
205
222
  def enable_cache!
206
- @cache = nil unless @cache
223
+ CACHE[self] = nil unless CACHE[self]
207
224
  end
208
225
 
209
226
  def disable_cache!
210
- @cache = false
227
+ CACHE[self] = false
211
228
  end
212
229
 
213
230
  # Support for caching JS data per context.
@@ -217,20 +234,20 @@ class Java::OrgMozillaJavascript::Context
217
234
  # (implementing #equals & #hashCode e.g. RubyStrings will work ...)
218
235
  #
219
236
  def cache(key)
220
- return yield if @cache == false
221
- reset_cache! unless @cache
222
- fetch(key) || store(key, yield)
237
+ return yield if (cache = CACHE[self]) == false
238
+ cache = reset_cache! unless cache
239
+ fetch(key, cache) || store(key, yield, cache)
223
240
  end
224
241
 
225
242
  private
226
243
 
227
- def fetch(key)
228
- ref = @cache.get(key)
244
+ def fetch(key, cache = CACHE[self])
245
+ ref = cache.get(key)
229
246
  ref ? ref.get : nil
230
247
  end
231
248
 
232
- def store(key, value)
233
- @cache.put(key, java.lang.ref.WeakReference.new(value))
249
+ def store(key, value, cache = CACHE[self])
250
+ cache.put(key, java.lang.ref.WeakReference.new(value))
234
251
  value
235
252
  end
236
253
 
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Rhino
3
- VERSION = "1.73.3"
3
+ VERSION = "1.73.4"
4
4
  end
@@ -59,5 +59,61 @@ describe Rhino::JSError do
59
59
  fail "expected to rescue"
60
60
  end
61
61
  end
62
+
63
+ it "contains the native error as the cause" do
64
+ begin
65
+ Rhino::Context.eval "throw 42"
66
+ rescue => e
67
+ e.cause.should_not be nil
68
+ e.cause.should be_a Java::OrgMozillaJavascript::JavaScriptException
69
+ e.cause.getValue.should == 42
70
+ e.cause.lineNumber.should == 1
71
+ e.cause.sourceName.should == '<eval>'
72
+ else
73
+ fail "expected to rescue"
74
+ end
75
+ end
76
+
77
+ it "has a correct javascript backtrace" do
78
+ begin
79
+ Rhino::Context.eval "throw 42"
80
+ rescue => e
81
+ e.javascript_backtrace.should be_a Enumerable
82
+ e.javascript_backtrace.size.should == 1
83
+ e.javascript_backtrace[0].should == "at <eval>:1"
84
+
85
+ e.javascript_backtrace(true).should be_a Enumerable
86
+ e.javascript_backtrace(true).size.should == 1
87
+ element = e.javascript_backtrace(true)[0]
88
+ element.file_name.should == '<eval>'
89
+ element.function_name.should be nil
90
+ element.line_number.should == 1
91
+ else
92
+ fail "expected to rescue"
93
+ end
94
+ end
95
+
96
+ it "backtrace starts with the javascript part" do
97
+ begin
98
+ Rhino::Context.eval "throw 42"
99
+ rescue => e
100
+ e.backtrace.should be_a Array
101
+ e.backtrace[0].should == "at <eval>:1"
102
+ e.backtrace[1].should_not be nil
103
+ else
104
+ fail "expected to rescue"
105
+ end
106
+ end
107
+
108
+ it "inspect shows the javascript value" do
109
+ begin
110
+ Rhino::Context.eval "throw '42'"
111
+ rescue => e
112
+ e.inspect.should == '#<Rhino::JSError: 42>'
113
+ e.to_s.should == '42'
114
+ else
115
+ fail "expected to rescue"
116
+ end
117
+ end
62
118
 
63
119
  end
@@ -8,3 +8,7 @@ module RedJS
8
8
  Context = Rhino::Context
9
9
  Error = Rhino::JSError
10
10
  end
11
+
12
+ RSpec.configure do |config|
13
+ config.filter_run_excluding :compat => /(0.5.0)|(0.6.0)/
14
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: therubyrhino
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.73.3
5
+ version: 1.73.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Charles Lowell
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-04-23 00:00:00 Z
13
+ date: 2012-05-21 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake