| <!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>SliceGroup tests</title> |
| <script src="/src/base.js"></script> |
| <script> |
| base.require('unittest'); |
| base.require('test_utils'); |
| base.require('model.slice_group'); |
| </script> |
| </head> |
| <body> |
| <script> |
| 'use strict'; |
| |
| var Slice = tracing.model.Slice; |
| var SliceGroup = tracing.model.SliceGroup; |
| var newSlice = test_utils.newSlice; |
| var newSliceNamed = test_utils.newSliceNamed; |
| |
| function testBasicBeginEnd() { |
| var group = new SliceGroup(); |
| 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 SliceGroup(); |
| 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 testBasicMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 1); |
| a.endSlice(2); |
| b.beginSlice('', 'two', 3); |
| b.endSlice(5); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(2, m.slices.length); |
| |
| assertEquals('one', m.slices[0].title); |
| assertEquals(1, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('two', m.slices[1].title); |
| assertEquals(3, m.slices[1].start); |
| assertEquals(2, m.slices[1].duration); |
| } |
| |
| function testNestedMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 1); |
| a.endSlice(4); |
| b.beginSlice('', 'two', 2); |
| b.endSlice(3); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(2, m.slices.length); |
| |
| assertEquals('two', m.slices[0].title); |
| assertEquals(2, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('one', m.slices[1].title); |
| assertEquals(1, m.slices[1].start); |
| assertEquals(3, m.slices[1].duration); |
| } |
| |
| function testStartSplitMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 2); |
| a.endSlice(4); |
| b.beginSlice('', 'two', 1); |
| b.endSlice(3); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(3, m.slices.length); |
| |
| assertEquals('two', m.slices[0].title); |
| assertEquals(1, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('two (cont.)', m.slices[1].title); |
| assertEquals(2, m.slices[1].start); |
| assertEquals(1, m.slices[1].duration); |
| |
| assertEquals('one', m.slices[2].title); |
| assertEquals(2, m.slices[2].start); |
| assertEquals(2, m.slices[2].duration); |
| } |
| |
| function testStartSplitTwoMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 3); |
| a.endSlice(6); |
| b.beginSlice('', 'two', 1); |
| b.beginSlice('', 'three', 2); |
| b.endSlice(4); |
| b.endSlice(5); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(5, m.slices.length); |
| |
| assertEquals('three', m.slices[0].title); |
| assertEquals(2, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('two', m.slices[1].title); |
| assertEquals(1, m.slices[1].start); |
| assertEquals(2, m.slices[1].duration); |
| |
| assertEquals('three (cont.)', m.slices[2].title); |
| assertEquals(3, m.slices[2].start); |
| assertEquals(1, m.slices[2].duration); |
| |
| assertEquals('two (cont.)', m.slices[3].title); |
| assertEquals(3, m.slices[3].start); |
| assertEquals(2, m.slices[3].duration); |
| |
| assertEquals('one', m.slices[4].title); |
| assertEquals(3, m.slices[4].start); |
| assertEquals(3, m.slices[4].duration); |
| } |
| |
| function testStartSplitTwiceMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 2); |
| a.beginSlice('', 'two', 3); |
| a.endSlice(5); |
| a.endSlice(6); |
| b.beginSlice('', 'three', 1); |
| b.endSlice(4); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(5, m.slices.length); |
| |
| assertEquals('three', m.slices[0].title); |
| assertEquals(1, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('three (cont.)', m.slices[1].title); |
| assertEquals(2, m.slices[1].start); |
| assertEquals(1, m.slices[1].duration); |
| |
| assertEquals('three (cont.)', m.slices[2].title); |
| assertEquals(3, m.slices[2].start); |
| assertEquals(1, m.slices[2].duration); |
| |
| assertEquals('two', m.slices[3].title); |
| assertEquals(3, m.slices[3].start); |
| assertEquals(2, m.slices[3].duration); |
| |
| assertEquals('one', m.slices[4].title); |
| assertEquals(2, m.slices[4].start); |
| assertEquals(4, m.slices[4].duration); |
| } |
| |
| function testEndSplitMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 1); |
| a.endSlice(3); |
| b.beginSlice('', 'two', 2); |
| b.endSlice(4); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(3, m.slices.length); |
| |
| assertEquals('two', m.slices[0].title); |
| assertEquals(2, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('one', m.slices[1].title); |
| assertEquals(1, m.slices[1].start); |
| assertEquals(2, m.slices[1].duration); |
| |
| assertEquals('two (cont.)', m.slices[2].title); |
| assertEquals(3, m.slices[2].start); |
| assertEquals(1, m.slices[2].duration); |
| } |
| |
| function testEndSplitTwoMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 1); |
| a.endSlice(4); |
| b.beginSlice('', 'two', 2); |
| b.beginSlice('', 'three', 3); |
| b.endSlice(5); |
| b.endSlice(6); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(5, m.slices.length); |
| |
| assertEquals('three', m.slices[0].title); |
| assertEquals(3, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('two', m.slices[1].title); |
| assertEquals(2, m.slices[1].start); |
| assertEquals(2, m.slices[1].duration); |
| |
| assertEquals('one', m.slices[2].title); |
| assertEquals(1, m.slices[2].start); |
| assertEquals(3, m.slices[2].duration); |
| |
| assertEquals('three (cont.)', m.slices[3].title); |
| assertEquals(4, m.slices[3].start); |
| assertEquals(1, m.slices[3].duration); |
| |
| assertEquals('two (cont.)', m.slices[4].title); |
| assertEquals(4, m.slices[4].start); |
| assertEquals(2, m.slices[4].duration); |
| } |
| |
| function testEndSplitTwiceMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 1); |
| a.beginSlice('', 'two', 2); |
| a.endSlice(4); |
| a.endSlice(5); |
| b.beginSlice('', 'three', 3); |
| b.endSlice(6); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(5, m.slices.length); |
| |
| assertEquals('three', m.slices[0].title); |
| assertEquals(3, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('two', m.slices[1].title); |
| assertEquals(2, m.slices[1].start); |
| assertEquals(2, m.slices[1].duration); |
| |
| assertEquals('three (cont.)', m.slices[2].title); |
| assertEquals(4, m.slices[2].start); |
| assertEquals(1, m.slices[2].duration); |
| |
| assertEquals('one', m.slices[3].title); |
| assertEquals(1, m.slices[3].start); |
| assertEquals(4, m.slices[3].duration); |
| |
| assertEquals('three (cont.)', m.slices[4].title); |
| assertEquals(5, m.slices[4].start); |
| assertEquals(1, m.slices[4].duration); |
| } |
| |
| // |
| // Input: |
| // A: | one | | two | |
| // |
| // B: | three | |
| // |
| // Output: |
| // | one | three | two | |
| // | three | | three | |
| // |
| function testSplitTwiceMerge() { |
| var a = new SliceGroup(); |
| var b = new SliceGroup(); |
| a.beginSlice('', 'one', 1); |
| a.endSlice(3); |
| a.beginSlice('', 'two', 4); |
| a.endSlice(6); |
| b.beginSlice('', 'three', 2); |
| b.endSlice(5); |
| |
| var m = SliceGroup.merge(a, b); |
| assertEquals(5, m.slices.length); |
| |
| assertEquals('three', m.slices[0].title); |
| assertEquals(2, m.slices[0].start); |
| assertEquals(1, m.slices[0].duration); |
| |
| assertEquals('one', m.slices[1].title); |
| assertEquals(1, m.slices[1].start); |
| assertEquals(2, m.slices[1].duration); |
| |
| assertEquals('three (cont.)', m.slices[2].title); |
| assertEquals(3, m.slices[2].start); |
| assertEquals(1, m.slices[2].duration); |
| |
| assertEquals('three (cont.)', m.slices[3].title); |
| assertEquals(4, m.slices[3].start); |
| assertEquals(1, m.slices[3].duration); |
| |
| assertEquals('two', m.slices[4].title); |
| assertEquals(4, m.slices[4].start); |
| assertEquals(2, m.slices[4].duration); |
| } |
| |
| function testBounds() { |
| var group = new SliceGroup(); |
| group.updateBounds(); |
| assertEquals(group.bounds.min, undefined); |
| assertEquals(group.bounds.max, undefined); |
| |
| group.pushSlice(newSlice(1, 3)); |
| group.pushSlice(newSlice(7, 2)); |
| group.updateBounds(); |
| assertEquals(1, group.bounds.min); |
| assertEquals(9, group.bounds.max); |
| } |
| |
| function testBoundsWithPartial() { |
| var group = new SliceGroup(); |
| group.beginSlice('', 'a', 7); |
| group.updateBounds(); |
| assertEquals(7, group.bounds.min); |
| assertEquals(7, group.bounds.max); |
| } |
| |
| function testBoundsWithTwoPartials() { |
| var group = new SliceGroup(); |
| group.beginSlice('', 'a', 0); |
| group.beginSlice('', 'a', 1); |
| group.updateBounds(); |
| assertEquals(0, group.bounds.min); |
| assertEquals(1, group.bounds.max); |
| } |
| |
| function testBoundsWithBothPartialAndRegular() { |
| var group = new SliceGroup(); |
| group.updateBounds(); |
| assertEquals(undefined, group.bounds.min); |
| assertEquals(undefined, group.bounds.max); |
| |
| group.pushSlice(newSlice(1, 3)); |
| group.beginSlice('', 'a', 7); |
| group.updateBounds(); |
| assertEquals(1, group.bounds.min); |
| assertEquals(7, group.bounds.max); |
| } |
| |
| function testAutocloserBasic() { |
| var group = new SliceGroup(); |
| 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.bounds.min); |
| assertEquals(3, group.bounds.max); |
| 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 SliceGroup(); |
| 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> |