Index: tools/telemetry/telemetry/core/heap/chrome_js_heap_snapshot_parser_unittest.py |
diff --git a/tools/telemetry/telemetry/core/heap/chrome_js_heap_snapshot_parser_unittest.py b/tools/telemetry/telemetry/core/heap/chrome_js_heap_snapshot_parser_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..478e28b46fc031596cb1dc07a6ad08ef9c7fb961 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/core/heap/chrome_js_heap_snapshot_parser_unittest.py |
@@ -0,0 +1,56 @@ |
+# Copyright (c) 2013 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 json |
+import unittest |
+ |
+from telemetry.core.heap import chrome_js_heap_snapshot_parser |
+ |
+class ChromeJsHeapSnapshotParserUnittest(unittest.TestCase): |
+ def _HeapSnapshotData(self, node_types, edge_types, node_fields, edge_fields, |
+ node_list, edge_list, strings): |
+ """Helper for creating heap snapshot data.""" |
+ return {'snapshot': {'meta': {'node_types': [node_types], |
+ 'edge_types': [edge_types], |
+ 'node_fields': node_fields, |
+ 'edge_fields': edge_fields}}, |
+ 'nodes': node_list, |
+ 'edges': edge_list, |
+ 'strings': strings} |
+ |
+ def testParseSimpleSnapshot(self): |
+ # Create a snapshot containing 2 nodes and an edge between them. |
+ node_types = ['object'] |
+ edge_types = ['property'] |
+ node_fields = ['type', 'name', 'id', 'edge_count'] |
+ edge_fields = ['type', 'name_or_index', 'to_node'] |
+ node_list = [0, 0, 0, 1, |
+ 0, 1, 1, 0] |
+ edge_list = [0, 2, 4] |
+ strings = ['node1', 'node2', 'edge1'] |
+ heap = self._HeapSnapshotData(node_types, edge_types, node_fields, |
+ edge_fields, node_list, edge_list, strings) |
+ objects = list(chrome_js_heap_snapshot_parser.ChromeJsHeapSnapshotParser( |
+ json.dumps(heap)).GetAllLiveHeapObjects()) |
+ self.assertEqual(2, len(objects)) |
+ if objects[0].edges_from: |
+ from_ix = 0 |
+ to_ix = 1 |
+ else: |
+ from_ix = 1 |
+ to_ix = 0 |
+ self.assertEqual('node1', objects[from_ix].class_name) |
+ self.assertEqual('node2', objects[to_ix].class_name) |
+ self.assertEqual(1, len(objects[from_ix].edges_from)) |
+ self.assertEqual(0, len(objects[from_ix].edges_to)) |
+ self.assertEqual(0, len(objects[to_ix].edges_from)) |
+ self.assertEqual(1, len(objects[to_ix].edges_to)) |
+ self.assertEqual('node1', |
+ objects[from_ix].edges_from[0].from_object.class_name) |
+ self.assertEqual('node2', |
+ objects[from_ix].edges_from[0].to_object.class_name) |
+ self.assertEqual('edge1', objects[from_ix].edges_from[0].name_string) |
+ self.assertEqual('node1', objects[to_ix].edges_to[0].from_object.class_name) |
+ self.assertEqual('node2', objects[to_ix].edges_to[0].to_object.class_name) |
+ self.assertEqual('edge1', objects[to_ix].edges_to[0].name_string) |