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 5import unittest 6 7from memory_inspector.classification import rules 8 9 10_TEST_RULE = """ 11[ 12{ 13 'name': '1', 14 'mmap-file': r'/foo/1', 15 'foo': 'bar', 16 'children': [ 17 { 18 'name': '1/1', 19 'mmap-file': r'/foo/1/1', 20 'children': [] 21 }, 22 { 23 'name': '1/2', 24 'mmap-file': r'/foo/1/2', 25 }, 26 ] 27}, 28{ 29 'name': '2', 30 'mmap-file': r'/bar/2', 31 'children': [ 32 { 33 'name': '2/1', 34 'mmap-file': r'/bar/2/1', 35 }, 36 { 37 'name': '2/2', 38 'mmap-file': r'/bar/2/2', 39 'children': [ 40 { 41 'name': '2/2/1', 42 'mmap-file': r'/bar/2/2/1', 43 }, 44 { 45 'name': '2/2/2', 46 'mmap-file': r'/bar/2/2/2', 47 }, 48 ] 49 }, 50 { 51 'name': '2/3', 52 'mmap-file': r'/bar/3', 53 }, 54 ] 55}, 56] 57""" 58 59 60class RulesTest(unittest.TestCase): 61 def runTest(self): 62 rt = rules.Load(_TEST_RULE, MockRule) 63 self.assertEqual(rt.name, 'Total') 64 self.assertEqual(len(rt.children), 3) 65 node1 = rt.children[0] 66 node2 = rt.children[1] 67 node3 = rt.children[2] 68 69 # Check 1-st level leaves. 70 self.assertEqual(node1.name, '1') 71 self.assertEqual(node1.filters['mmap-file'], '/foo/1') 72 self.assertEqual(node1.filters['foo'], 'bar') 73 self.assertEqual(node2.name, '2') 74 self.assertEqual(node2.filters['mmap-file'], '/bar/2') 75 self.assertEqual(node3.name, 'Total-other') 76 77 # Check 2-nd level leaves and their children. 78 self.assertEqual(len(node1.children), 3) 79 self.assertEqual(node1.children[0].name, '1/1') 80 self.assertEqual(node1.children[1].name, '1/2') 81 self.assertEqual(node1.children[2].name, '1-other') 82 self.assertEqual(len(node2.children), 4) 83 self.assertEqual(node2.children[0].name, '2/1') 84 self.assertEqual(len(node2.children[0].children), 0) 85 self.assertEqual(node2.children[1].name, '2/2') 86 self.assertEqual(len(node2.children[1].children), 3) 87 self.assertEqual(node2.children[2].name, '2/3') 88 self.assertEqual(len(node2.children[2].children), 0) 89 self.assertEqual(node2.children[3].name, '2-other') 90 self.assertEqual(len(node2.children[3].children), 0) 91 92 93 94class MockRule(rules.Rule): 95 def __init__(self, name, filters): 96 super(MockRule, self).__init__(name) 97 self.filters = filters