| 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 "file", | 7 "file", |
| 7 "gin/test/expect", | 8 "gin/test/expect", |
| 8 "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom", | 9 "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom", |
| 9 "mojo/public/js/bindings/buffer", | 10 "mojo/public/js/bindings/buffer", |
| 10 "mojo/public/js/bindings/codec", | 11 "mojo/public/js/bindings/codec", |
| 11 "mojo/public/js/bindings/tests/validation_test_input_parser", | 12 "mojo/public/js/bindings/tests/validation_test_input_parser", |
| 12 "mojo/public/js/bindings/validator", | 13 "mojo/public/js/bindings/validator", |
| 13 ], function(file, expect, testInterface, buffer, codec, parser, validator) { | 14 ], function( |
| 15 console, file, expect, testInterface, buffer, codec, parser, validator) { |
| 14 | 16 |
| 15 function checkTestMessageParser() { | 17 function checkTestMessageParser() { |
| 16 function TestMessageParserFailure(message, input) { | 18 function TestMessageParserFailure(message, input) { |
| 17 this.message = message; | 19 this.message = message; |
| 18 this.input = input; | 20 this.input = input; |
| 19 } | 21 } |
| 20 | 22 |
| 21 TestMessageParserFailure.prototype.toString = function() { | 23 TestMessageParserFailure.prototype.toString = function() { |
| 22 return 'Error: ' + this.message + ' for "' + this.input + '"'; | 24 return 'Error: ' + this.message + ' for "' + this.input + '"'; |
| 23 } | 25 } |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 testEmptyInput(); | 157 testEmptyInput(); |
| 156 testBlankInput(); | 158 testBlankInput(); |
| 157 testHandles(); | 159 testHandles(); |
| 158 testAnchors(); | 160 testAnchors(); |
| 159 } catch (e) { | 161 } catch (e) { |
| 160 return e.toString(); | 162 return e.toString(); |
| 161 } | 163 } |
| 162 return null; | 164 return null; |
| 163 } | 165 } |
| 164 | 166 |
| 165 function getMessageTestFiles() { | 167 function getMessageTestFiles(key) { |
| 166 var sourceRoot = file.getSourceRootDirectory(); | 168 var sourceRoot = file.getSourceRootDirectory(); |
| 167 expect(sourceRoot).not.toBeNull(); | 169 expect(sourceRoot).not.toBeNull(); |
| 168 | 170 |
| 169 var testDir = sourceRoot + | 171 var testDir = sourceRoot + |
| 170 "/mojo/public/interfaces/bindings/tests/data/validation/"; | 172 "/mojo/public/interfaces/bindings/tests/data/validation/"; |
| 171 var testFiles = file.getFilesInDirectory(testDir); | 173 var testFiles = file.getFilesInDirectory(testDir); |
| 172 expect(testFiles).not.toBeNull(); | 174 expect(testFiles).not.toBeNull(); |
| 173 expect(testFiles.length).toBeGreaterThan(0); | 175 expect(testFiles.length).toBeGreaterThan(0); |
| 174 | 176 |
| 175 // The ".data" pathnames with the extension removed. | 177 // The matching ".data" pathnames with the extension removed. |
| 176 var testPathNames = testFiles.filter(function(s) { | 178 return testFiles.filter(function(s) { |
| 177 return s.substr(-5) == ".data"; | 179 return s.substr(-5) == ".data"; |
| 178 }).map(function(s) { | 180 }).map(function(s) { |
| 179 return testDir + s.slice(0, -5); | 181 return testDir + s.slice(0, -5); |
| 180 }); | 182 }).filter(function(s) { |
| 181 | 183 return s.indexOf(key) != -1; |
| 182 // For now, just checking the message header tests. | 184 }); |
| 183 return testPathNames.filter(function(s) { | |
| 184 return s.indexOf("_msghdr_") != -1; | |
| 185 }); | |
| 186 } | 185 } |
| 187 | 186 |
| 188 function readTestMessage(filename) { | 187 function readTestMessage(filename) { |
| 189 var contents = file.readFileToString(filename + ".data"); | 188 var contents = file.readFileToString(filename + ".data"); |
| 190 expect(contents).not.toBeNull(); | 189 expect(contents).not.toBeNull(); |
| 191 return parser.parseTestMessage(contents); | 190 return parser.parseTestMessage(contents); |
| 192 } | 191 } |
| 193 | 192 |
| 194 function readTestExpected(filename) { | 193 function readTestExpected(filename) { |
| 195 var contents = file.readFileToString(filename + ".expected"); | 194 var contents = file.readFileToString(filename + ".expected"); |
| 196 expect(contents).not.toBeNull(); | 195 expect(contents).not.toBeNull(); |
| 197 return contents.trim(); | 196 return contents.trim(); |
| 198 } | 197 } |
| 199 | 198 |
| 200 function testValidateMessageHeader() { | 199 function testMessageValidation(key, filters) { |
| 201 var testFiles = getMessageTestFiles(); | 200 var testFiles = getMessageTestFiles(key); |
| 202 expect(testFiles.length).toBeGreaterThan(0); | 201 expect(testFiles.length).toBeGreaterThan(0); |
| 203 | 202 |
| 203 var noError = validator.validationError.NONE; |
| 204 for (var i = 0; i < testFiles.length; i++) { | 204 for (var i = 0; i < testFiles.length; i++) { |
| 205 // TODO(hansmuller): Temporarily skipping array pointer overflow tests. |
| 206 if (testFiles[i].indexOf("overflow") != -1) { |
| 207 console.log("[Skipping " + testFiles[i] + "]"); |
| 208 continue; |
| 209 } |
| 210 |
| 205 var testMessage = readTestMessage(testFiles[i]); | 211 var testMessage = readTestMessage(testFiles[i]); |
| 206 // TODO(hansmuller): add the message handles. | 212 var handles = new Array(testMessage.handleCount); |
| 207 var message = new codec.Message(testMessage.buffer); | 213 var message = new codec.Message(testMessage.buffer, handles); |
| 208 var actualResult = new validator.Validator(message).validateMessage(); | 214 var messageValidator = new validator.Validator(message); |
| 215 |
| 216 var err = messageValidator.validateMessageHeader(); |
| 217 for (var j = 0; err === noError && j < filters.length; ++j) |
| 218 err = filters[j](messageValidator); |
| 219 |
| 220 var actualResult = (err === noError) ? "PASS" : err; |
| 209 var expectedResult = readTestExpected(testFiles[i]); | 221 var expectedResult = readTestExpected(testFiles[i]); |
| 222 if (actualResult != expectedResult) |
| 223 console.log("[Test message validation failed: " + testFiles[i] + " ]"); |
| 210 expect(actualResult).toEqual(expectedResult); | 224 expect(actualResult).toEqual(expectedResult); |
| 211 } | 225 } |
| 212 } | 226 } |
| 213 | 227 |
| 214 testValidateMessageHeader(); | 228 function testConformanceMessageValidation() { |
| 229 testMessageValidation("conformance_", [ |
| 230 testInterface.validateConformanceTestInterfaceRequest, |
| 231 ]); |
| 232 } |
| 233 |
| 234 function testIntegrationMessageValidation() { |
| 235 testMessageValidation("integration_", [ |
| 236 testInterface.validateIntegrationTestInterface1Request, |
| 237 testInterface.validateIntegrationTestInterface2Response |
| 238 ]); |
| 239 } |
| 240 |
| 241 testConformanceMessageValidation(); |
| 242 testIntegrationMessageValidation(); |
| 215 expect(checkTestMessageParser()).toBeNull(); | 243 expect(checkTestMessageParser()).toBeNull(); |
| 216 this.result = "PASS"; | 244 this.result = "PASS"; |
| 217 }); | 245 }); |
| OLD | NEW |