Index: tools/memory_inspector/memory_inspector/classification/rules_unittest.py |
diff --git a/tools/memory_inspector/memory_inspector/classification/rules_unittest.py b/tools/memory_inspector/memory_inspector/classification/rules_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1e576882f9c56b69add6ac67e04f3b13fc558303 |
--- /dev/null |
+++ b/tools/memory_inspector/memory_inspector/classification/rules_unittest.py |
@@ -0,0 +1,97 @@ |
+# 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 memory_inspector.classification import rules |
+ |
+ |
+_TEST_RULE = """ |
+[ |
+{ |
+ 'name': '1', |
+ 'mmap-file': r'/foo/1', |
+ 'foo': 'bar', |
+ 'children': [ |
+ { |
+ 'name': '1/1', |
+ 'mmap-file': r'/foo/1/1', |
+ 'children': [] |
+ }, |
+ { |
+ 'name': '1/2', |
+ 'mmap-file': r'/foo/1/2', |
+ }, |
+ ] |
+}, |
+{ |
+ 'name': '2', |
+ 'mmap-file': r'/bar/2', |
+ 'children': [ |
+ { |
+ 'name': '2/1', |
+ 'mmap-file': r'/bar/2/1', |
+ }, |
+ { |
+ 'name': '2/2', |
+ 'mmap-file': r'/bar/2/2', |
+ 'children': [ |
+ { |
+ 'name': '2/2/1', |
+ 'mmap-file': r'/bar/2/2/1', |
+ }, |
+ { |
+ 'name': '2/2/2', |
+ 'mmap-file': r'/bar/2/2/2', |
+ }, |
+ ] |
+ }, |
+ { |
+ 'name': '2/3', |
+ 'mmap-file': r'/bar/3', |
+ }, |
+ ] |
+}, |
+] |
+""" |
+ |
+ |
+class RulesTest(unittest.TestCase): |
+ def runTest(self): |
+ rt = rules.Load(_TEST_RULE, MockRule) |
+ self.assertEqual(rt.name, 'Total') |
+ self.assertEqual(len(rt.children), 3) |
+ node1 = rt.children[0] |
+ node2 = rt.children[1] |
+ node3 = rt.children[2] |
+ |
+ # Check 1-st level leaves. |
+ self.assertEqual(node1.name, '1') |
+ self.assertEqual(node1.filters['mmap-file'], '/foo/1') |
+ self.assertEqual(node1.filters['foo'], 'bar') |
+ self.assertEqual(node2.name, '2') |
+ self.assertEqual(node2.filters['mmap-file'], '/bar/2') |
+ self.assertEqual(node3.name, 'Total-other') |
+ |
+ # Check 2-nd level leaves and their children. |
+ self.assertEqual(len(node1.children), 3) |
+ self.assertEqual(node1.children[0].name, '1/1') |
+ self.assertEqual(node1.children[1].name, '1/2') |
+ self.assertEqual(node1.children[2].name, '1-other') |
+ self.assertEqual(len(node2.children), 4) |
+ self.assertEqual(node2.children[0].name, '2/1') |
+ self.assertEqual(len(node2.children[0].children), 0) |
+ self.assertEqual(node2.children[1].name, '2/2') |
+ self.assertEqual(len(node2.children[1].children), 3) |
+ self.assertEqual(node2.children[2].name, '2/3') |
+ self.assertEqual(len(node2.children[2].children), 0) |
+ self.assertEqual(node2.children[3].name, '2-other') |
+ self.assertEqual(len(node2.children[3].children), 0) |
+ |
+ |
+ |
+class MockRule(rules.Rule): |
+ def __init__(self, name, filters): |
+ super(MockRule, self).__init__(name) |
+ self.filters = filters |