1# Copyright 2013 Christoph Reiter
2#
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 2 of the License, or
6# (at your option) any later version.
7
8from tests import TestCase, get_data_path, mkstemp
9
10import os
11
12from quodlibet.formats import AudioFile, EmbeddedImage, APICType
13
14
15class TAPICType(TestCase):
16
17    def test_basic(self):
18        self.assertEqual(APICType.COVER_FRONT, 3)
19
20    def test_sort_key(self):
21        values = [
22            APICType.OTHER, APICType.COVER_FRONT, APICType.FILE_ICON,
23            APICType.ARTIST, APICType.PUBLISHER_LOGOTYPE
24        ]
25
26        values.sort(key=APICType.sort_key, reverse=True)
27
28        wanted = [
29            APICType.OTHER, APICType.FILE_ICON, APICType.PUBLISHER_LOGOTYPE,
30            APICType.ARTIST, APICType.COVER_FRONT
31        ]
32
33        self.assertEqual(values, wanted)
34
35
36class TImageContainer(TestCase):
37
38    def setUp(self):
39        self.a = AudioFile()
40
41    def test_default_get(self):
42        self.assertFalse(self.a.get_primary_image())
43
44    def test_has_image(self):
45        self.assertFalse(self.a.has_images)
46        self.a["~picture"] = "y"
47        self.assertTrue(self.a.has_images)
48        self.a.has_images = False
49        self.assertFalse(self.a.has_images)
50
51    def test_default_can_change(self):
52        self.assertFalse(self.a.can_change_images)
53
54
55class TEmbeddedImages(TestCase):
56
57    def setUp(self):
58        from gi.repository import GdkPixbuf
59
60        h, self.filename = mkstemp()
61        os.close(h)
62        pb = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 150, 10)
63        pb.savev(self.filename, "png", [], [])
64
65    def tearDown(self):
66        os.remove(self.filename)
67
68    def test_repr(self):
69        image = EmbeddedImage.from_path(self.filename)
70        repr(image)
71
72    def test_from_path(self):
73        image = EmbeddedImage.from_path(self.filename)
74        self.assertTrue(image)
75        self.assertEqual(image.file.name, self.filename)
76        self.assertEqual(image.mime_type, "image/png")
77        self.assertEqual(image.width, 150)
78        self.assertEqual(image.height, 10)
79        self.assertEqual(image.color_depth, 8)
80
81    def test_from_path_bogus(self):
82        image = EmbeddedImage.from_path(self.filename + "nope")
83        self.assertFalse(image)
84
85    def test_not_an_image(self):
86        path = get_data_path('test-2.wma')
87        image = EmbeddedImage.from_path(path)
88        self.assertFalse(image)
89
90    def test_get_extensions(self):
91        image = EmbeddedImage.from_path(self.filename)
92        self.assertTrue("png" in image.extensions)
93
94    def test_from_path_empty(self):
95        h, empty = mkstemp()
96        os.close(h)
97        try:
98            image = EmbeddedImage.from_path(empty)
99            self.assertFalse(image)
100        finally:
101            os.remove(empty)
102