Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Side by Side Diff: mojo/public/js/union_unittests.js

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/public/js/unicode.js ('k') | mojo/public/js/validation_unittests.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 define([
6 "gin/test/expect",
7 "mojo/public/interfaces/bindings/tests/test_unions.mojom",
8 "mojo/public/js/codec",
9 "mojo/public/js/validator",
10 ], function(expect,
11 unions,
12 codec,
13 validator) {
14 function testConstructors() {
15 var u = new unions.PodUnion();
16 expect(u.$data).toEqual(null);
17 expect(u.$tag).toBeUndefined();
18
19 u.f_uint32 = 32;
20
21 expect(u.f_uint32).toEqual(32);
22 expect(u.$tag).toEqual(unions.PodUnion.Tags.f_uint32);
23
24 var u = new unions.PodUnion({f_uint64: 64});
25 expect(u.f_uint64).toEqual(64);
26 expect(u.$tag).toEqual(unions.PodUnion.Tags.f_uint64);
27 expect(function() {var v = u.f_uint32;}).toThrow();
28
29 expect(function() {
30 var u = new unions.PodUnion({
31 f_uint64: 64,
32 f_uint32: 32,
33 });
34 }).toThrow();
35
36 expect(function() {
37 var u = new unions.PodUnion({ foo: 64 }); }).toThrow();
38
39 expect(function() {
40 var u = new unions.PodUnion([1,2,3,4]); }).toThrow();
41 }
42
43 function structEncodeDecode(struct) {
44 var structClass = struct.constructor;
45 var builder = new codec.MessageBuilder(1234, structClass.encodedSize);
46 builder.encodeStruct(structClass, struct);
47
48 var message = builder.finish();
49
50 var messageValidator = new validator.Validator(message);
51 var err = structClass.validate(messageValidator, codec.kMessageHeaderSize);
52 expect(err).toEqual(validator.validationError.NONE);
53
54 var reader = new codec.MessageReader(message);
55 var view = reader.decoder.buffer.dataView;
56
57 return reader.decodeStruct(structClass);
58 }
59
60 function testBasicEncoding() {
61 var s = new unions.WrapperStruct({
62 pod_union: new unions.PodUnion({
63 f_uint64: 64})});
64
65 var decoded = structEncodeDecode(s);
66 expect(decoded).toEqual(s);
67
68 var s = new unions.WrapperStruct({
69 object_union: new unions.ObjectUnion({
70 f_dummy: new unions.DummyStruct({
71 f_int8: 8})})});
72
73 var decoded = structEncodeDecode(s);
74 expect(decoded).toEqual(s);
75
76 var s = new unions.WrapperStruct({
77 object_union: new unions.ObjectUnion({
78 f_array_int8: [1, 2, 3]})});
79
80 var decoded = structEncodeDecode(s);
81 expect(decoded).toEqual(s);
82
83 var s = new unions.WrapperStruct({
84 object_union: new unions.ObjectUnion({
85 f_map_int8: new Map([
86 ["first", 1],
87 ["second", 2],
88 ])})});
89
90 var decoded = structEncodeDecode(s);
91 expect(decoded).toEqual(s);
92
93 // Encoding a union with no member set is an error.
94 var s = new unions.WrapperStruct({
95 object_union: new unions.ObjectUnion()});
96 expect(function() {
97 structEncodeDecode(s); }).toThrow();
98 }
99
100 function testUnionsInArrayEncoding() {
101 var s = new unions.SmallStruct({
102 pod_union_array: [
103 new unions.PodUnion({f_uint32: 32}),
104 new unions.PodUnion({f_uint64: 64}),
105 ]
106 });
107
108 var decoded = structEncodeDecode(s);
109 expect(decoded).toEqual(s);
110 }
111
112 function testUnionsInMapEncoding() {
113 var s = new unions.SmallStruct({
114 pod_union_map: new Map([
115 ["thirty-two", new unions.PodUnion({f_uint32: 32})],
116 ["sixty-four", new unions.PodUnion({f_uint64: 64})],
117 ])
118 });
119
120 var decoded = structEncodeDecode(s);
121 expect(decoded).toEqual(s);
122 }
123
124 function testNestedUnionsEncoding() {
125 var s = new unions.WrapperStruct({
126 object_union: new unions.ObjectUnion({
127 f_pod_union: new unions.PodUnion({f_uint32: 32})
128 })});
129 var decoded = structEncodeDecode(s);
130 expect(decoded).toEqual(s);
131 }
132
133 function structValidate(struct) {
134 var structClass = struct.constructor;
135 var builder = new codec.MessageBuilder(1234, structClass.encodedSize);
136 builder.encodeStruct(structClass, struct);
137
138 var message = builder.finish();
139
140 var messageValidator = new validator.Validator(message);
141 return structClass.validate(messageValidator, codec.kMessageHeaderSize);
142 }
143
144 function testNullUnionMemberValidation() {
145 var s = new unions.WrapperStruct({
146 object_union: new unions.ObjectUnion({
147 f_dummy: null})});
148
149 var err = structValidate(s);
150 expect(err).toEqual(validator.validationError.UNEXPECTED_NULL_POINTER);
151
152 var s = new unions.WrapperStruct({
153 object_union: new unions.ObjectUnion({
154 f_nullable: null})});
155
156 var err = structValidate(s);
157 expect(err).toEqual(validator.validationError.NONE);
158 }
159
160 function testNullUnionValidation() {
161 var s = new unions.SmallStructNonNullableUnion({
162 pod_union: null});
163
164 var err = structValidate(s);
165 expect(err).toEqual(validator.validationError.UNEXPECTED_NULL_UNION);
166
167 var s = new unions.WrapperStruct({
168 object_union: new unions.ObjectUnion({
169 f_pod_union: null})
170 });
171
172 var err = structValidate(s);
173 expect(err).toEqual(validator.validationError.UNEXPECTED_NULL_POINTER);
174 }
175
176 testConstructors();
177 testBasicEncoding();
178 testUnionsInArrayEncoding();
179 testUnionsInMapEncoding();
180 testNestedUnionsEncoding();
181 testNullUnionMemberValidation();
182 testNullUnionValidation();
183 this.result = "PASS";
184 });
OLDNEW
« no previous file with comments | « mojo/public/js/unicode.js ('k') | mojo/public/js/validation_unittests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698