/** * @license * Copyright 2016 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. */ describe('TtmlTextParser', function() { /** @const */ var Cue = shaka.text.Cue; it('supports no cues', function() { verifyHelper([], '', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports div with no cues but whitespace', function() { verifyHelper( [], '
\r\n
', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports xml:space', function() { var ttBody = '\n' + ' \n' + '

\n' + ' A B C \n' + '

\n' + ' \n'; // When xml:space="default", ignore whitespace outside tags. verifyHelper( [ {start: 62.03, end: 62.05, payload: 'A B C'} ], '' + ttBody + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); // When xml:space="preserve", take them into account. verifyHelper( [ {start: 62.03, end: 62.05, payload: '\n A B C \n '} ], '' + ttBody + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); // The default value for xml:space is "default". verifyHelper( [ {start: 62.03, end: 62.05, payload: 'A B C'} ], '' + ttBody + '', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); // Any other value is rejected as an error. errorHelper(shaka.util.Error.Code.INVALID_XML, '' + ttBody + ''); }); it('rejects invalid ttml', function() { errorHelper(shaka.util.Error.Code.INVALID_XML, ''); errorHelper(shaka.util.Error.Code.INVALID_XML, ''); }); it('rejects invalid time format', function() { errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE, '

'); errorHelper(shaka.util.Error.Code.INVALID_TEXT_CUE, '

'); }); it('supports colon formatted time', function() { verifyHelper( [ {start: 62.05, end: 3723.2, payload: 'Test'} ], '

Test

', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('accounts for offset', function() { verifyHelper( [ {start: 69.05, end: 3730.2, payload: 'Test'} ], '

Test

', {periodStart: 7, segmentStart: 0, segmentEnd: 0 }); }); it('supports time in 0.00h 0.00m 0.00s format', function() { verifyHelper( [ {start: 3567.03, end: 5402.3, payload: 'Test'} ], '

Test

', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports time with frame rate', function() { verifyHelper( [ {start: 615.5, end: 663, payload: 'Test'} ], ' ' + '' + '

Test

' + '' + '
', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports time with frame rate multiplier', function() { verifyHelper( [ {start: 615.5, end: 663, payload: 'Test'} ], ' ' + '' + '

Test

' + '' + '
', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports time with subframes', function() { verifyHelper( [ {start: 615.517, end: 663, payload: 'Test'} ], ' ' + '' + '

Test

' + '' + '
', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports time in frame format', function() { verifyHelper( [ {start: 2.5, end: 10.01, payload: 'Test'} ], '' + '' + '

Test

' + '' + '
', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports time in tick format', function() { verifyHelper( [ {start: 5, end: 6.02, payload: 'Test'} ], '' + '' + '

Test

' + '' + '
', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('supports time with duration', function() { verifyHelper( [ {start: 62.05, end: 67.05, payload: 'Test'} ], '

Test

', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('parses alignment from textAlign attribute of a region', function() { verifyHelper( [ { start: 62.05, end: 3723.2, payload: 'Test', lineAlign: Cue.textAlign.START } ], '' + '' + '' + '' + '' + '

Test

' + '' + '
', {periodStart: 0, segmentStart: 0, segmentEnd: 0 }); }); it('parses alignment from