You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

942 lines
26 KiB

import QUnit from 'qunit';
import {
forEachMediaGroup,
mergeSegments,
mergeSegment,
mergeMedia,
forEachPlaylist,
mergeManifest
} from '../../src/playlist-loader/utils.js';
import {absoluteUrl} from '../test-helpers.js';
QUnit.module('Playlist Loader Utils', function(hooks) {
QUnit.module('forEachMediaGroup');
QUnit.test('does not error when passed null', function(assert) {
assert.expect(1);
let i = 0;
forEachMediaGroup(null, function(props, type, group, label) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('does not error without groups', function(assert) {
assert.expect(1);
const manifest = {};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('does not error with no group keys', function(assert) {
assert.expect(1);
const manifest = {
mediaGroups: {
SUBTITLES: {}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('does not error with null group key', function(assert) {
assert.expect(1);
const manifest = {
mediaGroups: {
SUBTITLES: {en: null}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('does not error with null label key', function(assert) {
assert.expect(1);
const manifest = {
mediaGroups: {
SUBTITLES: {en: {main: null}}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('does not error with empty label keys', function(assert) {
assert.expect(1);
const manifest = {
mediaGroups: {
SUBTITLES: {en: {}}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('can loop over subtitle groups', function(assert) {
assert.expect(16);
const manifest = {
mediaGroups: {
SUBTITLES: {
en: {
main: {foo: 'bar'},
alt: {fizz: 'buzz'}
},
es: {
main: {a: 'b'},
alt: {yes: 'no'}
}
}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
if (i === 0) {
assert.deepEqual(props, {foo: 'bar'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'main');
} else if (i === 1) {
assert.deepEqual(props, {fizz: 'buzz'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'alt');
} else if (i === 2) {
assert.deepEqual(props, {a: 'b'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'main');
} else if (i === 3) {
assert.deepEqual(props, {yes: 'no'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'alt');
}
i++;
});
});
QUnit.test('can loop over audio groups', function(assert) {
assert.expect(16);
const manifest = {
mediaGroups: {
AUDIO: {
en: {
main: {foo: 'bar'},
alt: {fizz: 'buzz'}
},
es: {
main: {a: 'b'},
alt: {yes: 'no'}
}
}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
if (i === 0) {
assert.deepEqual(props, {foo: 'bar'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'main');
} else if (i === 1) {
assert.deepEqual(props, {fizz: 'buzz'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'alt');
} else if (i === 2) {
assert.deepEqual(props, {a: 'b'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'main');
} else if (i === 3) {
assert.deepEqual(props, {yes: 'no'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'alt');
}
i++;
});
});
QUnit.test('can loop over both groups', function(assert) {
assert.expect(16);
const manifest = {
mediaGroups: {
AUDIO: {
en: {
main: {foo: 'bar'}
},
es: {
main: {a: 'b'}
}
},
SUBTITLES: {
en: {
main: {foo: 'bar'}
},
es: {
main: {a: 'b'}
}
}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
if (i === 0) {
assert.deepEqual(props, {foo: 'bar'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'main');
} else if (i === 1) {
assert.deepEqual(props, {a: 'b'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'main');
} else if (i === 2) {
assert.deepEqual(props, {foo: 'bar'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'main');
} else if (i === 3) {
assert.deepEqual(props, {a: 'b'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'main');
}
i++;
});
});
QUnit.test('can loop over both groups', function(assert) {
assert.expect(16);
const manifest = {
mediaGroups: {
AUDIO: {
en: {
main: {foo: 'bar'}
},
es: {
main: {a: 'b'}
}
},
SUBTITLES: {
en: {
main: {foo: 'bar'}
},
es: {
main: {a: 'b'}
}
}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
if (i === 0) {
assert.deepEqual(props, {foo: 'bar'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'main');
} else if (i === 1) {
assert.deepEqual(props, {a: 'b'});
assert.deepEqual(type, 'AUDIO');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'main');
} else if (i === 2) {
assert.deepEqual(props, {foo: 'bar'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'en');
assert.deepEqual(label, 'main');
} else if (i === 3) {
assert.deepEqual(props, {a: 'b'});
assert.deepEqual(type, 'SUBTITLES');
assert.deepEqual(group, 'es');
assert.deepEqual(label, 'main');
}
i++;
});
});
QUnit.test('can stop looping by returning a true value', function(assert) {
assert.expect(1);
const manifest = {
mediaGroups: {
AUDIO: {
en: {
main: {foo: 'bar'}
},
es: {
main: {a: 'b'}
}
},
SUBTITLES: {
en: {
main: {foo: 'bar'}
},
es: {
main: {a: 'b'}
}
}
}
};
let i = 0;
forEachMediaGroup(manifest, function(props, type, group, label) {
i++;
if (i === 2) {
return true;
}
});
assert.equal(i, 2, 'loop was stopped early');
});
QUnit.module('mergeSegments');
QUnit.test('no oldSegments', function(assert) {
const {updated, segments} = mergeSegments({
oldSegments: null,
newSegments: [{duration: 1}]
});
assert.true(updated, 'was updated');
assert.deepEqual(
segments,
[{duration: 1}],
'result as expected'
);
});
QUnit.test('keeps timing info from old segment', function(assert) {
const {updated, segments} = mergeSegments({
oldSegments: [{duration: 1, timingInfo: {audio: {start: 1, end: 2}}}],
newSegments: [{duration: 1}]
});
assert.false(updated, 'was not updated');
assert.deepEqual(
segments,
[{duration: 1, timingInfo: {audio: {start: 1, end: 2}}}],
'result as expected'
);
});
QUnit.test('keeps map from old segment', function(assert) {
const {updated, segments} = mergeSegments({
oldSegments: [{map: {uri: 'foo.uri'}, duration: 1}],
newSegments: [{duration: 1}]
});
assert.false(updated, 'was not updated');
assert.deepEqual(
segments,
[{duration: 1, map: {uri: 'foo.uri', resolvedUri: absoluteUrl('foo.uri')}}],
'result as expected'
);
});
QUnit.test('adds map to all new segment', function(assert) {
const {updated, segments} = mergeSegments({
oldSegments: [],
newSegments: [{map: {uri: 'foo.uri'}, duration: 1}, {duration: 1}]
});
assert.true(updated, 'was updated');
assert.deepEqual(
segments,
[
{duration: 1, map: {uri: 'foo.uri', resolvedUri: absoluteUrl('foo.uri')}},
{duration: 1, map: {uri: 'foo.uri', resolvedUri: absoluteUrl('foo.uri')}}
],
'result as expected'
);
});
QUnit.test('resolves all segment uris', function(assert) {
const {updated, segments} = mergeSegments({
oldSegments: [],
newSegments: [{
uri: 'segment.mp4',
map: {
uri: 'init.mp4',
key: {uri: 'mapkey.uri'}
},
key: {uri: 'key.uri'},
parts: [{uri: 'part1.uri'}, {resolvedUri: absoluteUrl('part2.uri'), uri: 'part2.uri'}],
preloadHints: [{uri: 'hint1.uri'}, {resolvedUri: absoluteUrl('hint2.uri'), uri: 'hint2.uri'}]
}]
});
assert.true(updated, 'was updated');
assert.deepEqual(segments, [{
uri: 'segment.mp4',
resolvedUri: absoluteUrl('segment.mp4'),
map: {
uri: 'init.mp4',
resolvedUri: absoluteUrl('init.mp4'),
key: {uri: 'mapkey.uri', resolvedUri: absoluteUrl('mapkey.uri')}
},
key: {uri: 'key.uri', resolvedUri: absoluteUrl('key.uri')},
parts: [
{uri: 'part1.uri', resolvedUri: absoluteUrl('part1.uri')},
{uri: 'part2.uri', resolvedUri: absoluteUrl('part2.uri')}
],
preloadHints: [
{uri: 'hint1.uri', resolvedUri: absoluteUrl('hint1.uri')},
{uri: 'hint2.uri', resolvedUri: absoluteUrl('hint2.uri')}
]
}], 'result as expected');
});
QUnit.test('resolves all segment uris using baseUri', function(assert) {
const baseUri = 'http://example.com';
const {updated, segments} = mergeSegments({
baseUri: 'http://example.com/media.m3u8',
oldSegments: [],
newSegments: [{
uri: 'segment.mp4',
map: {
uri: 'init.mp4',
key: {uri: 'mapkey.uri'}
},
key: {uri: 'key.uri'},
parts: [{uri: 'part.uri'}],
preloadHints: [{uri: 'hint.uri'}]
}]
});
assert.true(updated, 'was updated');
assert.deepEqual(segments, [{
uri: 'segment.mp4',
resolvedUri: `${baseUri}/segment.mp4`,
map: {
uri: 'init.mp4',
resolvedUri: `${baseUri}/init.mp4`,
key: {uri: 'mapkey.uri', resolvedUri: `${baseUri}/mapkey.uri`}
},
key: {uri: 'key.uri', resolvedUri: `${baseUri}/key.uri`},
parts: [{uri: 'part.uri', resolvedUri: `${baseUri}/part.uri`}],
preloadHints: [{uri: 'hint.uri', resolvedUri: `${baseUri}/hint.uri`}]
}], 'result as expected');
});
QUnit.test('can merge on an offset', function(assert) {
const {updated, segments} = mergeSegments({
oldSegments: [{uri: '1', duration: 1}, {uri: '2', duration: 1}, {uri: '3', duration: 1, foo: 'bar'}],
newSegments: [{uri: '2', duration: 1}, {uri: '3', duration: 1}],
offset: 1
});
assert.true(updated, 'was updated');
assert.deepEqual(
segments,
[
{duration: 1, uri: '2', resolvedUri: absoluteUrl('2')},
{duration: 1, uri: '3', resolvedUri: absoluteUrl('3'), foo: 'bar'}
],
'result as expected'
);
});
QUnit.module('mergeSegment');
QUnit.test('updated without old segment', function(assert) {
const oldSegment = null;
const newSegment = {uri: 'foo.mp4'};
const result = mergeSegment(oldSegment, newSegment);
assert.true(result.updated, 'was updated');
assert.deepEqual(result.segment, {uri: 'foo.mp4'}, 'as expected');
});
QUnit.test('updated if new segment has no parts', function(assert) {
const oldSegment = {uri: 'foo.mp4', parts: [{uri: 'foo-p1.mp4'}]};
const newSegment = {uri: 'foo.mp4'};
const result = mergeSegment(oldSegment, newSegment);
assert.true(result.updated, 'was updated');
assert.deepEqual(result.segment, {uri: 'foo.mp4'}, 'as expected');
});
QUnit.test('updated if new segment has no preloadHints', function(assert) {
const oldSegment = {uri: 'foo.mp4', preloadHints: [{uri: 'foo-p1.mp4'}]};
const newSegment = {uri: 'foo.mp4'};
const result = mergeSegment(oldSegment, newSegment);
assert.true(result.updated, 'was updated');
assert.deepEqual(result.segment, {uri: 'foo.mp4'}, 'as expected');
});
QUnit.test('updated with different number of parts', function(assert) {
const oldSegment = {uri: 'foo.mp4', parts: [{uri: 'foo-p1.mp4'}]};
const newSegment = {uri: 'foo.mp4', parts: [{uri: 'foo-p1.mp4'}, {uri: 'foo-p2.mp4'}]};
const result = mergeSegment(oldSegment, newSegment);
assert.true(result.updated, 'was updated');
assert.deepEqual(result.segment, {
uri: 'foo.mp4',
parts: [
{uri: 'foo-p1.mp4'},
{uri: 'foo-p2.mp4'}
]
}, 'as expected');
});
QUnit.test('preload removed if new segment lacks it', function(assert) {
const oldSegment = {preload: true};
const newSegment = {uri: 'foo.mp4'};
const result = mergeSegment(oldSegment, newSegment);
assert.true(result.updated, 'was updated');
assert.deepEqual(result.segment, {uri: 'foo.mp4'}, 'as expected');
});
QUnit.test('if old segment was not skipped skipped is removed', function(assert) {
const oldSegment = {uri: 'foo.mp4'};
const newSegment = {skipped: true};
const result = mergeSegment(oldSegment, newSegment);
assert.false(result.updated, 'was not updated');
assert.deepEqual(result.segment, {uri: 'foo.mp4'}, 'as expected');
});
QUnit.test('merges part properties', function(assert) {
const oldSegment = {uri: 'foo.mp4', parts: [{uri: 'part', foo: 'bar'}]};
const newSegment = {uri: 'foo.mp4', parts: [{uri: 'part'}]};
const result = mergeSegment(oldSegment, newSegment);
assert.false(result.updated, 'was not updated');
assert.deepEqual(result.segment, {uri: 'foo.mp4', parts: [{uri: 'part', foo: 'bar'}]}, 'as expected');
});
QUnit.module('mergeMedia');
QUnit.test('is updated without old media', function(assert) {
const oldMedia = null;
const newMedia = {mediaSequence: 0};
const result = mergeMedia({
oldMedia,
newMedia,
baseUri: null
});
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.media,
{mediaSequence: 0, segments: []},
'as expected'
);
});
QUnit.test('is updated if key added', function(assert) {
const oldMedia = {mediaSequence: 0};
const newMedia = {mediaSequence: 0, endList: true};
const result = mergeMedia({
oldMedia,
newMedia,
baseUri: null
});
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.media,
{mediaSequence: 0, segments: [], endList: true},
'as expected'
);
});
QUnit.test('is updated if key changes', function(assert) {
const oldMedia = {mediaSequence: 0, preloadSegment: {parts: [{duration: 1}]}};
const newMedia = {mediaSequence: 0, preloadSegment: {parts: [{duration: 1}, {duration: 1}]}};
const result = mergeMedia({
oldMedia,
newMedia,
baseUri: null
});
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.media,
{
mediaSequence: 0,
preloadSegment: {parts: [{duration: 1}, {duration: 1}]},
segments: []
},
'as expected'
);
});
QUnit.test('is updated if key removed', function(assert) {
const oldMedia = {mediaSequence: 0, preloadSegment: {parts: [{duration: 1}]}};
const newMedia = {mediaSequence: 0};
const result = mergeMedia({
oldMedia,
newMedia,
baseUri: null
});
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.media,
{
mediaSequence: 0,
segments: []
},
'as expected'
);
});
QUnit.module('forEachPlaylist');
QUnit.test('loops over playlists and group playlists', function(assert) {
const manifest = {
playlists: [{one: 'one'}, {two: 'two'}],
mediaGroups: {
AUDIO: {
en: {
main: {foo: 'bar', playlists: [{three: 'three'}]}
},
es: {
main: {a: 'b', playlists: [{four: 'four' }]}
}
},
SUBTITLES: {
en: {
main: {foo: 'bar', playlists: [{five: 'five'}]}
},
es: {
main: {a: 'b', playlists: [{six: 'six'}]}
}
}
}
};
let i = 0;
forEachPlaylist(manifest, function(playlist, index, array) {
if (i === 0) {
assert.deepEqual(playlist, {one: 'one'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.playlists, 'array is correct');
} else if (i === 1) {
assert.deepEqual(playlist, {two: 'two'}, 'playlist as expected');
assert.equal(index, 1, 'index as expected');
assert.equal(array, manifest.playlists, 'array is correct');
} else if (i === 2) {
assert.deepEqual(playlist, {three: 'three'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.AUDIO.en.main.playlists, 'array is correct');
} else if (i === 3) {
assert.deepEqual(playlist, {four: 'four'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.AUDIO.es.main.playlists, 'array is correct');
} else if (i === 4) {
assert.deepEqual(playlist, {five: 'five'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.SUBTITLES.en.main.playlists, 'array is correct');
} else if (i === 5) {
assert.deepEqual(playlist, {six: 'six'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.SUBTITLES.es.main.playlists, 'array is correct');
}
i++;
});
assert.equal(i, 6, 'six playlists');
});
QUnit.test('loops over just groups', function(assert) {
const manifest = {
mediaGroups: {
AUDIO: {
en: {
main: {foo: 'bar', playlists: [{three: 'three'}]}
},
es: {
main: {a: 'b', playlists: [{four: 'four' }]}
}
},
SUBTITLES: {
en: {
main: {foo: 'bar', playlists: [{five: 'five'}]}
},
es: {
main: {a: 'b', playlists: [{six: 'six'}]}
}
}
}
};
let i = 0;
forEachPlaylist(manifest, function(playlist, index, array) {
if (i === 0) {
assert.deepEqual(playlist, {three: 'three'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.AUDIO.en.main.playlists, 'array is correct');
} else if (i === 1) {
assert.deepEqual(playlist, {four: 'four'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.AUDIO.es.main.playlists, 'array is correct');
} else if (i === 2) {
assert.deepEqual(playlist, {five: 'five'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.SUBTITLES.en.main.playlists, 'array is correct');
} else if (i === 3) {
assert.deepEqual(playlist, {six: 'six'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.mediaGroups.SUBTITLES.es.main.playlists, 'array is correct');
}
i++;
});
assert.equal(i, 4, 'four playlists');
});
QUnit.test('loops over playlists only', function(assert) {
const manifest = {
playlists: [{one: 'one'}, {two: 'two'}]
};
let i = 0;
forEachPlaylist(manifest, function(playlist, index, array) {
if (i === 0) {
assert.deepEqual(playlist, {one: 'one'}, 'playlist as expected');
assert.equal(index, 0, 'index as expected');
assert.equal(array, manifest.playlists, 'array is correct');
} else if (i === 1) {
assert.deepEqual(playlist, {two: 'two'}, 'playlist as expected');
assert.equal(index, 1, 'index as expected');
assert.equal(array, manifest.playlists, 'array is correct');
}
i++;
});
assert.equal(i, 2, 'two playlists');
});
QUnit.test('does not error when passed null', function(assert) {
assert.expect(1);
let i = 0;
forEachPlaylist(null, function(playlist, index, array) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('does not error without groups', function(assert) {
assert.expect(1);
const manifest = {};
let i = 0;
forEachPlaylist(manifest, function(playlist, index, array) {
i++;
});
assert.equal(i, 0, 'did not loop');
});
QUnit.test('can stop in media groups', function(assert) {
const manifest = {
mediaGroups: {
AUDIO: {
en: {
main: {foo: 'bar', playlists: [{three: 'three'}]}
},
es: {
main: {a: 'b', playlists: [{four: 'four' }]}
}
},
SUBTITLES: {
en: {
main: {foo: 'bar', playlists: [{five: 'five'}]}
},
es: {
main: {a: 'b', playlists: [{six: 'six'}]}
}
}
}
};
let i = 0;
forEachPlaylist(manifest, function(playlist, index, array) {
i++;
return true;
});
assert.equal(i, 1, 'looped once');
});
QUnit.test('can stop in playlists', function(assert) {
const manifest = {
playlists: [{one: 'one'}, {two: 'two'}]
};
let i = 0;
forEachPlaylist(manifest, function(playlist, index, array) {
i++;
return true;
});
assert.equal(i, 1, 'looped once');
});
QUnit.module('mergeManifest');
QUnit.test('is updated without manifest a', function(assert) {
const oldManifest = null;
const newManifest = {mediaSequence: 0};
const result = mergeManifest(oldManifest, newManifest);
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 0},
'as expected'
);
});
QUnit.test('is updated if b lack key that a has', function(assert) {
const oldManifest = {mediaSequence: 0, foo: 'bar'};
const newManifest = {mediaSequence: 0};
const result = mergeManifest(oldManifest, newManifest);
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 0},
'as expected'
);
});
QUnit.test('is updated if a lack key that b has', function(assert) {
const oldManifest = {mediaSequence: 0};
const newManifest = {mediaSequence: 0, foo: 'bar'};
const result = mergeManifest(oldManifest, newManifest);
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 0, foo: 'bar'},
'as expected'
);
});
QUnit.test('is updated if key value is different', function(assert) {
const oldManifest = {mediaSequence: 0};
const newManifest = {mediaSequence: 1};
const result = mergeManifest(oldManifest, newManifest);
assert.true(result.updated, 'was updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 1},
'as expected'
);
});
QUnit.test('is not updated if key value is the same', function(assert) {
const oldManifest = {mediaSequence: 0};
const newManifest = {mediaSequence: 0};
const result = mergeManifest(oldManifest, newManifest);
assert.false(result.updated, 'was not updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 0},
'as expected'
);
});
QUnit.test('is not updated if key value is the same', function(assert) {
const oldManifest = {mediaSequence: 0};
const newManifest = {mediaSequence: 0};
const result = mergeManifest(oldManifest, newManifest);
assert.false(result.updated, 'was not updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 0},
'as expected'
);
});
QUnit.test('is not updated if key value is changed but ignored', function(assert) {
const oldManifest = {mediaSequence: 0};
const newManifest = {mediaSequence: 1};
const result = mergeManifest(oldManifest, newManifest, ['mediaSequence']);
assert.false(result.updated, 'was not updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 1},
'as expected'
);
});
QUnit.test('excluded key is not brought over', function(assert) {
const oldManifest = {mediaSequence: 0, foo: 'bar'};
const newManifest = {mediaSequence: 0};
const result = mergeManifest(oldManifest, newManifest, ['foo']);
assert.false(result.updated, 'was not updated');
assert.deepEqual(
result.manifest,
{mediaSequence: 0},
'as expected'
);
});
});