blob: 0ab0dbee7db0c0798f7e5703d6926c6d1670dd59 [file] [log] [blame]
<!DOCTYPE html>
<!--
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.
-->
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/core/trace_model/time_to_object_instance_map.html">
<link rel="import" href="/core/trace_model/object_instance.html">
<script>
'use strict';
tv.b.unittest.testSuite(function() {
var createObjectInstance = function(parent, id, category, name, creationTs) {
return new tv.c.trace_model.ObjectInstance(
parent, id, category, name, creationTs);
};
test('timeToObjectInstanceMap', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
m.addSnapshot('cat', 'name', 10, 'a1');
m.addSnapshot('cat', 'name', 20, 'a2');
m.idWasDeleted('cat', 'name', 30);
m.addSnapshot('cat', 'name', 40, 'b');
assert.equal(m.instances.length, 2);
var i0 = m.getInstanceAt(0);
var i10 = m.getInstanceAt(10);
assert.equal(i0, i10);
assert.isDefined(i10);
assert.equal(i10.snapshots.length, 2);
assert.equal(i10.snapshots[0].args, 'a1');
assert.equal(i10.snapshots[1].args, 'a2');
assert.equal(i10.deletionTs, 30);
var i15 = m.getInstanceAt(15);
assert.equal(i15, i10);
var i20 = m.getInstanceAt(20);
assert.equal(i20, i10);
var i30 = m.getInstanceAt(30);
assert.isUndefined(i30);
var i35 = m.getInstanceAt(35);
assert.isUndefined(i35);
var i40 = m.getInstanceAt(40);
assert.isDefined(i40);
assert.notEqual(i40, i10);
assert.equal(i40.snapshots.length, 1);
assert.equal(i40.creationTs, 40);
assert.equal(i40.deletionTs, Number.MAX_VALUE);
var i41 = m.getInstanceAt(41);
assert.equal(i40, i41);
});
test('timeToObjectInstanceMapsBoundsLogic', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
m.addSnapshot('cat', 'name', 10, 'a1');
m.addSnapshot('cat', 'name', 20, 'a2');
m.idWasDeleted('cat', 'name', 30);
m.addSnapshot('cat', 'name', 40, 'b');
m.addSnapshot('cat', 'name', 41, 'b');
m.instances.forEach(function(i) { i.updateBounds(); });
var iA = m.getInstanceAt(10);
assert.equal(iA.bounds.min, 10);
assert.equal(iA.bounds.max, 30);
var iB = m.getInstanceAt(40);
assert.equal(iB.bounds.min, 40);
assert.equal(iB.bounds.max, 41);
});
test('earlySnapshot', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
var i10 = m.idWasCreated('cat', 'name', 10, 'a1');
m.idWasDeleted('cat', 'name', 20);
assert.throws(function() {
m.addSnapshot('cat', 'name', 5, 'a1');
});
assert.equal(i10.creationTs, 10);
assert.equal(i10.deletionTs, 20);
});
test('earlySnapshotWithImplicitCreate', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
var i10 = m.idWasDeleted('cat', 'name', 20);
m.addSnapshot('cat', 'name', 5, 'a1');
assert.equal(i10.creationTs, 5);
assert.equal(i10.deletionTs, 20);
});
test('getInstanceBeforeCreationImplicitCreate', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
var i10 = m.idWasCreated('cat', 'name', 10, 'a1');
m.idWasDeleted('cat', 'name', 20);
assert.isUndefined(m.getInstanceAt(5));
});
test('getInstanceBeforeCreationImplicitCreateWithSnapshot', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
var s5 = m.addSnapshot('cat', 'name', 5, 'a1');
var i10 = m.idWasDeleted('cat', 'name', 20);
assert.equal(m.getInstanceAt(5), i10);
});
test('successiveDeletions', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
var i20 = m.idWasDeleted('cat', 'name', 20);
var i30 = m.idWasDeleted('cat', 'name', 30);
var i40 = m.idWasDeleted('cat', 'name', 40);
assert.equal(i20.creationTs, 20);
assert.isFalse(i20.creationTsWasExplicit);
assert.equal(i20.deletionTs, 20);
assert.isTrue(i20.deletionTsWasExplicit);
assert.equal(i30.creationTs, 30);
assert.isFalse(i30.creationTsWasExplicit);
assert.equal(i30.deletionTs, 30);
assert.isTrue(i30.deletionTsWasExplicit);
assert.equal(i40.creationTs, 40);
assert.isFalse(i40.creationTsWasExplicit);
assert.equal(i40.deletionTs, 40);
assert.isTrue(i40.deletionTsWasExplicit);
});
test('snapshotAfterDeletion', function() {
var m = new tv.c.trace_model.TimeToObjectInstanceMap(
createObjectInstance, {}, 7);
var i10 = m.idWasCreated('cat', 'name', 10, 'a1');
m.idWasDeleted('cat', 'name', 20);
var s25 = m.addSnapshot('cat', 'name', 25, 'a1');
var i25 = s25.objectInstance;
assert.equal(i10.creationTs, 10);
assert.equal(i10.deletionTs, 20);
assert.notEqual(i25, i10);
assert.equal(i25.creationTs, 25);
assert.equal(i25.deletionTs, Number.MAX_VALUE);
});
});
</script>