166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict';
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.trace_model.object_instance');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('tracing.trace_model.object_instance', function() {
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('getSnapshotAtWithImplicitCreation', function() {
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var instance = new tracing.trace_model.ObjectInstance(
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        {}, '0x1000', 'cat', 'n', 10);
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var s10 = instance.addSnapshot(10, 'a');
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    instance.addSnapshot(40, 'b');
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    instance.wasDeleted(60);
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var s1 = instance.getSnapshotAt(1);
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(s10, s1);
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var s10 = instance.getSnapshotAt(10);
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('a', s10.args);
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(s10, instance.getSnapshotAt(15));
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var s40 = instance.getSnapshotAt(40);
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('b', s40.args);
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(s40, instance.getSnapshotAt(50));
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(s40, instance.getSnapshotAt(59.9));
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('getSnapshotAtWithExplicitCreation', function() {
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var instance = new tracing.trace_model.ObjectInstance(
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        {}, '0x1000', 'cat', 'n', 10);
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    instance.creationTsWasExplicit = true;
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    instance.addSnapshot(10, 'a');
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    instance.wasDeleted(60);
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertThrows(function() {
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      instance.getSnapshotAt(1);
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    });
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var s10 = instance.getSnapshotAt(10);
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('a', s10.args);
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(s10, instance.getSnapshotAt(15));
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('getSnapshotBeforeFirstSnapshot', function() {
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var instance = new tracing.trace_model.ObjectInstance(
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        {}, '0x1000', 'cat', 'n', 10);
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var s15 = instance.addSnapshot(15, 'a');
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    instance.wasDeleted(40);
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(s15, instance.getSnapshotAt(10));
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('getSnapshotAfterLastSnapshot', function() {
5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var instance = new tracing.trace_model.ObjectInstance(
5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        {}, '0x1000', 'cat', 'n', 10);
5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var s15 = instance.addSnapshot(15, 'a');
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    instance.wasDeleted(40);
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(s15, instance.getSnapshotAt(20));
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
65