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