blob: e79974d5479c13e1195b05e25f5bdfd7a02e8d6d [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/core/trace_model/event.html">
<link rel="import" href="/core/timeline_viewport.html">
<link rel="import" href="/core/tracks/drawing_container.html">
<link rel="import" href="/core/tracks/letter_dot_track.html">
<script>
'use strict';
tv.b.unittest.testSuite(function() {
var LetterDotTrack = tv.c.tracks.LetterDotTrack;
var Selection = tv.c.Selection;
var SelectionState = tv.c.trace_model.SelectionState;
var Viewport = tv.c.TimelineViewport;
var createItems = function() {
var items = [
{start: 5, colorId: 7, dotLetter: 'a', selected: true},
{start: 20, colorId: 2, dotLetter: 'b', selected: true},
{start: 35, colorId: 4, dotLetter: 'c', selected: false},
{start: 50, colorId: 4, dotLetter: 'd', selected: false}
];
return items;
};
test('instantiate', function() {
var items = createItems();
items[1].selectionState = SelectionState.SELECTED;
var div = document.createElement('div');
var viewport = new Viewport(div);
var drawingContainer = new tv.c.tracks.DrawingContainer(viewport);
div.appendChild(drawingContainer);
var track = LetterDotTrack(viewport);
track.getModelEventFromItem = function(item) { return item; }
drawingContainer.appendChild(track);
this.addHTMLOutput(div);
drawingContainer.invalidate();
track.items = items;
var dt = new tv.c.TimelineDisplayTransform();
dt.xSetWorldBounds(0, 50, track.clientWidth);
track.viewport.setDisplayTransformImmediately(dt);
});
test('selectionHitTesting', function() {
var items = createItems();
var track = new LetterDotTrack(new Viewport());
track.getModelEventFromItem = function(item) { return item; }
track.items = items;
// Fake a view pixel size.
var devicePixelRatio = window.devicePixelRatio || 1;
var viewPixWidthWorld = 0.1 / devicePixelRatio;
// Hit outside range
var selection = [];
track.addIntersectingItemsInRangeToSelectionInWorldSpace(
3, 4, viewPixWidthWorld, selection);
assert.equal(selection.length, 0);
// Hit the first item, via pixel-nearness.
selection = [];
track.addIntersectingItemsInRangeToSelectionInWorldSpace(
19.98, 19.99, viewPixWidthWorld, selection);
assert.equal(selection.length, 1);
assert.equal(selection[0], items[1]);
// Hit the instance, between the 1st and 2nd snapshots
selection = [];
track.addIntersectingItemsInRangeToSelectionInWorldSpace(
30, 50, viewPixWidthWorld, selection);
assert.equal(selection.length, 2);
assert.equal(selection[0], items[2]);
assert.equal(selection[1], items[3]);
});
});
</script>