<!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/object_instance.html">

<script>
'use strict';

tv.b.unittest.testSuite(function() {
  test('getSnapshotAtWithImplicitCreation', function() {
    var instance = new tv.c.trace_model.ObjectInstance(
        {}, '0x1000', 'cat', 'n', 10);
    var s10 = instance.addSnapshot(10, 'a');
    instance.addSnapshot(40, 'b');
    instance.wasDeleted(60);

    var s1 = instance.getSnapshotAt(1);
    assert.equal(s1, s10);

    var s10 = instance.getSnapshotAt(10);
    assert.equal(s10.args, 'a');
    assert.equal(instance.getSnapshotAt(15), s10);

    var s40 = instance.getSnapshotAt(40);
    assert.equal(s40.args, 'b');
    assert.equal(instance.getSnapshotAt(50), s40);
    assert.equal(instance.getSnapshotAt(59.9), s40);
  });

  test('getSnapshotAtWithExplicitCreation', function() {
    var instance = new tv.c.trace_model.ObjectInstance(
        {}, '0x1000', 'cat', 'n', 10);
    instance.creationTsWasExplicit = true;
    instance.addSnapshot(10, 'a');
    instance.wasDeleted(60);

    assert.throws(function() {
      instance.getSnapshotAt(1);
    });

    var s10 = instance.getSnapshotAt(10);
    assert.equal(s10.args, 'a');
    assert.equal(instance.getSnapshotAt(15), s10);
  });

  test('getSnapshotBeforeFirstSnapshot', function() {
    var instance = new tv.c.trace_model.ObjectInstance(
        {}, '0x1000', 'cat', 'n', 10);
    var s15 = instance.addSnapshot(15, 'a');
    instance.wasDeleted(40);

    assert.equal(instance.getSnapshotAt(10), s15);
  });

  test('getSnapshotAfterLastSnapshot', function() {
    var instance = new tv.c.trace_model.ObjectInstance(
        {}, '0x1000', 'cat', 'n', 10);
    var s15 = instance.addSnapshot(15, 'a');
    instance.wasDeleted(40);

    assert.equal(instance.getSnapshotAt(20), s15);
  });
});
</script>

