OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 define([ | 5 define([ |
6 "console", | 6 "console", |
7 "file", | 7 "file", |
8 "gin/test/expect", | 8 "gin/test/expect", |
9 "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom", | 9 "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom", |
10 "mojo/public/js/bindings/buffer", | 10 "mojo/public/js/bindings/buffer", |
11 "mojo/public/js/bindings/codec", | 11 "mojo/public/js/bindings/codec", |
| 12 "mojo/public/js/bindings/connection", |
| 13 "mojo/public/js/bindings/connector", |
| 14 "mojo/public/js/bindings/core", |
12 "mojo/public/js/bindings/tests/validation_test_input_parser", | 15 "mojo/public/js/bindings/tests/validation_test_input_parser", |
| 16 "mojo/public/js/bindings/router", |
13 "mojo/public/js/bindings/validator", | 17 "mojo/public/js/bindings/validator", |
14 ], function( | 18 ], function(console, |
15 console, file, expect, testInterface, buffer, codec, parser, validator) { | 19 file, |
| 20 expect, |
| 21 testInterface, |
| 22 buffer, |
| 23 codec, |
| 24 connection, |
| 25 connector, |
| 26 core, |
| 27 parser, |
| 28 router, |
| 29 validator) { |
| 30 |
| 31 var noError = validator.validationError.NONE; |
16 | 32 |
17 function checkTestMessageParser() { | 33 function checkTestMessageParser() { |
18 function TestMessageParserFailure(message, input) { | 34 function TestMessageParserFailure(message, input) { |
19 this.message = message; | 35 this.message = message; |
20 this.input = input; | 36 this.input = input; |
21 } | 37 } |
22 | 38 |
23 TestMessageParserFailure.prototype.toString = function() { | 39 TestMessageParserFailure.prototype.toString = function() { |
24 return 'Error: ' + this.message + ' for "' + this.input + '"'; | 40 return 'Error: ' + this.message + ' for "' + this.input + '"'; |
25 } | 41 } |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 expect(contents).not.toBeNull(); | 205 expect(contents).not.toBeNull(); |
190 return parser.parseTestMessage(contents); | 206 return parser.parseTestMessage(contents); |
191 } | 207 } |
192 | 208 |
193 function readTestExpected(filename) { | 209 function readTestExpected(filename) { |
194 var contents = file.readFileToString(filename + ".expected"); | 210 var contents = file.readFileToString(filename + ".expected"); |
195 expect(contents).not.toBeNull(); | 211 expect(contents).not.toBeNull(); |
196 return contents.trim(); | 212 return contents.trim(); |
197 } | 213 } |
198 | 214 |
| 215 function checkValidationResult(testFile, err) { |
| 216 var actualResult = (err === noError) ? "PASS" : err; |
| 217 var expectedResult = readTestExpected(testFile); |
| 218 if (actualResult != expectedResult) |
| 219 console.log("[Test message validation failed: " + testFile + " ]"); |
| 220 expect(actualResult).toEqual(expectedResult); |
| 221 } |
| 222 |
199 function testMessageValidation(key, filters) { | 223 function testMessageValidation(key, filters) { |
200 var testFiles = getMessageTestFiles(key); | 224 var testFiles = getMessageTestFiles(key); |
201 expect(testFiles.length).toBeGreaterThan(0); | 225 expect(testFiles.length).toBeGreaterThan(0); |
202 | 226 |
203 var noError = validator.validationError.NONE; | |
204 for (var i = 0; i < testFiles.length; i++) { | 227 for (var i = 0; i < testFiles.length; i++) { |
205 // TODO(hansmuller): Temporarily skipping array pointer overflow tests. | 228 // TODO(hansmuller): Temporarily skipping array pointer overflow tests. |
206 if (testFiles[i].indexOf("overflow") != -1) { | 229 if (testFiles[i].indexOf("overflow") != -1) { |
207 console.log("[Skipping " + testFiles[i] + "]"); | 230 console.log("[Skipping " + testFiles[i] + "]"); |
208 continue; | 231 continue; |
209 } | 232 } |
210 | 233 |
211 var testMessage = readTestMessage(testFiles[i]); | 234 var testMessage = readTestMessage(testFiles[i]); |
212 var handles = new Array(testMessage.handleCount); | 235 var handles = new Array(testMessage.handleCount); |
213 var message = new codec.Message(testMessage.buffer, handles); | 236 var message = new codec.Message(testMessage.buffer, handles); |
214 var messageValidator = new validator.Validator(message); | 237 var messageValidator = new validator.Validator(message); |
215 | 238 |
216 var err = messageValidator.validateMessageHeader(); | 239 var err = messageValidator.validateMessageHeader(); |
217 for (var j = 0; err === noError && j < filters.length; ++j) | 240 for (var j = 0; err === noError && j < filters.length; ++j) |
218 err = filters[j](messageValidator); | 241 err = filters[j](messageValidator); |
219 | 242 |
220 var actualResult = (err === noError) ? "PASS" : err; | 243 checkValidationResult(testFiles[i], err); |
221 var expectedResult = readTestExpected(testFiles[i]); | |
222 if (actualResult != expectedResult) | |
223 console.log("[Test message validation failed: " + testFiles[i] + " ]"); | |
224 expect(actualResult).toEqual(expectedResult); | |
225 } | 244 } |
226 } | 245 } |
227 | 246 |
228 function testConformanceMessageValidation() { | 247 function testConformanceMessageValidation() { |
229 testMessageValidation("conformance_", [ | 248 testMessageValidation("conformance_", [ |
230 testInterface.ConformanceTestInterfaceStub.prototype.validator]); | 249 testInterface.ConformanceTestInterfaceStub.prototype.validator]); |
231 } | 250 } |
232 | 251 |
233 function testNotImplementedMessageValidation() { | 252 function testNotImplementedMessageValidation() { |
234 testMessageValidation("not_implemented_", [ | 253 testMessageValidation("not_implemented_", [ |
235 testInterface.ConformanceTestInterfaceStub.prototype.validator]); | 254 testInterface.ConformanceTestInterfaceStub.prototype.validator]); |
236 } | 255 } |
237 | 256 |
238 function testIntegrationMessageValidation() { | 257 function testIntegratedMessageValidation() { |
239 testMessageValidation("integration_", [ | 258 var testFiles = getMessageTestFiles("integration_"); |
240 testInterface.IntegrationTestInterface1Stub.prototype.validator, | 259 expect(testFiles.length).toBeGreaterThan(0); |
241 testInterface.IntegrationTestInterface2Proxy.prototype.validator]); | 260 |
| 261 for (var i = 0; i < testFiles.length; i++) { |
| 262 // TODO(hansmuller): Temporarily skipping array pointer overflow tests. |
| 263 if (testFiles[i].indexOf("overflow") != -1) { |
| 264 console.log("[Skipping " + testFiles[i] + "]"); |
| 265 continue; |
| 266 } |
| 267 |
| 268 var testMessage = readTestMessage(testFiles[i]); |
| 269 var handles = new Array(testMessage.handleCount); |
| 270 var testMessagePipe = new core.createMessagePipe(); |
| 271 expect(testMessagePipe.result).toBe(core.RESULT_OK); |
| 272 |
| 273 var writeMessageValue = core.writeMessage( |
| 274 testMessagePipe.handle0, |
| 275 new Uint8Array(testMessage.buffer.arrayBuffer), |
| 276 new Array(testMessage.handleCount), |
| 277 core.WRITE_MESSAGE_FLAG_NONE); |
| 278 expect(writeMessageValue).toBe(core.RESULT_OK); |
| 279 |
| 280 var testConnection = new connection.TestConnection( |
| 281 testMessagePipe.handle1, |
| 282 testInterface.IntegrationTestInterface1Stub, |
| 283 testInterface.IntegrationTestInterface2Proxy); |
| 284 |
| 285 var validationError = noError; |
| 286 testConnection.router_.validationErrorHandler = function(err) { |
| 287 validationError = err; |
| 288 } |
| 289 |
| 290 testConnection.router_.connector_.deliverMessage(); |
| 291 checkValidationResult(testFiles[i], validationError); |
| 292 |
| 293 testConnection.close(); |
| 294 expect(core.close(testMessagePipe.handle0)).toBe(core.RESULT_OK); |
| 295 } |
242 } | 296 } |
243 | 297 |
244 expect(checkTestMessageParser()).toBeNull(); | 298 expect(checkTestMessageParser()).toBeNull(); |
245 testConformanceMessageValidation(); | 299 testConformanceMessageValidation(); |
246 testIntegrationMessageValidation(); | 300 testIntegratedMessageValidation(); |
247 this.result = "PASS"; | 301 this.result = "PASS"; |
248 }); | 302 }); |
OLD | NEW |