test_ogg_vorbis.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import os
  2. import mutagen
  3. import pytest
  4. from symuid._tag_interface import Ogg
  5. # pylint: disable=protected-access
  6. @pytest.mark.parametrize("track_name", ["ogg-vorbis-empty.ogg"])
  7. def test_get_track_path(tracks_dir_path, track_name):
  8. track_path = os.path.join(tracks_dir_path, track_name)
  9. ogg_iface = Ogg(mutagen.File(track_path))
  10. assert track_path == ogg_iface.track_path
  11. @pytest.mark.parametrize(
  12. ("track_name", "tag_label", "expected_text"),
  13. [
  14. ("ogg-vorbis-empty.ogg", "artist", None),
  15. ("ogg-vorbis-typical.ogg", "artist", "libvorbis encoder"),
  16. ("ogg-vorbis-typical.ogg", "comment", "some further information"),
  17. ("ogg-vorbis-typical.ogg", "com", None),
  18. (
  19. "ogg-vorbis-typical.ogg",
  20. "symuid:uuid",
  21. "4cfe3a2a-6354-40f5-bd9b-5ccf1c6f48ba",
  22. ),
  23. ],
  24. )
  25. def test__get_single_text(tracks_dir_path, track_name, tag_label, expected_text):
  26. ogg_iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name)))
  27. assert expected_text == ogg_iface._get_single_text(tag_label)
  28. @pytest.mark.parametrize(
  29. ("track_name", "expected_comment"),
  30. [
  31. ("ogg-vorbis-empty.ogg", None),
  32. ("ogg-vorbis-typical.ogg", "some further information"),
  33. ],
  34. )
  35. def test_get_comment(tracks_dir_path, track_name, expected_comment):
  36. iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name)))
  37. assert expected_comment == iface.get_comment()
  38. def test_set_comment(empty_ogg_vorbis_path):
  39. iface = Ogg(mutagen.File(empty_ogg_vorbis_path))
  40. assert iface.get_comment() is None
  41. iface.set_comment("latin chars")
  42. assert iface.get_comment() == "latin chars"
  43. iface.set_comment("你好!")
  44. assert iface.get_comment() == "你好!"
  45. iface.save()
  46. iface_reread = Ogg(mutagen.File(empty_ogg_vorbis_path))
  47. assert iface_reread.get_comment() == "你好!"
  48. tags = mutagen.File(iface.track_path).tags
  49. assert len(tags) == 1
  50. assert tags.items()[0] == ("comment", ["你好!"])
  51. @pytest.mark.parametrize(
  52. ("track_name", "expected_uuid"),
  53. [
  54. ("ogg-vorbis-empty.ogg", None),
  55. ("ogg-vorbis-typical.ogg", b"L\xfe:*cT@\xf5\xbd\x9b\\\xcf\x1coH\xba"),
  56. ],
  57. )
  58. def test_get_track_uuid(tracks_dir_path, track_name, expected_uuid):
  59. iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name)))
  60. assert expected_uuid == iface.get_track_uuid()
  61. def test_set_track_uuid(empty_ogg_vorbis_path):
  62. iface = Ogg(mutagen.File(empty_ogg_vorbis_path))
  63. assert iface.get_track_uuid() is None
  64. uuid_a = b"s\x84@\xd8\xfe\xe8K\x80\xa7J\x13\x89\\%\xech"
  65. iface.set_track_uuid(uuid_a)
  66. assert iface.get_track_uuid() == uuid_a
  67. uuid_b = b"\xfaQ\x9a\x0eo\xa3Cp\xa1\x98c\x01\x93\xfb\xf7\xd0"
  68. iface.set_track_uuid(uuid_b)
  69. assert iface.get_track_uuid() == uuid_b
  70. iface.save()
  71. iface_reread = Ogg(mutagen.File(empty_ogg_vorbis_path))
  72. assert iface_reread.get_track_uuid() == uuid_b
  73. tags = mutagen.File(iface.track_path).tags
  74. assert len(tags) == 1
  75. assert tags.items()[0] == ("symuid:uuid", ["fa519a0e-6fa3-4370-a198-630193fbf7d0"])
  76. @pytest.mark.parametrize(
  77. ("track_name", "tag_label", "expected_int"),
  78. [
  79. ("ogg-vorbis-empty.ogg", "tracknumber", None),
  80. ("ogg-vorbis-typical.ogg", "tracknumber", 3),
  81. ("ogg-vorbis-typical.ogg", "tracknumberr", None),
  82. ("ogg-vorbis-typical.ogg", "symuid:pcnt:player:library:1572098177", 22),
  83. ],
  84. )
  85. def test_get_free_int(tracks_dir_path, track_name, tag_label, expected_int):
  86. ogg_iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name)))
  87. assert expected_int == ogg_iface.get_free_int(tag_label)
  88. def test_get_free_ints(tracks_dir_path):
  89. iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, "ogg-vorbis-typical.ogg")))
  90. assert not list(iface.get_free_ints("symuid:none"))
  91. assert list(iface.get_free_ints("tracknumber")) == [("tracknumber", 3)]
  92. assert not list(iface.get_free_ints("tracknum"))
  93. pcnt_tags = {
  94. ("symuid:pcnt:player:library:1572098177", 22),
  95. ("symuid:pcnt:player:library:1572098158", 21),
  96. }
  97. assert set(iface.get_free_ints("symuid:pcnt:player:library:1572098158")) == {
  98. ("symuid:pcnt:player:library:1572098158", 21)
  99. }
  100. assert set(iface.get_free_ints("symuid:pcnt:player:library")) == pcnt_tags
  101. assert set(iface.get_free_ints("symuid:pcnt:player")) == pcnt_tags
  102. assert set(iface.get_free_ints("symuid:pcnt")) == pcnt_tags
  103. def test_set_free_int(empty_ogg_vorbis_path):
  104. iface = Ogg(mutagen.File(empty_ogg_vorbis_path))
  105. assert iface.get_free_int("tracknumber") is None
  106. iface.set_free_int("tracknumber", 9)
  107. assert iface.get_free_int("tracknumber") == 9
  108. iface.set_free_int("tracknumber", 5)
  109. assert iface.get_free_int("tracknumber") == 5
  110. iface.save()
  111. iface_reread = Ogg(mutagen.File(empty_ogg_vorbis_path))
  112. assert iface_reread.get_free_int("tracknumber") == 5
  113. tags = mutagen.File(iface.track_path).tags
  114. assert len(tags) == 1
  115. assert tags.items()[0] == ("tracknumber", ["5"])