<!DOCTYPE HTML>
<html>
<!--
Copyright (c) 2012 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.
-->
<head>
<title>TimelineCategoryFilter tests</title>
<script src="base.js"></script>
</head>
<body>
  <script>
    base.require('unittest');
    base.require('test_utils');
    base.require('settings');
    base.require('timeline_category_filter_dialog');
    base.require('timeline_model');
  </script>
  <script>
    'use strict';

    var testModel = new tracing.TimelineModel();
    var p1 = testModel.getOrCreateProcess(1);
    var t1 = p1.getOrCreateThread(1);
    t1.pushSlice(new tracing.TimelineThreadSlice('one', 'a', 0, 1, {}, 3));
    t1.pushSlice(new tracing.TimelineThreadSlice('two', 'b', 0, 1, {}, 3));
    t1.pushSlice(new tracing.TimelineThreadSlice('three', 'c', 0, 1, {}, 3));
    t1.pushSlice(new tracing.TimelineThreadSlice('', 'd', 0, 1, {}, 3));
    t1.pushSlice(new tracing.TimelineThreadSlice('one', 'e', 0, 1, {}, 3));
    testModel.updateCategories_();



    function testCategoryFilterDialog_UpdateForm_NoSettings() {
      var settings = new base.Settings();

      var dlg = new tracing.TimelineCategoryFilterDialog();
      dlg.model = testModel;
      dlg.settings = settings;
      dlg.updateForm_();

      var checkboxes = dlg.formEl_.getElementsByTagName('input');
      assertEquals(3, checkboxes.length);
      assertEquals('one', checkboxes[0].id);
      assertEquals('one', checkboxes[0].value);
      assertEquals(true, checkboxes[0].checked);
      assertEquals('two', checkboxes[1].id);
      assertEquals('two', checkboxes[1].value);
      assertEquals(true, checkboxes[1].checked);
      assertEquals('three', checkboxes[2].id);
      assertEquals('three', checkboxes[2].value);
      assertEquals(true, checkboxes[2].checked);
      var labels = dlg.formEl_.getElementsByTagName('label');
      assertEquals(3, labels.length);
      assertEquals('one', labels[0].textContent);
      assertEquals('two', labels[1].textContent);
      assertEquals('three', labels[2].textContent);
    }

    function testCategoryFilterDialog_UpdateForm_Settings() {
      var settings = new base.Settings();
      settings.set('one', true, 'categories');
      settings.set('two', false, 'categories');

      var dlg = new tracing.TimelineCategoryFilterDialog();
      dlg.model = testModel;
      dlg.settings = settings;
      dlg.updateForm_();

      var checkboxes = dlg.formEl_.getElementsByTagName('input');
      assertEquals(3, checkboxes.length);
      assertEquals('one', checkboxes[0].id);
      assertEquals('one', checkboxes[0].value);
      assertEquals(true, checkboxes[0].checked);
      assertEquals('two', checkboxes[1].id);
      assertEquals('two', checkboxes[1].value);
      assertEquals(false, checkboxes[1].checked);
      assertEquals('three', checkboxes[2].id);
      assertEquals('three', checkboxes[2].value);
      assertEquals(true, checkboxes[2].checked);
      var labels = dlg.formEl_.getElementsByTagName('label');
      assertEquals(3, labels.length);
      assertEquals('one', labels[0].textContent);
      assertEquals('two', labels[1].textContent);
      assertEquals('three', labels[2].textContent);
    }

  </script>
</body>
</html>
