blob: 3ecc8baf4527d019023b80095000da996249dab8 [file] [log] [blame]
Chris Craikb122baf2015-03-05 13:58:42 -08001<!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="/core/test_utils.html">
Chris Craik19832152015-04-16 15:43:38 -07009<link rel="import" href="/core/trace_model/selection_state.html">
Chris Craikb122baf2015-03-05 13:58:42 -080010<link rel="import" href="/core/timeline_viewport.html">
11<link rel="import" href="/core/tracks/drawing_container.html">
12<link rel="import" href="/core/tracks/letter_dot_track.html">
13
14<script>
15'use strict';
16
17tv.b.unittest.testSuite(function() {
18 var LetterDotTrack = tv.c.tracks.LetterDotTrack;
Chris Craik19832152015-04-16 15:43:38 -070019 var LetterDot = tv.c.tracks.LetterDot;
Chris Craikb122baf2015-03-05 13:58:42 -080020 var Selection = tv.c.Selection;
21 var SelectionState = tv.c.trace_model.SelectionState;
22 var Viewport = tv.c.TimelineViewport;
23
24 var createItems = function() {
25 var items = [
Chris Craik19832152015-04-16 15:43:38 -070026 new LetterDot({selectionState: SelectionState.SELECTED}, 'a', 7, 5),
27 new LetterDot({selectionState: SelectionState.SELECTED}, 'b', 2, 20),
28 new LetterDot({selectionState: SelectionState.NONE}, 'c', 4, 35),
29 new LetterDot({selectionState: SelectionState.NONE}, 'd', 4, 50)
Chris Craikb122baf2015-03-05 13:58:42 -080030 ];
31 return items;
32 };
33
34 test('instantiate', function() {
35 var items = createItems();
Chris Craikb122baf2015-03-05 13:58:42 -080036
37 var div = document.createElement('div');
38
39 var viewport = new Viewport(div);
40 var drawingContainer = new tv.c.tracks.DrawingContainer(viewport);
41 div.appendChild(drawingContainer);
42
43 var track = LetterDotTrack(viewport);
Chris Craikb122baf2015-03-05 13:58:42 -080044 drawingContainer.appendChild(track);
45
46 this.addHTMLOutput(div);
47 drawingContainer.invalidate();
48
49 track.items = items;
50 var dt = new tv.c.TimelineDisplayTransform();
Chris Craik19832152015-04-16 15:43:38 -070051 dt.xSetWorldBounds(0, 60, track.clientWidth);
Chris Craikb122baf2015-03-05 13:58:42 -080052 track.viewport.setDisplayTransformImmediately(dt);
53 });
54
55 test('selectionHitTesting', function() {
56 var items = createItems();
57
58 var track = new LetterDotTrack(new Viewport());
Chris Craikb122baf2015-03-05 13:58:42 -080059 track.items = items;
60
61 // Fake a view pixel size.
62 var devicePixelRatio = window.devicePixelRatio || 1;
63 var viewPixWidthWorld = 0.1 / devicePixelRatio;
64
65 // Hit outside range
66 var selection = [];
Chris Craik44c28202015-05-12 17:25:16 -070067 track.addIntersectingEventsInRangeToSelectionInWorldSpace(
Chris Craikb122baf2015-03-05 13:58:42 -080068 3, 4, viewPixWidthWorld, selection);
69 assert.equal(selection.length, 0);
70
71 // Hit the first item, via pixel-nearness.
72 selection = [];
Chris Craik44c28202015-05-12 17:25:16 -070073 track.addIntersectingEventsInRangeToSelectionInWorldSpace(
Chris Craikb122baf2015-03-05 13:58:42 -080074 19.98, 19.99, viewPixWidthWorld, selection);
75 assert.equal(selection.length, 1);
Chris Craik19832152015-04-16 15:43:38 -070076 assert.equal(selection[0], items[1].modelItem);
Chris Craikb122baf2015-03-05 13:58:42 -080077
78 // Hit the instance, between the 1st and 2nd snapshots
79 selection = [];
Chris Craik44c28202015-05-12 17:25:16 -070080 track.addIntersectingEventsInRangeToSelectionInWorldSpace(
Chris Craikb122baf2015-03-05 13:58:42 -080081 30, 50, viewPixWidthWorld, selection);
82 assert.equal(selection.length, 2);
Chris Craik19832152015-04-16 15:43:38 -070083 assert.equal(selection[0], items[2].modelItem);
84 assert.equal(selection[1], items[3].modelItem);
85 });
86
Chris Craik44c28202015-05-12 17:25:16 -070087 test('addEventNearToProvidedEventToSelection', function() {
Chris Craik19832152015-04-16 15:43:38 -070088 var items = createItems();
89
90 var track = new LetterDotTrack(new Viewport());
91 track.items = items;
92
93 // Right from the middle of items.
94 var selection1 = [];
Chris Craik44c28202015-05-12 17:25:16 -070095 assert.isTrue(track.addEventNearToProvidedEventToSelection(
Chris Craik19832152015-04-16 15:43:38 -070096 items[2].modelItem, 1, selection1));
97 assert.equal(selection1.length, 1);
98 assert.equal(selection1[0], items[3].modelItem);
99
100 // Left from the middle of items.
101 var selection2 = [];
Chris Craik44c28202015-05-12 17:25:16 -0700102 assert.isTrue(track.addEventNearToProvidedEventToSelection(
Chris Craik19832152015-04-16 15:43:38 -0700103 items[2].modelItem, -1, selection2));
104 assert.equal(selection2.length, 1);
105 assert.equal(selection2[0], items[1].modelItem);
106
107 // Right from the right edge of items.
108 var selection3 = [];
Chris Craik44c28202015-05-12 17:25:16 -0700109 assert.isFalse(track.addEventNearToProvidedEventToSelection(
Chris Craik19832152015-04-16 15:43:38 -0700110 items[3].modelItem, 1, selection3));
111 assert.equal(selection3.length, 0);
112
113 // Left from the left edge of items.
114 var selection4 = [];
Chris Craik44c28202015-05-12 17:25:16 -0700115 assert.isFalse(track.addEventNearToProvidedEventToSelection(
Chris Craik19832152015-04-16 15:43:38 -0700116 items[0].modelItem, -1, selection4));
117 assert.equal(selection4.length, 0);
Chris Craikb122baf2015-03-05 13:58:42 -0800118 });
119});
120</script>
121