166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict';
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.trace_model.slice_group');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('tracing.trace_model.slice_group', function() {
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var Slice = tracing.trace_model.Slice;
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var SliceGroup = tracing.trace_model.SliceGroup;
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var newSlice = tracing.test_utils.newSlice;
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var newSliceNamed = tracing.test_utils.newSliceNamed;
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('basicBeginEnd', function() {
1706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
1806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(group.openSliceCount, 0);
1906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var sliceA = group.beginSlice('', 'a', 1, {a: 1});
2006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, group.openSliceCount);
2106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('a', sliceA.title);
2206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, sliceA.start);
2306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, sliceA.args.a);
2406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
2506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var sliceB = group.endSlice(3);
2606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(sliceA, sliceB);
2706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, sliceB.duration);
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
2906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('nestedBeginEnd', function() {
3106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
3206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(group.openSliceCount, 0);
3306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'a', 1);
3406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'b', 2);
3506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.endSlice(2.5);
3606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.endSlice(3);
3706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
3806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, group.slices.length);
3906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('b', group.slices[0].title);
4006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(0.5, group.slices[0].duration);
4106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
4206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('a', group.slices[1].title);
4306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, group.slices[1].duration);
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
4506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('basicMerge', function() {
4706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
4806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
4906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 1);
5006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(2);
5106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'two', 3);
5206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(5);
5306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
5406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
5506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices.length);
5606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
5706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[0].title);
5806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].start);
5906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
6006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
6106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[1].title);
6206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[1].start);
6306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].duration);
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
6506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('nestedMerge', function() {
6706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
6806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
6906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 1);
7006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(4);
7106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'two', 2);
7206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(3);
7306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
7406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
7506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices.length);
7606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
7706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[0].title);
7806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[0].start);
7906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
8006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
8106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[1].title);
8206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[1].start);
8306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[1].duration);
8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
8506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('startSplitMerge', function() {
8706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
8806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
8906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 2);
9006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(4);
9106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'two', 1);
9206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(3);
9306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
9406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
9506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices.length);
9606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
9706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[0].title);
9806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].start);
9906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
10006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
10106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two (cont.)', m.slices[1].title);
10206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].start);
10306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[1].duration);
10406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
10506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[2].title);
10606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[2].start);
10706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[2].duration);
10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
10906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('startSplitTwoMerge', function() {
11106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
11206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
11306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 3);
11406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(6);
11506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'two', 1);
11606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'three', 2);
11706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(4);
11806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(5);
11906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
12006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
12106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(5, m.slices.length);
12206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
12306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three', m.slices[0].title);
12406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[0].start);
12506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
12606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
12706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[1].title);
12806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[1].start);
12906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].duration);
13006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
13106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[2].title);
13206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[2].start);
13306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[2].duration);
13406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
13506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two (cont.)', m.slices[3].title);
13606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[3].start);
13706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[3].duration);
13806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
13906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[4].title);
14006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[4].start);
14106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[4].duration);
14266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
14306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
14466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('startSplitTwiceMerge', function() {
14506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
14606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
14706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 2);
14806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'two', 3);
14906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(5);
15006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(6);
15106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'three', 1);
15206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(4);
15306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
15406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
15506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(5, m.slices.length);
15606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
15706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three', m.slices[0].title);
15806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].start);
15906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
16006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
16106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[1].title);
16206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].start);
16306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[1].duration);
16406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
16506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[2].title);
16606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[2].start);
16706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[2].duration);
16806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
16906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[3].title);
17006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[3].start);
17106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[3].duration);
17206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
17306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[4].title);
17406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[4].start);
17506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(4, m.slices[4].duration);
17666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
17706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
17866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('endSplitMerge', function() {
17906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
18006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
18106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 1);
18206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(3);
18306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'two', 2);
18406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(4);
18506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
18606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
18706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices.length);
18806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
18906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[0].title);
19006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[0].start);
19106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
19206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
19306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[1].title);
19406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[1].start);
19506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].duration);
19606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
19706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two (cont.)', m.slices[2].title);
19806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[2].start);
19906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[2].duration);
20066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
20106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
20266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('endSplitTwoMerge', function() {
20306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
20406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
20506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 1);
20606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(4);
20706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'two', 2);
20806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'three', 3);
20906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(5);
21006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(6);
21106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
21206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
21306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(5, m.slices.length);
21406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
21506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three', m.slices[0].title);
21606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[0].start);
21706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
21806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
21906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[1].title);
22006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].start);
22106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].duration);
22206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
22306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[2].title);
22406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[2].start);
22506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[2].duration);
22606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
22706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[3].title);
22806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(4, m.slices[3].start);
22906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[3].duration);
23006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
23106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two (cont.)', m.slices[4].title);
23206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(4, m.slices[4].start);
23306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[4].duration);
23466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
23506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
23666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('endSplitTwiceMerge', function() {
23706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
23806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
23906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 1);
24006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'two', 2);
24106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(4);
24206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(5);
24306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'three', 3);
24406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(6);
24506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
24606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
24706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(5, m.slices.length);
24806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
24906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three', m.slices[0].title);
25006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[0].start);
25106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
25206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
25306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[1].title);
25406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].start);
25506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].duration);
25606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
25706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[2].title);
25806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(4, m.slices[2].start);
25906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[2].duration);
26006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
26106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[3].title);
26206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[3].start);
26306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(4, m.slices[3].duration);
26406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
26506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[4].title);
26606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(5, m.slices[4].start);
26706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[4].duration);
26866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
26906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
27006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  // Input:
27106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  // A:  |    one     |       |     two     |
27206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  //
27306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  // B:       |         three         |
27406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  //
27506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  // Output:
27606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  //     |    one     | three |     two     |
27706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  //          | three |       | three |
27866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('splitTwiceMerge', function() {
27906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var a = new SliceGroup();
28006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var b = new SliceGroup();
28106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'one', 1);
28206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(3);
28306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.beginSlice('', 'two', 4);
28406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    a.endSlice(6);
28506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.beginSlice('', 'three', 2);
28606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    b.endSlice(5);
28706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
28806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var m = SliceGroup.merge(a, b);
28906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(5, m.slices.length);
29006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
29106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three', m.slices[0].title);
29206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[0].start);
29306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[0].duration);
29406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
29506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('one', m.slices[1].title);
29606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[1].start);
29706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[1].duration);
29806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
29906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[2].title);
30006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, m.slices[2].start);
30106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[2].duration);
30206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
30306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('three (cont.)', m.slices[3].title);
30406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(4, m.slices[3].start);
30506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, m.slices[3].duration);
30606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
30706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('two', m.slices[4].title);
30806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(4, m.slices[4].start);
30906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, m.slices[4].duration);
31066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
31106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
31266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('bounds', function() {
31306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
31406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.updateBounds();
31506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(group.bounds.min, undefined);
31606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(group.bounds.max, undefined);
31706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
31806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.pushSlice(newSlice(1, 3));
31906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.pushSlice(newSlice(7, 2));
32006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.updateBounds();
32106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, group.bounds.min);
32206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(9, group.bounds.max);
32366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
32406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
32566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('boundsWithPartial', function() {
32606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
32706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'a', 7);
32806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.updateBounds();
32906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(7, group.bounds.min);
33006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(7, group.bounds.max);
33166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
33206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
33366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('boundsWithTwoPartials', function() {
33406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
33506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'a', 0);
33606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'a', 1);
33706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.updateBounds();
33806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(0, group.bounds.min);
33906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, group.bounds.max);
34066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
34106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
34266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('boundsWithBothPartialAndRegular', function() {
34306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
34406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.updateBounds();
34506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(undefined, group.bounds.min);
34606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(undefined, group.bounds.max);
34706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
34806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.pushSlice(newSlice(1, 3));
34906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'a', 7);
35006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.updateBounds();
35106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, group.bounds.min);
35206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(7, group.bounds.max);
35366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
35406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
35566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('autocloserBasic', function() {
35606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
35706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(group.openSliceCount, 0);
35806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
35906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.pushSlice(newSliceNamed('a', 1, 0.5));
36006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
36106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'b', 2);
36206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'c', 2.5);
36306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.endSlice(3);
36406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
36506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.autoCloseOpenSlices();
36606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.updateBounds();
36706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
36806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, group.bounds.min);
36906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, group.bounds.max);
37006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, group.slices.length);
37106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('a', group.slices[0].title);
37206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('c', group.slices[1].title);
37306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('b', group.slices[2].title);
37406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertTrue(group.slices[2].didNotFinish);
37506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(1, group.slices[2].duration);
37666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
37706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
37866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('autocloserWithSubTasks', function() {
37906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    var group = new SliceGroup();
38006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(group.openSliceCount, 0);
38106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
38206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'a', 1);
38306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'b1', 2);
38406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.endSlice(3);
38506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.beginSlice('', 'b2', 3);
38606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
38706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    group.autoCloseOpenSlices();
38806db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(3, group.slices.length);
38906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('b1', group.slices[0].title);
39006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
39106db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('b2', group.slices[1].title);
39206db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertTrue(group.slices[1].didNotFinish);
39306db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(0, group.slices[1].duration);
39406db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
39506db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals('a', group.slices[2].title);
39606db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertTrue(group.slices[2].didNotFinish);
39706db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis    assertEquals(2, group.slices[2].duration);
39866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
39906db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis
40006db268ddce368501b62bd8999fcf2c3255b6de9Jamie Gennis  // TODO: test cretion of subSlices
40166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
402