blob: 801ad08c5d30edc50d68635da61f8907e55c521e [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// 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("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();