Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1214)

Side by Side Diff: mojo/public/tools/bindings/pylib/mojom_tests/parse/ast_unittest.py

Issue 395243002: Mojom: Add some tests for mojom.parse.ast. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/parse/ast.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 # Disable lint check for finding modules:
11 # pylint: disable=F0401
12
13 def _GetDirAbove(dirname):
14 """Returns the directory "above" this file containing |dirname| (which must
15 also be "above" this file)."""
16 path = os.path.abspath(__file__)
17 while True:
18 path, tail = os.path.split(path)
19 assert tail
20 if tail == dirname:
21 return path
22
23 try:
24 imp.find_module("mojom")
25 except ImportError:
26 sys.path.append(os.path.join(_GetDirAbove("pylib"), "pylib"))
27 import mojom.parse.ast as ast
28
29
30 class _TestNode(ast.NodeBase):
31 """Node type for tests."""
32
33 def __init__(self, value, **kwargs):
34 super(_TestNode, self).__init__(**kwargs)
35 self.value = value
36
37 def __eq__(self, other):
38 return super(_TestNode, self).__eq__(other) and self.value == other.value
39
40
41 class _TestNodeList(ast.NodeListBase):
42 """Node list type for tests."""
43
44 _list_item_type = _TestNode
45
46
47 class ASTTest(unittest.TestCase):
48 """Tests various AST classes."""
49
50 def testNodeBase(self):
51 # Test |__eq__()|; this is only used for testing, where we want to do
52 # comparison by value and ignore filenames/line numbers (for convenience).
53 node1 = ast.NodeBase(filename="hello.mojom", lineno=123)
54 node2 = ast.NodeBase()
55 self.assertEquals(node1, node2)
56 self.assertEquals(node2, node1)
57
58 # Check that |__ne__()| just defers to |__eq__()| properly.
59 self.assertFalse(node1 != node2)
60 self.assertFalse(node2 != node1)
61
62 # Check that |filename| and |lineno| are set properly (and are None by
63 # default).
64 self.assertEquals(node1.filename, "hello.mojom")
65 self.assertEquals(node1.lineno, 123)
66 self.assertIsNone(node2.filename)
67 self.assertIsNone(node2.lineno)
68
69 # |NodeBase|'s |__eq__()| should compare types (and a subclass's |__eq__()|
70 # should first defer to its superclass's).
71 node3 = _TestNode(123)
72 self.assertNotEqual(node1, node3)
73 self.assertNotEqual(node3, node1)
74 # Also test |__eq__()| directly.
75 self.assertFalse(node1 == node3)
76 self.assertFalse(node3 == node1)
77
78 node4 = _TestNode(123, filename="world.mojom", lineno=123)
79 self.assertEquals(node4, node3)
80 node5 = _TestNode(456)
81 self.assertNotEquals(node5, node4)
82
83 def testNodeListBase(self):
84 node1 = _TestNode(1, filename="foo.mojom", lineno=1)
85 # Equal to, but not the same as, |node1|:
86 node1b = _TestNode(1, filename="foo.mojom", lineno=1)
87 node2 = _TestNode(2, filename="foo.mojom", lineno=2)
88
89 nodelist1 = _TestNodeList() # Contains: (empty).
90 self.assertEquals(nodelist1, nodelist1)
91 self.assertEquals(nodelist1.items, [])
92 self.assertIsNone(nodelist1.filename)
93 self.assertIsNone(nodelist1.lineno)
94
95 nodelist2 = _TestNodeList(node1) # Contains: 1.
96 self.assertEquals(nodelist2, nodelist2)
97 self.assertEquals(nodelist2.items, [node1])
98 self.assertNotEqual(nodelist2, nodelist1)
99 self.assertEquals(nodelist2.filename, "foo.mojom")
100 self.assertEquals(nodelist2.lineno, 1)
101
102 nodelist3 = _TestNodeList([node2]) # Contains: 2.
103 self.assertEquals(nodelist3.items, [node2])
104 self.assertNotEqual(nodelist3, nodelist1)
105 self.assertNotEqual(nodelist3, nodelist2)
106 self.assertEquals(nodelist3.filename, "foo.mojom")
107 self.assertEquals(nodelist3.lineno, 2)
108
109 nodelist1.Append(node1b) # Contains: 1.
110 self.assertEquals(nodelist1.items, [node1])
111 self.assertEquals(nodelist1, nodelist2)
112 self.assertNotEqual(nodelist1, nodelist3)
113 self.assertEquals(nodelist1.filename, "foo.mojom")
114 self.assertEquals(nodelist1.lineno, 1)
115
116 nodelist1.Append(node2) # Contains: 1, 2.
117 self.assertEquals(nodelist1.items, [node1, node2])
118 self.assertNotEqual(nodelist1, nodelist2)
119 self.assertNotEqual(nodelist1, nodelist3)
120 self.assertEquals(nodelist1.lineno, 1)
121
122 nodelist2.Append(node2) # Contains: 1, 2.
123 self.assertEquals(nodelist2.items, [node1, node2])
124 self.assertEquals(nodelist2, nodelist1)
125 self.assertNotEqual(nodelist2, nodelist3)
126 self.assertEquals(nodelist2.lineno, 1)
127
128 nodelist3.Insert(node1) # Contains: 1, 2.
129 self.assertEquals(nodelist3.items, [node1, node2])
130 self.assertEquals(nodelist3, nodelist1)
131 self.assertEquals(nodelist3, nodelist2)
132 self.assertEquals(nodelist3.lineno, 1)
133
134 # Test iteration:
135 i = 1
136 for item in nodelist1:
137 self.assertEquals(item.value, i)
138 i += 1
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/parse/ast.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698