time_to_object_instance_map_test.html revision 4a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724
1<!DOCTYPE html> 2<!-- 3Copyright (c) 2013 The Chromium Authors. All rights reserved. 4Use of this source code is governed by a BSD-style license that can be 5found in the LICENSE file. 6--> 7 8<link rel="import" href="/tracing/core/test_utils.html"> 9<link rel="import" href="/tracing/model/time_to_object_instance_map.html"> 10<link rel="import" href="/tracing/model/object_instance.html"> 11 12<script> 13'use strict'; 14 15tr.b.unittest.testSuite(function() { 16 var createObjectInstance = function(parent, id, category, name, creationTs) { 17 return new tr.model.ObjectInstance( 18 parent, id, category, name, creationTs); 19 }; 20 21 test('timeToObjectInstanceMap', function() { 22 var m = new tr.model.TimeToObjectInstanceMap( 23 createObjectInstance, {}, 7); 24 m.addSnapshot('cat', 'name', 10, 'a1'); 25 m.addSnapshot('cat', 'name', 20, 'a2'); 26 m.idWasDeleted('cat', 'name', 30); 27 m.addSnapshot('cat', 'name', 40, 'b'); 28 29 assert.equal(m.instances.length, 2); 30 31 var i0 = m.getInstanceAt(0); 32 var i10 = m.getInstanceAt(10); 33 assert.equal(i0, i10); 34 35 assert.isDefined(i10); 36 assert.equal(i10.snapshots.length, 2); 37 assert.equal(i10.snapshots[0].args, 'a1'); 38 assert.equal(i10.snapshots[1].args, 'a2'); 39 40 assert.equal(i10.deletionTs, 30); 41 42 var i15 = m.getInstanceAt(15); 43 assert.equal(i15, i10); 44 45 var i20 = m.getInstanceAt(20); 46 assert.equal(i20, i10); 47 48 var i30 = m.getInstanceAt(30); 49 assert.isUndefined(i30); 50 51 var i35 = m.getInstanceAt(35); 52 assert.isUndefined(i35); 53 54 var i40 = m.getInstanceAt(40); 55 assert.isDefined(i40); 56 assert.notEqual(i40, i10); 57 assert.equal(i40.snapshots.length, 1); 58 assert.equal(i40.creationTs, 40); 59 assert.equal(i40.deletionTs, Number.MAX_VALUE); 60 61 var i41 = m.getInstanceAt(41); 62 assert.equal(i40, i41); 63 }); 64 65 test('timeToObjectInstanceMapsBoundsLogic', function() { 66 var m = new tr.model.TimeToObjectInstanceMap( 67 createObjectInstance, {}, 7); 68 m.addSnapshot('cat', 'name', 10, 'a1'); 69 m.addSnapshot('cat', 'name', 20, 'a2'); 70 m.idWasDeleted('cat', 'name', 30); 71 m.addSnapshot('cat', 'name', 40, 'b'); 72 m.addSnapshot('cat', 'name', 41, 'b'); 73 74 m.instances.forEach(function(i) { i.updateBounds(); }); 75 76 var iA = m.getInstanceAt(10); 77 assert.equal(iA.bounds.min, 10); 78 assert.equal(iA.bounds.max, 30); 79 80 var iB = m.getInstanceAt(40); 81 assert.equal(iB.bounds.min, 40); 82 assert.equal(iB.bounds.max, 41); 83 }); 84 85 test('earlySnapshot', function() { 86 var m = new tr.model.TimeToObjectInstanceMap( 87 createObjectInstance, {}, 7); 88 var i10 = m.idWasCreated('cat', 'name', 10, 'a1'); 89 m.idWasDeleted('cat', 'name', 20); 90 91 assert.throws(function() { 92 m.addSnapshot('cat', 'name', 5, 'a1'); 93 }); 94 assert.equal(i10.creationTs, 10); 95 assert.equal(i10.deletionTs, 20); 96 }); 97 98 test('earlySnapshotWithImplicitCreate', function() { 99 var m = new tr.model.TimeToObjectInstanceMap( 100 createObjectInstance, {}, 7); 101 var i10 = m.idWasDeleted('cat', 'name', 20); 102 m.addSnapshot('cat', 'name', 5, 'a1'); 103 assert.equal(i10.creationTs, 5); 104 assert.equal(i10.deletionTs, 20); 105 }); 106 107 test('getInstanceBeforeCreationImplicitCreate', function() { 108 var m = new tr.model.TimeToObjectInstanceMap( 109 createObjectInstance, {}, 7); 110 var i10 = m.idWasCreated('cat', 'name', 10, 'a1'); 111 m.idWasDeleted('cat', 'name', 20); 112 assert.isUndefined(m.getInstanceAt(5)); 113 }); 114 115 test('getInstanceBeforeCreationImplicitCreateWithSnapshot', function() { 116 var m = new tr.model.TimeToObjectInstanceMap( 117 createObjectInstance, {}, 7); 118 var s5 = m.addSnapshot('cat', 'name', 5, 'a1'); 119 var i10 = m.idWasDeleted('cat', 'name', 20); 120 assert.equal(m.getInstanceAt(5), i10); 121 }); 122 123 test('successiveDeletions', function() { 124 var m = new tr.model.TimeToObjectInstanceMap( 125 createObjectInstance, {}, 7); 126 var i20 = m.idWasDeleted('cat', 'name', 20); 127 var i30 = m.idWasDeleted('cat', 'name', 30); 128 var i40 = m.idWasDeleted('cat', 'name', 40); 129 assert.equal(i20.creationTs, 20); 130 assert.isFalse(i20.creationTsWasExplicit); 131 assert.equal(i20.deletionTs, 20); 132 assert.isTrue(i20.deletionTsWasExplicit); 133 134 assert.equal(i30.creationTs, 30); 135 assert.isFalse(i30.creationTsWasExplicit); 136 assert.equal(i30.deletionTs, 30); 137 assert.isTrue(i30.deletionTsWasExplicit); 138 139 140 assert.equal(i40.creationTs, 40); 141 assert.isFalse(i40.creationTsWasExplicit); 142 assert.equal(i40.deletionTs, 40); 143 assert.isTrue(i40.deletionTsWasExplicit); 144 }); 145 146 test('snapshotAfterDeletion', function() { 147 var m = new tr.model.TimeToObjectInstanceMap( 148 createObjectInstance, {}, 7); 149 var i10 = m.idWasCreated('cat', 'name', 10, 'a1'); 150 m.idWasDeleted('cat', 'name', 20); 151 152 var s25 = m.addSnapshot('cat', 'name', 25, 'a1'); 153 var i25 = s25.objectInstance; 154 155 assert.equal(i10.creationTs, 10); 156 assert.equal(i10.deletionTs, 20); 157 assert.notEqual(i25, i10); 158 assert.equal(i25.creationTs, 25); 159 assert.equal(i25.deletionTs, Number.MAX_VALUE); 160 }); 161}); 162</script> 163 164