blob: 316e1bf38e87d85f34683f871bbde15300367158 [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/event.html">
<link rel="import" href="/model/event_set.html">
<link rel="import" href="/model/selection_state.html">
<link rel="import" href="/ui/timeline_track_view.html">
<link rel="import" href="/ui/tracks/chart_axis.html">
<link rel="import" href="/ui/tracks/chart_point.html">
<link rel="import" href="/ui/tracks/chart_series.html">
<link rel="import" href="/ui/tracks/chart_track.html">
<link rel="import" href="/ui/tracks/event_to_track_map.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var ChartAxis = tr.ui.tracks.ChartAxis;
var ChartPoint = tr.ui.tracks.ChartPoint;
var ChartSeries = tr.ui.tracks.ChartSeries;
var ChartSeriesType = tr.ui.tracks.ChartSeriesType;
var ChartTrack = tr.ui.tracks.ChartTrack;
var Event = tr.model.Event;
var EventSet = tr.model.EventSet;
var EventToTrackMap = tr.ui.tracks.EventToTrackMap;
var SelectionState = tr.model.SelectionState;
var Viewport = tr.ui.TimelineViewport;
function buildPoint(x, y) {
var event = new Event();
return new ChartPoint(event, x, y);
}
function buildTrack(opt_viewport) {
var viewport = opt_viewport || new Viewport(document.createElement('div'));
var axis1 = new ChartAxis(0, 2);
var axis2 = new ChartAxis(-100, 100);
var points1 = [
buildPoint(-2.5, 2),
buildPoint(-1.5, 1),
buildPoint(-0.5, 0),
buildPoint(0.5, 1),
buildPoint(1.5, 2),
buildPoint(2.5, 0)
];
var renderingConfig1 = {
chartType: ChartSeriesType.AREA,
colorId: 6,
selectedPointSize: 7
};
var series1 = new ChartSeries(points1, axis1, renderingConfig1);
var points2 = [
buildPoint(-2.3, 0.2),
buildPoint(-1.3, 1.2),
buildPoint(-0.3, 2.2),
buildPoint(0.3, 1.2),
buildPoint(1.3, 0.2),
buildPoint(2.3, 0)
];
var renderingConfig2 = {
chartType: ChartSeriesType.AREA,
colorId: 4,
selectedPointSize: 10
};
var series2 = new ChartSeries(points2, axis1, renderingConfig2);
var points3 = [
buildPoint(-3, -50),
buildPoint(-2.4, -40),
buildPoint(-1.8, -30),
buildPoint(-1.2, -20),
buildPoint(-0.6, -10),
buildPoint(0, 0),
buildPoint(0.6, 10),
buildPoint(1.2, 20),
buildPoint(1.8, 30),
buildPoint(2.4, 40),
buildPoint(3, 50)
];
var renderingConfig3 = {
chartType: ChartSeriesType.LINE,
lineWidth: 2
};
var series3 = new ChartSeries(points3, axis2, renderingConfig3);
var track = new ChartTrack(viewport);
track.series = [series1, series2, series3];
return track;
}
test('instantiate_lowDetailsWithoutSelection', function() {
var div = document.createElement('div');
var viewport = new Viewport(div);
var drawingContainer = new tr.ui.tracks.DrawingContainer(viewport);
div.appendChild(drawingContainer);
var track = buildTrack(viewport);
drawingContainer.appendChild(track);
this.addHTMLOutput(div);
drawingContainer.invalidate();
var dt = new tr.ui.TimelineDisplayTransform();
var pixelRatio = window.devicePixelRatio || 1;
dt.xSetWorldBounds(-3, 3, track.clientWidth * pixelRatio);
track.viewport.setDisplayTransformImmediately(dt);
track.height = '100px';
});
test('instantiate_highDetailsWithSelection', function() {
var div = document.createElement('div');
var viewport = new Viewport(div);
viewport.highDetails = true;
var drawingContainer = new tr.ui.tracks.DrawingContainer(viewport);
div.appendChild(drawingContainer);
var track = buildTrack(viewport);
drawingContainer.appendChild(track);
track.series[0].points[1].modelItem.selectionState =
SelectionState.SELECTED;
track.series[1].points[1].modelItem.selectionState =
SelectionState.SELECTED;
track.series[2].points[3].modelItem.selectionState =
SelectionState.SELECTED;
this.addHTMLOutput(div);
drawingContainer.invalidate();
var dt = new tr.ui.TimelineDisplayTransform();
var pixelRatio = window.devicePixelRatio || 1;
dt.xSetWorldBounds(-3, 3, track.clientWidth * pixelRatio);
track.viewport.setDisplayTransformImmediately(dt);
track.height = '100px';
});
test('checkPadding', function() {
var track = buildTrack();
// Padding should be equal to half maximum point size.
assert.equal(track.topPadding_, 5);
assert.equal(track.bottomPadding_, 5);
});
test('checkAddEventsToTrackMap', function() {
var track = buildTrack();
var eventToTrackMap = new EventToTrackMap();
track.addEventsToTrackMap(eventToTrackMap);
assert.lengthOf(Object.keys(eventToTrackMap), 23);
});
test('checkaddIntersectingEventsInRangeToSelectionInWorldSpace', function() {
var track = buildTrack();
var sel = new EventSet();
track.addIntersectingEventsInRangeToSelectionInWorldSpace(
-1.1, -0.7, 0.01, sel);
assert.lengthOf(sel, 3);
assert.equal(sel[0], track.series[0].points[1].modelItem);
assert.equal(sel[1], track.series[1].points[1].modelItem);
assert.equal(sel[2], track.series[2].points[3].modelItem);
});
test('checkaddEventNearToProvidedEventToSelection', function() {
var track = buildTrack();
// Fail to find a near item to the left in any series.
var sel = new EventSet();
assert.isFalse(track.addEventNearToProvidedEventToSelection(
track.series[0].points[0].modelItem, -1, sel));
assert.lengthOf(sel, 0);
// Succeed at finding a near item to the right of one series.
var sel = new EventSet();
assert.isTrue(track.addEventNearToProvidedEventToSelection(
track.series[1].points[1].modelItem, 1, sel));
assert.lengthOf(sel, 1);
assert.equal(sel[0], track.series[1].points[2].modelItem);
});
test('checkAddClosestEventToSelection', function() {
var track = buildTrack();
var sel = new EventSet();
track.addClosestEventToSelection(-0.8, 0.4, 0.5, 1.5, sel);
assert.lengthOf(sel, 2);
assert.equal(sel[0], track.series[0].points[2].modelItem);
assert.equal(sel[1], track.series[2].points[4].modelItem);
});
test('checkAutoSetAllAxes', function() {
var track = buildTrack();
var axis1 = track.series[0].axis;
var axis2 = track.series[2].axis;
track.autoSetAllAxes({expandMax: true, shrinkMax: true});
// Min bounds of both axes should not have been modified.
assert.equal(axis1.bounds.min, 0);
assert.equal(axis2.bounds.min, -100);
// Max bounds of both axes should have been modified.
assert.equal(axis1.bounds.max, 2.2);
assert.equal(axis2.bounds.max, 50);
});
test('checkAutoSetAxis', function() {
var track = buildTrack();
var axis1 = track.series[0].axis;
var axis2 = track.series[2].axis;
track.autoSetAxis(axis2,
{expandMin: true, shrinkMin: true, expandMax: true, shrinkMax: true});
// First axis should not have been modified.
assert.equal(axis1.bounds.min, 0);
assert.equal(axis1.bounds.max, 2);
// Second axis should have been modified.
assert.equal(axis2.bounds.min, -50);
assert.equal(axis2.bounds.max, 50);
});
});
</script>