| OLD | NEW |
| 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_interface_generator import JsInterfaceGenerator | 8 from js_interface_generator import JsInterfaceGenerator |
| 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 # The contents of a fake idl file. | 14 # The contents of a fake idl file. |
| 15 fake_idl = """ | 15 fake_idl = """ |
| 16 // Copyright 2014 The Chromium Authors. All rights reserved. | 16 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 17 // 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 |
| 18 // found in the LICENSE file. | 18 // found in the LICENSE file. |
| 19 | 19 |
| 20 // A totally fake API. | 20 // A totally fake API. |
| 21 namespace fakeApi { | 21 namespace fakeApi { |
| 22 enum Grk { | 22 enum Greek { |
| 23 ALPHA, | 23 ALPHA, |
| 24 BETA, | 24 BETA, |
| 25 GAMMA, | 25 GAMMA, |
| 26 DELTA | 26 DELTA |
| 27 }; | 27 }; |
| 28 | 28 |
| 29 dictionary Bar { | 29 dictionary Bar { |
| 30 long num; | 30 long num; |
| 31 }; | 31 }; |
| 32 | 32 |
| 33 dictionary Baz { | 33 dictionary Baz { |
| 34 DOMString str; | 34 DOMString str; |
| 35 long num; | 35 long num; |
| 36 boolean b; | 36 boolean b; |
| 37 Grk letter; | 37 Greek letter; |
| 38 Grk? optionalLetter; | 38 Greek? optionalLetter; |
| 39 long[] arr; | 39 long[] arr; |
| 40 Bar[]? optionalObjArr; | 40 Bar[]? optionalObjArr; |
| 41 Grk[] enumArr; | 41 Greek[] enumArr; |
| 42 any[] anythingGoes; | 42 any[] anythingGoes; |
| 43 Bar obj; | 43 Bar obj; |
| 44 long? maybe; | 44 long? maybe; |
| 45 (DOMString or Grk or long[]) choice; | 45 (DOMString or Greek or long[]) choice; |
| 46 object plainObj; | 46 object plainObj; |
| 47 }; | 47 }; |
| 48 | 48 |
| 49 callback VoidCallback = void(); | 49 callback VoidCallback = void(); |
| 50 | 50 |
| 51 callback BazGrkCallback = void(Baz baz, Grk greek); | 51 callback BazGreekCallback = void(Baz baz, Greek greek); |
| 52 | 52 |
| 53 interface Functions { | 53 interface Functions { |
| 54 // Does something exciting! And what's more, this is a multiline function | 54 // Does something exciting! And what's more, this is a multiline function |
| 55 // comment! It goes onto multiple lines! | 55 // comment! It goes onto multiple lines! |
| 56 // |baz| : The baz to use. | 56 // |baz| : The baz to use. |
| 57 static void doSomething(Baz baz, VoidCallback callback); | 57 static void doSomething(Baz baz, VoidCallback callback); |
| 58 | 58 |
| 59 // |callback| : The callback which will most assuredly in all cases be | 59 // |callback| : The callback which will most assuredly in all cases be |
| 60 // called; that is, of course, iff such a callback was provided and is | 60 // called; that is, of course, iff such a callback was provided and is |
| 61 // not at all null. | 61 // not at all null. |
| 62 static void bazGrk(optional BazGrkCallback callback); | 62 static void bazGreek(optional BazGreekCallback callback); |
| 63 | 63 |
| 64 [deprecated="Use a new method."] static DOMString returnString(); | 64 [deprecated="Use a new method."] static DOMString returnString(); |
| 65 }; | 65 }; |
| 66 | 66 |
| 67 interface Events { | 67 interface Events { |
| 68 // Fired when we realize it's a trap! | 68 // Fired when we realize it's a trap! |
| 69 static void onTrapDetected(Baz baz); | 69 static void onTrapDetected(Baz baz); |
| 70 }; | 70 }; |
| 71 }; | 71 }; |
| 72 """ | 72 """ |
| (...skipping 17 matching lines...) Expand all Loading... |
| 90 /** | 90 /** |
| 91 * Does something exciting! And what's more, this is a multiline function | 91 * Does something exciting! And what's more, this is a multiline function |
| 92 * comment! It goes onto multiple lines! | 92 * comment! It goes onto multiple lines! |
| 93 * @param {!chrome.fakeApi.Baz} baz The baz to use. | 93 * @param {!chrome.fakeApi.Baz} baz The baz to use. |
| 94 * @param {function():void} callback | 94 * @param {function():void} callback |
| 95 * @see https://developer.chrome.com/extensions/fakeApi#method-doSomething | 95 * @see https://developer.chrome.com/extensions/fakeApi#method-doSomething |
| 96 */ | 96 */ |
| 97 doSomething: assertNotReached, | 97 doSomething: assertNotReached, |
| 98 | 98 |
| 99 /** | 99 /** |
| 100 * @param {function(!chrome.fakeApi.Baz, !chrome.fakeApi.Grk):void=} callback | 100 * @param {function(!chrome.fakeApi.Baz, !chrome.fakeApi.Greek):void=} |
| 101 * The callback which will most assuredly in all cases be called; that is, | 101 * callback The callback which will most assuredly in all cases be called; |
| 102 * of course, iff such a callback was provided and is not at all null. | 102 * that is, of course, iff such a callback was provided and is not at all |
| 103 * @see https://developer.chrome.com/extensions/fakeApi#method-bazGrk | 103 * null. |
| 104 * @see https://developer.chrome.com/extensions/fakeApi#method-bazGreek |
| 104 */ | 105 */ |
| 105 bazGrk: assertNotReached, | 106 bazGreek: assertNotReached, |
| 106 | 107 |
| 107 /** | 108 /** |
| 108 * Fired when we realize it's a trap! | 109 * Fired when we realize it's a trap! |
| 109 * @type {!ChromeEvent} | 110 * @type {!ChromeEvent} |
| 110 * @see https://developer.chrome.com/extensions/fakeApi#event-onTrapDetected | 111 * @see https://developer.chrome.com/extensions/fakeApi#event-onTrapDetected |
| 111 */ | 112 */ |
| 112 onTrapDetected: new ChromeEvent(), | 113 onTrapDetected: new ChromeEvent(), |
| 113 };""" % (datetime.now().year, sys.argv[0])) | 114 };""" % (datetime.now().year, sys.argv[0])) |
| 114 | 115 |
| 115 class JsExternGeneratorTest(unittest.TestCase): | 116 class JsExternGeneratorTest(unittest.TestCase): |
| 116 def _GetNamespace(self, fake_content, filename): | 117 def _GetNamespace(self, fake_content, filename): |
| 117 """Returns a namespace object for the given content""" | 118 """Returns a namespace object for the given content""" |
| 118 api_def = idl_schema.Process(fake_content, filename) | 119 api_def = idl_schema.Process(fake_content, filename) |
| 119 m = model.Model() | 120 m = model.Model() |
| 120 return m.AddNamespace(api_def[0], filename) | 121 return m.AddNamespace(api_def[0], filename) |
| 121 | 122 |
| 122 def setUp(self): | 123 def setUp(self): |
| 123 self.maxDiff = None # Lets us see the full diff when inequal. | 124 self.maxDiff = None # Lets us see the full diff when inequal. |
| 124 | 125 |
| 125 def testBasic(self): | 126 def testBasic(self): |
| 126 namespace = self._GetNamespace(fake_idl, 'fake_api.idl') | 127 namespace = self._GetNamespace(fake_idl, 'fake_api.idl') |
| 127 self.assertMultiLineEqual( | 128 self.assertMultiLineEqual( |
| 128 expected_output, | 129 expected_output, |
| 129 JsInterfaceGenerator().Generate(namespace).Render()) | 130 JsInterfaceGenerator().Generate(namespace).Render()) |
| 130 | 131 |
| 131 | 132 |
| 132 if __name__ == '__main__': | 133 if __name__ == '__main__': |
| 133 unittest.main() | 134 unittest.main() |
| OLD | NEW |