// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) var BUGNUMBER = 898359; var summary = 'TypedObjects reference type coercions'; var actual = ''; var expect = ''; var ArrayType = TypedObject.ArrayType; var StructType = TypedObject.StructType; var Any = TypedObject.Any; var Object = TypedObject.Object; var string = TypedObject.string; function TestValues(type, values) { for (var i = 0; i < values.length; i++) { compare(type(values[i].input), values[i]); } var Struct = new StructType({f: type}); for (var i = 0; i < values.length; i++) { var struct = new Struct({f: values[i].input}); compare(struct.f, values[i]); } for (var i = 0; i < values.length; i++) { var struct = new Struct(); struct.f = values[i].input; compare(struct.f, values[i]); } var Array = new ArrayType(type, 1); for (var i = 0; i < values.length; i++) { var array = new Array(); array[0] = values[i].input; compare(array[0], values[i]); } function compare(v, spec) { if (spec.source) v = v.toSource(); assertEq(v, spec.output); } } function runTests() { printBugNumber(BUGNUMBER); printStatus(summary); var x = {}; TestValues(Any, [{input: undefined, output: undefined}, {input: x, output: x}, {input: 22.22, output: 22.22}, {input: true, output: true}]); TestValues(string, [{input: undefined, output: "undefined"}, {input: x, output: x.toString()}, {input: 22.22, output: "22.22"}, {input: true, output: "true"}]); assertThrows(() => Object(undefined)); TestValues(Object, [{input: x, output: x}, {input: 22.22, source: true, output: "(new Number(22.22))"}, {input: true, source: true, output: "(new Boolean(true))"}]); reportCompare(true, true, "TypedObjects reference type tests"); } runTests();