Add API tests for images in tags

This commit is contained in:
Thomas Scholtes 2014-03-08 16:12:24 +01:00
parent 680009021c
commit 80eded77b1

View file

@ -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