| # Copyright 2014 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 unittest |
| |
| from mojom_bindings_generator import MakeImportStackMessage |
| from mojom_bindings_generator import ScrambleMethodOrdinals |
| |
| |
| class FakeIface(object): |
| def __init__( self ): |
| self.name = None |
| self.methods = None |
| |
| |
| class FakeMethod(object): |
| def __init__( self ): |
| self.ordinal = None |
| self.ordinal_comment = None |
| |
| |
| class MojoBindingsGeneratorTest(unittest.TestCase): |
| """Tests mojo_bindings_generator.""" |
| |
| def testMakeImportStackMessage(self): |
| """Tests MakeImportStackMessage().""" |
| self.assertEquals(MakeImportStackMessage(["x"]), "") |
| self.assertEquals(MakeImportStackMessage(["x", "y"]), |
| "\n y was imported by x") |
| self.assertEquals(MakeImportStackMessage(["x", "y", "z"]), |
| "\n z was imported by y\n y was imported by x") |
| |
| def testScrambleMethodOrdinals(self): |
| """Tests ScrambleMethodOrdinals().""" |
| interface = FakeIface() |
| interface.name = 'RendererConfiguration' |
| interface.methods = [FakeMethod(), FakeMethod(), FakeMethod()] |
| ScrambleMethodOrdinals([interface], "foo") |
| # These next three values are hard-coded. If the generation algorithm |
| # changes from being based on sha256(seed + interface.name + str(i)) then |
| # these numbers will obviously need to change too. |
| # |
| # Note that hashlib.sha256('fooRendererConfiguration1').digest()[:4] is |
| # '\xa5\xbc\xf9\xca' and that hex(1257880741) = '0x4af9bca5'. The |
| # difference in 0x4a vs 0xca is because we only take 31 bits. |
| self.assertEquals(interface.methods[0].ordinal, 1257880741) |
| self.assertEquals(interface.methods[1].ordinal, 631133653) |
| self.assertEquals(interface.methods[2].ordinal, 549336076) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |