blob: aa028e5dd7ae0a1d94ce4e3015be1764e08cddc3 [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="/model/selection_state.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';
tr.b.unittest.testSuite(function() {
var LetterDotTrack = tr.c.tracks.LetterDotTrack;
var LetterDot = tr.c.tracks.LetterDot;
var Selection = tr.c.Selection;
var SelectionState = tr.model.SelectionState;
var Viewport = tr.c.TimelineViewport;
var createItems = function() {
var items = [
new LetterDot({selectionState: SelectionState.SELECTED}, 'a', 7, 5),
new LetterDot({selectionState: SelectionState.SELECTED}, 'b', 2, 20),
new LetterDot({selectionState: SelectionState.NONE}, 'c', 4, 35),
new LetterDot({selectionState: SelectionState.NONE}, 'd', 4, 50)
];
return items;
};
test('instantiate', function() {
var items = createItems();
var div = document.createElement('div');
var viewport = new Viewport(div);
var drawingContainer = new tr.c.tracks.DrawingContainer(viewport);
div.appendChild(drawingContainer);
var track = LetterDotTrack(viewport);
drawingContainer.appendChild(track);
this.addHTMLOutput(div);
drawingContainer.invalidate();
track.items = items;
var dt = new tr.c.TimelineDisplayTransform();
dt.xSetWorldBounds(0, 60, track.clientWidth);
track.viewport.setDisplayTransformImmediately(dt);
});
test('selectionHitTesting', function() {
var items = createItems();
var track = new LetterDotTrack(new Viewport());
track.items = items;
// Fake a view pixel size.
var devicePixelRatio = window.devicePixelRatio || 1;
var viewPixWidthWorld = 0.1 / devicePixelRatio;
// Hit outside range
var selection = [];
track.addIntersectingEventsInRangeToSelectionInWorldSpace(
3, 4, viewPixWidthWorld, selection);
assert.equal(selection.length, 0);
// Hit the first item, via pixel-nearness.
selection = [];
track.addIntersectingEventsInRangeToSelectionInWorldSpace(
19.98, 19.99, viewPixWidthWorld, selection);
assert.equal(selection.length, 1);
assert.equal(selection[0], items[1].modelItem);
// Hit the instance, between the 1st and 2nd snapshots
selection = [];
track.addIntersectingEventsInRangeToSelectionInWorldSpace(
30, 50, viewPixWidthWorld, selection);
assert.equal(selection.length, 2);
assert.equal(selection[0], items[2].modelItem);
assert.equal(selection[1], items[3].modelItem);
});
test('addEventNearToProvidedEventToSelection', function() {
var items = createItems();
var track = new LetterDotTrack(new Viewport());
track.items = items;
// Right from the middle of items.
var selection1 = [];
assert.isTrue(track.addEventNearToProvidedEventToSelection(
items[2].modelItem, 1, selection1));
assert.equal(selection1.length, 1);
assert.equal(selection1[0], items[3].modelItem);
// Left from the middle of items.
var selection2 = [];
assert.isTrue(track.addEventNearToProvidedEventToSelection(
items[2].modelItem, -1, selection2));
assert.equal(selection2.length, 1);
assert.equal(selection2[0], items[1].modelItem);
// Right from the right edge of items.
var selection3 = [];
assert.isFalse(track.addEventNearToProvidedEventToSelection(
items[3].modelItem, 1, selection3));
assert.equal(selection3.length, 0);
// Left from the left edge of items.
var selection4 = [];
assert.isFalse(track.addEventNearToProvidedEventToSelection(
items[0].modelItem, -1, selection4));
assert.equal(selection4.length, 0);
});
});
</script>