| Index: tools/json_schema_compiler/js_interface_generator_test.py
|
| diff --git a/tools/json_schema_compiler/js_externs_generator_test.py b/tools/json_schema_compiler/js_interface_generator_test.py
|
| similarity index 25%
|
| copy from tools/json_schema_compiler/js_externs_generator_test.py
|
| copy to tools/json_schema_compiler/js_interface_generator_test.py
|
| index cdf49301c7b7372a99a401d2212f6e22d3e39356..5c19a252cd361b8d3e6801bba793637bcc79de2a 100755
|
| --- a/tools/json_schema_compiler/js_externs_generator_test.py
|
| +++ b/tools/json_schema_compiler/js_interface_generator_test.py
|
| @@ -5,25 +5,12 @@
|
|
|
| import idl_schema
|
| import json_parse
|
| -from js_externs_generator import JsExternsGenerator
|
| +from js_interface_generator import JsInterfaceGenerator
|
| from datetime import datetime
|
| import model
|
| import sys
|
| import unittest
|
|
|
| -COPYRIGHT = ("""// Copyright %s The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -""" % datetime.now().year)
|
| -
|
| -INFO = """// This file was generated by:
|
| -// %s.
|
| -// NOTE: The format of types has changed. 'FooType' is now
|
| -// 'chrome.%s.FooType'.
|
| -// Please run the closure compiler before committing changes.
|
| -// See https://code.google.com/p/chromium/wiki/ClosureCompilation.
|
| -"""
|
| -
|
| # The contents of a fake idl file.
|
| fake_idl = """
|
| // Copyright 2014 The Chromium Authors. All rights reserved.
|
| @@ -85,202 +72,41 @@ namespace fakeApi {
|
| """
|
|
|
| # The output we expect from our fake idl file.
|
| -expected_output = COPYRIGHT + "\n" + (INFO % (sys.argv[0], "fakeApi")) + """
|
| -/** @fileoverview Externs generated from namespace: fakeApi */
|
| -
|
| -/**
|
| - * @const
|
| - */
|
| -chrome.fakeApi = {};
|
| -
|
| -/**
|
| - * @enum {string}
|
| - * @see https://developer.chrome.com/extensions/fakeApi#type-Greek
|
| - */
|
| -chrome.fakeApi.Greek = {
|
| - ALPHA: 'ALPHA',
|
| - BETA: 'BETA',
|
| - GAMMA: 'GAMMA',
|
| - DELTA: 'DELTA',
|
| -};
|
| -
|
| -/**
|
| - * @typedef {{
|
| - * num: number
|
| - * }}
|
| - * @see https://developer.chrome.com/extensions/fakeApi#type-Bar
|
| - */
|
| -chrome.fakeApi.Bar;
|
| -
|
| -/**
|
| - * @typedef {{
|
| - * str: string,
|
| - * num: number,
|
| - * b: boolean,
|
| - * letter: !chrome.fakeApi.Greek,
|
| - * optionalLetter: (!chrome.fakeApi.Greek|undefined),
|
| - * arr: !Array<number>,
|
| - * optionalObjArr: (!Array<!chrome.fakeApi.Bar>|undefined),
|
| - * enumArr: !Array<!chrome.fakeApi.Greek>,
|
| - * anythingGoes: !Array<*>,
|
| - * obj: !chrome.fakeApi.Bar,
|
| - * maybe: (number|undefined),
|
| - * choice: (string|!chrome.fakeApi.Greek|!Array<number>),
|
| - * plainObj: Object
|
| - * }}
|
| - * @see https://developer.chrome.com/extensions/fakeApi#type-Baz
|
| - */
|
| -chrome.fakeApi.Baz;
|
| -
|
| -/**
|
| - * Does something exciting! And what's more, this is a multiline function
|
| - * comment! It goes onto multiple lines!
|
| - * @param {!chrome.fakeApi.Baz} baz The baz to use.
|
| - * @param {function():void} callback
|
| - * @see https://developer.chrome.com/extensions/fakeApi#method-doSomething
|
| - */
|
| -chrome.fakeApi.doSomething = function(baz, callback) {};
|
| -
|
| -/**
|
| - * @param {function(!chrome.fakeApi.Baz, !chrome.fakeApi.Greek):void=} callback
|
| - * The callback which will most assuredly in all cases be called; that is,
|
| - * of course, iff such a callback was provided and is not at all null.
|
| - * @see https://developer.chrome.com/extensions/fakeApi#method-bazGreek
|
| - */
|
| -chrome.fakeApi.bazGreek = function(callback) {};
|
| -
|
| -/**
|
| - * @return {string}
|
| - * @deprecated Use a new method.
|
| - * @see https://developer.chrome.com/extensions/fakeApi#method-returnString
|
| - */
|
| -chrome.fakeApi.returnString = function() {};
|
| -
|
| -/**
|
| - * Fired when we realize it's a trap!
|
| - * @type {!ChromeEvent}
|
| - * @see https://developer.chrome.com/extensions/fakeApi#event-onTrapDetected
|
| - */
|
| -chrome.fakeApi.onTrapDetected;
|
| -"""
|
| -
|
| -
|
| -fake_json = """// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -[
|
| - {
|
| - "namespace": "fakeJson",
|
| - "description": "Fake JSON API Stuff",
|
| - "types": [ {
|
| - "id": "CrazyEnum",
|
| - "type": "string",
|
| - "enum": ["camelCaseEnum", "Non-Characters", "5NumFirst", \
|
| -"3Just-plainOld_MEAN"]
|
| - } ],
|
| - "functions": [ {
|
| - "name": "funcWithInlineObj",
|
| - "type": "function",
|
| - "parameters": [
|
| - {
|
| - "type": "object",
|
| - "name": "inlineObj",
|
| - "description": "Evil inline object! With a super duper duper long\
|
| - string description that causes problems!",
|
| - "properties": {
|
| - "foo": {
|
| - "type": "boolean",
|
| - "optional": "true",
|
| - "description": "The foo."
|
| - },
|
| - "bar": {
|
| - "type": "integer",
|
| - "description": "The bar."
|
| - },
|
| - "baz": {
|
| - "type": "object",
|
| - "description": "Inception object.",
|
| - "properties": {
|
| - "depth": {
|
| - "type": "integer"
|
| - }
|
| - }
|
| - }
|
| - }
|
| - },
|
| - {
|
| - "name": "callback",
|
| - "type": "function",
|
| - "parameters": [
|
| - {
|
| - "type": "object",
|
| - "name": "returnObj",
|
| - "properties": {
|
| - "str": { "type": "string"}
|
| - }
|
| - }
|
| - ],
|
| - "description": "The callback to this heinous method"
|
| - }
|
| - ],
|
| - "returns": {
|
| - "type": "object",
|
| - "properties": {
|
| - "str": { "type": "string" },
|
| - "int": { "type": "number" }
|
| - }
|
| - }
|
| - } ]
|
| - }
|
| -]"""
|
| -
|
| -json_expected = COPYRIGHT + "\n" + (INFO % (sys.argv[0], "fakeJson")) + """
|
| -/** @fileoverview Externs generated from namespace: fakeJson */
|
| -
|
| -/**
|
| - * @const
|
| - */
|
| -chrome.fakeJson = {};
|
| -
|
| -/**
|
| - * @enum {string}
|
| - * @see https://developer.chrome.com/extensions/fakeJson#type-CrazyEnum
|
| - */
|
| -chrome.fakeJson.CrazyEnum = {
|
| - CAMEL_CASE_ENUM: 'camelCaseEnum',
|
| - NON_CHARACTERS: 'Non-Characters',
|
| - _5NUM_FIRST: '5NumFirst',
|
| - _3JUST_PLAIN_OLD_MEAN: '3Just-plainOld_MEAN',
|
| -};
|
| -
|
| -/**
|
| - * @param {{
|
| - * foo: (boolean|undefined),
|
| - * bar: number,
|
| - * baz: {
|
| - * depth: number
|
| - * }
|
| - * }} inlineObj Evil inline object! With a super duper duper long string
|
| - * description that causes problems!
|
| - * @param {function({
|
| - * str: string
|
| - * }):void} callback The callback to this heinous method
|
| - * @return {{
|
| - * str: string,
|
| - * int: number
|
| - * }}
|
| - * @see https://developer.chrome.com/extensions/fakeJson#method-funcWithInlineObj
|
| - */
|
| -chrome.fakeJson.funcWithInlineObj = function(inlineObj, callback) {};
|
| -"""
|
| -
|
| +expected_output = JsInterfaceGenerator.GetHeader(sys.argv[0], 'fakeApi') + """
|
| +
|
| +/** @interface */
|
| +function FakeApi() {}
|
| +
|
| +FakeApi.prototype = {
|
| + /**
|
| + * Does something exciting! And what's more, this is a multiline function
|
| + * comment! It goes onto multiple lines!
|
| + * @param {!chrome.fakeApi.Baz} baz The baz to use.
|
| + * @param {function():void} callback
|
| + * @see https://developer.chrome.com/extensions/fakeApi#method-doSomething
|
| + */
|
| + doSomething: assertNotReached,
|
| +
|
| + /**
|
| + * @param {function(!chrome.fakeApi.Baz, !chrome.fakeApi.Greek):void=} callback
|
| + * The callback which will most assuredly in all cases be called; that is,
|
| + * of course, iff such a callback was provided and is not at all null.
|
| + * @see https://developer.chrome.com/extensions/fakeApi#method-bazGreek
|
| + */
|
| + bazGreek: assertNotReached,
|
| +
|
| + /**
|
| + * Fired when we realize it's a trap!
|
| + * @type {!ChromeEvent}
|
| + * @see https://developer.chrome.com/extensions/fakeApi#event-onTrapDetected
|
| + */
|
| + onTrapDetected: new ChromeEvent(),
|
| +};"""
|
|
|
| class JsExternGeneratorTest(unittest.TestCase):
|
| - def _GetNamespace(self, fake_content, filename, is_idl):
|
| + def _GetNamespace(self, fake_content, filename):
|
| """Returns a namespace object for the given content"""
|
| - api_def = (idl_schema.Process(fake_content, filename) if is_idl
|
| - else json_parse.Parse(fake_content))
|
| + api_def = idl_schema.Process(fake_content, filename)
|
| m = model.Model()
|
| return m.AddNamespace(api_def[0], filename)
|
|
|
| @@ -288,14 +114,10 @@ class JsExternGeneratorTest(unittest.TestCase):
|
| self.maxDiff = None # Lets us see the full diff when inequal.
|
|
|
| def testBasic(self):
|
| - namespace = self._GetNamespace(fake_idl, 'fake_api.idl', True)
|
| - self.assertMultiLineEqual(expected_output,
|
| - JsExternsGenerator().Generate(namespace).Render())
|
| -
|
| - def testJsonWithInlineObjects(self):
|
| - namespace = self._GetNamespace(fake_json, 'fake_api.json', False)
|
| - self.assertMultiLineEqual(json_expected,
|
| - JsExternsGenerator().Generate(namespace).Render())
|
| + namespace = self._GetNamespace(fake_idl, 'fake_api.idl')
|
| + self.assertMultiLineEqual(
|
| + expected_output,
|
| + JsInterfaceGenerator().Generate(namespace).Render())
|
|
|
|
|
| if __name__ == '__main__':
|
|
|