blob: 8e4b194bb2bda425e1033a74d236ee9253c649da [file] [log] [blame]
Chris Craikb122baf2015-03-05 13:58:42 -08001<!DOCTYPE html>
2<!--
3Copyright (c) 2013 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="/core/test_utils.html">
9<link rel="import" href="/core/timeline_track_view.html">
10
11<script>
12'use strict';
13
14tv.b.unittest.testSuite(function() {
15 var Counter = tv.c.trace_model.Counter;
16 var Viewport = tv.c.TimelineViewport;
17 var CounterTrack = tv.c.tracks.CounterTrack;
18
19 var runTest = function(timestamps, samples, testFn) {
20 var testEl = document.createElement('div');
21
22 var ctr = new Counter(undefined, 'foo', '', 'foo');
23 var n = samples.length;
24
25 for (var i = 0; i < n; ++i) {
26 ctr.addSeries(new tv.c.trace_model.CounterSeries('value' + i,
27 tv.b.ui.getColorIdForGeneralPurposeString('value' + i)));
28 }
29
30 for (var i = 0; i < samples.length; ++i) {
31 for (var k = 0; k < timestamps.length; ++k) {
32 ctr.series[i].addCounterSample(timestamps[k], samples[i][k]);
33 }
34 }
35
36 ctr.updateBounds();
37
38 var viewport = new Viewport(testEl);
39
40 var drawingContainer = new tv.c.tracks.DrawingContainer(viewport);
41 testEl.appendChild(drawingContainer);
42
43 var track = new CounterTrack(viewport);
44 drawingContainer.appendChild(track);
45 this.addHTMLOutput(testEl);
46
47 // Force the container to update sizes so the test can use coordinates that
48 // make sense. This has to be after the adding of the track as we need to
49 // use the track header to figure out our positioning.
50 drawingContainer.updateCanvasSizeIfNeeded_();
51
52 var pixelRatio = window.devicePixelRatio || 1;
53
54 track.heading = ctr.name;
55 track.counter = ctr;
56 var dt = new tv.c.TimelineDisplayTransform();
57 dt.xSetWorldBounds(0, 10, track.clientWidth * pixelRatio);
58 track.viewport.setDisplayTransformImmediately(dt);
59
60 testFn(ctr, drawingContainer, track);
61 };
62
63 test('instantiate', function() {
64 var ctr = new Counter(undefined, 'testBasicCounter', '',
65 'testBasicCounter');
66 ctr.addSeries(new tv.c.trace_model.CounterSeries('value1',
67 tv.b.ui.getColorIdForGeneralPurposeString('testBasicCounter.value1')));
68 ctr.addSeries(new tv.c.trace_model.CounterSeries('value2',
69 tv.b.ui.getColorIdForGeneralPurposeString('testBasicCounter.value2')));
70
71 var timestamps = [0, 1, 2, 3, 4, 5, 6, 7];
72 var samples = [[0, 3, 1, 2, 3, 1, 3, 3.1],
73 [5, 3, 1, 1.1, 0, 7, 0, 0.5]];
74 for (var i = 0; i < samples.length; ++i) {
75 for (var k = 0; k < timestamps.length; ++k) {
76 ctr.series[i].addCounterSample(timestamps[k], samples[i][k]);
77 }
78 }
79
80 ctr.updateBounds();
81
82 var div = document.createElement('div');
83 var viewport = new Viewport(div);
84
85 var drawingContainer = new tv.c.tracks.DrawingContainer(viewport);
86 div.appendChild(drawingContainer);
87
88 var track = new CounterTrack(viewport);
89 drawingContainer.appendChild(track);
90
91 this.addHTMLOutput(div);
92 drawingContainer.invalidate();
93
94 track.heading = ctr.name;
95 track.counter = ctr;
96 var dt = new tv.c.TimelineDisplayTransform();
97 dt.xSetWorldBounds(0, 7.7, track.clientWidth);
98 track.viewport.setDisplayTransformImmediately(dt);
99 });
100
101 test('basicCounterXPointPicking', function() {
102 var timestamps = [0, 1, 2, 3, 4, 5, 6, 7];
103 var samples = [[0, 3, 1, 2, 3, 1, 3, 3.1],
104 [5, 3, 1, 1.1, 0, 7, 0, 0.5]];
105
106 runTest.call(this, timestamps, samples, function(ctr, container, track) {
107 var clientRect = track.getBoundingClientRect();
108 var y75 = clientRect.top + (0.75 * clientRect.height);
109
110 // In bounds.
111 var sel = new tv.c.Selection();
112 var x = 0.15 * clientRect.width;
113 track.addIntersectingItemsInRangeToSelection(x, x + 1, y75, y75 + 1, sel);
114
115 assert.equal(sel.length, 2);
116 assert.equal(sel[0].series.counter, ctr);
117 assert.equal(sel[0].getSampleIndex(), 1);
118 assert.equal(sel[0].series.seriesIndex, 0);
119
120 assert.equal(sel[1].series.counter, ctr);
121 assert.equal(sel[1].getSampleIndex(), 1);
122 assert.equal(sel[1].series.seriesIndex, 1);
123
124 // Outside bounds.
125 sel = new tv.c.Selection();
126 var x = -0.5 * clientRect.width;
127 track.addIntersectingItemsInRangeToSelection(x, x + 1, y75, y75 + 1, sel);
128 assert.equal(sel.length, 0);
129
130 sel = new tv.c.Selection();
131 var x = 0.8 * clientRect.width;
132 track.addIntersectingItemsInRangeToSelection(x, x + 1, y75, y75 + 1, sel);
133 assert.equal(sel.length, 0);
134 });
135 });
136
137 test('counterTrackAddClosestEventToSelection', function() {
138 var timestamps = [0, 1, 2, 3, 4, 5, 6, 7];
139 var samples = [[0, 4, 1, 2, 3, 1, 3, 3.1],
140 [5, 3, 1, 1.1, 0, 7, 0, 0.5]];
141
142 runTest.call(this, timestamps, samples, function(ctr, container, track) {
143 // Before with not range.
144 var sel = new tv.c.Selection();
145 track.addClosestEventToSelection(-1, 0, 0, 0, sel);
146 assert.equal(sel.length, 0);
147
148 // Before with negative range.
149 var sel = new tv.c.Selection();
150 track.addClosestEventToSelection(-1, -10, 0, 0, sel);
151 assert.equal(sel.length, 0);
152
153 // Before first sample.
154 var sel = new tv.c.Selection();
155 track.addClosestEventToSelection(-1, 1, 0, 0, sel);
156 assert.equal(sel.length, 2);
157 assert.equal(sel[0].getSampleIndex(), 0);
158
159 // Between and closer to sample before.
160 var sel = new tv.c.Selection();
161 track.addClosestEventToSelection(1.3, 1, 0, 0, sel);
162 assert.equal(sel[0].getSampleIndex(), 1);
163
164 // Between samples with bad range.
165 var sel = new tv.c.Selection();
166 track.addClosestEventToSelection(1.45, 0.25, 0, 0, sel);
167 assert.equal(sel.length, 0);
168
169 // Between and closer to next sample.
170 var sel = new tv.c.Selection();
171 track.addClosestEventToSelection(4.7, 6, 0, 0, sel);
172 assert.equal(sel[0].getSampleIndex(), 5);
173
174 // After last sample with good range.
175 var sel = new tv.c.Selection();
176 track.addClosestEventToSelection(8.5, 2, 0, 0, sel);
177 assert.equal(sel[0].getSampleIndex(), 7);
178
179 // After last sample with bad range.
180 var sel = new tv.c.Selection();
181 track.addClosestEventToSelection(10, 1, 0, 0, sel);
182 assert.equal(sel.length, 0);
183 });
184 });
185});
186</script>
187