| <!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> |
| |