| <!DOCTYPE html> |
| <!-- |
| Copyright (c) 2013 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="/base/range_utils.html"> |
| <link rel="import" href="/core/test_utils.html"> |
| |
| <script> |
| 'use strict'; |
| |
| tr.b.unittest.testSuite(function() { |
| function simpleMerger(events) { |
| return { |
| start: events[0].start, |
| end: events[events.length - 1].end |
| }; |
| } |
| test('simple', function() { |
| var inEvents = [ |
| {start: 0, end: 100}, |
| {start: 100, end: 120}, |
| {start: 200, end: 220} |
| ]; |
| |
| var merged = tr.e.audits.mergeExplicitRanges(inEvents, 50, simpleMerger); |
| |
| assert.equal(merged.length, 2); |
| assert.deepEqual(merged[0], {start: 0, end: 120}); |
| assert.deepEqual(merged[1], {start: 200, end: 220}); |
| }); |
| |
| test('overlapping', function() { |
| var inEvents = [ |
| {start: 0, end: 100}, |
| {start: 80, end: 120}, |
| {start: 200, end: 220} |
| ]; |
| |
| var merged = tr.e.audits.mergeExplicitRanges(inEvents, 50, simpleMerger); |
| |
| assert.equal(merged.length, 2); |
| assert.deepEqual(merged[0], {start: 0, end: 120}); |
| assert.deepEqual(merged[1], {start: 200, end: 220}); |
| }); |
| |
| test('middleOneIsSmall', function() { |
| var inEvents = [ |
| {start: 0, end: 100}, |
| {start: 40, end: 50}, |
| {start: 100, end: 120} |
| ]; |
| |
| var merged = tr.e.audits.mergeExplicitRanges(inEvents, 50, simpleMerger); |
| |
| assert.equal(merged.length, 1); |
| assert.deepEqual(merged[0], {start: 0, end: 120}); |
| }); |
| |
| test('firstEventIsSplitPoint', function() { |
| var inEvents = [ |
| {start: 0, end: 100}, |
| {start: 150, end: 200} |
| ]; |
| |
| var merged = tr.e.audits.mergeExplicitRanges(inEvents, 25, simpleMerger); |
| |
| assert.equal(merged.length, 2); |
| assert.deepEqual(merged[0], {start: 0, end: 100}); |
| assert.deepEqual(merged[1], {start: 150, end: 200}); |
| }); |
| |
| test('mergeSingleEvent', function() { |
| var inEvents = [ |
| {start: 0, end: 100} |
| ]; |
| |
| var mergeCount = 0; |
| tr.e.audits.mergeExplicitRanges(inEvents, 25, function(events) { |
| assert.deepEqual(events, inEvents); |
| mergeCount++; |
| }); |
| assert.equal(mergeCount, 1); |
| }); |
| |
| test('zeroDurationSplit', function() { |
| var inEvents = [0, 10, 20, 50, 60]; |
| var identityFunction = function(x) { |
| return x; |
| }; |
| var timestampMerger = function(timestamps) { |
| console.log(timestamps); |
| return { |
| start: timestamps[0], |
| end: timestamps[timestamps.length - 1] |
| }; |
| }; |
| var merged = tr.e.audits.mergeExplicitRanges(inEvents, 15, timestampMerger, |
| identityFunction, identityFunction); |
| console.log(merged); |
| assert.equal(merged.length, 2); |
| assert.deepEqual(merged[0], {start: 0, end: 20}); |
| assert.deepEqual(merged[1], {start: 50, end: 60}); |
| }); |
| |
| test('findEmptyRangesBetweenExplicitRanges', function() { |
| var events = [ |
| {start: 2, end: 4}, |
| {start: 1, end: 3}, |
| {start: 6, end: 8} |
| ]; |
| var ranges = tr.e.audits.findEmptyRangesBetweenExplicitRanges( |
| events, {start: 0, end: 10}); |
| assert.equal(3, ranges.length); |
| assert.equal(0, ranges[0].min); |
| assert.equal(1, ranges[0].max); |
| assert.equal(4, ranges[1].min); |
| assert.equal(6, ranges[1].max); |
| assert.equal(8, ranges[2].min); |
| assert.equal(10, ranges[2].max); |
| }); |
| |
| test('findEmptyRangesWithEmptyInput', function() { |
| var ranges = tr.e.audits.findEmptyRangesBetweenExplicitRanges( |
| [], {start: 0, end: 10}); |
| assert.equal(1, ranges.length); |
| assert.equal(0, ranges[0].min); |
| assert.equal(10, ranges[0].max); |
| |
| ranges = tr.e.audits.findEmptyRangesBetweenExplicitRanges([]); |
| assert.equal(0, ranges.length); |
| }); |
| }); |
| </script> |