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

Unified Diff: tools/json_schema_compiler/js_interface_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: Rebase + shorten line 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 side-by-side diff with in-line comments
Download patch
Index: tools/json_schema_compiler/js_interface_generator_test.py
diff --git a/tools/json_schema_compiler/js_interface_generator_test.py b/tools/json_schema_compiler/js_interface_generator_test.py
new file mode 100755
index 0000000000000000000000000000000000000000..2a5e492d906ce6b62f98e593b28e760d658f16b5
--- /dev/null
+++ b/tools/json_schema_compiler/js_interface_generator_test.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+# Copyright 2015 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.
+
+import idl_schema
+import json_parse
+from js_interface_generator import JsInterfaceGenerator
+from datetime import datetime
+import model
+import sys
+import unittest
+
+# The contents of a fake idl file.
+fake_idl = """
+// 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.
+
+// A totally fake API.
+namespace fakeApi {
+ enum Grk {
+ ALPHA,
+ BETA,
+ GAMMA,
+ DELTA
+ };
+
+ dictionary Bar {
+ long num;
+ };
+
+ dictionary Baz {
+ DOMString str;
+ long num;
+ boolean b;
+ Grk letter;
+ Grk? optionalLetter;
+ long[] arr;
+ Bar[]? optionalObjArr;
+ Grk[] enumArr;
+ any[] anythingGoes;
+ Bar obj;
+ long? maybe;
+ (DOMString or Grk or long[]) choice;
+ object plainObj;
+ };
+
+ callback VoidCallback = void();
+
+ callback BazGrkCallback = void(Baz baz, Grk greek);
+
+ interface Functions {
+ // Does something exciting! And what's more, this is a multiline function
+ // comment! It goes onto multiple lines!
+ // |baz| : The baz to use.
+ static void doSomething(Baz baz, VoidCallback callback);
+
+ // |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.
+ static void bazGrk(optional BazGrkCallback callback);
+
+ [deprecated="Use a new method."] static DOMString returnString();
+ };
+
+ interface Events {
+ // Fired when we realize it's a trap!
+ static void onTrapDetected(Baz baz);
+ };
+};
+"""
+
+# The output we expect from our fake idl file.
+expected_output = ("""// 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.
+
+// This file was generated by:
+// %s.
+
+/** @fileoverview Interface for fakeApi that can be overriden. */
+
+assertNotReached('Interface file for Closure Compiler should not be executed.');
+
+/** @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.Grk):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-bazGrk
+ */
+ bazGrk: assertNotReached,
+
+ /**
+ * Fired when we realize it's a trap!
+ * @type {!ChromeEvent}
+ * @see https://developer.chrome.com/extensions/fakeApi#event-onTrapDetected
+ */
+ onTrapDetected: new ChromeEvent(),
+};""" % (datetime.now().year, sys.argv[0]))
+
+class JsExternGeneratorTest(unittest.TestCase):
+ def _GetNamespace(self, fake_content, filename):
+ """Returns a namespace object for the given content"""
+ api_def = idl_schema.Process(fake_content, filename)
+ m = model.Model()
+ return m.AddNamespace(api_def[0], filename)
+
+ def setUp(self):
+ self.maxDiff = None # Lets us see the full diff when inequal.
+
+ def testBasic(self):
+ namespace = self._GetNamespace(fake_idl, 'fake_api.idl')
+ self.assertMultiLineEqual(
+ expected_output,
+ JsInterfaceGenerator().Generate(namespace).Render())
+
+
+if __name__ == '__main__':
+ unittest.main()

Powered by Google App Engine
This is Rietveld 408576698