+++ /dev/null
-import unittest
-import os
-from PIL import Image
-from django.conf import settings
-from sorl.thumbnail.base import Thumbnail
-
-try:
- set
-except NameError:
- from sets import Set as set # For Python 2.3
-
-
-def get_default_settings():
- from sorl.thumbnail import defaults
- def_settings = {}
- for key in dir(defaults):
- if key == key.upper() and key not in ['WVPS', 'CONVERT']:
- def_settings[key] = getattr(defaults, key)
- return def_settings
-
-
-DEFAULT_THUMBNAIL_SETTINGS = get_default_settings()
-RELATIVE_PIC_NAME = "sorl-thumbnail-test_source.jpg"
-PIC_NAME = os.path.join(settings.MEDIA_ROOT, RELATIVE_PIC_NAME)
-THUMB_NAME = os.path.join(settings.MEDIA_ROOT, "sorl-thumbnail-test_%02d.jpg")
-PIC_SIZE = (800, 600)
-
-
-class ChangeSettings:
- def __init__(self):
- self.default_settings = DEFAULT_THUMBNAIL_SETTINGS.copy()
-
- def change(self, override=None):
- if override is not None:
- self.default_settings.update(override)
- for setting, default in self.default_settings.items():
- settings_s = 'THUMBNAIL_%s' % setting
- self_s = 'original_%s' % setting
- if hasattr(settings, settings_s) and not hasattr(self, self_s):
- setattr(self, self_s, getattr(settings, settings_s))
- if hasattr(settings, settings_s) or \
- default != DEFAULT_THUMBNAIL_SETTINGS[setting]:
- setattr(settings, settings_s, default)
-
- def revert(self):
- for setting in self.default_settings:
- settings_s = 'THUMBNAIL_%s' % setting
- self_s = 'original_%s' % setting
- if hasattr(self, self_s):
- setattr(settings, settings_s, getattr(self, self_s))
- delattr(self, self_s)
-
-
-class BaseTest(unittest.TestCase):
- def setUp(self):
- self.images_to_delete = set()
- # Create the test image
- Image.new('RGB', PIC_SIZE).save(PIC_NAME, 'JPEG')
- self.images_to_delete.add(PIC_NAME)
- # Change settings so we know they will be constant
- self.change_settings = ChangeSettings()
- self.change_settings.change()
-
- def verify_thumbnail(self, expected_size, thumbnail=None,
- expected_filename=None, expected_mode=None):
- assert thumbnail is not None or expected_filename is not None, \
- 'verify_thumbnail should be passed at least a thumbnail or an' \
- 'expected filename.'
-
- if thumbnail is not None:
- # Verify that the templatetag method returned a Thumbnail instance
- self.assertTrue(isinstance(thumbnail, Thumbnail))
- thumb_name = thumbnail.dest
- else:
- thumb_name = expected_filename
-
- if isinstance(thumb_name, basestring):
- # Verify that the thumbnail file exists
- self.assert_(os.path.isfile(thumb_name),
- 'Thumbnail file not found')
-
- # Remember to delete the file
- self.images_to_delete.add(thumb_name)
-
- # If we got an expected_filename, check that it is right
- if expected_filename is not None and thumbnail is not None:
- self.assertEqual(thumbnail.dest, expected_filename)
-
- image = Image.open(thumb_name)
-
- # Verify the thumbnail has the expected dimensions
- self.assertEqual(image.size, expected_size)
-
- if expected_mode is not None:
- self.assertEqual(image.mode, expected_mode)
-
- def tearDown(self):
- # Remove all the files that have been created
- for image in self.images_to_delete:
- try:
- os.remove(image)
- except:
- pass
- # Change settings back to original
- self.change_settings.revert()