blob: 0136e9c00f4aa051337b18a718dc0e20fb5bc6a5 [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.
//-------------------------------------------------------------------------------------------------------
function write(args)
{
WScript.Echo(args);
}
write("TestCase1");
write(Object.preventExtensions.length);
write(Object.isExtensible({}));
write("TestCase2 - preventExtensions & add a property");
var a = {x:20, y:30};
Object.preventExtensions(a);
SafeCall(function() { a.z = 50; });
write(Object.getOwnPropertyNames(a));
write(Object.isExtensible(a));
write("TestCase3 - preventExtensions & delete a property");
var a = {x:20, y:30};
Object.preventExtensions(a);
SafeCall(function() { delete a.x; });
write(a.x);
write(Object.isExtensible(a));
write("TestCase4 - preventExtensions & modify a property");
var a = {x:20, y:30};
Object.preventExtensions(a);
SafeCall(function() { a.x = 40; });
SafeCall(function() { a.y = 60; });
write(Object.getOwnPropertyNames(a));
write(Object.isExtensible(a));
write(a.x);
write("TestCase5 - preventExtension on global object & declare a var");
Object.preventExtensions(this);
var newVar1 = 4; // No exception here, since var decl is hoisted
try
{
eval("var newVar2"); // Should throw TypeError
}
catch (e)
{
write("Exception: " + e.name);
}
write("TestCase6 - preventExtensions, delete property and set remaining properties to non configurable/writable - SimpleDictionaryTypeHandler");
var a = {x:20, y:30};
Object.preventExtensions(a);
delete a.x;
Object.defineProperty(a, "y", {configurable: false});
write(Object.isSealed(a));
Object.defineProperty(a, "y", {writable: false});
write(Object.isFrozen(a));
write("TestCase7 - preventExtensions, delete property and set remaining properties to non configurable/writable - DictionaryTypeHandler");
var a = {get x() {return 0;}, y:30};
Object.preventExtensions(a);
delete a.x;
Object.defineProperty(a, "y", {configurable: false});
write(Object.isSealed(a));
Object.defineProperty(a, "y", {writable: false});
write(Object.isFrozen(a));
function SafeCall(f)
{
try
{
f();
}
catch (e)
{
write("Exception: " + e.name);
}
}
Object.preventExtensions(this);
this[10]=10; //GlobalObject set after preventExtensions