forked from shaka-project/shaka-player
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lrc_text_parser_unit.js
102 lines (91 loc) · 3 KB
/
lrc_text_parser_unit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.require('shaka.text.LrcTextParser');
goog.require('shaka.util.BufferUtils');
goog.require('shaka.util.StringUtils');
describe('LrcTextParser', () => {
it('supports no cues', () => {
verifyHelper([],
'',
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
});
it('handles a blank line at the start of the file', () => {
verifyHelper(
[
{startTime: 0, endTime: 2, payload: 'Test'},
],
'\n\n' +
'[00:00.00]Test',
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
});
it('handles a blank line at the end of the file', () => {
verifyHelper(
[
{startTime: 0, endTime: 2, payload: 'Test'},
],
'[00:00.00]Test' +
'\n\n',
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
});
it('handles no blank line at the end of the file', () => {
verifyHelper(
[
{startTime: 0, endTime: 2, payload: 'Test'},
],
'[00:00.00]Test',
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
});
it('supports multiple cues', () => {
verifyHelper(
[
{startTime: 0, endTime: 10, payload: 'Test'},
{startTime: 10, endTime: 20, payload: 'Test2'},
{startTime: 20, endTime: 22, payload: 'Test3'},
],
'[00:00.00]Test\n' +
'[00:10.00]Test2\n' +
'[00:20.00]Test3',
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
});
it('supports different time formats', () => {
verifyHelper(
[
{startTime: 0.1, endTime: 10.001, payload: 'Test'},
{startTime: 10.001, endTime: 20.02, payload: 'Test2'},
{startTime: 20.02, endTime: 30.1, payload: 'Test3'},
{startTime: 30.1, endTime: 40.001, payload: 'Test4'},
{startTime: 40.001, endTime: 50.02, payload: 'Test5'},
{startTime: 50.02, endTime: 52.02, payload: 'Test6'},
],
'[00:00.1]Test\n' +
'[00:10.001]Test2\n' +
'[00:20.02]Test3\n' +
'[00:30,1]Test4\n' +
'[00:40,001]Test5\n' +
'[00:50,02]Test6',
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
});
/**
* @param {!Array} cues
* @param {string} text
* @param {shaka.extern.TextParser.TimeContext} time
*/
function verifyHelper(cues, text, time) {
const BufferUtils = shaka.util.BufferUtils;
const StringUtils = shaka.util.StringUtils;
const data = BufferUtils.toUint8(StringUtils.toUTF8(text));
const parser = new shaka.text.LrcTextParser();
const result = parser.parseMedia(data, time);
const expected = cues.map((cue) => {
if (cue.nestedCues) {
cue.nestedCues = cue.nestedCues.map(
(nestedCue) => jasmine.objectContaining(nestedCue));
}
return jasmine.objectContaining(cue);
});
expect(result).toEqual(expected);
}
});