| // |reftest| skip-if(!this.hasOwnProperty("TypedObject")) |
| var BUGNUMBER = 578700; |
| var summary = 'TypedObjects: check reflection on StructType objects'; |
| |
| 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() { |
| print(BUGNUMBER + ": " + summary); |
| |
| var S = new StructType({x: int32, y: uint8, z: float64}); |
| assertEq(S.__proto__, StructType.prototype); |
| assertEq(S.prototype.__proto__, StructType.prototype.prototype); |
| assertEq(S.toSource(), "new StructType({x: int32, y: uint8, z: float64})"); |
| assertEq(S.byteLength, 16); |
| assertEq(S.byteAlignment, 8); |
| var fieldNames = Object.getOwnPropertyNames(S.fieldTypes); |
| assertEq(fieldNames[0], "x"); |
| assertEq(fieldNames[1], "y"); |
| assertEq(fieldNames[2], "z"); |
| assertEq(fieldNames.length, 3); |
| assertEq(S.fieldTypes.x, int32); |
| assertEq(S.fieldTypes.y, uint8); |
| assertEq(S.fieldTypes.z, float64); |
| assertEq(S.fieldOffsets.x, 0); |
| assertEq(S.fieldOffsets.y, 4); |
| assertEq(S.fieldOffsets.z, 8); |
| |
| // fieldTypes and fieldOffsets should be frozen |
| assertEq(Object.isFrozen(S.fieldTypes), true); |
| assertEq(Object.isFrozen(S.fieldOffsets), true); |
| |
| if (typeof reportCompare === "function") |
| reportCompare(true, true); |
| print("Tests complete"); |
| } |
| |
| runTests(); |