<!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/analysis/analysis_results.html">
<link rel="import" href="/core/analysis/stub_analysis_table.html">
<link rel="import" href="/core/selection.html">

<script>
'use strict';

tv.b.unittest.testSuite(function() {
  test('selectionChangingLink', function() {
    var r = tv.c.analysis.AnalysisResults();
    var track = {};
    var linkEl = r.createSelectionChangingLink('hello', function() {
      var selection = new tv.c.Selection();
      selection.push({guid: 1});
      return selection;
    });
    var didRequestSelectionChange = false;
    linkEl.addEventListener('requestSelectionChange', function(e) {
      didRequestSelectionChange = true;
    });
    linkEl.click();
    assert.isTrue(didRequestSelectionChange);
  });

  test('displayValuesInInfoRow', function() {
    var r = new tv.c.analysis.AnalysisResults();
    var table = new tv.c.analysis.StubAnalysisTable();
    var node;
    var sectionNode;
    assert.equal(table.nodeCount, 0);

    r.appendInfoRow(table, 'false_value', false);
    assert.equal(table.nodeCount, 1);
    sectionNode = table.lastNode;
    assert.equal(sectionNode.nodeCount, 1);
    node = sectionNode.lastNode;
    assert.equal(node.children[0].innerText, 'false_value');
    assert.equal(node.children[1].$.content.textContent, 'false');

    r.appendInfoRow(table, 'true_value', true);

    assert.equal(sectionNode.nodeCount, 1);
    node = sectionNode.lastNode;
    assert.equal(node.children[0].innerText, 'true_value');
    assert.equal(node.children[1].$.content.textContent, 'true');

    r.appendInfoRow(table, 'string_value', 'a string');
    assert.equal(sectionNode.nodeCount, 1);
    node = sectionNode.lastNode;
    assert.equal(node.children[0].innerText, 'string_value');
    assert.equal(node.children[1].$.content.textContent, '"a string"');

    r.appendInfoRow(table, 'number_value', 12345);
    assert.equal(sectionNode.nodeCount, 1);
    node = sectionNode.lastNode;
    assert.equal(node.children[0].innerText, 'number_value');
    assert.equal(node.children[1].$.content.textContent, '12345');

    r.appendInfoRow(table, 'undefined', undefined);
    assert.equal(sectionNode.nodeCount, 1);
    node = sectionNode.lastNode;
    assert.equal(node.children[0].innerText, 'undefined');
    assert.equal(node.children[1].innerText, '');

    assert.equal(sectionNode.nodeCount, 0);
    assert.equal(table.nodeCount, 0);
  });
});
</script>
