| OLD | NEW |
| (Empty) |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import imp | |
| 6 import os.path | |
| 7 import sys | |
| 8 import unittest | |
| 9 | |
| 10 def _GetDirAbove(dirname): | |
| 11 """Returns the directory "above" this file containing |dirname| (which must | |
| 12 also be "above" this file).""" | |
| 13 path = os.path.abspath(__file__) | |
| 14 while True: | |
| 15 path, tail = os.path.split(path) | |
| 16 assert tail | |
| 17 if tail == dirname: | |
| 18 return path | |
| 19 | |
| 20 try: | |
| 21 imp.find_module("mojom") | |
| 22 except ImportError: | |
| 23 sys.path.append(os.path.join(_GetDirAbove("pylib"), "pylib")) | |
| 24 import mojom.parse.ast as ast | |
| 25 | |
| 26 | |
| 27 class _TestNode(ast.NodeBase): | |
| 28 """Node type for tests.""" | |
| 29 | |
| 30 def __init__(self, value, **kwargs): | |
| 31 super(_TestNode, self).__init__(**kwargs) | |
| 32 self.value = value | |
| 33 | |
| 34 def __eq__(self, other): | |
| 35 return super(_TestNode, self).__eq__(other) and self.value == other.value | |
| 36 | |
| 37 | |
| 38 class _TestNodeList(ast.NodeListBase): | |
| 39 """Node list type for tests.""" | |
| 40 | |
| 41 _list_item_type = _TestNode | |
| 42 | |
| 43 | |
| 44 class ASTTest(unittest.TestCase): | |
| 45 """Tests various AST classes.""" | |
| 46 | |
| 47 def testNodeBase(self): | |
| 48 # Test |__eq__()|; this is only used for testing, where we want to do | |
| 49 # comparison by value and ignore filenames/line numbers (for convenience). | |
| 50 node1 = ast.NodeBase(filename="hello.mojom", lineno=123) | |
| 51 node2 = ast.NodeBase() | |
| 52 self.assertEquals(node1, node2) | |
| 53 self.assertEquals(node2, node1) | |
| 54 | |
| 55 # Check that |__ne__()| just defers to |__eq__()| properly. | |
| 56 self.assertFalse(node1 != node2) | |
| 57 self.assertFalse(node2 != node1) | |
| 58 | |
| 59 # Check that |filename| and |lineno| are set properly (and are None by | |
| 60 # default). | |
| 61 self.assertEquals(node1.filename, "hello.mojom") | |
| 62 self.assertEquals(node1.lineno, 123) | |
| 63 self.assertIsNone(node2.filename) | |
| 64 self.assertIsNone(node2.lineno) | |
| 65 | |
| 66 # |NodeBase|'s |__eq__()| should compare types (and a subclass's |__eq__()| | |
| 67 # should first defer to its superclass's). | |
| 68 node3 = _TestNode(123) | |
| 69 self.assertNotEqual(node1, node3) | |
| 70 self.assertNotEqual(node3, node1) | |
| 71 # Also test |__eq__()| directly. | |
| 72 self.assertFalse(node1 == node3) | |
| 73 self.assertFalse(node3 == node1) | |
| 74 | |
| 75 node4 = _TestNode(123, filename="world.mojom", lineno=123) | |
| 76 self.assertEquals(node4, node3) | |
| 77 node5 = _TestNode(456) | |
| 78 self.assertNotEquals(node5, node4) | |
| 79 | |
| 80 def testNodeListBase(self): | |
| 81 node1 = _TestNode(1, filename="foo.mojom", lineno=1) | |
| 82 # Equal to, but not the same as, |node1|: | |
| 83 node1b = _TestNode(1, filename="foo.mojom", lineno=1) | |
| 84 node2 = _TestNode(2, filename="foo.mojom", lineno=2) | |
| 85 | |
| 86 nodelist1 = _TestNodeList() # Contains: (empty). | |
| 87 self.assertEquals(nodelist1, nodelist1) | |
| 88 self.assertEquals(nodelist1.items, []) | |
| 89 self.assertIsNone(nodelist1.filename) | |
| 90 self.assertIsNone(nodelist1.lineno) | |
| 91 | |
| 92 nodelist2 = _TestNodeList(node1) # Contains: 1. | |
| 93 self.assertEquals(nodelist2, nodelist2) | |
| 94 self.assertEquals(nodelist2.items, [node1]) | |
| 95 self.assertNotEqual(nodelist2, nodelist1) | |
| 96 self.assertEquals(nodelist2.filename, "foo.mojom") | |
| 97 self.assertEquals(nodelist2.lineno, 1) | |
| 98 | |
| 99 nodelist3 = _TestNodeList([node2]) # Contains: 2. | |
| 100 self.assertEquals(nodelist3.items, [node2]) | |
| 101 self.assertNotEqual(nodelist3, nodelist1) | |
| 102 self.assertNotEqual(nodelist3, nodelist2) | |
| 103 self.assertEquals(nodelist3.filename, "foo.mojom") | |
| 104 self.assertEquals(nodelist3.lineno, 2) | |
| 105 | |
| 106 nodelist1.Append(node1b) # Contains: 1. | |
| 107 self.assertEquals(nodelist1.items, [node1]) | |
| 108 self.assertEquals(nodelist1, nodelist2) | |
| 109 self.assertNotEqual(nodelist1, nodelist3) | |
| 110 self.assertEquals(nodelist1.filename, "foo.mojom") | |
| 111 self.assertEquals(nodelist1.lineno, 1) | |
| 112 | |
| 113 nodelist1.Append(node2) # Contains: 1, 2. | |
| 114 self.assertEquals(nodelist1.items, [node1, node2]) | |
| 115 self.assertNotEqual(nodelist1, nodelist2) | |
| 116 self.assertNotEqual(nodelist1, nodelist3) | |
| 117 self.assertEquals(nodelist1.lineno, 1) | |
| 118 | |
| 119 nodelist2.Append(node2) # Contains: 1, 2. | |
| 120 self.assertEquals(nodelist2.items, [node1, node2]) | |
| 121 self.assertEquals(nodelist2, nodelist1) | |
| 122 self.assertNotEqual(nodelist2, nodelist3) | |
| 123 self.assertEquals(nodelist2.lineno, 1) | |
| 124 | |
| 125 nodelist3.Insert(node1) # Contains: 1, 2. | |
| 126 self.assertEquals(nodelist3.items, [node1, node2]) | |
| 127 self.assertEquals(nodelist3, nodelist1) | |
| 128 self.assertEquals(nodelist3, nodelist2) | |
| 129 self.assertEquals(nodelist3.lineno, 1) | |
| 130 | |
| 131 # Test iteration: | |
| 132 i = 1 | |
| 133 for item in nodelist1: | |
| 134 self.assertEquals(item.value, i) | |
| 135 i += 1 | |
| OLD | NEW |