| # Copyright 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 sys |
| |
| import data |
| import test_support |
| |
| EXPECT_EQ = test_support.EXPECT_EQ |
| EXPECT_TRUE = test_support.EXPECT_TRUE |
| RunTest = test_support.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', |
| 'client': None, |
| 'methods': [{ |
| 'name': 'Foo', |
| 'parameters': [ |
| {'name': 'foo', 'kind': 'i32'}, |
| {'name': 'bar', 'kind': 'a:x:teststruct'}], |
| 'ordinal': 42}]}] |
| } |
| |
| |
| def TestRead(): |
| module = data.ModuleFromData(test_dict) |
| return test_support.TestTestModule(module) |
| |
| |
| def TestWrite(): |
| module = test_support.BuildTestModule() |
| d = data.ModuleToData(module) |
| return EXPECT_TRUE(DeepEquals(test_dict, d)) |
| |
| |
| def TestWriteRead(): |
| module1 = test_support.BuildTestModule() |
| |
| dict1 = data.ModuleToData(module1) |
| module2 = data.ModuleFromData(dict1) |
| return EXPECT_TRUE(test_support.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:])) |