/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
describe('TtmlTextParser', () => {
const Cue = shaka.text.Cue;
const CueRegion = shaka.text.CueRegion;
const Util = shaka.test.Util;
it('supports no cues', () => {
verifyHelper([],
'',
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
});
it('supports empty text string', () => {
verifyHelper([],
'',
{periodStart: 0, segmentStart: 0, segmentEnd: 0});
});
it('supports div with no cues but whitespace', () => {
verifyHelper(
[],
'
\n' + ' A B C \n' + '
\n' + ' \n'; // When xml:space="default", ignore whitespace outside tags. verifyHelper( [ { startTime: 62.03, endTime: 62.05, nestedCues: [{ payload: 'A B C', startTime: 62.03, endTime: 62.05, }], payload: '', }, ], '' + ttBody + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); // When xml:space="preserve", take them into account. verifyHelper( [ { startTime: 62.03, endTime: 62.05, nestedCues: [{ payload: ' A B C ', startTime: 62.03, endTime: 62.05, }], }, ], '' + ttBody + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); // The default value for xml:space is "default". verifyHelper( [ { startTime: 62.03, endTime: 62.05, nestedCues: [{ payload: 'A B C', startTime: 62.03, endTime: 62.05, }], }, ], '' + ttBody + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); // Any other value is rejected as an error. errorHelper(shaka.util.Error.Code.INVALID_XML, '' + ttBody + '', jasmine.any(String)); }); it('rejects invalid ttml', () => { const anyString = jasmine.any(String); errorHelper(shaka.util.Error.Code.INVALID_XML, 'My very own cue
'); errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE, 'An invalid cue
'); }); it('supports spans as nestedCues of paragraphs', () => { verifyHelper( [ { startTime: 62.05, endTime: 3723.2, payload: '', nestedCues: [ { payload: 'First cue', startTime: 62.05, endTime: 3723.2, }, { payload: '', spacer: true, startTime: 62.05, endTime: 3723.2, }, { payload: 'Second cue', startTime: 62.05, endTime: 3723.2, }, ], }, ], '' +
'First cue
Second cue
Test
', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('accounts for offset', () => { verifyHelper( [ {startTime: 69.05, endTime: 3730.2, payload: 'Test'}, ], 'Test
', {periodStart: 7, segmentStart: 0, segmentEnd: 0}); }); it('supports nested cues with an offset', () => { verifyHelper( [ { startTime: 69.05, endTime: 3730.2, payload: '', nestedCues: [ { payload: 'Nested cue', startTime: 69.05, endTime: 3730.2, }, ], }, ], 'Nested cue
' + 'Test
', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('supports time with frame rate', () => { verifyHelper( [ {startTime: 615.5, endTime: 663, payload: 'Test'}, ], ' ' + '' + 'Test
' + '' + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('supports time with frame rate multiplier', () => { verifyHelper( [ {startTime: 615.5, endTime: 663, payload: 'Test'}, ], ' ' + '' + 'Test
' + '' + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('supports time with subframes', () => { verifyHelper( [ { startTime: Util.closeTo(615.5 + 1 / 60), endTime: 663, payload: 'Test', }, ], ' ' + '' + 'Test
' + '' + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('supports time in frame format', () => { verifyHelper( [ {startTime: 2.5, endTime: Util.closeTo(10.01), payload: 'Test'}, ], '' + '' + 'Test
' + '' + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('supports time in tick format', () => { verifyHelper( [ {startTime: 5, endTime: Util.closeTo(6.02), payload: 'Test'}, ], '' + '' + 'Test
' + '' + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('supports time with duration', () => { verifyHelper( [ {startTime: 62.05, endTime: 67.05, payload: 'Test'}, ], 'Test
', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('parses alignment from textAlign attribute of a region', () => { verifyHelper( [ { startTime: 62.05, endTime: 3723.2, payload: 'Test', lineAlign: Cue.textAlign.START, }, ], '' + 'Test
' + '' + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('allows non-standard namespace names', () => { verifyHelper( [ { startTime: 62.05, endTime: 3723.2, payload: 'Test', lineAlign: Cue.textAlign.START, }, ], '' + 'Test
' + '' + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0}); }); it('parses alignment from