summaryrefslogtreecommitdiffstats
path: root/mojo
diff options
context:
space:
mode:
authorviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-24 23:13:28 +0000
committerviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-24 23:13:28 +0000
commit904a92edc118db56cad5b9150786785ba8fdd4ee (patch)
tree710657fcf9f74d4156670430c939f2dd1c67e4ce /mojo
parenta9c401929ac71561f03e1ebdfe8e570f25211f71 (diff)
downloadchromium_src-904a92edc118db56cad5b9150786785ba8fdd4ee.zip
chromium_src-904a92edc118db56cad5b9150786785ba8fdd4ee.tar.gz
chromium_src-904a92edc118db56cad5b9150786785ba8fdd4ee.tar.bz2
Make mojom_data_tests.py exist and work again.
This undoes r230890 (which was an incorrect "completion" of another revert), and updates mojom_data.py and mojom_data_tests.py to work properly again. (This does NOT add tests for the newer things.) R=davemoore@chromium.org Review URL: https://codereview.chromium.org/137203015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@247001 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo')
-rw-r--r--mojo/public/bindings/generators/mojom_data.py23
-rw-r--r--mojo/public/bindings/generators/mojom_data_tests.py85
2 files changed, 98 insertions, 10 deletions
diff --git a/mojo/public/bindings/generators/mojom_data.py b/mojo/public/bindings/generators/mojom_data.py
index f243007..9723f58 100644
--- a/mojo/public/bindings/generators/mojom_data.py
+++ b/mojo/public/bindings/generators/mojom_data.py
@@ -66,7 +66,8 @@ def StructFromData(kinds, data):
struct.spec = 'x:' + struct.name
kinds[struct.spec] = struct
struct.fields = map(lambda field: FieldFromData(kinds, field), data['fields'])
- struct.enums = map(lambda enum: EnumFromData(kinds, enum), data['enums'])
+ if data.has_key('enums'):
+ struct.enums = map(lambda enum: EnumFromData(kinds, enum), data['enums'])
return struct
def FieldToData(field):
@@ -122,7 +123,7 @@ def MethodFromData(kinds, data):
method.ordinal = data.get('ordinal')
method.default = data.get('default')
method.parameters = map(
- lambda parameter: ParameterFromData(kinds, parameter), data['parameters'])
+ lambda parameter: ParameterFromData(kinds, parameter), data['parameters'])
return method
def InterfaceToData(interface):
@@ -135,10 +136,11 @@ def InterfaceToData(interface):
def InterfaceFromData(kinds, data):
interface = mojom.Interface()
interface.name = data['name']
- interface.peer = data['peer']
+ interface.peer = data['peer'] if data.has_key('peer') else None
interface.methods = map(
- lambda method: MethodFromData(kinds, method), data['methods'])
- interface.enums = map(lambda enum: EnumFromData(kinds, enum), data['enums'])
+ lambda method: MethodFromData(kinds, method), data['methods'])
+ if data.has_key('enums'):
+ interface.enums = map(lambda enum: EnumFromData(kinds, enum), data['enums'])
return interface
def EnumFieldFromData(kinds, data):
@@ -151,7 +153,7 @@ def EnumFromData(kinds, data):
enum = mojom.Enum()
enum.name = data['name']
enum.fields = map(
- lambda field: EnumFieldFromData(kinds, field), data['fields'])
+ lambda field: EnumFieldFromData(kinds, field), data['fields'])
return enum
def ModuleToData(module):
@@ -171,11 +173,12 @@ def ModuleFromData(data):
module.name = data['name']
module.namespace = data['namespace']
module.structs = map(
- lambda struct: StructFromData(kinds, struct), data['structs'])
+ lambda struct: StructFromData(kinds, struct), data['structs'])
module.interfaces = map(
- lambda interface: InterfaceFromData(kinds, interface), data['interfaces'])
- module.enums = map(
- lambda enum: EnumFromData(kinds, enum), data['enums'])
+ lambda interface: InterfaceFromData(kinds, interface), data['interfaces'])
+ if data.has_key('enums'):
+ module.enums = map(
+ lambda enum: EnumFromData(kinds, enum), data['enums'])
return module
def OrderedModuleFromData(data):
diff --git a/mojo/public/bindings/generators/mojom_data_tests.py b/mojo/public/bindings/generators/mojom_data_tests.py
index e69de29..9495202 100644
--- a/mojo/public/bindings/generators/mojom_data_tests.py
+++ b/mojo/public/bindings/generators/mojom_data_tests.py
@@ -0,0 +1,85 @@
+# Copyright (c) 2013 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 mojom_data
+import mojom_test
+import sys
+
+EXPECT_EQ = mojom_test.EXPECT_EQ
+EXPECT_TRUE = mojom_test.EXPECT_TRUE
+RunTest = mojom_test.RunTest
+
+
+def DeepEquals(d1, d2):
+ if d1 == d2:
+ return True
+ if d2.__class__ != d2.__class__:
+ return False
+ if isinstance(d1, dict):
+ if set(d1.keys()) != set(d2.keys()):
+ return False
+ for key in d1.keys():
+ if not DeepEquals(d1[key], d2[key]):
+ return False
+ return True
+ if isinstance(d1, (list, tuple)):
+ if len(d1) != len(d2):
+ return False
+ for i in range(len(d1)):
+ if not DeepEquals(d1[i], d2[i]):
+ return False
+ return True
+ return False
+
+
+test_dict = {
+ 'name': 'test',
+ 'namespace': 'testspace',
+ 'structs': [{
+ 'name': 'teststruct',
+ 'fields': [
+ {'name': 'testfield1', 'kind': 'i32'},
+ {'name': 'testfield2', 'kind': 'a:i32', 'ordinal': 42}]}],
+ 'interfaces': [{
+ 'name': 'Server',
+ 'peer': None,
+ 'methods': [{
+ 'name': 'Foo',
+ 'parameters': [
+ {'name': 'foo', 'kind': 'i32'},
+ {'name': 'bar', 'kind': 'a:x:teststruct'}],
+ 'ordinal': 42}]}]
+}
+
+
+def TestRead():
+ module = mojom_data.ModuleFromData(test_dict)
+ return mojom_test.TestTestModule(module)
+
+
+def TestWrite():
+ module = mojom_test.BuildTestModule()
+ d = mojom_data.ModuleToData(module)
+ return EXPECT_TRUE(DeepEquals(test_dict, d))
+
+
+def TestWriteRead():
+ module1 = mojom_test.BuildTestModule()
+
+ dict1 = mojom_data.ModuleToData(module1)
+ module2 = mojom_data.ModuleFromData(dict1)
+ return EXPECT_TRUE(mojom_test.ModulesAreEqual(module1, module2))
+
+
+def Main(args):
+ errors = 0
+ errors += RunTest(TestWriteRead)
+ errors += RunTest(TestRead)
+ errors += RunTest(TestWrite)
+
+ return errors
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))