test_ogg_vorbis.py 4.8 KB

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