Html程序  |  205行  |  6.71 KB

<!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>iew tests</title>
<script src="base.js"></script>
<style>
  .view {
    border: 1px solid black;
    margin: 10px;
    height: 350px;
  }
  .find-dialog {
    border: 1px solid black;
    margin: 10px;
  }
</style>
</head>
<body>
  <script>
    base.require('unittest');
    base.require('test_utils');
    base.require('timeline_view');
    base.require('model');
  </script>
  <script>
    'use strict';

    var newSliceNamed = test_utils.newSliceNamed;

    function createFullyPopulatedModel(opt_withError, opt_withMetadata) {
      var withError = opt_withError !== undefined ? opt_withError : true;
      var withMetadata = opt_withMetadata !== undefined ?
          opt_withMetadata : true;

      var num_tests = 50;
      var testIndex = 0;
      var startTime = 0;

      var model = new tracing.Model();
      for (testIndex = 0; testIndex < num_tests; ++testIndex) {
        var process = model.getOrCreateProcess(10000 + testIndex);
        if (testIndex % 2 == 0) {
          var thread = process.getOrCreateThread('Thread Name Here');
          thread.slices.push(
              new tracing.model.Slice('foo', 'a', 0, startTime, {}, 1));
          thread.slices.push(
              new tracing.model.Slice('bar', 'b', 0,
                                        startTime + 1.15, {}, .5));
        } else {
          var thread = process.getOrCreateThread('Name');
          thread.slices.push(
              new tracing.model.Slice('foo', 'a', 0,
                                        startTime + .17, {}, .55));
          thread.slices.push(
              new tracing.model.Slice('bar', 'b', 0,
                                        startTime + 1.1, {}, .7));
        }
      }
      model.updateCategories_();

      // Add a known problematic piece of data to test the import errors UI.
      model.importErrors.push('Synthetic Import Error');
      model.updateBounds();

      // Add data with metadata information stored
      model.metadata.push({name: 'a', value: 'testA'});
      model.metadata.push({name: 'b', value: 'testB'});
      model.metadata.push({name: 'c', value: 'testC'});

      return model;
    }

    /*
     * This test just instantiates a View and adds it to the DOM
     * to help with non-unittest UI work.
     */
    function testInstantiateView() {
      var model = createFullyPopulatedModel(true, true);

      var view = new tracing.TimelineView();
      view.style.height = '400px';
      view.model = model;
      view.tabIndex = 0;
      view.focusElement = view;

      var selection = new tracing.Selection();
      view.timeline.addAllObjectsMatchingFilterToSelection({
          matchSlice: function() { return true;}
      }, selection);
      view.timeline.selection = selection;

      this.addHTMLOutput(undefined, view);
    }

    function testChangeModelToSomethingDifferent() {
      var model00 = createFullyPopulatedModel(false, false);
      var model11 = createFullyPopulatedModel(true, true);

      var view = new tracing.TimelineView();
      view.style.height = '400px';
      view.model = model00;
      view.model = undefined;
      view.model = model11;
      view.model = model00;
    }


    function testSetModelToSameThingAgain() {
      var model = createFullyPopulatedModel(false, false);

      // Create a view with am model.
      var view = new tracing.TimelineView();
      view.style.height = '400px';
      view.model = model;

      // Mutate the model and update the view.
      var t123 = model.getOrCreateProcess(123).getOrCreateThread(123);
      t123.pushSlice(newSliceNamed('somethingUnusual', 0, 5));
      view.model = model;

      // Verify that the new bits of the model show up in the view.
      var selection = new tracing.Selection();
      var filter = new tracing.TitleFilter('somethingUnusual');
      view.timeline.addAllObjectsMatchingFilterToSelection(filter, selection);
      assertEquals(selection.length, 1);
    }

    function testChangeModelToSomethingDifferent() {
      var model00 = createFullyPopulatedModel(false, false);
      var model11 = createFullyPopulatedModel(true, true);

      var view = new tracing.TimelineView();
      view.style.height = '400px';
      view.model = model00;
      view.model = undefined;
      view.model = model11;
      view.model = model00;
    }


    function testSetModelToSameThingAgain() {
      var model = createFullyPopulatedModel(false, false);

      // Create a view with am model.
      var view = new tracing.TimelineView();
      view.style.height = '400px';
      view.model = model;

      // Mutate the model and update the view.
      var t123 = model.getOrCreateProcess(123).getOrCreateThread(123);
      t123.pushSlice(newSliceNamed('somethingUnusual', 0, 5));
      view.model = model;

      // Verify that the new bits of the model show up in the view.
      var selection = new tracing.Selection();
      var filter = new tracing.TitleFilter('somethingUnusual');
      view.timeline.addAllObjectsMatchingFilterToSelection(filter, selection);
      assertEquals(selection.length, 1);
    }

    function testSetModelUpdatesCategories() {
      var model = new tracing.Model();
      var p1 = model.getOrCreateProcess(1);
      var t1 = p1.getOrCreateThread(1);

      t1.pushSlice(new tracing.model.ThreadSlice('foo', 'a',
                                                 0, 1, {}, 3));
      t1.pushSlice(new tracing.model.ThreadSlice('bar', 'b',
                                                 0, 1.1, {}, 2.8));
      t1.pushSlice(new tracing.model.ThreadSlice('baz', 'b',
                                                 0, 1.2, {}, 2.4));
      model.updateCategories_();
      model.updateBounds();

      var view = new tracing.TimelineView();
      view.settings.set('foo', true, 'categories');
      view.settings.set('bar', false, 'categories');
      view.model = model;

      assertUndefined(view.timeline.categoryFilter_.categories_['foo']);
      assertTrue(view.timeline.categoryFilter_.categories_['bar']);
      assertUndefined(view.timeline.categoryFilter_.categories_['baz']);
    }

    function testUpdateCategoryFilterFromSettings() {
      var view = new tracing.TimelineView();
      view.timeline_ = {};
      view.settings.set('foo', true, 'categories');
      view.settings.set('bar', false, 'categories');
      view.settings.set('baz', false, 'categories');
      view.updateCategoryFilterFromSettings_();
      assertUndefined(view.timeline_.categoryFilter.categories_['foo']);
      assertTrue(view.timeline_.categoryFilter.categories_['bar']);
      assertTrue(view.timeline_.categoryFilter.categories_['baz']);
    }

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