mirror of https://github.com/yt-dlp/yt-dlp.git
52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
|
|
# Allow direct execution
|
|
import os
|
|
import sys
|
|
import unittest
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
import io
|
|
|
|
from yt_dlp.mp4_parser import (
|
|
parse_mp4_boxes,
|
|
write_mp4_boxes,
|
|
)
|
|
|
|
TEST_SEQUENCE = [
|
|
('test', b'123456'),
|
|
('trak', b''),
|
|
('helo', b'abcdef'),
|
|
('1984', b'1q84'),
|
|
('moov', b''),
|
|
('keys', b'2022'),
|
|
(None, 'moov'),
|
|
('topp', b'1991'),
|
|
(None, 'trak'),
|
|
]
|
|
|
|
# on-file reprensetation of the above sequence
|
|
TEST_BYTES = b'\x00\x00\x00\x0etest123456\x00\x00\x00Btrak\x00\x00\x00\x0eheloabcdef\x00\x00\x00\x0c19841q84\x00\x00\x00\x14moov\x00\x00\x00\x0ckeys2022\x00\x00\x00\x0ctopp1991'
|
|
|
|
|
|
class TestMP4Parser(unittest.TestCase):
|
|
def test_write_sequence(self):
|
|
with io.BytesIO() as w:
|
|
write_mp4_boxes(w, TEST_SEQUENCE)
|
|
bs = w.getvalue()
|
|
self.assertEqual(TEST_BYTES, bs)
|
|
|
|
def test_read_bytes(self):
|
|
with io.BytesIO(TEST_BYTES) as r:
|
|
result = list(parse_mp4_boxes(r))
|
|
self.assertListEqual(TEST_SEQUENCE, result)
|
|
|
|
def test_mismatched_box_end(self):
|
|
with io.BytesIO() as w, self.assertRaises(AssertionError):
|
|
write_mp4_boxes(w, [
|
|
('moov', b''),
|
|
('trak', b''),
|
|
(None, 'moov'),
|
|
(None, 'trak'),
|
|
])
|