| Index: test/mjsunit/error-constructors.js
|
| ===================================================================
|
| --- test/mjsunit/error-constructors.js (revision 6800)
|
| +++ test/mjsunit/error-constructors.js (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2009 the V8 project authors. All rights reserved.
|
| +// Copyright 2011 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:
|
| @@ -30,3 +30,32 @@
|
| Error.prototype.toString = Object.prototype.toString;
|
| assertEquals("[object Error]", Error.prototype.toString());
|
| assertEquals(Object.prototype, Error.prototype.__proto__);
|
| +
|
| +// Check that error construction does not call setters for the
|
| +// properties on error objects in prototypes.
|
| +function fail() { assertTrue(false); };
|
| +ReferenceError.prototype.__defineSetter__('stack', fail);
|
| +ReferenceError.prototype.__defineSetter__('message', fail);
|
| +ReferenceError.prototype.__defineSetter__('type', fail);
|
| +ReferenceError.prototype.__defineSetter__('arguments', fail);
|
| +var e0 = new ReferenceError();
|
| +var e1 = new ReferenceError('123');
|
| +assertTrue(e1.hasOwnProperty('message'));
|
| +assertTrue(e0.hasOwnProperty('stack'));
|
| +assertTrue(e1.hasOwnProperty('stack'));
|
| +assertTrue(e0.hasOwnProperty('type'));
|
| +assertTrue(e1.hasOwnProperty('type'));
|
| +assertTrue(e0.hasOwnProperty('arguments'));
|
| +assertTrue(e1.hasOwnProperty('arguments'));
|
| +
|
| +// Check that the name property on error prototypes is read-only and
|
| +// dont-delete. This is not specified, but allowing overwriting the
|
| +// name property with a getter can leaks error objects from different
|
| +// script tags in the same context in a browser setting. We therefore
|
| +// disallow changes to the name property on error objects.
|
| +assertEquals("ReferenceError", ReferenceError.prototype.name);
|
| +delete ReferenceError.prototype.name;
|
| +assertEquals("ReferenceError", ReferenceError.prototype.name);
|
| +ReferenceError.prototype.name = "not a reference error";
|
| +assertEquals("ReferenceError", ReferenceError.prototype.name);
|
| +
|
|
|