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

Side by Side Diff: mojo/public/js/bindings/validation_unittests.js

Issue 468713002: JavaScript bindings for Mojo message validation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Binding generator simplification for Arrays Created 6 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 | Annotate | Revision Log
OLDNEW
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
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 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698