| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- var propName = "d";
- var propValue = "dvalue";
- function CreateSimpleTypeHandlerObject()
- {
- var obj = Object.create(null);
- obj[propName] = propValue;
- return obj;
- }
- function CreateSimpleDictionaryTypeHandlerObject()
- {
- var obj = {};
- obj[propName] = propValue;
- return obj;
- }
- function CreateDictionaryTypeHandlerObject()
- {
- var obj = {};
- Object.defineProperty(obj, propName,
- {
- get : function() {},
- configurable : true,
- enumerable : true
- });
- delete obj[propName];
- obj[propName] = propValue;
- return obj;
- }
- function TestNonWritable(o)
- {
- var beforeTestValue = null;
- var value = 1;
- value = TestEnumerations(o, beforeTestValue, value);
- SetWritable(o, propName, false);
- value = TestEnumerations(o, beforeTestValue, value);
- SetWritable(o, propName, true);
- value = TestEnumerations(o, beforeTestValue, value);
- WScript.Echo("Changing writability during enumeration...");
- beforeTestValue = function(o, i, value)
- {
- SetWritable(o, propName, false);
- return value;
- };
- value = TestEnumerations(o, beforeTestValue, value);
- beforeTestValue = function(o, i, value)
- {
- SetWritable(o, propName, true);
- return value;
- };
- value = TestEnumerations(o, beforeTestValue, value);
- WScript.Echo("Freezing object");
- Object.freeze(o);
- beforeTestValue = null;
- value = TestEnumerations(o, beforeTestValue, value);
- }
- function TestAccessors()
- {
- var o = { a:"aValue" };
- DefineAccessor(o, 'b',
- function() { return "GETTER FOR b"; },
- function(v) { WScript.Echo("SETTER FOR b"); }
- );
- o.c = "cValue"; // to be deleted
- o.d = "dValue";
- // Throw in a non-enumerable property
- Object.defineProperty(o, 'e',
- {
- value : "eValue",
- configurable : true,
- writable : true,
- enumerable : false
- });
- DefineAccessor(o, 'f',
- function() { return "GETTER FOR f"; },
- function(v) { WScript.Echo("SETTER FOR f"); }
- );
- o.g = "gValue";
- delete o.c;
- var value = 1;
- var beforeTestValue = null;
- value = TestEnumerations(o, beforeTestValue, value);
- DefineAccessor(o, propName);
- value = TestEnumerations(o, beforeTestValue, value);
- DefineDataProperty(o, propName, value++);
- value = TestEnumerations(o, beforeTestValue, value);
- WScript.Echo("Defining accessor property during enumeration...");
- beforeTestValue = function(o, i, value)
- {
- if (i === propName) DefineAccessor(o, propName);
- return value;
- };
- value = TestEnumerations(o, beforeTestValue, value);
- WScript.Echo("Defining data property during enumeration...");
- beforeTestValue = function(o, i, value)
- {
- if (i === propName) DefineDataProperty(o, propName, value);
- return value + 1;
- };
- value = TestEnumerations(o, beforeTestValue, value);
- }
- function SetWritable(o, p, v)
- {
- WScript.Echo("Setting writability of " + p + " to " + v);
- Object.defineProperty(o, p, { writable : v });
- }
- function DefineAccessor(o, p, getter, setter)
- {
- if (!getter) getter = function() { return "GETTER"; };
- if (!setter) setter = function(v) { WScript.Echo("SETTER"); }
- WScript.Echo("Defining accessors for " + p);
- Object.defineProperty(o, p,
- {
- get : getter,
- set : setter,
- configurable : true,
- enumerable : true
- });
- }
- function DefineDataProperty(o, p, v)
- {
- WScript.Echo("Defining data property " + p + " with value " + v);
- Object.defineProperty(o, p,
- {
- value : v,
- writable : true,
- configurable : true,
- enumerable : true
- });
- }
- function TestEnumerations(o, beforeTestValue, value)
- {
- WScript.Echo("Testing for-in enumeration");
- for (var i in o)
- {
- if (beforeTestValue) value = beforeTestValue(o, i, value);
- TestValue(o, i, value++);
- }
- WScript.Echo("Testing getOwnPropertyNames enumeration");
- var names = Object.getOwnPropertyNames(o);
- for (var i = 0; i < names.length; i++)
- {
- if (beforeTestValue) value = beforeTestValue(o, i, value);
- TestValue(o, names[i], value++);
- }
- return value;
- }
- function TestValue(o, i, value)
- {
- WScript.Echo(i + ": " + o[i]);
- WScript.Echo("Setting value to " + value);
- o[i] = value;
- WScript.Echo(i + ": " + o[i]);
- }
- WScript.Echo("Test 1: Non-writable, simple type handler");
- TestNonWritable(CreateSimpleTypeHandlerObject());
- WScript.Echo("");
- WScript.Echo("Test 2: Non-writable, simple dictionary type handler");
- TestNonWritable(CreateSimpleDictionaryTypeHandlerObject());
- WScript.Echo("");
- WScript.Echo("Test 3: Non-writable, dictionary type handler");
- TestNonWritable(CreateDictionaryTypeHandlerObject());
- WScript.Echo("");
- WScript.Echo("Test 4: Accessors");
- TestAccessors();
|