1
0
Fork 0
mirror of https://github.com/rubyjs/therubyrhino synced 2023-03-27 23:21:34 -04:00

align spec (backtrace generation) with latest JRuby 1.7.12

This commit is contained in:
kares 2014-07-15 18:27:49 +02:00
parent a2e907ae25
commit cccf922f03

View file

@ -1,40 +1,40 @@
require File.expand_path('../spec_helper', File.dirname(__FILE__)) require File.expand_path('../spec_helper', File.dirname(__FILE__))
describe Rhino::JSError do describe Rhino::JSError do
it "works as a StandardError with a message being passed" do it "works as a StandardError with a message being passed" do
js_error = Rhino::JSError.new 'an error message' js_error = Rhino::JSError.new 'an error message'
lambda { js_error.to_s && js_error.inspect }.should_not raise_error lambda { js_error.to_s && js_error.inspect }.should_not raise_error
js_error.cause.should be nil js_error.cause.should be nil
js_error.message.should == 'an error message' js_error.message.should == 'an error message'
js_error.javascript_backtrace.should be nil js_error.javascript_backtrace.should be nil
end end
it "might wrap a RhinoException wrapped in a NativeException like error" do it "might wrap a RhinoException wrapped in a NativeException like error" do
# JRuby's NativeException.new(rhino_e) does not work as it is # JRuby's NativeException.new(rhino_e) does not work as it is
# intended to handle Java exceptions ... no new on the Ruby side # intended to handle Java exceptions ... no new on the Ruby side
native_error_class = Class.new(RuntimeError) do native_error_class = Class.new(RuntimeError) do
def initialize(cause) def initialize(cause)
@cause = cause @cause = cause
end end
def cause def cause
@cause @cause
end end
end end
rhino_e = Rhino::JS::JavaScriptException.new("42".to_java) rhino_e = Rhino::JS::JavaScriptException.new("42".to_java)
js_error = Rhino::JSError.new native_error_class.new(rhino_e) js_error = Rhino::JSError.new native_error_class.new(rhino_e)
lambda { js_error.to_s && js_error.inspect }.should_not raise_error lambda { js_error.to_s && js_error.inspect }.should_not raise_error
js_error.cause.should be rhino_e js_error.cause.should be rhino_e
js_error.message.should == '42' js_error.message.should == '42'
js_error.javascript_backtrace.should_not be nil js_error.javascript_backtrace.should_not be nil
end end
it "keeps the thrown javascript object value" do it "keeps the thrown javascript object value" do
begin begin
Rhino::Context.eval "throw { foo: 'bar' }" Rhino::Context.eval "throw { foo: 'bar' }"
@ -73,17 +73,17 @@ describe Rhino::JSError do
fail "expected to rescue" fail "expected to rescue"
end end
end end
it "has a correct javascript backtrace" do it "has a correct javascript backtrace" do
begin begin
Rhino::Context.eval "throw 42" Rhino::Context.eval "throw 42"
rescue => e rescue => e
# [ "at <eval>:1", "at org/mozilla/javascript/gen/<eval>:1" ]
e.javascript_backtrace.should be_a Enumerable e.javascript_backtrace.should be_a Enumerable
e.javascript_backtrace.size.should == 1 e.javascript_backtrace.size.should >= 1
e.javascript_backtrace[0].should == "at <eval>:1" e.javascript_backtrace[0].should == "at <eval>:1"
e.javascript_backtrace(true).should be_a Enumerable e.javascript_backtrace(true).should be_a Enumerable
e.javascript_backtrace(true).size.should == 1 e.javascript_backtrace(true).size.should >= 1
element = e.javascript_backtrace(true)[0] element = e.javascript_backtrace(true)[0]
element.file_name.should == '<eval>' element.file_name.should == '<eval>'
element.function_name.should be nil element.function_name.should be nil
@ -97,14 +97,14 @@ describe Rhino::JSError do
begin begin
Rhino::Context.eval "function fortyTwo() { throw 42 }\n fortyTwo()" Rhino::Context.eval "function fortyTwo() { throw 42 }\n fortyTwo()"
rescue => e rescue => e
e.javascript_backtrace.size.should == 2 e.javascript_backtrace.size.should >= 2
e.javascript_backtrace[0].should == "at <eval>:1 (fortyTwo)" e.javascript_backtrace[0].should == "at <eval>:1 (fortyTwo)"
e.javascript_backtrace[1].should == "at <eval>:2" expect( e.javascript_backtrace.find { |trace| trace == "at <eval>:2" } ).to_not be nil
else else
fail "expected to rescue" fail "expected to rescue"
end end
end end
it "backtrace starts with the javascript part" do it "backtrace starts with the javascript part" do
begin begin
Rhino::Context.eval "throw 42" Rhino::Context.eval "throw 42"
@ -149,7 +149,7 @@ describe Rhino::JSError do
fail "expected to rescue" fail "expected to rescue"
end end
end end
it "raises correct error from function#apply" do it "raises correct error from function#apply" do
begin begin
context = Rhino::Context.new context = Rhino::Context.new
@ -166,7 +166,7 @@ describe Rhino::JSError do
it "prints info about nested (ruby) error" do it "prints info about nested (ruby) error" do
context = Rhino::Context.new context = Rhino::Context.new
klass = Class.new do klass = Class.new do
def hello(arg = 42) def hello(arg = 42)
raise RuntimeError, 'hello' if arg != 42 raise RuntimeError, 'hello' if arg != 42
end end
end end
@ -189,5 +189,5 @@ describe Rhino::JSError do
# from at hi (<eval>:1:28) # from at hi (<eval>:1:28)
# from (irb):9 # from (irb):9
end end
end end