blob: 86485def91ab4b805d65ec10c6da04d542965e24 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/testharness-helpers.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/mojo/public/interfaces/bindings/tests/test_structs.mojom.js"></script>
<script>
test(() => {
var r = new mojo.test.Rect();
assert_weak_equals(r, new mojo.test.Rect({x:0, y:0, width:0, height:0}));
assert_weak_equals(r, new mojo.test.Rect({foo:100, bar:200}));
r.x = 10;
r.y = 20;
r.width = 30;
r.height = 40;
var rp = new mojo.test.RectPair({first: r, second: r});
assert_weak_equals(rp.first, r);
assert_weak_equals(rp.second, r);
assert_equals(new mojo.test.RectPair({second: r}).first, null);
var nr = new mojo.test.NamedRegion();
assert_equals(nr.name, null);
assert_equals(nr.rects, null);
assert_weak_equals(nr, new mojo.test.NamedRegion({}));
nr.name = "foo";
nr.rects = [r, r, r];
assert_weak_equals(nr, new mojo.test.NamedRegion({
name: "foo",
rects: [r, r, r],
}));
var e = new mojo.test.EmptyStruct();
assert_weak_equals(e, new mojo.test.EmptyStruct({foo:123}));
}, 'constructors');
test(() => {
var s = new mojo.test.NoDefaultFieldValues();
assert_false(s.f0);
// f1 - f10, number type fields
for (var i = 1; i <= 10; i++)
assert_equals(s["f" + i], 0);
// f11,12 strings, f13-22 handles, f23-f26 arrays, f27,28 structs
for (var i = 11; i <= 28; i++)
assert_equals(s["f" + i], null);
}, 'no default field values');
test(() => {
var s = new mojo.test.DefaultFieldValues();
assert_true(s.f0);
// f1 - f12, number type fields
for (var i = 1; i <= 12; i++)
assert_equals(s["f" + i], 100);
// f13,14 "foo"
for (var i = 13; i <= 14; i++)
assert_equals(s["f" + i], "foo");
// f15,16 a default instance of Rect
var r = new mojo.test.Rect();
assert_weak_equals(s.f15, r);
assert_weak_equals(s.f16, r);
}, 'default field values');
test(() => {
assert_equals(mojo.test.ScopedConstants.TEN, 10);
assert_equals(mojo.test.ScopedConstants.ALSO_TEN, 10);
assert_equals(mojo.test.ScopedConstants.EType.E0, 0);
assert_equals(mojo.test.ScopedConstants.EType.E1, 1);
assert_equals(mojo.test.ScopedConstants.EType.E2, 10);
assert_equals(mojo.test.ScopedConstants.EType.E3, 10);
assert_equals(mojo.test.ScopedConstants.EType.E4, 11);
var s = new mojo.test.ScopedConstants();
assert_equals(s.f0, 0);
assert_equals(s.f1, 1);
assert_equals(s.f2, 10);
assert_equals(s.f3, 10);
assert_equals(s.f4, 11);
assert_equals(s.f5, 10);
assert_equals(s.f6, 10);
}, 'scoped constants');
function structEncodeDecode(struct) {
var structClass = struct.constructor;
var builder = new mojo.internal.MessageV0Builder(1234,
structClass.encodedSize);
builder.encodeStruct(structClass, struct);
var message = builder.finish();
var messageValidator = new mojo.internal.Validator(message);
var err = structClass.validate(messageValidator,
mojo.internal.kMessageV0HeaderSize);
assert_equals(err, mojo.internal.validationError.NONE);
var reader = new mojo.internal.MessageReader(message);
return reader.decodeStruct(structClass);
}
test(() => {
var mapFieldsStruct = new mojo.test.MapKeyTypes({
f0: new Map([[true, false], [false, true]]), // map<bool, bool>
f1: new Map([[0, 0], [1, 127], [-1, -128]]), // map<int8, int8>
f2: new Map([[0, 0], [1, 127], [2, 255]]), // map<uint8, uint8>
f3: new Map([[0, 0], [1, 32767], [2, -32768]]), // map<int16, int16>
f4: new Map([[0, 0], [1, 32768], [2, 0xFFFF]]), // map<uint16, uint16>
f5: new Map([[0, 0], [1, 32767], [2, -32768]]), // map<int32, int32>
f6: new Map([[0, 0], [1, 32768], [2, 0xFFFF]]), // map<uint32, uint32>
f7: new Map([[0, 0], [1, 32767], [2, -32768]]), // map<int64, int64>
f8: new Map([[0, 0], [1, 32768], [2, 0xFFFF]]), // map<uint64, uint64>
f9: new Map([[1000.5, -50000], [100.5, 5000]]), // map<float, float>
f10: new Map([[-100.5, -50000], [0, 50000000]]), // map<double, double>
f11: new Map([["one", "two"], ["free", "four"]]), // map<string, string>
});
var decodedStruct = structEncodeDecode(mapFieldsStruct);
assert_weak_equals(decodedStruct, mapFieldsStruct);
}, 'map key types');
test(() => {
var mapFieldsStruct = new mojo.test.MapValueTypes({
// map<string, array<string>>
f0: new Map([["a", ["b", "c"]], ["d", ["e"]]]),
// map<string, array<string>?>
f1: new Map([["a", null], ["b", ["c", "d"]]]),
// map<string, array<string?>>
f2: new Map([["a", [null]], ["b", [null, "d"]]]),
// map<string, array<string,2>>
f3: new Map([["a", ["1", "2"]], ["b", ["1", "2"]]]),
// map<string, array<array<string, 2>?>>
f4: new Map([["a", [["1", "2"]]], ["b", [null]]]),
// map<string, array<array<string, 2>, 1>>
f5: new Map([["a", [["1", "2"]]]]),
// map<string, Rect?>
f6: new Map([["a", null]]),
// map<string, map<string, string>>
f7: new Map([["a", new Map([["b", "c"]])]]),
// map<string, array<map<string, string>>>
f8: new Map([["a", [new Map([["b", "c"]])]]]),
// map<string, handle>
f9: new Map([["a", 1234]]),
// map<string, array<handle>>
f10: new Map([["a", [1234, 5678]]]),
// map<string, map<string, handle>>
f11: new Map([["a", new Map([["b", 1234]])]]),
});
var decodedStruct = structEncodeDecode(mapFieldsStruct);
assert_weak_equals(decodedStruct, mapFieldsStruct);
}, 'map value types');
test(() => {
var decodedStruct = structEncodeDecode(new mojo.test.FloatNumberValues);
assert_equals(decodedStruct.f0, mojo.test.FloatNumberValues.V0);
assert_equals(decodedStruct.f1, mojo.test.FloatNumberValues.V1);
assert_equals(decodedStruct.f2, mojo.test.FloatNumberValues.V2);
assert_equals(decodedStruct.f3, mojo.test.FloatNumberValues.V3);
assert_equals(decodedStruct.f4, mojo.test.FloatNumberValues.V4);
assert_equals(decodedStruct.f5, mojo.test.FloatNumberValues.V5);
assert_equals(decodedStruct.f6, mojo.test.FloatNumberValues.V6);
assert_equals(decodedStruct.f7, mojo.test.FloatNumberValues.V7);
assert_equals(decodedStruct.f8, mojo.test.FloatNumberValues.V8);
assert_equals(decodedStruct.f9, mojo.test.FloatNumberValues.V9);
}, 'float number values');
test(() => {
var decodedStruct = structEncodeDecode(new mojo.test.IntegerNumberValues);
assert_equals(decodedStruct.f0, mojo.test.IntegerNumberValues.V0);
assert_equals(decodedStruct.f1, mojo.test.IntegerNumberValues.V1);
assert_equals(decodedStruct.f2, mojo.test.IntegerNumberValues.V2);
assert_equals(decodedStruct.f3, mojo.test.IntegerNumberValues.V3);
assert_equals(decodedStruct.f4, mojo.test.IntegerNumberValues.V4);
assert_equals(decodedStruct.f5, mojo.test.IntegerNumberValues.V5);
assert_equals(decodedStruct.f6, mojo.test.IntegerNumberValues.V6);
assert_equals(decodedStruct.f7, mojo.test.IntegerNumberValues.V7);
assert_equals(decodedStruct.f8, mojo.test.IntegerNumberValues.V8);
assert_equals(decodedStruct.f9, mojo.test.IntegerNumberValues.V9);
assert_equals(decodedStruct.f10, mojo.test.IntegerNumberValues.V10);
assert_equals(decodedStruct.f11, mojo.test.IntegerNumberValues.V11);
assert_equals(decodedStruct.f12, mojo.test.IntegerNumberValues.V12);
assert_equals(decodedStruct.f13, mojo.test.IntegerNumberValues.V13);
assert_equals(decodedStruct.f14, mojo.test.IntegerNumberValues.V14);
assert_equals(decodedStruct.f15, mojo.test.IntegerNumberValues.V15);
assert_equals(decodedStruct.f16, mojo.test.IntegerNumberValues.V16);
assert_equals(decodedStruct.f17, mojo.test.IntegerNumberValues.V17);
assert_equals(decodedStruct.f18, mojo.test.IntegerNumberValues.V18);
assert_equals(decodedStruct.f19, mojo.test.IntegerNumberValues.V19);
}, 'integer number values');
test(() => {
var decodedStruct =
structEncodeDecode(new mojo.test.UnsignedNumberValues);
assert_equals(decodedStruct.f0, mojo.test.UnsignedNumberValues.V0);
assert_equals(decodedStruct.f1, mojo.test.UnsignedNumberValues.V1);
assert_equals(decodedStruct.f2, mojo.test.UnsignedNumberValues.V2);
assert_equals(decodedStruct.f3, mojo.test.UnsignedNumberValues.V3);
assert_equals(decodedStruct.f4, mojo.test.UnsignedNumberValues.V4);
assert_equals(decodedStruct.f5, mojo.test.UnsignedNumberValues.V5);
assert_equals(decodedStruct.f6, mojo.test.UnsignedNumberValues.V6);
assert_equals(decodedStruct.f7, mojo.test.UnsignedNumberValues.V7);
assert_equals(decodedStruct.f8, mojo.test.UnsignedNumberValues.V8);
assert_equals(decodedStruct.f9, mojo.test.UnsignedNumberValues.V9);
assert_equals(decodedStruct.f10, mojo.test.UnsignedNumberValues.V10);
assert_equals(decodedStruct.f11, mojo.test.UnsignedNumberValues.V11);
}, 'unsigned number values');
test(() => {
var bitArraysStruct = new mojo.test.BitArrayValues({
// array<bool, 1> f0;
f0: [true],
// array<bool, 7> f1;
f1: [true, false, true, false, true, false, true],
// array<bool, 9> f2;
f2: [true, false, true, false, true, false, true, false, true],
// array<bool> f3;
f3: [true, false, true, false, true, false, true, false],
// array<array<bool>> f4;
f4: [[true], [false], [true, false], [true, false, true, false]],
// array<array<bool>?> f5;
f5: [[true], null, null, [true, false, true, false]],
// array<array<bool, 2>?> f6;
f6: [[true, false], [true, false], [true, false]],
});
var decodedStruct = structEncodeDecode(bitArraysStruct);
assert_weak_equals(decodedStruct, bitArraysStruct);
}, 'bit array values');
</script>