<!DOCTYPE HTML>
<html>
<!--
Copyright (c) 2012 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.
-->
<head>
<title>TimelineSliceGroup tests</title>
<script src="base.js"></script>
<script>
base.require('unittest');
base.require('test_utils');
base.require('timeline_slice_group');
</script>
</head>
<body>
<script>
'use strict';
var TimelineSlice = tracing.TimelineSlice;
var TimelineSliceGroup = tracing.TimelineSliceGroup;
var newSlice = test_utils.newSlice;
var newSliceNamed = test_utils.newSliceNamed;
function testBasicBeginEnd() {
var group = new TimelineSliceGroup();
assertEquals(group.openSliceCount, 0);
var sliceA = group.beginSlice('', 'a', 1, {a: 1});
assertEquals(1, group.openSliceCount);
assertEquals('a', sliceA.title);
assertEquals(1, sliceA.start);
assertEquals(1, sliceA.args.a);
var sliceB = group.endSlice(3);
assertEquals(sliceA, sliceB);
assertEquals(2, sliceB.duration);
}
function testNestedBeginEnd() {
var group = new TimelineSliceGroup();
assertEquals(group.openSliceCount, 0);
group.beginSlice('', 'a', 1);
group.beginSlice('', 'b', 2);
group.endSlice(2.5);
group.endSlice(3);
assertEquals(2, group.slices.length);
assertEquals('b', group.slices[0].title);
assertEquals(0.5, group.slices[0].duration);
assertEquals('a', group.slices[1].title);
assertEquals(2, group.slices[1].duration);
}
function testBounds() {
var group = new TimelineSliceGroup();
group.updateBounds();
assertEquals(group.minTimestamp, undefined);
assertEquals(group.maxTimestamp, undefined);
group.pushSlice(newSlice(1, 3));
group.pushSlice(newSlice(7, 2));
group.updateBounds();
assertEquals(1, group.minTimestamp);
assertEquals(9, group.maxTimestamp);
}
function testBoundsWithPartial() {
var group = new TimelineSliceGroup();
group.beginSlice('', 'a', 7);
group.updateBounds();
assertEquals(7, group.minTimestamp);
assertEquals(7, group.maxTimestamp);
}
function testBoundsWithTwoPartials() {
var group = new TimelineSliceGroup();
group.beginSlice('', 'a', 0);
group.beginSlice('', 'a', 1);
group.updateBounds();
assertEquals(0, group.minTimestamp);
assertEquals(1, group.maxTimestamp);
}
function testBoundsWithBothPartialAndRegular() {
var group = new TimelineSliceGroup();
group.updateBounds();
assertEquals(undefined, group.minTimestamp);
assertEquals(undefined, group.maxTimestamp);
group.pushSlice(newSlice(1, 3));
group.beginSlice('', 'a', 7);
group.updateBounds();
assertEquals(1, group.minTimestamp);
assertEquals(7, group.maxTimestamp);
}
function testAutocloserBasic() {
var group = new TimelineSliceGroup();
assertEquals(group.openSliceCount, 0);
group.pushSlice(newSliceNamed('a', 1, 0.5));
group.beginSlice('', 'b', 2);
group.beginSlice('', 'c', 2.5);
group.endSlice(3);
group.autoCloseOpenSlices();
group.updateBounds();
assertEquals(1, group.minTimestamp);
assertEquals(3, group.maxTimestamp);
assertEquals(3, group.slices.length);
assertEquals('a', group.slices[0].title);
assertEquals('c', group.slices[1].title);
assertEquals('b', group.slices[2].title);
assertTrue(group.slices[2].didNotFinish);
assertEquals(1, group.slices[2].duration);
}
function testAutocloserWithSubTasks() {
var group = new TimelineSliceGroup();
assertEquals(group.openSliceCount, 0);
group.beginSlice('', 'a', 1);
group.beginSlice('', 'b1', 2);
group.endSlice(3);
group.beginSlice('', 'b2', 3);
group.autoCloseOpenSlices();
assertEquals(3, group.slices.length);
assertEquals('b1', group.slices[0].title);
assertEquals('b2', group.slices[1].title);
assertTrue(group.slices[1].didNotFinish);
assertEquals(0, group.slices[1].duration);
assertEquals('a', group.slices[2].title);
assertTrue(group.slices[2].didNotFinish);
assertEquals(2, group.slices[2].duration);
}
// TODO: test cretion of subSlices
</script>
</body>
</html>