OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Routines used to validate and normalize arguments. | 5 // Routines used to validate and normalize arguments. |
6 // TODO(benwells): unit test this file. | 6 // TODO(benwells): unit test this file. |
7 | 7 |
8 var JSONSchemaValidator = require('json_schema').JSONSchemaValidator; | 8 var JSONSchemaValidator = require('json_schema').JSONSchemaValidator; |
9 | 9 |
10 var schemaValidator = new JSONSchemaValidator(); | 10 var schemaValidator = new JSONSchemaValidator(); |
(...skipping 26 matching lines...) Expand all Loading... |
37 parameterSchemas[i].name + ") is required."); | 37 parameterSchemas[i].name + ") is required."); |
38 } | 38 } |
39 } | 39 } |
40 } | 40 } |
41 | 41 |
42 // Generate all possible signatures for a given API function. | 42 // Generate all possible signatures for a given API function. |
43 function getSignatures(parameterSchemas) { | 43 function getSignatures(parameterSchemas) { |
44 if (parameterSchemas.length === 0) | 44 if (parameterSchemas.length === 0) |
45 return [[]]; | 45 return [[]]; |
46 var signatures = []; | 46 var signatures = []; |
47 var remaining = getSignatures(parameterSchemas.slice(1)); | 47 var remaining = getSignatures($Array.slice(parameterSchemas, 1)); |
48 for (var i = 0; i < remaining.length; i++) | 48 for (var i = 0; i < remaining.length; i++) |
49 signatures.push([parameterSchemas[0]].concat(remaining[i])) | 49 $Array.push(signatures, $Array.concat([parameterSchemas[0]], remaining[i])) |
50 if (parameterSchemas[0].optional) | 50 if (parameterSchemas[0].optional) |
51 return signatures.concat(remaining); | 51 return $Array.concat(signatures, remaining); |
52 return signatures; | 52 return signatures; |
53 }; | 53 }; |
54 | 54 |
55 // Return true if arguments match a given signature's schema. | 55 // Return true if arguments match a given signature's schema. |
56 function argumentsMatchSignature(args, candidateSignature) { | 56 function argumentsMatchSignature(args, candidateSignature) { |
57 if (args.length != candidateSignature.length) | 57 if (args.length != candidateSignature.length) |
58 return false; | 58 return false; |
59 for (var i = 0; i < candidateSignature.length; i++) { | 59 for (var i = 0; i < candidateSignature.length; i++) { |
60 var argType = JSONSchemaValidator.getType(args[i]); | 60 var argType = JSONSchemaValidator.getType(args[i]); |
61 if (!schemaValidator.isValidSchemaType(argType, | 61 if (!schemaValidator.isValidSchemaType(argType, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 if (!resolvedSignature) | 112 if (!resolvedSignature) |
113 throw new Error("Invocation of form " + | 113 throw new Error("Invocation of form " + |
114 getArgumentSignatureString(funDef.name, args) + | 114 getArgumentSignatureString(funDef.name, args) + |
115 " doesn't match definition " + | 115 " doesn't match definition " + |
116 getParameterSignatureString(funDef.name, definedSignature)); | 116 getParameterSignatureString(funDef.name, definedSignature)); |
117 validate(args, resolvedSignature); | 117 validate(args, resolvedSignature); |
118 var normalizedArgs = []; | 118 var normalizedArgs = []; |
119 var ai = 0; | 119 var ai = 0; |
120 for (var si = 0; si < definedSignature.length; si++) { | 120 for (var si = 0; si < definedSignature.length; si++) { |
121 if (definedSignature[si] === resolvedSignature[ai]) | 121 if (definedSignature[si] === resolvedSignature[ai]) |
122 normalizedArgs.push(args[ai++]); | 122 $Array.push(normalizedArgs, args[ai++]); |
123 else | 123 else |
124 normalizedArgs.push(null); | 124 $Array.push(normalizedArgs, null); |
125 } | 125 } |
126 return normalizedArgs; | 126 return normalizedArgs; |
127 }; | 127 }; |
128 | 128 |
129 // Validates that a given schema for an API function is not ambiguous. | 129 // Validates that a given schema for an API function is not ambiguous. |
130 function isFunctionSignatureAmbiguous(functionDef) { | 130 function isFunctionSignatureAmbiguous(functionDef) { |
131 if (functionDef.allowAmbiguousOptionalArguments) | 131 if (functionDef.allowAmbiguousOptionalArguments) |
132 return false; | 132 return false; |
133 var signaturesAmbiguous = function(signature1, signature2) { | 133 var signaturesAmbiguous = function(signature1, signature2) { |
134 if (signature1.length != signature2.length) | 134 if (signature1.length != signature2.length) |
(...skipping 12 matching lines...) Expand all Loading... |
147 return true; | 147 return true; |
148 } | 148 } |
149 } | 149 } |
150 return false; | 150 return false; |
151 }; | 151 }; |
152 | 152 |
153 exports.isFunctionSignatureAmbiguous = isFunctionSignatureAmbiguous; | 153 exports.isFunctionSignatureAmbiguous = isFunctionSignatureAmbiguous; |
154 exports.normalizeArgumentsAndValidate = normalizeArgumentsAndValidate; | 154 exports.normalizeArgumentsAndValidate = normalizeArgumentsAndValidate; |
155 exports.schemaValidator = schemaValidator; | 155 exports.schemaValidator = schemaValidator; |
156 exports.validate = validate; | 156 exports.validate = validate; |
OLD | NEW |