summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js')
-rw-r--r--js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js b/js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js
new file mode 100644
index 000000000..b16901092
--- /dev/null
+++ b/js/src/tests/ecma_7/TypedObject/structtypestructuralassign.js
@@ -0,0 +1,94 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 578700;
+var summary = 'TypedObjects StructType structural assignment';
+
+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 assertEqColor(c1, c2) {
+ assertEq(c1.r, c2.r);
+ assertEq(c1.g, c2.g);
+ assertEq(c1.b, c2.b);
+}
+
+function runTests() {
+ var RgbColor = new StructType({r: uint8, g: uint8, b: uint8});
+ var Fade = new StructType({from: RgbColor, to: RgbColor});
+
+ var white = new RgbColor({r: 255, g: 255, b: 255});
+ var gray = new RgbColor({r: 129, g: 128, b: 127});
+ var black = new RgbColor({r: 0, g: 0, b: 0});
+
+ var fade = new Fade({from: white, to: white});
+ assertEqColor(white, fade.from);
+ assertEqColor(white, fade.to);
+
+ fade.to = gray;
+ assertEqColor(white, fade.from);
+ assertEqColor(gray, fade.to);
+
+ fade.to = black;
+ assertEqColor(white, fade.from);
+ assertEqColor(black, fade.to);
+
+ fade.to = {r: 129, g: 128, b: 127};
+ assertEqColor(white, fade.from);
+ assertEqColor(gray, fade.to);
+
+ fade.from = {r: 0, g: 0, b: 0};
+ assertEqColor(black, fade.from);
+ assertEqColor(gray, fade.to);
+
+ // Create a variation of color which is still binary data but the
+ // properties are in the wrong order. This will prevent a simple
+ // memcopy, but it should still work, just on the "slow path".
+ var BrgColor = new StructType({b: uint8, r: uint8, g: uint8});
+ var brgGray = new BrgColor(gray);
+ assertEqColor(gray, brgGray);
+
+ fade.from = brgGray;
+ assertEqColor(gray, fade.from);
+
+ // One last test where we have to recursively adapt:
+ var BrgFade = new StructType({from: BrgColor, to: BrgColor});
+ var brgFade = new BrgFade(fade);
+ assertEqColor(brgFade.from, fade.from);
+ assertEqColor(brgFade.to, fade.to);
+
+ // Test that extra and missing properties are ok:
+ fade.from = {r: 129, g: 128, b: 127, a: 126};
+ assertEqColor(fade.from, gray);
+
+ // Missing properties are just treated as undefined:
+ fade.from = {r: 129, g: 128};
+ assertEq(fade.from.r, 129);
+ assertEq(fade.from.g, 128);
+ assertEq(fade.from.b, 0);
+
+ // Which means weird stuff like this is legal:
+ fade.from = [];
+ assertEqColor(fade.from, black);
+ fade.from = {};
+ assertEqColor(fade.from, black);
+
+ // But assignment from a scalar is NOT:
+ var failed = false;
+ try {
+ civic.color = 5;
+ } catch(e) { failed = true; }
+ if (!failed) throw new Exception("Should have thrown");
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();