Files
shaka-player/spec/segment_index_spec.js
T
Joey Parrish 4cc4e96dbd Overhaul license comments and file annotations
* Updates all Copyright years to 2015.
* Adds licenses annotations to all JS.
* Makes all licenses identical to avoid repeated appearance in the
  compiled output.
* Drops fileoverview annotations, which do not affect docs output.
* The linter still requires fileoverview on externs.

This patch required a newer closure compiler, since the previous
version we used had a bug regarding license annotations that caused
the license comment block to appear in the output once per file
regardless of uniqueness.

Change-Id: I2e9272db680cba7ecc4613d97f1d3a94ac2244cc
2015-09-08 12:02:34 -07:00

277 lines
8.6 KiB
JavaScript

/**
* @license
* Copyright 2015 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
goog.require('goog.Uri');
goog.require('shaka.media.SegmentIndex');
goog.require('shaka.media.SegmentReference');
goog.require('shaka.media.WebmSegmentIndexParser');
// TODO: Write tests for evict.
describe('SegmentIndex', function() {
describe('merge', function() {
var index1;
function url(i) {
return 'http://example.com/video' + i;
}
beforeEach(function() {
var references1 = [
createReference(0, 10, url(0)),
createReference(10, 20, url(1)),
createReference(20, 30, url(2))
];
index1 = new shaka.media.SegmentIndex(references1);
});
it('starting before start, ending before start', function() {
// Old: |----|
// New: |====|====|====|
// Merged: |----|
var references2 = [
createReference(31, 41, url(31))
];
var index2 = new shaka.media.SegmentIndex(references2);
index2.merge(index1);
var merged = index2.references;
// All new segments should be ignored.
expect(merged.length).toBe(1);
checkReference(merged[0], url(31), 31, 41);
});
it('starting before start, ending at start', function() {
// Old: |----|
// New: |====|====|====|
// Merged: |----|
var references2 = [
createReference(30, 40, url(30))
];
var index2 = new shaka.media.SegmentIndex(references2);
index2.merge(index1);
var merged = index2.references;
// All new segments should be ignored.
expect(merged.length).toBe(1);
checkReference(merged[0], url(30), 30, 40);
});
it('starting before start, ending before end', function() {
// Old: |----|
// New: |====|====|====|
// Merged: |----|
var references2 = [
createReference(21, 31, url(21))
];
var index2 = new shaka.media.SegmentIndex(references2);
index2.merge(index1);
var merged = index2.references;
// All new segments should be ignored.
expect(merged.length).toBe(1);
checkReference(merged[0], url(21), 21, 31);
});
it('starting before start, ending at end', function() {
// Old: |----|
// New: |====|====|====|
// Merged: |====|====|====|
var references2 = [
createReference(20, 30, url(20))
];
var index2 = new shaka.media.SegmentIndex(references2);
index2.merge(index1);
var merged = index2.references;
expect(merged.length).toBe(3);
checkReference(merged[0], url(0), 0, 10);
checkReference(merged[1], url(1), 10, 20);
checkReference(merged[2], url(2), 20, 30);
});
it('starting before start, ending past end', function() {
// Old: |----|----|
// New: |====|====|====|
// Merged: |====|====|====|
var references2 = [
createReference(5, 15, url(5)),
createReference(15, 25, url(15))
];
var index2 = new shaka.media.SegmentIndex(references2);
index2.merge(index1);
var merged = index2.references;
expect(merged.length).toBe(3);
checkReference(merged[0], url(0), 0, 10);
checkReference(merged[1], url(1), 10, 20);
checkReference(merged[2], url(2), 20, 30);
});
it('starting at start, ending past end', function() {
// Old: |----|----|
// New: |====|====|====|
// Merged: |====|====|====|
var references2 = [
createReference(0, 10, url(100)),
createReference(10, 20, url(110))
];
var index2 = new shaka.media.SegmentIndex(references2);
index2.merge(index1);
var merged = index2.references;
expect(merged.length).toBe(3);
checkReference(merged[0], url(0), 0, 10);
checkReference(merged[1], url(1), 10, 20);
checkReference(merged[2], url(2), 20, 30);
});
it('starting in middle, ending past end', function() {
// Old: |----|----|----|
// New: |====|====|====|
// Merged: |----|--|====|====|====|
var references2 = [
createReference(15, 25, url(15)),
createReference(25, 35, url(25)),
createReference(35, 45, url(35))
];
var index2 = new shaka.media.SegmentIndex(references2);
index1.merge(index2);
var merged = index1.references;
expect(merged.length).toBe(5);
checkReference(merged[0], url(0), 0, 10);
checkReference(merged[1], url(1), 10, 15); // Should compress to 15.
checkReference(merged[2], url(15), 15, 25);
checkReference(merged[3], url(25), 25, 35);
checkReference(merged[4], url(35), 35, 45);
});
it('starting in middle at a boundary, ending past end', function() {
// Old: |----|----|----|
// New: |====|====|====|
// Merged: |----|====|====|====|
var references2 = [
createReference(10, 20, url(10)),
createReference(20, 30, url(20)),
createReference(30, 40, url(30))
];
var index2 = new shaka.media.SegmentIndex(references2);
index1.merge(index2);
var merged = index1.references;
expect(merged.length).toBe(4);
checkReference(merged[0], url(0), 0, 10);
checkReference(merged[1], url(10), 10, 20);
checkReference(merged[2], url(20), 20, 30);
checkReference(merged[3], url(30), 30, 40);
});
it('starting at end', function() {
// Old: |----|----|----|
// New: |====|====|====|
// Merged: |----|----|----|====|====|====|
var references2 = [
createReference(30, 40, url(30)),
createReference(40, 50, url(40)),
createReference(50, 60, url(50))
];
var index2 = new shaka.media.SegmentIndex(references2);
index1.merge(index2);
var merged = index1.references;
expect(merged.length).toBe(6);
checkReference(merged[0], url(0), 0, 10);
checkReference(merged[1], url(1), 10, 20);
checkReference(merged[2], url(2), 20, 30);
checkReference(merged[3], url(30), 30, 40);
checkReference(merged[4], url(40), 40, 50);
checkReference(merged[5], url(50), 50, 60);
});
it('starting past end', function() {
// Old: |----|----|----|
// New: |====|====|====|
// Merged: |----|----|-----|====|====|====|
var references2 = [
createReference(31, 41, url(31)),
createReference(41, 51, url(41)),
createReference(51, 61, url(51))
];
var index2 = new shaka.media.SegmentIndex(references2);
index1.merge(index2);
var merged = index1.references;
expect(merged.length).toBe(6);
checkReference(merged[0], url(0), 0, 10);
checkReference(merged[1], url(1), 10, 20);
checkReference(merged[2], url(2), 20, 31); // Should extend to 31.
checkReference(merged[3], url(31), 31, 41);
checkReference(merged[4], url(41), 41, 51);
checkReference(merged[5], url(51), 51, 61);
});
it('no existing segments', function() {
index1 = new shaka.media.SegmentIndex([]);
var references2 = [
createReference(10, 20, url(10)),
createReference(20, 30, url(20)),
createReference(30, 40, url(30))
];
var index2 = new shaka.media.SegmentIndex(references2);
index1.merge(index2);
var merged = index1.references;
expect(merged.length).toBe(3);
checkReference(merged[0], url(10), 10, 20);
checkReference(merged[1], url(20), 20, 30);
checkReference(merged[2], url(30), 30, 40);
});
it('no new segments', function() {
index1 = new shaka.media.SegmentIndex([]);
var references2 = [
createReference(10, 20, url(10)),
createReference(20, 30, url(20)),
createReference(30, 40, url(30))
];
var index2 = new shaka.media.SegmentIndex(references2);
index2.merge(index1);
var merged = index2.references;
expect(merged.length).toBe(3);
checkReference(merged[0], url(10), 10, 20);
checkReference(merged[1], url(20), 20, 30);
checkReference(merged[2], url(30), 30, 40);
});
});
});