mirror of
https://github.com/beetbox/beets.git
synced 2025-12-16 05:34:47 +01:00
Add API tests for images in tags
This commit is contained in:
parent
680009021c
commit
80eded77b1
1 changed files with 107 additions and 1 deletions
|
|
@ -23,7 +23,7 @@ import time
|
|||
|
||||
import _common
|
||||
from _common import unittest
|
||||
from beets.mediafile import MediaFile
|
||||
from beets.mediafile import MediaFile, TagImage
|
||||
|
||||
|
||||
class ArtTestMixin(object):
|
||||
|
|
@ -63,6 +63,112 @@ class ArtTestMixin(object):
|
|||
self.assertEqual(mediafile.art, self.jpg_data)
|
||||
|
||||
|
||||
class ImageStructureTestMixin(object):
|
||||
"""Test reading and writing multiple image tags.
|
||||
|
||||
The tests use the `image` media file fixture. The tags of these files
|
||||
include two images, on in the PNG format, the other in JPEG format. If
|
||||
the tag format supports it they also include additional metadata.
|
||||
"""
|
||||
|
||||
def test_read_image_structures(self):
|
||||
mediafile = self._mediafile_fixture('image')
|
||||
|
||||
self.assertEqual(len(mediafile.images), 2)
|
||||
|
||||
image = mediafile.images[0]
|
||||
self.assertEqual(image.data, self.png_data)
|
||||
self.assertEqual(image.mime_type, 'image/png')
|
||||
self.assertExtendedImageAttributes(image, desc='album cover',
|
||||
type='front')
|
||||
|
||||
image = mediafile.images[1]
|
||||
self.assertEqual(image.data, self.jpg_data)
|
||||
self.assertEqual(image.mime_type, 'image/jpg')
|
||||
self.assertExtendedImageAttributes(image, desc='the artist',
|
||||
type='performer')
|
||||
|
||||
def test_set_image_structure(self):
|
||||
mediafile = self._mediafile_fixture('empty')
|
||||
image = TagImage(data=self.png_data, desc='album cover', type=TagImage.FRONT)
|
||||
mediafile.images = [image]
|
||||
mediafile.save()
|
||||
|
||||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertEqual(len(mediafile.images), 1)
|
||||
|
||||
image = mediafile.images[0]
|
||||
self.assertEqual(image.data, self.png_data)
|
||||
self.assertEqual(image.mime_type, 'image/png')
|
||||
self.assertExtendedImageAttributes(image, desc='album cover',
|
||||
type='front')
|
||||
|
||||
def test_add_image_structure(self):
|
||||
mediafile = self._mediafile_fixture('image')
|
||||
self.assertEqual(len(mediafile.images), 2)
|
||||
|
||||
image = TagImage(data=self.png_data, desc='the composer',
|
||||
type=TagImage.COMPOSER)
|
||||
mediafile.images += image
|
||||
mediafile.write()
|
||||
|
||||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertEqual(len(mediafile.images), 3)
|
||||
self.assertExtendedImageAttributes(mediafile.images[2],
|
||||
desc='another cover', type='composer')
|
||||
|
||||
def test_mutate_image_structure(self):
|
||||
mediafile = self._mediafile_fixture('image')
|
||||
self.assertEqual(len(mediafile.images), 2)
|
||||
|
||||
image = mediafile.images[0]
|
||||
self.assertEqual(image.data, self.png_data)
|
||||
self.assertEqual(image.mime_type, 'image/png')
|
||||
self.assertExtendedImageAttributes(image, desc='album cover',
|
||||
type='front')
|
||||
|
||||
image.data = self.jpg_data
|
||||
image.desc = 'new description'
|
||||
image.type = TagImage.COMPOSER
|
||||
mediafile.write()
|
||||
|
||||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertEqual(len(mediafile.images), 2)
|
||||
|
||||
image = mediafile.images[0]
|
||||
self.assertEqual(image.data, self.jpg_data)
|
||||
self.assertEqual(image.mime_type, 'image/jpeg')
|
||||
self.assertExtendedImageAttributes(image, desc='new description',
|
||||
type='composer')
|
||||
|
||||
def test_delete_image_structure(self):
|
||||
mediafile = self._mediafile_fixture('image')
|
||||
self.assertEqual(len(mediafile.images), 2)
|
||||
|
||||
del mediafile.images[0]
|
||||
mediafile.write()
|
||||
|
||||
mediafile = MediaFile(mediafile.path)
|
||||
self.assertEqual(len(mediafile.images), 1)
|
||||
self.assertEqual(image.data, self.png_data)
|
||||
self.assertEqual(image.mime_type, 'image/jpg')
|
||||
self.assertExtendedImageAttributes(image, desc='the artist',
|
||||
type='performer')
|
||||
|
||||
def assertExtendedImageAttributes(image, **kwargs):
|
||||
"""Ignore extended image attributes in the base tests.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class ExtendedImageStructureTestMixin(ImageStructureTestMixin):
|
||||
"""Checks for additional attributes in the image structure."""
|
||||
|
||||
def assertExtendedImageAttributes(image, desc, type):
|
||||
self.assertEqual(image.desc, desc)
|
||||
self.assertEqual(image.type, type)
|
||||
|
||||
|
||||
# TODO include this in ReadWriteTestBase if implemented
|
||||
class LazySaveTestMixin(object):
|
||||
"""Mediafile should only write changes when tags have changed
|
||||
|
|
|
|||
Loading…
Reference in a new issue