| Index: test/mjsunit/object-define-property.js
|
| ===================================================================
|
| --- test/mjsunit/object-define-property.js (revision 8618)
|
| +++ test/mjsunit/object-define-property.js (working copy)
|
| @@ -30,28 +30,34 @@
|
| // 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);
|
| - assertTrue(false);
|
| } catch (e) {
|
| + exception = true;
|
| assertTrue(/called on non-object/.test(e));
|
| }
|
| +assertTrue(exception);
|
|
|
| // Check that an exception is thrown when undefined is passed as object.
|
| +exception = false;
|
| try {
|
| Object.defineProperty(undefined, undefined, undefined);
|
| - assertTrue(false);
|
| } catch (e) {
|
| + exception = true;
|
| assertTrue(/called on non-object/.test(e));
|
| }
|
| +assertTrue(exception);
|
|
|
| // Check that an exception is thrown when non-object is passed as object.
|
| +exception = false;
|
| try {
|
| Object.defineProperty(0, "foo", undefined);
|
| - assertTrue(false);
|
| } catch (e) {
|
| + exception = true;
|
| assertTrue(/called on non-object/.test(e));
|
| }
|
| +assertTrue(exception);
|
|
|
| // Object.
|
| var obj1 = {};
|
| @@ -695,12 +701,14 @@
|
| // Make sure we can redefine with -0.
|
| Object.defineProperty(obj5, 'minuszero', descMinusZero);
|
|
|
| +exception = false;
|
| try {
|
| Object.defineProperty(obj5, 'minuszero', descPlusZero);
|
| - assertUnreachable();
|
| } catch (e) {
|
| + exception = true;
|
| assertTrue(/Cannot redefine property/.test(e));
|
| }
|
| +assertTrue(exception);
|
|
|
|
|
| Object.defineProperty(obj5, 'pluszero', descPlusZero);
|
| @@ -708,12 +716,14 @@
|
| // Make sure we can redefine with +0.
|
| Object.defineProperty(obj5, 'pluszero', descPlusZero);
|
|
|
| +exception = false;
|
| try {
|
| Object.defineProperty(obj5, 'pluszero', descMinusZero);
|
| - assertUnreachable();
|
| } catch (e) {
|
| + exception = true;
|
| assertTrue(/Cannot redefine property/.test(e));
|
| }
|
| +assertTrue(exception);
|
|
|
|
|
| var obj6 = {};
|
| @@ -761,13 +771,15 @@
|
|
|
| // 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);
|
| - assertUnreachable();
|
| } catch (e) {
|
| + exception = true;
|
| assertTrue(/Cannot redefine property/.test(e));
|
| }
|
| +assertTrue(exception);
|
|
|
| Object.defineProperty(obj6, '2', descElementNonWritable);
|
| desc = Object.getOwnPropertyDescriptor(obj6, '2');
|
| @@ -858,13 +870,15 @@
|
|
|
| // 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);
|
| - assertUnreachable();
|
| } catch (e) {
|
| + exception = true;
|
| assertTrue(/Cannot redefine property/.test(e));
|
| }
|
| +assertTrue(exception);
|
|
|
| Object.defineProperty(arr, '2', descElementNonWritable);
|
| desc = Object.getOwnPropertyDescriptor(arr, '2');
|
| @@ -1031,3 +1045,12 @@
|
| testDefineProperty(o, 'p',
|
| { enumerable : false, configurable : false },
|
| { get: undefined, set: setter1, enumerable : false, configurable : false });
|
| +
|
| +
|
| +// Regression test: Ensure that growing dictionaries are not ignored.
|
| +o = {};
|
| +for (var i = 0; i < 1000; i++) {
|
| + // Non-enumerable property forces dictionary mode.
|
| + Object.defineProperty(o, i, {value: i, enumerable: false});
|
| +}
|
| +assertEquals(999, o[999]);
|
|
|