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

Side by Side Diff: tools/json_schema_compiler/js_externs_generator_test.py

Issue 1488773003: Add js_interface_generator for generating extensions interfaces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Feedback Created 5 years 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import idl_schema 6 import idl_schema
7 import json_parse 7 import json_parse
8 from js_externs_generator import JsExternsGenerator 8 from js_externs_generator import JsExternsGenerator
9 from datetime import datetime 9 from datetime import datetime
10 import model 10 import model
11 import sys 11 import sys
12 import unittest 12 import unittest
13 13
14 COPYRIGHT = ("""// Copyright %s The Chromium Authors. All rights reserved.
15 // Use of this source code is governed by a BSD-style license that can be
16 // found in the LICENSE file.
17 """ % datetime.now().year)
18
19 INFO = """// This file was generated by:
20 // %s.
21 // NOTE: The format of types has changed. 'FooType' is now
22 // 'chrome.%s.FooType'.
23 // Please run the closure compiler before committing changes.
24 // See https://code.google.com/p/chromium/wiki/ClosureCompilation.
25 """
26
27 # The contents of a fake idl file. 14 # The contents of a fake idl file.
28 fake_idl = """ 15 fake_idl = """
29 // Copyright 2014 The Chromium Authors. All rights reserved. 16 // Copyright 2014 The Chromium Authors. All rights reserved.
30 // Use of this source code is governed by a BSD-style license that can be 17 // Use of this source code is governed by a BSD-style license that can be
31 // found in the LICENSE file. 18 // found in the LICENSE file.
32 19
33 // A totally fake API. 20 // A totally fake API.
34 namespace fakeApi { 21 namespace fakeApi {
35 enum Greek { 22 enum Greek {
36 ALPHA, 23 ALPHA,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 }; 65 };
79 66
80 interface Events { 67 interface Events {
81 // Fired when we realize it's a trap! 68 // Fired when we realize it's a trap!
82 static void onTrapDetected(Baz baz); 69 static void onTrapDetected(Baz baz);
83 }; 70 };
84 }; 71 };
85 """ 72 """
86 73
87 # The output we expect from our fake idl file. 74 # The output we expect from our fake idl file.
88 expected_output = COPYRIGHT + "\n" + (INFO % (sys.argv[0], "fakeApi")) + """ 75 expected_output = JsExternsGenerator.GetHeader(sys.argv[0], 'fakeApi') + """
Devlin 2015/12/07 18:55:27 I slightly prefer having this hard-coded, even if
stevenjb 2015/12/07 19:49:32 Sigh. The previous way isn't any better IMHO becau
89 /** @fileoverview Externs generated from namespace: fakeApi */
90 76
91 /** 77 /**
92 * @const 78 * @const
93 */ 79 */
94 chrome.fakeApi = {}; 80 chrome.fakeApi = {};
95 81
96 /** 82 /**
97 * @enum {string} 83 * @enum {string}
98 * @see https://developer.chrome.com/extensions/fakeApi#type-Greek 84 * @see https://developer.chrome.com/extensions/fakeApi#type-Greek
99 */ 85 */
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 * @deprecated Use a new method. 140 * @deprecated Use a new method.
155 * @see https://developer.chrome.com/extensions/fakeApi#method-returnString 141 * @see https://developer.chrome.com/extensions/fakeApi#method-returnString
156 */ 142 */
157 chrome.fakeApi.returnString = function() {}; 143 chrome.fakeApi.returnString = function() {};
158 144
159 /** 145 /**
160 * Fired when we realize it's a trap! 146 * Fired when we realize it's a trap!
161 * @type {!ChromeEvent} 147 * @type {!ChromeEvent}
162 * @see https://developer.chrome.com/extensions/fakeApi#event-onTrapDetected 148 * @see https://developer.chrome.com/extensions/fakeApi#event-onTrapDetected
163 */ 149 */
164 chrome.fakeApi.onTrapDetected; 150 chrome.fakeApi.onTrapDetected;"""
165 """
166 151
167 152
168 fake_json = """// Copyright 2014 The Chromium Authors. All rights reserved. 153 fake_json = """// Copyright 2014 The Chromium Authors. All rights reserved.
169 // Use of this source code is governed by a BSD-style license that can be 154 // Use of this source code is governed by a BSD-style license that can be
170 // found in the LICENSE file. 155 // found in the LICENSE file.
171 156
172 [ 157 [
173 { 158 {
174 "namespace": "fakeJson", 159 "namespace": "fakeJson",
175 "description": "Fake JSON API Stuff", 160 "description": "Fake JSON API Stuff",
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 "type": "object", 213 "type": "object",
229 "properties": { 214 "properties": {
230 "str": { "type": "string" }, 215 "str": { "type": "string" },
231 "int": { "type": "number" } 216 "int": { "type": "number" }
232 } 217 }
233 } 218 }
234 } ] 219 } ]
235 } 220 }
236 ]""" 221 ]"""
237 222
238 json_expected = COPYRIGHT + "\n" + (INFO % (sys.argv[0], "fakeJson")) + """ 223 json_expected = JsExternsGenerator.GetHeader(sys.argv[0], 'fakeJson') + """
239 /** @fileoverview Externs generated from namespace: fakeJson */
240 224
241 /** 225 /**
242 * @const 226 * @const
243 */ 227 */
244 chrome.fakeJson = {}; 228 chrome.fakeJson = {};
245 229
246 /** 230 /**
247 * @enum {string} 231 * @enum {string}
248 * @see https://developer.chrome.com/extensions/fakeJson#type-CrazyEnum 232 * @see https://developer.chrome.com/extensions/fakeJson#type-CrazyEnum
249 */ 233 */
(...skipping 15 matching lines...) Expand all
265 * description that causes problems! 249 * description that causes problems!
266 * @param {function({ 250 * @param {function({
267 * str: string 251 * str: string
268 * }):void} callback The callback to this heinous method 252 * }):void} callback The callback to this heinous method
269 * @return {{ 253 * @return {{
270 * str: string, 254 * str: string,
271 * int: number 255 * int: number
272 * }} 256 * }}
273 * @see https://developer.chrome.com/extensions/fakeJson#method-funcWithInlineOb j 257 * @see https://developer.chrome.com/extensions/fakeJson#method-funcWithInlineOb j
274 */ 258 */
275 chrome.fakeJson.funcWithInlineObj = function(inlineObj, callback) {}; 259 chrome.fakeJson.funcWithInlineObj = function(inlineObj, callback) {};"""
276 """
277 260
278 261
279 class JsExternGeneratorTest(unittest.TestCase): 262 class JsExternGeneratorTest(unittest.TestCase):
280 def _GetNamespace(self, fake_content, filename, is_idl): 263 def _GetNamespace(self, fake_content, filename, is_idl):
281 """Returns a namespace object for the given content""" 264 """Returns a namespace object for the given content"""
282 api_def = (idl_schema.Process(fake_content, filename) if is_idl 265 api_def = (idl_schema.Process(fake_content, filename) if is_idl
283 else json_parse.Parse(fake_content)) 266 else json_parse.Parse(fake_content))
284 m = model.Model() 267 m = model.Model()
285 return m.AddNamespace(api_def[0], filename) 268 return m.AddNamespace(api_def[0], filename)
286 269
287 def setUp(self): 270 def setUp(self):
288 self.maxDiff = None # Lets us see the full diff when inequal. 271 self.maxDiff = None # Lets us see the full diff when inequal.
289 272
290 def testBasic(self): 273 def testBasic(self):
291 namespace = self._GetNamespace(fake_idl, 'fake_api.idl', True) 274 namespace = self._GetNamespace(fake_idl, 'fake_api.idl', True)
292 self.assertMultiLineEqual(expected_output, 275 self.assertMultiLineEqual(expected_output,
293 JsExternsGenerator().Generate(namespace).Render()) 276 JsExternsGenerator().Generate(namespace).Render())
294 277
295 def testJsonWithInlineObjects(self): 278 def testJsonWithInlineObjects(self):
296 namespace = self._GetNamespace(fake_json, 'fake_api.json', False) 279 namespace = self._GetNamespace(fake_json, 'fake_api.json', False)
297 self.assertMultiLineEqual(json_expected, 280 self.assertMultiLineEqual(json_expected,
298 JsExternsGenerator().Generate(namespace).Render()) 281 JsExternsGenerator().Generate(namespace).Render())
299 282
300 283
301 if __name__ == '__main__': 284 if __name__ == '__main__':
302 unittest.main() 285 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698