15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import sys 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport data 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochimport test_support 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 100529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochEXPECT_EQ = test_support.EXPECT_EQ 110529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochEXPECT_TRUE = test_support.EXPECT_TRUE 120529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochRunTest = test_support.RunTest 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def DeepEquals(d1, d2): 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if d1 == d2: 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return True 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if d2.__class__ != d2.__class__: 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return False 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if isinstance(d1, dict): 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if set(d1.keys()) != set(d2.keys()): 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return False 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for key in d1.keys(): 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if not DeepEquals(d1[key], d2[key]): 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return False 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return True 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if isinstance(d1, (list, tuple)): 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if len(d1) != len(d2): 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return False 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for i in range(len(d1)): 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if not DeepEquals(d1[i], d2[i]): 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return False 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return True 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return False 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)test_dict = { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'name': 'test', 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'namespace': 'testspace', 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'structs': [{ 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'name': 'teststruct', 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'fields': [ 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {'name': 'testfield1', 'kind': 'i32'}, 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {'name': 'testfield2', 'kind': 'a:i32', 'ordinal': 42}]}], 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'interfaces': [{ 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'name': 'Server', 470de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) 'client': None, 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'methods': [{ 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'name': 'Foo', 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'parameters': [ 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {'name': 'foo', 'kind': 'i32'}, 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) {'name': 'bar', 'kind': 'a:x:teststruct'}], 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'ordinal': 42}]}] 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def TestRead(): 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch module = data.ModuleFromData(test_dict) 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return test_support.TestTestModule(module) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def TestWrite(): 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch module = test_support.BuildTestModule() 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch d = data.ModuleToData(module) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return EXPECT_TRUE(DeepEquals(test_dict, d)) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def TestWriteRead(): 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch module1 = test_support.BuildTestModule() 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch dict1 = data.ModuleToData(module1) 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch module2 = data.ModuleFromData(dict1) 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return EXPECT_TRUE(test_support.ModulesAreEqual(module1, module2)) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def Main(args): 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) errors = 0 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) errors += RunTest(TestWriteRead) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) errors += RunTest(TestRead) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) errors += RunTest(TestWrite) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return errors 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)if __name__ == '__main__': 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sys.exit(Main(sys.argv[1:])) 87