diff options
Diffstat (limited to 'js/src/tests/ecma_7/TypedObject/structtypeprototype.js')
-rw-r--r-- | js/src/tests/ecma_7/TypedObject/structtypeprototype.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/js/src/tests/ecma_7/TypedObject/structtypeprototype.js b/js/src/tests/ecma_7/TypedObject/structtypeprototype.js new file mode 100644 index 000000000..b54ff4249 --- /dev/null +++ b/js/src/tests/ecma_7/TypedObject/structtypeprototype.js @@ -0,0 +1,80 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects StructType prototype chains'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function runTests() { + var RgbColor1 = new StructType({r: uint8, g: uint8, b: uint8}); + var RgbColor2 = new StructType({r: uint8, g: uint8, b: uint8}); + var Fade1 = new StructType({from: RgbColor1, to: RgbColor1}); + var Fade2 = new StructType({from: RgbColor2, to: RgbColor2}); + + // Available on all struct types (even though it would only make + // sense on a RgbColor1 or RgbColor2 instance) + StructType.prototype.prototype.sub = function(c) { + this.r -= c; + this.g -= c; + this.b -= c; + }; + + // Available on `RgbColor2` instances only + RgbColor2.prototype.add = function(c) { + this.r += c; + this.g += c; + this.b += c; + }; + + var black = new RgbColor1({r: 0, g: 0, b: 0}); + var gray = new RgbColor2({r: 129, g: 128, b: 127}); + + // `add` works on `RgbColor2` + assertThrows(function() { black.add(1); }); + gray.add(1); + assertEq(130, gray.r); + assertEq(129, gray.g); + assertEq(128, gray.b); + + // `add` fails (for both!) when accessed via `fade1` + var fade1 = new Fade1({from: black, to: gray}); + assertThrows(function() { fade1.from.add(1); }); + assertThrows(function() { fade1.to.add(1); }); + + // `sub` works on both + black.sub(1); + assertEq(black.r, 255); + assertEq(black.g, 255); + assertEq(black.b, 255); + gray.sub(1); + assertEq(gray.r, 129); + assertEq(gray.g, 128); + assertEq(gray.b, 127); + + // `add` works (for both!) when accessed via `fade2` + var fade2 = new Fade2(fade1); + fade2.from.add(1); + assertEq(fade2.from.r, 1); + assertEq(fade2.from.g, 1); + assertEq(fade2.from.b, 1); + fade2.to.add(1); + assertEq(fade2.to.r, 131); + assertEq(fade2.to.g, 130); + assertEq(fade2.to.b, 129); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); + + |