| Index: test/mjsunit/harmony/reflect-define-property.js
|
| diff --git a/test/mjsunit/object-define-property.js b/test/mjsunit/harmony/reflect-define-property.js
|
| similarity index 80%
|
| copy from test/mjsunit/object-define-property.js
|
| copy to test/mjsunit/harmony/reflect-define-property.js
|
| index 4c495c6824f5ca65d702173b791e56150f26b52b..afd3ff6595f7420a0063ef28192da4da4e4742cb 100644
|
| --- a/test/mjsunit/object-define-property.js
|
| +++ b/test/mjsunit/harmony/reflect-define-property.js
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2012 the V8 project authors. All rights reserved.
|
| +// Copyright 2012-2015 the V8 project authors. All rights reserved.
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| // met:
|
| @@ -25,14 +25,16 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -// Tests the object.defineProperty method - ES 15.2.3.6
|
| +// Tests the Reflect.defineProperty method - ES6 26.1.3
|
| +// This is adapted from mjsunit/object-define-property.js.
|
| +
|
| +// Flags: --allow-natives-syntax --harmony-reflect
|
|
|
| -// Flags: --allow-natives-syntax
|
|
|
| // Check that an exception is thrown when null is passed as object.
|
| var exception = false;
|
| try {
|
| - Object.defineProperty(null, null, null);
|
| + Reflect.defineProperty(null, null, null);
|
| } catch (e) {
|
| exception = true;
|
| assertTrue(/called on non-object/.test(e));
|
| @@ -42,7 +44,7 @@ assertTrue(exception);
|
| // Check that an exception is thrown when undefined is passed as object.
|
| exception = false;
|
| try {
|
| - Object.defineProperty(undefined, undefined, undefined);
|
| + Reflect.defineProperty(undefined, undefined, undefined);
|
| } catch (e) {
|
| exception = true;
|
| assertTrue(/called on non-object/.test(e));
|
| @@ -52,7 +54,7 @@ assertTrue(exception);
|
| // Check that an exception is thrown when non-object is passed as object.
|
| exception = false;
|
| try {
|
| - Object.defineProperty(0, "foo", undefined);
|
| + Reflect.defineProperty(0, "foo", undefined);
|
| } catch (e) {
|
| exception = true;
|
| assertTrue(/called on non-object/.test(e));
|
| @@ -112,16 +114,12 @@ var dataWritable = { value: 3000, writable: true};
|
|
|
|
|
| // Check that we can't add property with undefined attributes.
|
| -try {
|
| - Object.defineProperty(obj1, "foo", undefined);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/must be an object/.test(e));
|
| -}
|
| +assertThrows(function() { Reflect.defineProperty(obj1, "foo", undefined) },
|
| + TypeError);
|
|
|
| // Make sure that we can add a property with an empty descriptor and
|
| // that it has the default descriptor values.
|
| -Object.defineProperty(obj1, "foo", emptyDesc);
|
| +assertTrue(Reflect.defineProperty(obj1, "foo", emptyDesc));
|
|
|
| // foo should be undefined as it has no get, set or value
|
| assertEquals(undefined, obj1.foo);
|
| @@ -143,16 +141,12 @@ desc = Object.getOwnPropertyDescriptor(obj1, "bar");
|
| assertEquals(desc, undefined);
|
|
|
| // Make sure that foo can't be reset (as configurable is false).
|
| -try {
|
| - Object.defineProperty(obj1, "foo", accessorConfigurable);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj1, "foo", accessorConfigurable));
|
|
|
|
|
| // Accessor properties
|
|
|
| -Object.defineProperty(obj1, "bar", accessorConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj1, "bar", accessorConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "bar");
|
| assertTrue(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -167,7 +161,7 @@ assertEquals(2, val1);
|
| assertEquals(2, obj1.bar);
|
|
|
| // Redefine bar with non configurable test
|
| -Object.defineProperty(obj1, "bar", accessorNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj1, "bar", accessorNoConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "bar");
|
| assertFalse(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -184,23 +178,13 @@ assertEquals(2, val2);
|
| assertEquals(2, obj1.bar);
|
|
|
| // Try to redefine bar again - should fail as configurable is false.
|
| -try {
|
| - Object.defineProperty(obj1, "bar", accessorConfigurable);
|
| - assertTrue(false);
|
| -} catch(e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj1, "bar", accessorConfigurable));
|
|
|
| // Try to redefine bar again using the data descriptor - should fail.
|
| -try {
|
| - Object.defineProperty(obj1, "bar", dataConfigurable);
|
| - assertTrue(false);
|
| -} catch(e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj1, "bar", dataConfigurable));
|
|
|
| // Redefine using same descriptor - should succeed.
|
| -Object.defineProperty(obj1, "bar", accessorNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj1, "bar", accessorNoConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "bar");
|
| assertFalse(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -217,7 +201,7 @@ assertEquals(4, val2);
|
| assertEquals(4, obj1.bar);
|
|
|
| // Define an accessor that has only a setter.
|
| -Object.defineProperty(obj1, "setOnly", accessorOnlySet);
|
| +assertTrue(Reflect.defineProperty(obj1, "setOnly", accessorOnlySet));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "setOnly");
|
| assertTrue(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -229,7 +213,7 @@ assertEquals(1, obj1.setOnly = 1);
|
| assertEquals(1, val3);
|
|
|
| // Add a getter - should not touch the setter.
|
| -Object.defineProperty(obj1, "setOnly", accessorOnlyGet);
|
| +assertTrue(Reflect.defineProperty(obj1, "setOnly", accessorOnlyGet));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "setOnly");
|
| assertTrue(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -242,9 +226,9 @@ assertEquals(2, val3);
|
|
|
| // The above should also work if redefining just a getter or setter on
|
| // an existing property with both a getter and a setter.
|
| -Object.defineProperty(obj1, "both", accessorConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj1, "both", accessorConfigurable));
|
|
|
| -Object.defineProperty(obj1, "both", accessorOnlySet);
|
| +assertTrue(Reflect.defineProperty(obj1, "both", accessorOnlySet));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "both");
|
| assertTrue(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -258,7 +242,7 @@ assertEquals(3, val3);
|
|
|
| // Data properties
|
|
|
| -Object.defineProperty(obj1, "foobar", dataConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj1, "foobar", dataConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "foobar");
|
| assertEquals(obj1.foobar, 1000);
|
| assertEquals(desc.value, 1000);
|
| @@ -273,7 +257,7 @@ assertEquals(obj1.foobar, 1000);
|
|
|
|
|
| // Redefine to writable descriptor - now writing to foobar should be allowed.
|
| -Object.defineProperty(obj1, "foobar", dataWritable);
|
| +assertTrue(Reflect.defineProperty(obj1, "foobar", dataWritable));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "foobar");
|
| assertEquals(obj1.foobar, 3000);
|
| assertEquals(desc.value, 3000);
|
| @@ -290,7 +274,7 @@ assertEquals(obj1.foobar, 1001);
|
|
|
|
|
| // Redefine with non configurable data property.
|
| -Object.defineProperty(obj1, "foobar", dataNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj1, "foobar", dataNoConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "foobar");
|
| assertEquals(obj1.foobar, 2000);
|
| assertEquals(desc.value, 2000);
|
| @@ -301,24 +285,14 @@ assertEquals(desc.get, undefined);
|
| assertEquals(desc.set, undefined);
|
|
|
| // Try redefine again - shold fail because configurable is now false.
|
| -try {
|
| - Object.defineProperty(obj1, "foobar", dataConfigurable);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj1, "foobar", dataConfigurable));
|
|
|
| // Try redefine again with accessor property - shold also fail.
|
| -try {
|
| - Object.defineProperty(obj1, "foobar", dataConfigurable);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj1, "foobar", dataConfigurable));
|
|
|
|
|
| // Redifine with the same descriptor - should succeed (step 6).
|
| -Object.defineProperty(obj1, "foobar", dataNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj1, "foobar", dataNoConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj1, "foobar");
|
| assertEquals(obj1.foobar, 2000);
|
| assertEquals(desc.value, 2000);
|
| @@ -333,10 +307,10 @@ assertEquals(desc.set, undefined);
|
| var obj2 = {};
|
|
|
| // Make accessor - redefine to data
|
| -Object.defineProperty(obj2, "foo", accessorConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj2, "foo", accessorConfigurable));
|
|
|
| // Redefine to data property
|
| -Object.defineProperty(obj2, "foo", dataConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj2, "foo", dataConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj2, "foo");
|
| assertEquals(obj2.foo, 1000);
|
| assertEquals(desc.value, 1000);
|
| @@ -348,7 +322,7 @@ assertEquals(desc.set, undefined);
|
|
|
|
|
| // Redefine back to accessor
|
| -Object.defineProperty(obj2, "foo", accessorConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj2, "foo", accessorConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj2, "foo");
|
| assertTrue(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -362,10 +336,10 @@ assertEquals(4, val2);
|
| assertEquals(3, obj2.foo);
|
|
|
| // Make data - redefine to accessor
|
| -Object.defineProperty(obj2, "bar", dataConfigurable)
|
| +assertTrue(Reflect.defineProperty(obj2, "bar", dataConfigurable))
|
|
|
| // Redefine to accessor property
|
| -Object.defineProperty(obj2, "bar", accessorConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj2, "bar", accessorConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj2, "bar");
|
| assertTrue(desc.configurable);
|
| assertFalse(desc.enumerable);
|
| @@ -379,7 +353,7 @@ assertEquals(4, val2);
|
| assertEquals(4, obj2.foo);
|
|
|
| // Redefine back to data property
|
| -Object.defineProperty(obj2, "bar", dataConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj2, "bar", dataConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj2, "bar");
|
| assertEquals(obj2.bar, 1000);
|
| assertEquals(desc.value, 1000);
|
| @@ -412,7 +386,7 @@ assertEquals(1, obj3.foo);
|
|
|
| // Redefine to accessor property (non configurable) - note that enumerable
|
| // which we do not redefine should remain the same (true).
|
| -Object.defineProperty(obj3, "foo", accessorNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj3, "foo", accessorNoConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj3, "foo");
|
| assertFalse(desc.configurable);
|
| assertTrue(desc.enumerable);
|
| @@ -430,7 +404,7 @@ obj3.__defineSetter__("bar", set);
|
|
|
|
|
| // Redefine back to data property
|
| -Object.defineProperty(obj3, "bar", dataConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj3, "bar", dataConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj3, "bar");
|
| assertEquals(obj3.bar, 1000);
|
| assertEquals(desc.value, 1000);
|
| @@ -446,7 +420,7 @@ var func = function (){return 42;};
|
| obj4.bar = func;
|
| assertEquals(42, obj4.bar());
|
|
|
| -Object.defineProperty(obj4, "bar", accessorConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj4, "bar", accessorConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj4, "bar");
|
| assertTrue(desc.configurable);
|
| assertTrue(desc.enumerable);
|
| @@ -521,11 +495,11 @@ try {
|
|
|
| var obj5 = {};
|
| // Enumerable will default to false.
|
| -Object.defineProperty(obj5, 'foo', accessorNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj5, 'foo', accessorNoConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj5, 'foo');
|
| // First, test that we are actually allowed to set the accessor if all
|
| // values are of the descriptor are the same as the existing one.
|
| -Object.defineProperty(obj5, 'foo', accessorNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj5, 'foo', accessorNoConfigurable));
|
|
|
| // Different setter.
|
| var descDifferent = {
|
| @@ -535,12 +509,7 @@ var descDifferent = {
|
| get: getter2
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'foo', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'foo', descDifferent));
|
|
|
| // Different getter.
|
| descDifferent = {
|
| @@ -550,12 +519,7 @@ descDifferent = {
|
| get: getter1
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'foo', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'foo', descDifferent));
|
|
|
| // Different enumerable.
|
| descDifferent = {
|
| @@ -565,12 +529,7 @@ descDifferent = {
|
| get: getter2
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'foo', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'foo', descDifferent));
|
|
|
| // Different configurable.
|
| descDifferent = {
|
| @@ -580,12 +539,7 @@ descDifferent = {
|
| get: getter2
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'foo', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'foo', descDifferent));
|
|
|
| // No difference.
|
| descDifferent = {
|
| @@ -595,7 +549,7 @@ descDifferent = {
|
| get: getter2
|
| };
|
| // Make sure we can still redefine if all properties are the same.
|
| -Object.defineProperty(obj5, 'foo', descDifferent);
|
| +assertTrue(Reflect.defineProperty(obj5, 'foo', descDifferent));
|
|
|
| // Make sure that obj5 still holds the original values.
|
| desc = Object.getOwnPropertyDescriptor(obj5, 'foo');
|
| @@ -607,10 +561,10 @@ assertFalse(desc.configurable);
|
|
|
| // Also exercise step 6 on data property, writable and enumerable
|
| // defaults to false.
|
| -Object.defineProperty(obj5, 'bar', dataNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj5, 'bar', dataNoConfigurable));
|
|
|
| // Test that redefinition with the same property descriptor is possible
|
| -Object.defineProperty(obj5, 'bar', dataNoConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj5, 'bar', dataNoConfigurable));
|
|
|
| // Different value.
|
| descDifferent = {
|
| @@ -620,12 +574,7 @@ descDifferent = {
|
| value: 1999
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'bar', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'bar', descDifferent));
|
|
|
| // Different writable.
|
| descDifferent = {
|
| @@ -635,12 +584,7 @@ descDifferent = {
|
| value: 2000
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'bar', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'bar', descDifferent));
|
|
|
|
|
| // Different enumerable.
|
| @@ -651,12 +595,7 @@ descDifferent = {
|
| value: 2000
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'bar', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'bar', descDifferent));
|
|
|
|
|
| // Different configurable.
|
| @@ -667,12 +606,7 @@ descDifferent = {
|
| value: 2000
|
| };
|
|
|
| -try {
|
| - Object.defineProperty(obj5, 'bar', descDifferent);
|
| - assertTrue(false);
|
| -} catch (e) {
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| +assertFalse(Reflect.defineProperty(obj5, 'bar', descDifferent));
|
|
|
| // No difference.
|
| descDifferent = {
|
| @@ -682,7 +616,7 @@ descDifferent = {
|
| value:2000
|
| };
|
| // Make sure we can still redefine if all properties are the same.
|
| -Object.defineProperty(obj5, 'bar', descDifferent);
|
| +assertTrue(Reflect.defineProperty(obj5, 'bar', descDifferent));
|
|
|
| // Make sure that obj5 still holds the original values.
|
| desc = Object.getOwnPropertyDescriptor(obj5, 'bar');
|
| @@ -696,34 +630,20 @@ assertFalse(desc.configurable);
|
| var descMinusZero = {value: -0, configurable: false};
|
| var descPlusZero = {value: +0, configurable: false};
|
|
|
| -Object.defineProperty(obj5, 'minuszero', descMinusZero);
|
| +assertTrue(Reflect.defineProperty(obj5, 'minuszero', descMinusZero));
|
|
|
| // Make sure we can redefine with -0.
|
| -Object.defineProperty(obj5, 'minuszero', descMinusZero);
|
| +assertTrue(Reflect.defineProperty(obj5, 'minuszero', descMinusZero));
|
|
|
| -exception = false;
|
| -try {
|
| - Object.defineProperty(obj5, 'minuszero', descPlusZero);
|
| -} catch (e) {
|
| - exception = true;
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| -assertTrue(exception);
|
| +assertFalse(Reflect.defineProperty(obj5, 'minuszero', descPlusZero));
|
|
|
|
|
| -Object.defineProperty(obj5, 'pluszero', descPlusZero);
|
| +assertTrue(Reflect.defineProperty(obj5, 'pluszero', descPlusZero));
|
|
|
| // Make sure we can redefine with +0.
|
| -Object.defineProperty(obj5, 'pluszero', descPlusZero);
|
| +assertTrue(Reflect.defineProperty(obj5, 'pluszero', descPlusZero));
|
|
|
| -exception = false;
|
| -try {
|
| - Object.defineProperty(obj5, 'pluszero', descMinusZero);
|
| -} catch (e) {
|
| - exception = true;
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| -assertTrue(exception);
|
| +assertFalse(Reflect.defineProperty(obj5, 'pluszero', descMinusZero));
|
|
|
|
|
| var obj6 = {};
|
| @@ -744,7 +664,7 @@ var descElementAllFalse = { value: 'foofalse',
|
|
|
|
|
| // Redefine existing property.
|
| -Object.defineProperty(obj6, '1', descElement);
|
| +assertTrue(Reflect.defineProperty(obj6, '1', descElement));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '1');
|
| assertEquals(desc.value, 'foobar');
|
| assertTrue(desc.writable);
|
| @@ -752,7 +672,7 @@ assertTrue(desc.enumerable);
|
| assertTrue(desc.configurable);
|
|
|
| // Redefine existing property with configurable: false.
|
| -Object.defineProperty(obj6, '2', descElementNonConfigurable);
|
| +assertTrue(Reflect.defineProperty(obj6, '2', descElementNonConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '2');
|
| assertEquals(desc.value, 'barfoo');
|
| assertTrue(desc.writable);
|
| @@ -762,7 +682,7 @@ assertFalse(desc.configurable);
|
| // Can use defineProperty to change the value of a non
|
| // configurable property.
|
| try {
|
| - Object.defineProperty(obj6, '2', descElement);
|
| + assertTrue(Reflect.defineProperty(obj6, '2', descElement));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '2');
|
| assertEquals(desc.value, 'foobar');
|
| } catch (e) {
|
| @@ -771,24 +691,17 @@ try {
|
|
|
| // Ensure that we can't change the descriptor of a
|
| // non configurable property.
|
| -exception = false;
|
| -try {
|
| - var descAccessor = { get: function() { return 0; } };
|
| - Object.defineProperty(obj6, '2', descAccessor);
|
| -} catch (e) {
|
| - exception = true;
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| -assertTrue(exception);
|
| +var descAccessor = { get: function() { return 0; } };
|
| +assertFalse(Reflect.defineProperty(obj6, '2', descAccessor));
|
|
|
| -Object.defineProperty(obj6, '2', descElementNonWritable);
|
| +assertTrue(Reflect.defineProperty(obj6, '2', descElementNonWritable));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '2');
|
| assertEquals(desc.value, 'foofoo');
|
| assertFalse(desc.writable);
|
| assertTrue(desc.enumerable);
|
| assertFalse(desc.configurable);
|
|
|
| -Object.defineProperty(obj6, '3', descElementNonWritable);
|
| +assertTrue(Reflect.defineProperty(obj6, '3', descElementNonWritable));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '3');
|
| assertEquals(desc.value, 'foofoo');
|
| assertFalse(desc.writable);
|
| @@ -796,7 +709,7 @@ assertTrue(desc.enumerable);
|
| assertTrue(desc.configurable);
|
|
|
| // Redefine existing property with configurable: false.
|
| -Object.defineProperty(obj6, '4', descElementNonEnumerable);
|
| +assertTrue(Reflect.defineProperty(obj6, '4', descElementNonEnumerable));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '4');
|
| assertEquals(desc.value, 'barbar');
|
| assertTrue(desc.writable);
|
| @@ -804,7 +717,7 @@ assertFalse(desc.enumerable);
|
| assertTrue(desc.configurable);
|
|
|
| // Redefine existing property with configurable: false.
|
| -Object.defineProperty(obj6, '5', descElementAllFalse);
|
| +assertTrue(Reflect.defineProperty(obj6, '5', descElementAllFalse));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '5');
|
| assertEquals(desc.value, 'foofalse');
|
| assertFalse(desc.writable);
|
| @@ -812,7 +725,7 @@ assertFalse(desc.enumerable);
|
| assertFalse(desc.configurable);
|
|
|
| // Define non existing property - all attributes should default to false.
|
| -Object.defineProperty(obj6, '15', descElement);
|
| +assertTrue(Reflect.defineProperty(obj6, '15', descElement));
|
| desc = Object.getOwnPropertyDescriptor(obj6, '15');
|
| assertEquals(desc.value, 'foobar');
|
| assertFalse(desc.writable);
|
| @@ -843,7 +756,7 @@ var descElementAllFalse = { value: 'foofalse',
|
|
|
|
|
| // Redefine existing property.
|
| -Object.defineProperty(arr, '1', descElement);
|
| +assertTrue(Reflect.defineProperty(arr, '1', descElement));
|
| desc = Object.getOwnPropertyDescriptor(arr, '1');
|
| assertEquals(desc.value, 'foobar');
|
| assertTrue(desc.writable);
|
| @@ -851,7 +764,7 @@ assertTrue(desc.enumerable);
|
| assertTrue(desc.configurable);
|
|
|
| // Redefine existing property with configurable: false.
|
| -Object.defineProperty(arr, '2', descElementNonConfigurable);
|
| +assertTrue(Reflect.defineProperty(arr, '2', descElementNonConfigurable));
|
| desc = Object.getOwnPropertyDescriptor(arr, '2');
|
| assertEquals(desc.value, 'barfoo');
|
| assertTrue(desc.writable);
|
| @@ -861,7 +774,7 @@ assertFalse(desc.configurable);
|
| // Can use defineProperty to change the value of a non
|
| // configurable property of an array.
|
| try {
|
| - Object.defineProperty(arr, '2', descElement);
|
| + assertTrue(Reflect.defineProperty(arr, '2', descElement));
|
| desc = Object.getOwnPropertyDescriptor(arr, '2');
|
| assertEquals(desc.value, 'foobar');
|
| } catch (e) {
|
| @@ -870,24 +783,17 @@ try {
|
|
|
| // Ensure that we can't change the descriptor of a
|
| // non configurable property.
|
| -exception = false;
|
| -try {
|
| - var descAccessor = { get: function() { return 0; } };
|
| - Object.defineProperty(arr, '2', descAccessor);
|
| -} catch (e) {
|
| - exception = true;
|
| - assertTrue(/Cannot redefine property/.test(e));
|
| -}
|
| -assertTrue(exception);
|
| +var descAccessor = { get: function() { return 0; } };
|
| +assertFalse(Reflect.defineProperty(arr, '2', descAccessor));
|
|
|
| -Object.defineProperty(arr, '2', descElementNonWritable);
|
| +assertTrue(Reflect.defineProperty(arr, '2', descElementNonWritable));
|
| desc = Object.getOwnPropertyDescriptor(arr, '2');
|
| assertEquals(desc.value, 'foofoo');
|
| assertFalse(desc.writable);
|
| assertTrue(desc.enumerable);
|
| assertFalse(desc.configurable);
|
|
|
| -Object.defineProperty(arr, '3', descElementNonWritable);
|
| +assertTrue(Reflect.defineProperty(arr, '3', descElementNonWritable));
|
| desc = Object.getOwnPropertyDescriptor(arr, '3');
|
| assertEquals(desc.value, 'foofoo');
|
| assertFalse(desc.writable);
|
| @@ -895,7 +801,7 @@ assertTrue(desc.enumerable);
|
| assertTrue(desc.configurable);
|
|
|
| // Redefine existing property with configurable: false.
|
| -Object.defineProperty(arr, '4', descElementNonEnumerable);
|
| +assertTrue(Reflect.defineProperty(arr, '4', descElementNonEnumerable));
|
| desc = Object.getOwnPropertyDescriptor(arr, '4');
|
| assertEquals(desc.value, 'barbar');
|
| assertTrue(desc.writable);
|
| @@ -903,7 +809,7 @@ assertFalse(desc.enumerable);
|
| assertTrue(desc.configurable);
|
|
|
| // Redefine existing property with configurable: false.
|
| -Object.defineProperty(arr, '5', descElementAllFalse);
|
| +assertTrue(Reflect.defineProperty(arr, '5', descElementAllFalse));
|
| desc = Object.getOwnPropertyDescriptor(arr, '5');
|
| assertEquals(desc.value, 'foofalse');
|
| assertFalse(desc.writable);
|
| @@ -911,7 +817,7 @@ assertFalse(desc.enumerable);
|
| assertFalse(desc.configurable);
|
|
|
| // Define non existing property - all attributes should default to false.
|
| -Object.defineProperty(arr, '15', descElement);
|
| +assertTrue(Reflect.defineProperty(arr, '15', descElement));
|
| desc = Object.getOwnPropertyDescriptor(arr, '15');
|
| assertEquals(desc.value, 'foobar');
|
| assertFalse(desc.writable);
|
| @@ -920,44 +826,44 @@ assertFalse(desc.configurable);
|
|
|
| // Define non-array property, check that .length is unaffected.
|
| assertEquals(16, arr.length);
|
| -Object.defineProperty(arr, '0x20', descElement);
|
| +assertTrue(Reflect.defineProperty(arr, '0x20', descElement));
|
| assertEquals(16, arr.length);
|
|
|
| // See issue 968: http://code.google.com/p/v8/issues/detail?id=968
|
| var o = { x : 42 };
|
| -Object.defineProperty(o, "x", { writable: false });
|
| +assertTrue(Reflect.defineProperty(o, "x", { writable: false }));
|
| assertEquals(42, o.x);
|
| o.x = 37;
|
| assertEquals(42, o.x);
|
|
|
| o = { x : 42 };
|
| -Object.defineProperty(o, "x", {});
|
| +assertTrue(Reflect.defineProperty(o, "x", {}));
|
| assertEquals(42, o.x);
|
| o.x = 37;
|
| // Writability is preserved.
|
| assertEquals(37, o.x);
|
|
|
| var o = { };
|
| -Object.defineProperty(o, "x", { writable: false });
|
| +assertTrue(Reflect.defineProperty(o, "x", { writable: false }));
|
| assertEquals(undefined, o.x);
|
| o.x = 37;
|
| assertEquals(undefined, o.x);
|
|
|
| o = { get x() { return 87; } };
|
| -Object.defineProperty(o, "x", { writable: false });
|
| +assertTrue(Reflect.defineProperty(o, "x", { writable: false }));
|
| assertEquals(undefined, o.x);
|
| o.x = 37;
|
| assertEquals(undefined, o.x);
|
|
|
| // Ignore inherited properties.
|
| o = { __proto__ : { x : 87 } };
|
| -Object.defineProperty(o, "x", { writable: false });
|
| +assertTrue(Reflect.defineProperty(o, "x", { writable: false }));
|
| assertEquals(undefined, o.x);
|
| o.x = 37;
|
| assertEquals(undefined, o.x);
|
|
|
| function testDefineProperty(obj, propertyName, desc, resultDesc) {
|
| - Object.defineProperty(obj, propertyName, desc);
|
| + assertTrue(Reflect.defineProperty(obj, propertyName, desc));
|
| var actualDesc = Object.getOwnPropertyDescriptor(obj, propertyName);
|
| assertEquals(resultDesc.enumerable, actualDesc.enumerable);
|
| assertEquals(resultDesc.configurable, actualDesc.configurable);
|
| @@ -1022,31 +928,31 @@ testDefineProperty(o, 'p',
|
|
|
| // can make a writable, non-configurable field non-writable
|
| o = { p : 42 };
|
| -Object.defineProperty(o, 'p', { configurable: false });
|
| +assertTrue(Reflect.defineProperty(o, 'p', { configurable: false }));
|
| testDefineProperty(o, 'p',
|
| { writable: false },
|
| { value : 42, writable : false, enumerable : true, configurable : false });
|
|
|
| // redefine of get only property with generic descriptor
|
| o = {};
|
| -Object.defineProperty(o, 'p',
|
| - { get : getter1, enumerable: true, configurable: true });
|
| +assertTrue(Reflect.defineProperty(o, 'p',
|
| + { get : getter1, enumerable: true, configurable: true }));
|
| testDefineProperty(o, 'p',
|
| { enumerable : false, configurable : false },
|
| { get: getter1, set: undefined, enumerable : false, configurable : false });
|
|
|
| // redefine of get/set only property with generic descriptor
|
| o = {};
|
| -Object.defineProperty(o, 'p',
|
| - { get: getter1, set: setter1, enumerable: true, configurable: true });
|
| +assertTrue(Reflect.defineProperty(o, 'p',
|
| + { get: getter1, set: setter1, enumerable: true, configurable: true }));
|
| testDefineProperty(o, 'p',
|
| { enumerable : false, configurable : false },
|
| { get: getter1, set: setter1, enumerable : false, configurable : false });
|
|
|
| // redefine of set only property with generic descriptor
|
| o = {};
|
| -Object.defineProperty(o, 'p',
|
| - { set : setter1, enumerable: true, configurable: true });
|
| +assertTrue(Reflect.defineProperty(o, 'p',
|
| + { set : setter1, enumerable: true, configurable: true }));
|
| testDefineProperty(o, 'p',
|
| { enumerable : false, configurable : false },
|
| { get: undefined, set: setter1, enumerable : false, configurable : false });
|
| @@ -1056,7 +962,7 @@ testDefineProperty(o, 'p',
|
| o = {};
|
| for (var i = 0; i < 1000; i++) {
|
| // Non-enumerable property forces dictionary mode.
|
| - Object.defineProperty(o, i, {value: i, enumerable: false});
|
| + assertTrue(Reflect.defineProperty(o, i, {value: i, enumerable: false}));
|
| }
|
| assertEquals(999, o[999]);
|
|
|
| @@ -1066,17 +972,17 @@ assertEquals(999, o[999]);
|
| /*
|
| (function test(arg0) {
|
| // Here arguments[0] is a fast alias on arg0.
|
| - Object.defineProperty(arguments, "0", {
|
| + Reflect.defineProperty(arguments, "0", {
|
| value:1,
|
| enumerable:false
|
| });
|
| // Here arguments[0] is a slow alias on arg0.
|
| - Object.defineProperty(arguments, "0", {
|
| + Reflect.defineProperty(arguments, "0", {
|
| value:2,
|
| writable:false
|
| });
|
| // Here arguments[0] is no alias at all.
|
| - Object.defineProperty(arguments, "0", {
|
| + Reflect.defineProperty(arguments, "0", {
|
| value:3
|
| });
|
| assertEquals(2, arg0);
|
| @@ -1102,7 +1008,8 @@ function testGetterOnProto(expected, o) {
|
| }
|
|
|
| obj1 = {};
|
| -Object.defineProperty(obj1, "quebec", { get: getter, configurable: true });
|
| +assertTrue(
|
| + Reflect.defineProperty(obj1, "quebec", { get: getter, configurable: true }));
|
| obj2 = Object.create(obj1);
|
| obj3 = Object.create(obj2);
|
|
|
| @@ -1112,7 +1019,7 @@ testGetterOnProto(111, obj3);
|
| testGetterOnProto(111, obj3);
|
| testGetterOnProto(111, obj3);
|
|
|
| -Object.defineProperty(obj1, "quebec", { get: anotherGetter });
|
| +assertTrue(Reflect.defineProperty(obj1, "quebec", { get: anotherGetter }));
|
|
|
| testGetterOnProto(222, obj3);
|
| testGetterOnProto(222, obj3);
|
| @@ -1132,7 +1039,8 @@ function testSetterOnProto(expected, o) {
|
| }
|
|
|
| obj1 = {};
|
| -Object.defineProperty(obj1, "romeo", { set: setter, configurable: true });
|
| +assertTrue(
|
| + Reflect.defineProperty(obj1, "romeo", { set: setter, configurable: true }));
|
| obj2 = Object.create(obj1);
|
| obj3 = Object.create(obj2);
|
|
|
| @@ -1142,7 +1050,7 @@ testSetterOnProto(445, obj3);
|
| testSetterOnProto(445, obj3);
|
| testSetterOnProto(445, obj3);
|
|
|
| -Object.defineProperty(obj1, "romeo", { set: anotherSetter });
|
| +assertTrue(Reflect.defineProperty(obj1, "romeo", { set: anotherSetter }));
|
|
|
| testSetterOnProto(446, obj3);
|
| testSetterOnProto(446, obj3);
|
| @@ -1157,8 +1065,8 @@ function testSetterOnProtoStrict(o) {
|
| }
|
|
|
| obj1 = {};
|
| -Object.defineProperty(obj1, "sierra",
|
| - { get: getter, set: setter, configurable: true });
|
| +assertTrue(Reflect.defineProperty(obj1, "sierra",
|
| + { get: getter, set: setter, configurable: true }));
|
| obj2 = Object.create(obj1);
|
| obj3 = Object.create(obj2);
|
|
|
| @@ -1168,8 +1076,8 @@ testSetterOnProtoStrict(obj3);
|
| testSetterOnProtoStrict(obj3);
|
| testSetterOnProtoStrict(obj3);
|
|
|
| -Object.defineProperty(obj1, "sierra",
|
| - { get: getter, set: undefined, configurable: true });
|
| +assertTrue(Reflect.defineProperty(obj1, "sierra",
|
| + { get: getter, set: undefined, configurable: true }));
|
|
|
| exception = false;
|
| try {
|
| @@ -1193,7 +1101,8 @@ function C() {}
|
| Assign(new C);
|
| Assign(new C);
|
| %OptimizeFunctionOnNextCall(Assign);
|
| -Object.defineProperty(C.prototype, "blubb", {get: function() { return -42; }});
|
| +assertTrue(
|
| + Reflect.defineProperty(C.prototype, "blubb", {get: function() {return -42}}));
|
| Assign(new C);
|
|
|
| // Test that changes to the prototype of a simple constructor are not ignored,
|
|
|