| Index: mojo/public/tools/bindings/pylib/mojom_tests/parse/ast_unittest.py
|
| diff --git a/mojo/public/tools/bindings/pylib/mojom_tests/parse/ast_unittest.py b/mojo/public/tools/bindings/pylib/mojom_tests/parse/ast_unittest.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..08bcbb531bbdca7d2953117d29621216f0badcdc
|
| --- /dev/null
|
| +++ b/mojo/public/tools/bindings/pylib/mojom_tests/parse/ast_unittest.py
|
| @@ -0,0 +1,138 @@
|
| +# 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 imp
|
| +import os.path
|
| +import sys
|
| +import unittest
|
| +
|
| +# Disable lint check for finding modules:
|
| +# pylint: disable=F0401
|
| +
|
| +def _GetDirAbove(dirname):
|
| + """Returns the directory "above" this file containing |dirname| (which must
|
| + also be "above" this file)."""
|
| + path = os.path.abspath(__file__)
|
| + while True:
|
| + path, tail = os.path.split(path)
|
| + assert tail
|
| + if tail == dirname:
|
| + return path
|
| +
|
| +try:
|
| + imp.find_module("mojom")
|
| +except ImportError:
|
| + sys.path.append(os.path.join(_GetDirAbove("pylib"), "pylib"))
|
| +import mojom.parse.ast as ast
|
| +
|
| +
|
| +class _TestNode(ast.NodeBase):
|
| + """Node type for tests."""
|
| +
|
| + def __init__(self, value, **kwargs):
|
| + super(_TestNode, self).__init__(**kwargs)
|
| + self.value = value
|
| +
|
| + def __eq__(self, other):
|
| + return super(_TestNode, self).__eq__(other) and self.value == other.value
|
| +
|
| +
|
| +class _TestNodeList(ast.NodeListBase):
|
| + """Node list type for tests."""
|
| +
|
| + _list_item_type = _TestNode
|
| +
|
| +
|
| +class ASTTest(unittest.TestCase):
|
| + """Tests various AST classes."""
|
| +
|
| + def testNodeBase(self):
|
| + # Test |__eq__()|; this is only used for testing, where we want to do
|
| + # comparison by value and ignore filenames/line numbers (for convenience).
|
| + node1 = ast.NodeBase(filename="hello.mojom", lineno=123)
|
| + node2 = ast.NodeBase()
|
| + self.assertEquals(node1, node2)
|
| + self.assertEquals(node2, node1)
|
| +
|
| + # Check that |__ne__()| just defers to |__eq__()| properly.
|
| + self.assertFalse(node1 != node2)
|
| + self.assertFalse(node2 != node1)
|
| +
|
| + # Check that |filename| and |lineno| are set properly (and are None by
|
| + # default).
|
| + self.assertEquals(node1.filename, "hello.mojom")
|
| + self.assertEquals(node1.lineno, 123)
|
| + self.assertIsNone(node2.filename)
|
| + self.assertIsNone(node2.lineno)
|
| +
|
| + # |NodeBase|'s |__eq__()| should compare types (and a subclass's |__eq__()|
|
| + # should first defer to its superclass's).
|
| + node3 = _TestNode(123)
|
| + self.assertNotEqual(node1, node3)
|
| + self.assertNotEqual(node3, node1)
|
| + # Also test |__eq__()| directly.
|
| + self.assertFalse(node1 == node3)
|
| + self.assertFalse(node3 == node1)
|
| +
|
| + node4 = _TestNode(123, filename="world.mojom", lineno=123)
|
| + self.assertEquals(node4, node3)
|
| + node5 = _TestNode(456)
|
| + self.assertNotEquals(node5, node4)
|
| +
|
| + def testNodeListBase(self):
|
| + node1 = _TestNode(1, filename="foo.mojom", lineno=1)
|
| + # Equal to, but not the same as, |node1|:
|
| + node1b = _TestNode(1, filename="foo.mojom", lineno=1)
|
| + node2 = _TestNode(2, filename="foo.mojom", lineno=2)
|
| +
|
| + nodelist1 = _TestNodeList() # Contains: (empty).
|
| + self.assertEquals(nodelist1, nodelist1)
|
| + self.assertEquals(nodelist1.items, [])
|
| + self.assertIsNone(nodelist1.filename)
|
| + self.assertIsNone(nodelist1.lineno)
|
| +
|
| + nodelist2 = _TestNodeList(node1) # Contains: 1.
|
| + self.assertEquals(nodelist2, nodelist2)
|
| + self.assertEquals(nodelist2.items, [node1])
|
| + self.assertNotEqual(nodelist2, nodelist1)
|
| + self.assertEquals(nodelist2.filename, "foo.mojom")
|
| + self.assertEquals(nodelist2.lineno, 1)
|
| +
|
| + nodelist3 = _TestNodeList([node2]) # Contains: 2.
|
| + self.assertEquals(nodelist3.items, [node2])
|
| + self.assertNotEqual(nodelist3, nodelist1)
|
| + self.assertNotEqual(nodelist3, nodelist2)
|
| + self.assertEquals(nodelist3.filename, "foo.mojom")
|
| + self.assertEquals(nodelist3.lineno, 2)
|
| +
|
| + nodelist1.Append(node1b) # Contains: 1.
|
| + self.assertEquals(nodelist1.items, [node1])
|
| + self.assertEquals(nodelist1, nodelist2)
|
| + self.assertNotEqual(nodelist1, nodelist3)
|
| + self.assertEquals(nodelist1.filename, "foo.mojom")
|
| + self.assertEquals(nodelist1.lineno, 1)
|
| +
|
| + nodelist1.Append(node2) # Contains: 1, 2.
|
| + self.assertEquals(nodelist1.items, [node1, node2])
|
| + self.assertNotEqual(nodelist1, nodelist2)
|
| + self.assertNotEqual(nodelist1, nodelist3)
|
| + self.assertEquals(nodelist1.lineno, 1)
|
| +
|
| + nodelist2.Append(node2) # Contains: 1, 2.
|
| + self.assertEquals(nodelist2.items, [node1, node2])
|
| + self.assertEquals(nodelist2, nodelist1)
|
| + self.assertNotEqual(nodelist2, nodelist3)
|
| + self.assertEquals(nodelist2.lineno, 1)
|
| +
|
| + nodelist3.Insert(node1) # Contains: 1, 2.
|
| + self.assertEquals(nodelist3.items, [node1, node2])
|
| + self.assertEquals(nodelist3, nodelist1)
|
| + self.assertEquals(nodelist3, nodelist2)
|
| + self.assertEquals(nodelist3.lineno, 1)
|
| +
|
| + # Test iteration:
|
| + i = 1
|
| + for item in nodelist1:
|
| + self.assertEquals(item.value, i)
|
| + i += 1
|
|
|