1// Copyright (c) 2013 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'use strict'; 6 7base.require('tracing.test_utils'); 8base.require('tracing.trace_model.time_to_object_instance_map'); 9base.require('tracing.trace_model.object_instance'); 10 11base.unittest.testSuite('tracing.trace_model.time_to_object_instance_map', 12 function() { 13 var createObjectInstance = function(parent, id, category, name, 14 creationTs) { 15 return new tracing.trace_model.ObjectInstance( 16 parent, id, category, name, creationTs); 17 }; 18 19 test('timeToObjectInstanceMap', function() { 20 var m = new tracing.trace_model.TimeToObjectInstanceMap( 21 createObjectInstance, {}, 7); 22 m.addSnapshot('cat', 'name', 10, 'a1'); 23 m.addSnapshot('cat', 'name', 20, 'a2'); 24 m.idWasDeleted('cat', 'name', 30); 25 m.addSnapshot('cat', 'name', 40, 'b'); 26 27 assertEquals(2, m.instances.length); 28 29 var i0 = m.getInstanceAt(0); 30 var i10 = m.getInstanceAt(10); 31 assertEquals(i10, i0); 32 33 assertNotUndefined(i10); 34 assertEquals(2, i10.snapshots.length); 35 assertEquals('a1', i10.snapshots[0].args); 36 assertEquals('a2', i10.snapshots[1].args); 37 38 assertEquals(30, i10.deletionTs); 39 40 var i15 = m.getInstanceAt(15); 41 assertEquals(i10, i15); 42 43 var i20 = m.getInstanceAt(20); 44 assertEquals(i10, i20); 45 46 var i30 = m.getInstanceAt(30); 47 assertUndefined(i30); 48 49 var i35 = m.getInstanceAt(35); 50 assertUndefined(i35); 51 52 var i40 = m.getInstanceAt(40); 53 assertNotUndefined(i40); 54 assertNotEquals(i10, i40); 55 assertEquals(1, i40.snapshots.length); 56 assertEquals(40, i40.creationTs); 57 assertEquals(Number.MAX_VALUE, i40.deletionTs); 58 59 var i41 = m.getInstanceAt(41); 60 assertEquals(i41, i40); 61 }); 62 63 test('timeToObjectInstanceMapsBoundsLogic', function() { 64 var m = new tracing.trace_model.TimeToObjectInstanceMap( 65 createObjectInstance, {}, 7); 66 m.addSnapshot('cat', 'name', 10, 'a1'); 67 m.addSnapshot('cat', 'name', 20, 'a2'); 68 m.idWasDeleted('cat', 'name', 30); 69 m.addSnapshot('cat', 'name', 40, 'b'); 70 m.addSnapshot('cat', 'name', 41, 'b'); 71 72 m.instances.forEach(function(i) { i.updateBounds(); }); 73 74 var iA = m.getInstanceAt(10); 75 assertEquals(10, iA.bounds.min); 76 assertEquals(30, iA.bounds.max); 77 78 var iB = m.getInstanceAt(40); 79 assertEquals(40, iB.bounds.min); 80 assertEquals(41, iB.bounds.max); 81 }); 82 83 test('earlySnapshot', function() { 84 var m = new tracing.trace_model.TimeToObjectInstanceMap( 85 createObjectInstance, {}, 7); 86 var i10 = m.idWasCreated('cat', 'name', 10, 'a1'); 87 m.idWasDeleted('cat', 'name', 20); 88 89 assertThrows(function() { 90 m.addSnapshot('cat', 'name', 5, 'a1'); 91 }); 92 assertEquals(10, i10.creationTs); 93 assertEquals(20, i10.deletionTs); 94 }); 95 96 test('earlySnapshotWithImplicitCreate', function() { 97 var m = new tracing.trace_model.TimeToObjectInstanceMap( 98 createObjectInstance, {}, 7); 99 var i10 = m.idWasDeleted('cat', 'name', 20); 100 m.addSnapshot('cat', 'name', 5, 'a1'); 101 assertEquals(5, i10.creationTs); 102 assertEquals(20, i10.deletionTs); 103 }); 104 105 test('getInstanceBeforeCreationImplicitCreate', function() { 106 var m = new tracing.trace_model.TimeToObjectInstanceMap( 107 createObjectInstance, {}, 7); 108 var i10 = m.idWasCreated('cat', 'name', 10, 'a1'); 109 m.idWasDeleted('cat', 'name', 20); 110 assertEquals(undefined, m.getInstanceAt(5)); 111 }); 112 113 test('getInstanceBeforeCreationImplicitCreateWithSnapshot', function() { 114 var m = new tracing.trace_model.TimeToObjectInstanceMap( 115 createObjectInstance, {}, 7); 116 var s5 = m.addSnapshot('cat', 'name', 5, 'a1'); 117 var i10 = m.idWasDeleted('cat', 'name', 20); 118 assertEquals(i10, m.getInstanceAt(5)); 119 }); 120 121 test('snapshotAfterDeletion', function() { 122 var m = new tracing.trace_model.TimeToObjectInstanceMap( 123 createObjectInstance, {}, 7); 124 var i10 = m.idWasCreated('cat', 'name', 10, 'a1'); 125 m.idWasDeleted('cat', 'name', 20); 126 127 var s25 = m.addSnapshot('cat', 'name', 25, 'a1'); 128 var i25 = s25.objectInstance; 129 130 assertEquals(10, i10.creationTs); 131 assertEquals(20, i10.deletionTs); 132 assertNotEquals(i10, i25); 133 assertEquals(25, i25.creationTs); 134 assertEquals(Number.MAX_VALUE, i25.deletionTs); 135 }); 136 }); 137