diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-24 23:13:28 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-24 23:13:28 +0000 |
commit | 904a92edc118db56cad5b9150786785ba8fdd4ee (patch) | |
tree | 710657fcf9f74d4156670430c939f2dd1c67e4ce /mojo | |
parent | a9c401929ac71561f03e1ebdfe8e570f25211f71 (diff) | |
download | chromium_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.py | 23 | ||||
-rw-r--r-- | mojo/public/bindings/generators/mojom_data_tests.py | 85 |
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:])) |