<!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="/base/deep_utils.html">
<link rel="import" href="/core/analysis/single_sample_sub_view.html">
<link rel="import" href="/core/selection.html">
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/core/trace_model/trace_model.html">

<script>
'use strict';

tv.b.unittest.testSuite(function() {
  var Model = tv.c.TraceModel;
  var Selection = tv.c.Selection;
  var StubAnalysisResults = tv.c.analysis.StubAnalysisResults;
  var newSampleNamed = tv.c.test_utils.newSampleNamed;

  test('instantiate_withSingleSample', function() {
    var model = new Model();
    var t53;
    model.importTraces([], false, false, function() {
      t53 = model.getOrCreateProcess(52).getOrCreateThread(53);
      model.samples.push(newSampleNamed(t53, 'X', 'my-category',
                                        ['a', 'b', 'c'], 0.184));
    });

    var t53track = {};
    t53track.thread = t53;

    var selection = new Selection();

    assert.equal(selection.length, 0);
    selection.push(t53.samples[0]);
    assert.equal(selection.length, 1);

    var view = document.createElement('tv-c-single-sample-sub-view');
    view.selection = selection;
    this.addHTMLOutput(view);

    var table = tv.b.findDeepElementMatching(
        view, 'tracing-analysis-nested-table');

    var rows = table.tableRows;
    assert.equal(rows.length, 3);

    assert.equal(rows[0].value, 'X');
    assert.equal(rows[1].value.timestamp, 0.184);
    assert.equal(rows[2].value.stackFrame, t53.samples[0].leafStackFrame);
  });
});
</script>
