| <!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> |
| |