device_track_test.html revision 4a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724
1<!DOCTYPE html>
2<!--
3Copyright (c) 2015 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7
8<link rel='import' href='/tracing/core/constants.html'>
9<link rel='import' href='/tracing/model/device.html'>
10<link rel='import' href='/tracing/model/model.html'>
11<link rel='import' href='/tracing/ui/timeline_display_transform.html'>
12<link rel='import' href='/tracing/ui/timeline_viewport.html'>
13<link rel='import' href='/tracing/ui/tracks/device_track.html'>
14<link rel='import' href='/tracing/ui/tracks/drawing_container.html'>
15<link rel='import' href='/tracing/ui/tracks/event_to_track_map.html'>
16
17<script>
18'use strict';
19
20tr.b.unittest.testSuite(function() {
21
22  var Device = tr.model.Device;
23  var DeviceTrack = tr.ui.tracks.DeviceTrack;
24  var Model = tr.Model;
25  var PowerSeries = tr.model.PowerSeries;
26
27  var createDrawingContainer = function(series) {
28    var div = document.createElement('div');
29    var viewport = new tr.ui.TimelineViewport(div);
30    var drawingContainer = new tr.ui.tracks.DrawingContainer(viewport);
31    div.appendChild(drawingContainer);
32
33    if (series) {
34      series.updateBounds();
35      setDisplayTransformFromBounds(viewport, series.bounds);
36    }
37
38    return drawingContainer;
39  };
40
41  /**
42   * Sets the mapping between the input range of timestamps and the output range
43   * of horizontal pixels.
44   */
45  var setDisplayTransformFromBounds = function(viewport, bounds) {
46    var dt = new tr.ui.TimelineDisplayTransform();
47    var pixelRatio = window.devicePixelRatio || 1;
48    var chartPixelWidth =
49        (window.innerWidth - tr.c.constants.HEADING_WIDTH) * pixelRatio;
50    dt.xSetWorldBounds(bounds.min, bounds.max, chartPixelWidth);
51    viewport.setDisplayTransformImmediately(dt);
52  };
53
54  test('instantiate', function() {
55    var device = new Device(new Model());
56    device.powerSeries = new PowerSeries(device);
57    device.powerSeries.addPowerSample(0, 1);
58    device.powerSeries.addPowerSample(0.5, 2);
59    device.powerSeries.addPowerSample(1, 3);
60    device.powerSeries.addPowerSample(1.5, 4);
61
62    var drawingContainer = createDrawingContainer(device.powerSeries);
63    var track = new DeviceTrack(drawingContainer.viewport);
64    track.device = device;
65    drawingContainer.appendChild(track);
66
67    this.addHTMLOutput(drawingContainer);
68  });
69
70  test('instantiate_noPowerSeries', function() {
71    var device = new Device(new Model());
72
73    var drawingContainer = createDrawingContainer(device.powerSeries);
74    var track = new DeviceTrack(drawingContainer.viewport);
75    track.device = device;
76    drawingContainer.appendChild(track);
77
78    // Adding output should throw due to no visible content.
79    assert.throw(function() { this.addHTMLOutput(drawingContainer); });
80  });
81
82  test('setDevice_clearsTrackBeforeUpdating', function() {
83    var device = new Device(new Model());
84    device.powerSeries = new PowerSeries(device);
85    device.powerSeries.addPowerSample(0, 1);
86    device.powerSeries.addPowerSample(0.5, 2);
87    device.powerSeries.addPowerSample(1, 3);
88    device.powerSeries.addPowerSample(1.5, 4);
89
90    var drawingContainer = createDrawingContainer(device.powerSeries);
91
92    // Set the device twice and make sure that this doesn't result in
93    // the track appearing twice.
94    var track = new DeviceTrack(drawingContainer.viewport);
95    track.device = device;
96    track.device = device;
97    drawingContainer.appendChild(track);
98
99    this.addHTMLOutput(drawingContainer);
100
101    // The device track should still have two subtracks: one counter track and
102    // one spacing track.
103    assert.equal(track.tracks_.length, 2);
104  });
105
106  test('addContainersToTrackMap', function() {
107    var device = new Device(new Model());
108    device.powerSeries = new PowerSeries(device);
109    device.powerSeries.addPowerSample(0, 1000);
110
111    var drawingContainer = createDrawingContainer(device.series);
112    var track = new DeviceTrack(drawingContainer.viewport);
113    track.device = device;
114
115    var containerToTrackMap = new tr.ui.tracks.ContainerToTrackMap();
116    track.addContainersToTrackMap(containerToTrackMap);
117
118    assert.equal(containerToTrackMap.getTrackByStableId('Device'), track);
119    assert.equal(
120        containerToTrackMap.getTrackByStableId('Device.PowerSeries'),
121        track.powerSeriesTrack);
122  });
123
124  test('addEventsToTrackMap', function() {
125    var device = new Device(new Model());
126    device.powerSeries = new PowerSeries(device);
127    device.powerSeries.addPowerSample(0, 1);
128    device.powerSeries.addPowerSample(0.5, 2);
129
130    var div = document.createElement('div');
131    var viewport = new tr.ui.TimelineViewport(div);
132
133    var track = new DeviceTrack(viewport);
134    track.device = device;
135
136    var eventToTrackMap = new tr.ui.tracks.EventToTrackMap();
137    track.addEventsToTrackMap(eventToTrackMap);
138
139    var expected = new tr.ui.tracks.EventToTrackMap();
140    expected[device.powerSeries.samples[0].guid] = track.powerSeriesTrack;
141    expected[device.powerSeries.samples[1].guid] = track.powerSeriesTrack;
142
143    assert.deepEqual(eventToTrackMap, expected);
144  });
145});
146</script>
147