| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <script src="../resources/testharness.js"></script> | 2 <script src="../resources/testharness.js"></script> |
| 3 <script src="../resources/testharnessreport.js"></script> | 3 <script src="../resources/testharnessreport.js"></script> |
| 4 <script src="../resources/testharness-helpers.js"></script> | 4 <script src="../resources/testharness-helpers.js"></script> |
| 5 <script src="../resources/mojo-helpers.js"></script> | 5 <script src="../resources/mojo-helpers.js"></script> |
| 6 <script> | 6 <script> |
| 7 'use strict'; | 7 'use strict'; |
| 8 | 8 |
| 9 setup({ explicit_done: true }); | 9 setup({ explicit_done: true }); |
| 10 | 10 |
| 11 define([ | 11 define([ |
| 12 'mojo/public/js/codec', | 12 'mojo/public/js/codec', |
| 13 'mojo/public/interfaces/bindings/tests/rect.mojom', | 13 'mojo/public/interfaces/bindings/tests/rect.mojom', |
| 14 'mojo/public/interfaces/bindings/tests/sample_service.mojom', | 14 'mojo/public/interfaces/bindings/tests/sample_service.mojom', |
| 15 'mojo/public/interfaces/bindings/tests/test_structs.mojom', | 15 'mojo/public/interfaces/bindings/tests/test_structs.mojom', |
| 16 ], function(codec, rect, sample, structs) { | 16 ], function(codec, rect, sample, structs) { |
| 17 | 17 |
| 18 test(() => { | 18 test(() => { |
| 19 var bar = new sample.Bar(); | 19 var bar = new sample.Bar(); |
| 20 bar.alpha = 1; | 20 bar.alpha = 1; |
| 21 bar.beta = 2; | 21 bar.beta = 2; |
| 22 bar.gamma = 3; | 22 bar.gamma = 3; |
| 23 bar.type = 0x08070605; | 23 bar.type = 0x08070605; |
| 24 bar.extraProperty = "banana"; | 24 bar.extraProperty = "banana"; |
| 25 | 25 |
| 26 var messageName = 42; | 26 var messageName = 42; |
| 27 var payloadSize = sample.Bar.encodedSize; | 27 var payloadSize = sample.Bar.encodedSize; |
| 28 | 28 |
| 29 var builder = new codec.MessageBuilder(messageName, payloadSize); | 29 var builder = new codec.MessageV0Builder(messageName, payloadSize); |
| 30 builder.encodeStruct(sample.Bar, bar); | 30 builder.encodeStruct(sample.Bar, bar); |
| 31 | 31 |
| 32 var message = builder.finish(); | 32 var message = builder.finish(); |
| 33 | 33 |
| 34 var expectedMemory = new Uint8Array([ | 34 var expectedMemory = new Uint8Array([ |
| 35 24, 0, 0, 0, | 35 24, 0, 0, 0, |
| 36 0, 0, 0, 0, | 36 0, 0, 0, 0, |
| 37 0, 0, 0, 0, | 37 0, 0, 0, 0, |
| 38 42, 0, 0, 0, | 38 42, 0, 0, 0, |
| 39 0, 0, 0, 0, | 39 0, 0, 0, 0, |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 [true], [false, true] | 91 [true], [false, true] |
| 92 ]; | 92 ]; |
| 93 foo.array_of_bools = [ | 93 foo.array_of_bools = [ |
| 94 true, false, true, false, true, false, true, true | 94 true, false, true, false, true, false, true, true |
| 95 ]; | 95 ]; |
| 96 | 96 |
| 97 | 97 |
| 98 var messageName = 31; | 98 var messageName = 31; |
| 99 var payloadSize = 304; | 99 var payloadSize = 304; |
| 100 | 100 |
| 101 var builder = new codec.MessageBuilder(messageName, payloadSize); | 101 var builder = new codec.MessageV0Builder(messageName, payloadSize); |
| 102 builder.encodeStruct(sample.Foo, foo); | 102 builder.encodeStruct(sample.Foo, foo); |
| 103 | 103 |
| 104 var message = builder.finish(); | 104 var message = builder.finish(); |
| 105 | 105 |
| 106 var expectedMemory = new Uint8Array([ | 106 var expectedMemory = new Uint8Array([ |
| 107 /* 0: */ 24, 0, 0, 0, 0, 0, 0, 0, | 107 /* 0: */ 24, 0, 0, 0, 0, 0, 0, 0, |
| 108 /* 8: */ 0, 0, 0, 0, 31, 0, 0, 0, | 108 /* 8: */ 0, 0, 0, 0, 31, 0, 0, 0, |
| 109 /* 16: */ 0, 0, 0, 0, 0, 0, 0, 0, | 109 /* 16: */ 0, 0, 0, 0, 0, 0, 0, 0, |
| 110 /* 24: */ 96, 0, 0, 0, 0, 0, 0, 0, | 110 /* 24: */ 96, 0, 0, 0, 0, 0, 0, 0, |
| 111 /* 32: */ 0xD5, 0xB4, 0x12, 0x02, 0x93, 0x6E, 0x01, 0, | 111 /* 32: */ 0xD5, 0xB4, 0x12, 0x02, 0x93, 0x6E, 0x01, 0, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 r.y = y; | 158 r.y = y; |
| 159 r.width = width; | 159 r.width = width; |
| 160 r.height = height; | 160 r.height = height; |
| 161 return r; | 161 return r; |
| 162 } | 162 } |
| 163 | 163 |
| 164 var r = new structs.NamedRegion(); | 164 var r = new structs.NamedRegion(); |
| 165 r.name = "rectangle"; | 165 r.name = "rectangle"; |
| 166 r.rects = new Array(createRect(1, 2, 3, 4), createRect(10, 20, 30, 40)); | 166 r.rects = new Array(createRect(1, 2, 3, 4), createRect(10, 20, 30, 40)); |
| 167 | 167 |
| 168 var builder = new codec.MessageBuilder(1, structs.NamedRegion.encodedSize); | 168 var builder = new codec.MessageV0Builder(1, structs.NamedRegion.encodedSize)
; |
| 169 builder.encodeStruct(structs.NamedRegion, r); | 169 builder.encodeStruct(structs.NamedRegion, r); |
| 170 var reader = new codec.MessageReader(builder.finish()); | 170 var reader = new codec.MessageReader(builder.finish()); |
| 171 var result = reader.decodeStruct(structs.NamedRegion); | 171 var result = reader.decodeStruct(structs.NamedRegion); |
| 172 | 172 |
| 173 assert_equals(result.name, "rectangle"); | 173 assert_equals(result.name, "rectangle"); |
| 174 assert_weak_equals(result.rects[0], createRect(1, 2, 3, 4)); | 174 assert_weak_equals(result.rects[0], createRect(1, 2, 3, 4)); |
| 175 assert_weak_equals(result.rects[1], createRect(10, 20, 30, 40)); | 175 assert_weak_equals(result.rects[1], createRect(10, 20, 30, 40)); |
| 176 }, 'named region'); | 176 }, 'named region'); |
| 177 | 177 |
| 178 // Verify that a single boolean field in a struct is correctly decoded to | 178 // Verify that a single boolean field in a struct is correctly decoded to |
| 179 // boolean type. | 179 // boolean type. |
| 180 test(() => { | 180 test(() => { |
| 181 var single_bool = new structs.SingleBoolStruct(); | 181 var single_bool = new structs.SingleBoolStruct(); |
| 182 single_bool.value = true; | 182 single_bool.value = true; |
| 183 | 183 |
| 184 var builder = new codec.MessageBuilder( | 184 var builder = new codec.MessageV0Builder( |
| 185 1, structs.SingleBoolStruct.encodedSize); | 185 1, structs.SingleBoolStruct.encodedSize); |
| 186 builder.encodeStruct(structs.SingleBoolStruct, single_bool); | 186 builder.encodeStruct(structs.SingleBoolStruct, single_bool); |
| 187 var reader = new codec.MessageReader(builder.finish()); | 187 var reader = new codec.MessageReader(builder.finish()); |
| 188 var result = reader.decodeStruct(structs.SingleBoolStruct); | 188 var result = reader.decodeStruct(structs.SingleBoolStruct); |
| 189 | 189 |
| 190 assert_true(result.value); | 190 assert_true(result.value); |
| 191 }, 'single boolean struct'); | 191 }, 'single boolean struct'); |
| 192 | 192 |
| 193 test(() => { | 193 test(() => { |
| 194 function encodeDecode(cls, input, expectedResult, encodedSize) { | 194 function encodeDecode(cls, input, expectedResult, encodedSize) { |
| 195 var messageName = 42; | 195 var messageName = 42; |
| 196 var payloadSize = encodedSize || cls.encodedSize; | 196 var payloadSize = encodedSize || cls.encodedSize; |
| 197 | 197 |
| 198 var builder = new codec.MessageBuilder(messageName, payloadSize); | 198 var builder = new codec.MessageV0Builder(messageName, payloadSize); |
| 199 builder.encodeStruct(cls, input) | 199 builder.encodeStruct(cls, input) |
| 200 var message = builder.finish(); | 200 var message = builder.finish(); |
| 201 | 201 |
| 202 var reader = new codec.MessageReader(message); | 202 var reader = new codec.MessageReader(message); |
| 203 assert_equals(reader.payloadSize, payloadSize); | 203 assert_equals(reader.payloadSize, payloadSize); |
| 204 assert_equals(reader.messageName, messageName); | 204 assert_equals(reader.messageName, messageName); |
| 205 var result = reader.decodeStruct(cls); | 205 var result = reader.decodeStruct(cls); |
| 206 assert_equals(result, expectedResult); | 206 assert_equals(result, expectedResult); |
| 207 } | 207 } |
| 208 encodeDecode(codec.String, "banana", "banana", 24); | 208 encodeDecode(codec.String, "banana", "banana", 24); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 for (var i = 0; i < aligned.length; ++i) | 246 for (var i = 0; i < aligned.length; ++i) |
| 247 assert_equals(codec.align(i), aligned[i]); | 247 assert_equals(codec.align(i), aligned[i]); |
| 248 | 248 |
| 249 }, 'align'); | 249 }, 'align'); |
| 250 | 250 |
| 251 test(() => { | 251 test(() => { |
| 252 var str = "B\u03ba\u1f79"; // some UCS-2 codepoints | 252 var str = "B\u03ba\u1f79"; // some UCS-2 codepoints |
| 253 var messageName = 42; | 253 var messageName = 42; |
| 254 var payloadSize = 24; | 254 var payloadSize = 24; |
| 255 | 255 |
| 256 var builder = new codec.MessageBuilder(messageName, payloadSize); | 256 var builder = new codec.MessageV0Builder(messageName, payloadSize); |
| 257 var encoder = builder.createEncoder(8); | 257 var encoder = builder.createEncoder(8); |
| 258 encoder.encodeStringPointer(str); | 258 encoder.encodeStringPointer(str); |
| 259 var message = builder.finish(); | 259 var message = builder.finish(); |
| 260 var expectedMemory = new Uint8Array([ | 260 var expectedMemory = new Uint8Array([ |
| 261 /* 0: */ 24, 0, 0, 0, 0, 0, 0, 0, | 261 /* 0: */ 24, 0, 0, 0, 0, 0, 0, 0, |
| 262 /* 8: */ 0, 0, 0, 0, 42, 0, 0, 0, | 262 /* 8: */ 0, 0, 0, 0, 42, 0, 0, 0, |
| 263 /* 16: */ 0, 0, 0, 0, 0, 0, 0, 0, | 263 /* 16: */ 0, 0, 0, 0, 0, 0, 0, 0, |
| 264 /* 24: */ 8, 0, 0, 0, 0, 0, 0, 0, | 264 /* 24: */ 8, 0, 0, 0, 0, 0, 0, 0, |
| 265 /* 32: */ 14, 0, 0, 0, 6, 0, 0, 0, | 265 /* 32: */ 14, 0, 0, 0, 6, 0, 0, 0, |
| 266 /* 40: */ 0x42, 0xCE, 0xBA, 0xE1, 0xBD, 0xB9, 0, 0, | 266 /* 40: */ 0x42, 0xCE, 0xBA, 0xE1, 0xBD, 0xB9, 0, 0, |
| 267 ]); | 267 ]); |
| 268 var actualMemory = new Uint8Array(message.buffer.arrayBuffer); | 268 var actualMemory = new Uint8Array(message.buffer.arrayBuffer); |
| 269 assert_weak_equals(actualMemory, expectedMemory); | 269 assert_weak_equals(actualMemory, expectedMemory); |
| 270 | 270 |
| 271 var reader = new codec.MessageReader(message); | 271 var reader = new codec.MessageReader(message); |
| 272 assert_equals(reader.payloadSize, payloadSize); | 272 assert_equals(reader.payloadSize, payloadSize); |
| 273 assert_equals(reader.messageName, messageName); | 273 assert_equals(reader.messageName, messageName); |
| 274 var str2 = reader.decoder.decodeStringPointer(); | 274 var str2 = reader.decoder.decodeStringPointer(); |
| 275 assert_equals(str2, str); | 275 assert_equals(str2, str); |
| 276 }, 'utf8'); | 276 }, 'utf8'); |
| 277 | 277 |
| 278 test(() => { | 278 test(() => { |
| 279 var encoder = new codec.MessageBuilder(42, 24).createEncoder(8); | 279 var encoder = new codec.MessageV0Builder(42, 24).createEncoder(8); |
| 280 function DummyClass() {}; | 280 function DummyClass() {}; |
| 281 var testCases = [ | 281 var testCases = [ |
| 282 // method, args, invalid examples, valid examples | 282 // method, args, invalid examples, valid examples |
| 283 [encoder.encodeArrayPointer, [DummyClass], [75], | 283 [encoder.encodeArrayPointer, [DummyClass], [75], |
| 284 [[], null, undefined, new Uint8Array([])]], | 284 [[], null, undefined, new Uint8Array([])]], |
| 285 [encoder.encodeStringPointer, [], [75, new String("foo")], | 285 [encoder.encodeStringPointer, [], [75, new String("foo")], |
| 286 ["", "bar", null, undefined]], | 286 ["", "bar", null, undefined]], |
| 287 [encoder.encodeMapPointer, [DummyClass, DummyClass], [75], | 287 [encoder.encodeMapPointer, [DummyClass, DummyClass], [75], |
| 288 [new Map(), null, undefined]], | 288 [new Map(), null, undefined]], |
| 289 ]; | 289 ]; |
| 290 | 290 |
| 291 testCases.forEach(function(test) { | 291 testCases.forEach(function(test) { |
| 292 var method = test[0]; | 292 var method = test[0]; |
| 293 var baseArgs = test[1]; | 293 var baseArgs = test[1]; |
| 294 var invalidExamples = test[2]; | 294 var invalidExamples = test[2]; |
| 295 var validExamples = test[3]; | 295 var validExamples = test[3]; |
| 296 | 296 |
| 297 var encoder = new codec.MessageBuilder(42, 24).createEncoder(8); | 297 var encoder = new codec.MessageV0Builder(42, 24).createEncoder(8); |
| 298 invalidExamples.forEach(function(invalid) { | 298 invalidExamples.forEach(function(invalid) { |
| 299 assert_throws(null, function() { | 299 assert_throws(null, function() { |
| 300 method.apply(encoder, baseArgs.concat(invalid)); | 300 method.apply(encoder, baseArgs.concat(invalid)); |
| 301 }); | 301 }); |
| 302 }); | 302 }); |
| 303 | 303 |
| 304 validExamples.forEach(function(valid) { | 304 validExamples.forEach(function(valid) { |
| 305 var encoder = new codec.MessageBuilder(42, 24).createEncoder(8); | 305 var encoder = new codec.MessageV0Builder(42, 24).createEncoder(8); |
| 306 method.apply(encoder, baseArgs.concat(valid)); | 306 method.apply(encoder, baseArgs.concat(valid)); |
| 307 }); | 307 }); |
| 308 }); | 308 }); |
| 309 }, 'typed pointer validation'); | 309 }, 'typed pointer validation'); |
| 310 | 310 |
| 311 done(); | 311 done(); |
| 312 }); | 312 }); |
| 313 </script> | 313 </script> |
| OLD | NEW |