object_instance_track_test.html revision 4a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724
1<!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="/tracing/core/test_utils.html">
9<link rel="import" href="/tracing/model/event_set.html">
10<link rel="import" href="/tracing/model/object_collection.html">
11<link rel="import" href="/tracing/model/selection_state.html">
12<link rel="import" href="/tracing/ui/timeline_viewport.html">
13<link rel="import" href="/tracing/ui/tracks/drawing_container.html">
14<link rel="import" href="/tracing/ui/tracks/object_instance_track.html">
15
16<script>
17'use strict';
18
19tr.b.unittest.testSuite(function() { // @suppress longLineCheck
20  var EventSet = tr.model.EventSet;
21  var ObjectInstanceTrack = tr.ui.tracks.ObjectInstanceTrack;
22  var Viewport = tr.ui.TimelineViewport;
23
24  var createObjects = function() {
25    var objects = new tr.model.ObjectCollection({});
26    objects.idWasCreated('0x1000', 'tr.e.cc', 'Frame', 10);
27    objects.addSnapshot('0x1000', 'tr.e.cc', 'Frame', 10, 'snapshot-1');
28    objects.addSnapshot('0x1000', 'tr.e.cc', 'Frame', 25, 'snapshot-2');
29    objects.addSnapshot('0x1000', 'tr.e.cc', 'Frame', 40, 'snapshot-3');
30    objects.idWasDeleted('0x1000', 'tr.e.cc', 'Frame', 45);
31
32    objects.idWasCreated('0x1001', 'skia', 'Picture', 20);
33    objects.addSnapshot('0x1001', 'skia', 'Picture', 20, 'snapshot-1');
34    objects.idWasDeleted('0x1001', 'skia', 'Picture', 25);
35    return objects;
36  };
37
38  test('instantiate', function() {
39    var objects = createObjects();
40    var frames = objects.getAllInstancesByTypeName()['Frame'];
41    frames[0].snapshots[1].selectionState =
42        tr.model.SelectionState.SELECTED;
43
44    var div = document.createElement('div');
45
46    var viewport = new Viewport(div);
47    var drawingContainer = new tr.ui.tracks.DrawingContainer(viewport);
48    div.appendChild(drawingContainer);
49
50    var track = ObjectInstanceTrack(viewport);
51    drawingContainer.appendChild(track);
52
53    this.addHTMLOutput(div);
54    drawingContainer.invalidate();
55
56    track.heading = 'testBasic';
57    track.objectInstances = frames;
58    var dt = new tr.ui.TimelineDisplayTransform();
59    dt.xSetWorldBounds(0, 50, track.clientWidth);
60    track.viewport.setDisplayTransformImmediately(dt);
61  });
62
63  test('selectionHitTestingWithThreadTrack', function() {
64    var objects = createObjects();
65    var frames = objects.getAllInstancesByTypeName()['Frame'];
66
67    var track = ObjectInstanceTrack(new Viewport());
68    track.objectInstances = frames;
69
70    // Hit outside range
71    var selection = new EventSet();
72    track.addIntersectingEventsInRangeToSelectionInWorldSpace(
73        8, 8.1, 0.1, selection);
74    assert.equal(selection.length, 0);
75
76    // Hit the first snapshot, via pixel-nearness.
77    selection = new EventSet();
78    track.addIntersectingEventsInRangeToSelectionInWorldSpace(
79        9.98, 9.99, 0.1, selection);
80    assert.equal(selection.length, 1);
81    assert.instanceOf(selection[0], tr.model.ObjectSnapshot);
82
83    // Hit the instance, between the 1st and 2nd snapshots
84    selection = new EventSet();
85    track.addIntersectingEventsInRangeToSelectionInWorldSpace(
86        20, 20.1, 0.1, selection);
87    assert.equal(selection.length, 1);
88    assert.instanceOf(selection[0], tr.model.ObjectInstance);
89  });
90
91  test('addEventNearToProvidedEventToSelection', function() {
92    var objects = createObjects();
93    var frames = objects.getAllInstancesByTypeName()['Frame'];
94
95    var track = ObjectInstanceTrack(new Viewport());
96    track.objectInstances = frames;
97
98    var instance = new tr.model.ObjectInstance(
99        {}, '0x1000', 'cat', 'n', 10);
100
101    assert.doesNotThrow(function() {
102      track.addEventNearToProvidedEventToSelection(instance, 0, undefined);
103    });
104  });
105});
106</script>
107
108