Index: test/mjsunit/stack-traces.js |
diff --git a/test/mjsunit/stack-traces.js b/test/mjsunit/stack-traces.js |
index 47a5cc594a056575592033b02e05b1ed8eaa2d30..536e71bbb58a33a5ad6e2db9bae34fc9e6034a7f 100644 |
--- a/test/mjsunit/stack-traces.js |
+++ b/test/mjsunit/stack-traces.js |
@@ -194,6 +194,46 @@ function testErrorsDuringFormatting() { |
} |
+// Poisonous object that throws a reference error if attempted converted to |
+// a primitive values. |
+var thrower = { valueOf: function() { FAIL; }, |
+ toString: function() { FAIL; } }; |
+ |
+// Tests that a native constructor function is included in the |
+// stack trace. |
+function testTraceNativeConstructor(nativeFunc) { |
+ var nativeFuncName = nativeFunc.name; |
+ try { |
+ new nativeFunc(thrower); |
+ assertUnreachable(nativeFuncName); |
+ } catch (e) { |
+ assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName); |
+ } |
+} |
+ |
+// Tests that a native conversion function is included in the |
+// stack trace. |
+function testTraceNativeConversion(nativeFunc) { |
+ var nativeFuncName = nativeFunc.name; |
+ try { |
+ nativeFunc(thrower); |
+ assertUnreachable(nativeFuncName); |
+ } catch (e) { |
+ assertTrue(e.stack.indexOf(nativeFuncName) >= 0, nativeFuncName); |
+ } |
+} |
+ |
+ |
+function testOmittedBuiltin(throwing, omitted) { |
+ try { |
+ throwing(); |
+ assertUnreachable(omitted); |
+ } catch (e) { |
+ assertTrue(e.stack.indexOf(omitted) < 0, omitted); |
+ } |
+} |
+ |
+ |
testTrace("testArrayNative", testArrayNative, ["Array.map (native)"]); |
testTrace("testNested", testNested, ["at one", "at two", "at three"]); |
testTrace("testMethodNameInference", testMethodNameInference, ["at Foo.bar"]); |
@@ -217,3 +257,21 @@ testTrace("testStrippedCustomError", testStrippedCustomError, ["hep-hey"], |
testCallerCensorship(); |
testUnintendedCallerCensorship(); |
testErrorsDuringFormatting(); |
+ |
+testTraceNativeConversion(String); // Does ToString on argument. |
+testTraceNativeConversion(Number); // Does ToNumber on argument. |
+testTraceNativeConversion(RegExp); // Does ToString on argument. |
+ |
+testTraceNativeConstructor(String); // Does ToString on argument. |
+testTraceNativeConstructor(Number); // Does ToNumber on argument. |
+testTraceNativeConstructor(RegExp); // Does ToString on argument. |
+testTraceNativeConstructor(Date); // Does ToNumber on argument. |
+ |
+// Omitted because QuickSort has builtins object as receiver, and is non-native |
+// builtin. |
+testOmittedBuiltin(function(){ [thrower, 2].sort(function (a,b) { |
+ (b < a) - (a < b); }); |
+ }, "QuickSort"); |
+ |
+// Omitted because ADD from runtime.js is non-native builtin. |
+testOmittedBuiltin(function(){ thrower + 2; }, "ADD"); |