//------------------------------------------------------------------------------------------------------- | |
// Copyright (C) Microsoft. All rights reserved. | |
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | |
//------------------------------------------------------------------------------------------------------- | |
if (this.WScript) { WScript.LoadScriptFile("../UnitTestFramework/TrimStackTracePath.js"); } | |
function dump(output) | |
{ | |
if (WScript != undefined) | |
{ | |
WScript.Echo(output); | |
} | |
else | |
{ | |
alert(output); | |
} | |
} | |
function dumpProperties(e) | |
{ | |
var output = "Properties of e:\n"; | |
var p; | |
for (p in e) | |
{ | |
output += " " + p + "\n"; | |
} | |
output += "\ne.number: " + e.number | |
+ "\ne.stack: " + TrimStackTracePath(e.stack); | |
dump(output); | |
} | |
function ensureCanDeleteStackProperty(e) | |
{ | |
dump("\n\nDeleting e.stack ...\n"); | |
try | |
{ | |
delete e.stack | |
} | |
catch (e2) | |
{ | |
dump("Exception when deleting stack property: " + e2); | |
} | |
dump("e.stack after delete:\n" + TrimStackTracePath(e.stack)); | |
} | |
function ensureCanUpdateStackProperty(e) | |
{ | |
dump("\n\nUpdating e.stack ...\n"); | |
try | |
{ | |
e.stack = "foo"; | |
} | |
catch (e2) | |
{ | |
dump("Exception when updating stack property: " + e2); | |
} | |
dump("e.stack after update:\n" + TrimStackTracePath(e.stack)); | |
} | |
function throwException() | |
{ | |
try | |
{ | |
BadType.someProperty = 0; | |
} | |
catch(e) | |
{ | |
dumpProperties(e); | |
ensureCanDeleteStackProperty(e); | |
} | |
try | |
{ | |
BadType.someProperty = 0; | |
} | |
catch(e) | |
{ | |
dumpProperties(e); | |
ensureCanUpdateStackProperty(e); | |
} | |
} | |
function bar() | |
{ | |
throwException(); | |
} | |
function foo() | |
{ | |
bar(); | |
} | |
foo(); | |
function preventExt() { | |
try { | |
dump(""); | |
dump("Object.preventExtensions test:"); | |
var x = Error(); | |
dump(x.hasOwnProperty("stack")); | |
Object.preventExtensions(x); | |
dump(x.hasOwnProperty("stack")); | |
throw x; | |
} catch (e) { | |
dump(x.hasOwnProperty("stack")); | |
dump(e.hasOwnProperty("stack")); | |
} | |
} | |
preventExt(); | |