<!DOCTYPE html>
<!--
Copyright (c) 2015 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="/model/model.html">
<link rel="import" href="/ui/timeline_viewport.html">
<link rel="import" href="/ui/tracks/interaction_track.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  // InteractionRecords should be sorted by start time, not title, so that
  // AsyncSliceGroupTrack.buildSubRows_ can lay them out in as few tracks as
  // possible, so that they mesh instead of stacking unnecessarily.
  test('instantiate', function() {
    var div = document.createElement('div');
    var viewport = new tr.ui.TimelineViewport(div);
    var drawingContainer = new tr.ui.tracks.DrawingContainer(viewport);
    div.appendChild(drawingContainer);
    var track = new tr.ui.tracks.InteractionTrack(viewport);
    track.model = tr.c.test_utils.newModel(function(model) {
      var process = model.getOrCreateProcess(1);
      var thread = process.getOrCreateThread(1);
      thread.sliceGroup.pushSlice(tr.c.test_utils.newSlice(0, 200));
      model.interaction_records.push(new tr.model.InteractionRecord(
            'a', 0, 100, 100));
      model.interaction_records.push(new tr.model.InteractionRecord(
            'b', 1, 0, 100));
      model.interaction_records.push(new tr.model.InteractionRecord(
            'c', 2, 150, 50));
      model.interaction_records.push(new tr.model.InteractionRecord(
            'd', 3, 50, 100));
      model.interaction_records.push(new tr.model.InteractionRecord(
            'e', 4, 0, 50));
      // Model.createImportTracesTask() automatically sorts IRs by start time.
    });
    assert.equal(2, track.subRows_.length);
    assert.equal(2, track.subRows_[0].length);
    assert.equal(3, track.subRows_[1].length);
    drawingContainer.appendChild(track);
    this.addHTMLOutput(div);
  });
});
</script>
