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..c6813d71a13aaf64fc0f6a60270ce59c8959bf0e |
--- /dev/null |
+++ b/tools/json_schema_compiler/js_interface_generator_test.py |
@@ -0,0 +1,122 @@ |
+#!/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 Greek { |
+ ALPHA, |
+ BETA, |
+ GAMMA, |
+ DELTA |
+ }; |
+ |
+ dictionary Bar { |
+ long num; |
+ }; |
+ |
+ dictionary Baz { |
+ DOMString str; |
+ long num; |
+ boolean b; |
+ Greek letter; |
+ Greek? optionalLetter; |
+ long[] arr; |
+ Bar[]? optionalObjArr; |
+ Greek[] enumArr; |
+ any[] anythingGoes; |
+ Bar obj; |
+ long? maybe; |
+ (DOMString or Greek or long[]) choice; |
+ object plainObj; |
+ }; |
+ |
+ callback VoidCallback = void(); |
+ |
+ callback BazGreekCallback = void(Baz baz, Greek 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 bazGreek(optional BazGreekCallback 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 = JsInterfaceGenerator.GetHeader(sys.argv[0], 'fakeApi') + """ |
+ |
+/** @interface */ |
+function FakeApi() {} |
+ |
+FakeApi.prototype = { |
+ /** |
+ * Does something exciting! And what's more, this is a multiline function |
Devlin
2015/12/02 17:58:28
Will these closure docs conflict with the externs?
stevenjb
2015/12/02 18:07:40
Any @param/@return needs to match, that's pretty m
|
+ * comment! It goes onto multiple lines! |
+ * @param {!chrome.fakeApi.Baz} baz The baz to use. |
+ * @param {function():void} callback |
+ */ |
+ 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. |
+ */ |
+ bazGreek: assertNotReached, |
+ |
+ /** |
+ * Fired when we realize it's a trap! |
+ * @type {!ChromeEvent} |
+ */ |
+ onTrapDetected: new ChromeEvent(), |
+ |
+};""" |
+ |
+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() |