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