/
dtvcc_packet_builder_unit.js
158 lines (133 loc) · 4.21 KB
/
dtvcc_packet_builder_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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
describe('DtvccPacketBuilder', () => {
/** @type {!shaka.cea.DtvccPacketBuilder} */
let dtvccPacketBuilder;
/** @type {number} */
const DTVCC_PACKET_START = shaka.cea.DtvccPacketBuilder.DTVCC_PACKET_START;
/** @type {number} */
const DTVCC_PACKET_DATA = shaka.cea.DtvccPacketBuilder.DTVCC_PACKET_DATA;
beforeEach(() => {
dtvccPacketBuilder = new shaka.cea.DtvccPacketBuilder();
});
it('parses and returns a full packet correctly', () => {
// Last 6 bits of the first byte in a DTVCC_PACKET_START is
// packetSize. The number of data bytes that follow should be
// packetSize * 2 - 1, as per the spec.
const dtvccStartByte = 0x01;
// Add the byte for DTVCC_PACKET_START.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_START,
value: dtvccStartByte,
order: 0,
});
const cea708PacketDataBytes = [
{
pts: 0,
type: DTVCC_PACKET_DATA,
value: 0,
order: 0,
},
];
for (const byte of cea708PacketDataBytes) {
dtvccPacketBuilder.addByte(byte);
}
const expectedPackets = [new shaka.cea.DtvccPacket(cea708PacketDataBytes)];
const parsedPackets = dtvccPacketBuilder.getBuiltPackets();
expect(parsedPackets).toEqual(expectedPackets);
});
it('does not return a half-processed packet', () => {
const dtvccStartByte = 0x02; // 2 * 2 - 1 = 3 data bytes should follow.
// Add the byte for DTVCC_PACKET_START.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_START,
value: dtvccStartByte,
order: 0,
});
// Add a DTVCC_PACKET_DATA byte.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_START,
value: dtvccStartByte,
order: 0,
});
// Add another DTVCC_PACKET_START byte before all the data bytes
// were received for the first packet.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_START,
value: dtvccStartByte,
order: 0,
});
// Expect no packets to be returned, since no packets completed processing.
const parsedPackets = dtvccPacketBuilder.getBuiltPackets();
expect(parsedPackets).toEqual([]);
});
it('clears the packet builder', () => {
const dtvccStartByte = 0x01; // 1 * 2 - 1 = 1 data bytes should follow.
// Add the byte for DTVCC_PACKET_START.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_START,
value: dtvccStartByte,
order: 0,
});
// Clear the packet builder.
dtvccPacketBuilder.clear();
// Add a DTVCC_PACKET_DATA byte.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_START,
value: dtvccStartByte,
order: 0,
});
// Even though the right number of data bytes were given according to the
// start packet, the packet builder was cleared in between. So no packets
// should have been returned.
const parsedPackets = dtvccPacketBuilder.getBuiltPackets();
expect(parsedPackets).toEqual([]);
});
it('ignores DTVCC_PACKET_DATA sent without a DTVCC_PACKET_START', () => {
// These next two bytes are DTVCC_PACKET_DATA, but no DTVCC_PACKET_START
// was sent yet. So these bytes should have been ignored by the builder.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_DATA,
value: 0,
order: 0,
});
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_DATA,
value: 0,
order: 0,
});
const dtvccStartByte = 0x01; // 1 * 2 - 1 = 1 data bytes should follow.
// Add the byte for DTVCC_PACKET_START.
dtvccPacketBuilder.addByte({
pts: 0,
type: DTVCC_PACKET_START,
value: dtvccStartByte,
order: 0,
});
const cea708PacketDataBytes = [
{
pts: 0,
type: DTVCC_PACKET_DATA,
value: 0,
order: 0,
},
];
for (const byte of cea708PacketDataBytes) {
dtvccPacketBuilder.addByte(byte);
}
const expectedPackets = [new shaka.cea.DtvccPacket(cea708PacketDataBytes)];
const parsedPackets = dtvccPacketBuilder.getBuiltPackets();
expect(parsedPackets).toEqual(expectedPackets);
});
});