summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_7/TypedObject/structtypeprototype.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/ecma_7/TypedObject/structtypeprototype.js')
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypeprototype.js80
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();
+
+