diff options
Diffstat (limited to 'js/src/jit-test/tests/TypedObject/prototypes.js')
-rw-r--r-- | js/src/jit-test/tests/TypedObject/prototypes.js | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/TypedObject/prototypes.js b/js/src/jit-test/tests/TypedObject/prototypes.js new file mode 100644 index 000000000..4a569e09e --- /dev/null +++ b/js/src/jit-test/tests/TypedObject/prototypes.js @@ -0,0 +1,34 @@ +// API Surface Test: check that mutating prototypes +// of type objects has no effect, and that mutating +// the prototypes of typed objects is an error. + +if (!this.hasOwnProperty("TypedObject")) + quit(); + +load(libdir + "asserts.js"); + +var {StructType, uint32, Object, Any, storage, objectType} = TypedObject; + +function main() { // once a C programmer, always a C programmer. + var Uints = new StructType({f: uint32, g: uint32}); + var p = Uints.prototype; + Uints.prototype = {}; // no effect + assertEq(p, Uints.prototype); + + var uints = new Uints(); + assertEq(uints.__proto__, p); + assertThrowsInstanceOf(() => uints.__proto__ = {}, + TypeError); + assertThrowsInstanceOf(() => Object.setPrototypeOf(uints, {}), + TypeError); + assertEq(uints.__proto__, p); + + var Uintss = Uints.array(2); + var p = Uintss.prototype; + Uintss.prototype = {}; // no effect + assertEq(p, Uintss.prototype); + + print("Tests complete"); +} + +main(); |