Index: test/mjsunit/stack-traces.js |
=================================================================== |
--- test/mjsunit/stack-traces.js (revision 9808) |
+++ test/mjsunit/stack-traces.js (working copy) |
@@ -194,6 +194,46 @@ |
} |
+// 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 @@ |
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"); |