blob: 23d7bbc8e6f37b776988e0db5f92ed23b08789ce [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;
Chris Craik44c28202015-05-12 17:25:16 -0700113 track.addIntersectingEventsInRangeToSelection(
114 x, x + 1, y75, y75 + 1, sel);
Chris Craikb122baf2015-03-05 13:58:42 -0800115
116 assert.equal(sel.length, 2);
117 assert.equal(sel[0].series.counter, ctr);
118 assert.equal(sel[0].getSampleIndex(), 1);
Chris Craik19832152015-04-16 15:43:38 -0700119 assert.equal(sel[0].series.seriesIndex, 1);
Chris Craikb122baf2015-03-05 13:58:42 -0800120
121 assert.equal(sel[1].series.counter, ctr);
122 assert.equal(sel[1].getSampleIndex(), 1);
Chris Craik19832152015-04-16 15:43:38 -0700123 assert.equal(sel[1].series.seriesIndex, 0);
Chris Craikb122baf2015-03-05 13:58:42 -0800124
125 // Outside bounds.
126 sel = new tv.c.Selection();
127 var x = -0.5 * clientRect.width;
Chris Craik44c28202015-05-12 17:25:16 -0700128 track.addIntersectingEventsInRangeToSelection(
129 x, x + 1, y75, y75 + 1, sel);
Chris Craikb122baf2015-03-05 13:58:42 -0800130 assert.equal(sel.length, 0);
131
132 sel = new tv.c.Selection();
133 var x = 0.8 * clientRect.width;
Chris Craik44c28202015-05-12 17:25:16 -0700134 track.addIntersectingEventsInRangeToSelection(
135 x, x + 1, y75, y75 + 1, sel);
Chris Craikb122baf2015-03-05 13:58:42 -0800136 assert.equal(sel.length, 0);
137 });
138 });
139
140 test('counterTrackAddClosestEventToSelection', function() {
141 var timestamps = [0, 1, 2, 3, 4, 5, 6, 7];
142 var samples = [[0, 4, 1, 2, 3, 1, 3, 3.1],
143 [5, 3, 1, 1.1, 0, 7, 0, 0.5]];
144
145 runTest.call(this, timestamps, samples, function(ctr, container, track) {
146 // Before with not range.
147 var sel = new tv.c.Selection();
148 track.addClosestEventToSelection(-1, 0, 0, 0, sel);
149 assert.equal(sel.length, 0);
150
151 // Before with negative range.
152 var sel = new tv.c.Selection();
153 track.addClosestEventToSelection(-1, -10, 0, 0, sel);
154 assert.equal(sel.length, 0);
155
156 // Before first sample.
157 var sel = new tv.c.Selection();
158 track.addClosestEventToSelection(-1, 1, 0, 0, sel);
159 assert.equal(sel.length, 2);
160 assert.equal(sel[0].getSampleIndex(), 0);
161
162 // Between and closer to sample before.
163 var sel = new tv.c.Selection();
164 track.addClosestEventToSelection(1.3, 1, 0, 0, sel);
165 assert.equal(sel[0].getSampleIndex(), 1);
166
167 // Between samples with bad range.
168 var sel = new tv.c.Selection();
169 track.addClosestEventToSelection(1.45, 0.25, 0, 0, sel);
170 assert.equal(sel.length, 0);
171
172 // Between and closer to next sample.
173 var sel = new tv.c.Selection();
174 track.addClosestEventToSelection(4.7, 6, 0, 0, sel);
175 assert.equal(sel[0].getSampleIndex(), 5);
176
177 // After last sample with good range.
178 var sel = new tv.c.Selection();
179 track.addClosestEventToSelection(8.5, 2, 0, 0, sel);
180 assert.equal(sel[0].getSampleIndex(), 7);
181
182 // After last sample with bad range.
183 var sel = new tv.c.Selection();
184 track.addClosestEventToSelection(10, 1, 0, 0, sel);
185 assert.equal(sel.length, 0);
186 });
187 });
188});
189</script>
190