123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import mutagen
- import pytest
- from symuid._tag_interface import MP4
- # pylint: disable=protected-access
- def test_set_comment(empty_mp4_path):
- iface = MP4(mutagen.File(empty_mp4_path))
- assert iface.get_comment() is None
- iface.set_comment("latin")
- assert iface.get_comment() == "latin"
- iface.set_comment("mp4 你好")
- assert iface.get_comment() == "mp4 你好"
- iface.save()
- iface_reread = MP4(mutagen.File(empty_mp4_path))
- assert iface_reread.get_comment() == "mp4 你好"
- tags = mutagen.File(iface.track_path).tags
- assert len(tags) == 1
- assert tags.items()[0] == ("©cmt", ["mp4 你好"])
- def test__get_free_uuid(empty_mp4_path):
- uuid = b"h\x97\x8c_1?B\t\x9d\xa3$\xdf\xd0Y\xa1\xc2"
- mutagen_file = mutagen.File(empty_mp4_path)
- mutagen_file["----:foo:bar"] = mutagen.mp4.MP4FreeForm(
- dataformat=mutagen.mp4.AtomDataType.UUID, data=uuid
- )
- mutagen_file.save()
- mp4_iface = MP4(mutagen.File(empty_mp4_path))
- assert mp4_iface._get_free_uuid("foo:bar") == uuid
- def test_get_track_uuid(empty_mp4_path):
- uuid = b"h\x97\x8c_1?B\t\x9d\xa3$\xdf\xd0Y\xa1\xc2"
- mutagen_file = mutagen.File(empty_mp4_path)
- mutagen_file["----:symuid:uuid"] = mutagen.mp4.MP4FreeForm(
- dataformat=mutagen.mp4.AtomDataType.UUID, data=uuid
- )
- mutagen_file.save()
- mp4_iface = MP4(mutagen.File(empty_mp4_path))
- assert mp4_iface.get_track_uuid() == uuid
- @pytest.mark.parametrize(
- ("nominator", "denominator"),
- [
- (21, 42),
- (-21, 42),
- (21, -42),
- (-21, -42),
- (0, 42),
- ],
- )
- def test_get_free_int_ratio(empty_mp4_path, nominator, denominator):
- mutagen_file = mutagen.File(empty_mp4_path)
- mutagen_file.tags["----:foo:bar"] = [
- mutagen.mp4.MP4FreeForm(
- dataformat=mutagen.mp4.AtomDataType.INTEGER,
- data=i.to_bytes(4, byteorder="big", signed=True),
- )
- for i in (nominator, denominator)
- ]
- mutagen_file.save()
- mp4_iface = MP4(mutagen.File(empty_mp4_path))
- assert mp4_iface.get_free_int_ratio("foo:bar") == (nominator, denominator)
- @pytest.mark.parametrize(
- ("nominator", "denominator", "expected_tag_data"),
- [
- (21, 42, [b"\x15", b"\x2a"]),
- (-21, 42, [b"\xeb", b"\x2a"]),
- (21, -42, [b"\x15", b"\xd6"]),
- (-21, -42, [b"\xeb", b"\xd6"]),
- (0, 42, [b"\x00", b"\x2a"]),
- ],
- )
- def test_set_free_int_ratio(empty_mp4_path, nominator, denominator, expected_tag_data):
- mp4_iface = MP4(mutagen.File(empty_mp4_path))
- mp4_iface.set_free_int_ratio("test:some-ratio", nominator, denominator)
- mp4_iface.save()
- mutagen_file = mutagen.File(empty_mp4_path)
- assert len(mutagen_file.tags) == 1
- tag = mutagen_file.tags["----:test:some-ratio"]
- assert len(tag) == 2
- assert all(f.dataformat == mutagen.mp4.AtomDataType.INTEGER for f in tag)
- assert [bytes(f) for f in tag] == expected_tag_data
- @pytest.mark.parametrize(
- ("integer", "expected_tag_data"),
- [
- (0, b"\x00"),
- (4, b"\x04"),
- (-1, b"\xff"),
- (-2, b"\xfe"),
- (2 ** 6, b"\x40"),
- (2 ** 7 - 1, b"\x7f"),
- (2 ** 7, b"\x00\x80"),
- (2 ** 8, b"\x01\x00"),
- (2 ** 24, b"\x01\x00\x00\x00"),
- (2 ** 31 - 1, b"\x7f\xff\xff\xff"),
- ],
- )
- def test_set_free_int(empty_mp4_path, integer, expected_tag_data):
- mp4_iface = MP4(mutagen.File(empty_mp4_path))
- mp4_iface.set_free_int("foo:bar", integer)
- mp4_iface.save()
- mutagen_file = mutagen.File(empty_mp4_path)
- assert len(mutagen_file.tags) == 1
- (tag,) = mutagen_file.get("----:foo:bar")
- assert tag.dataformat == mutagen.mp4.AtomDataType.INTEGER
- assert bytes(tag) == expected_tag_data
- assert MP4._freeform_to_int(tag) == integer
|