1# -*- coding: utf-8 -*-
2
3import os
4import shutil
5
6from mutagen._compat import cBytesIO
7from mutagen.ogg import OggPage
8from mutagen.oggspeex import OggSpeex, OggSpeexInfo, delete, error
9from tests import TestCase, DATA_DIR, get_temp_copy
10from tests.test_ogg import TOggFileTypeMixin
11
12
13class TOggSpeex(TestCase, TOggFileTypeMixin):
14    Kind = OggSpeex
15
16    def setUp(self):
17        self.filename = get_temp_copy(os.path.join(DATA_DIR, "empty.spx"))
18        self.audio = self.Kind(self.filename)
19
20    def tearDown(self):
21        os.unlink(self.filename)
22
23    def test_module_delete(self):
24        delete(self.filename)
25        self.scan_file()
26        self.failIf(OggSpeex(self.filename).tags)
27
28    def test_channels(self):
29        self.failUnlessEqual(2, self.audio.info.channels)
30
31    def test_sample_rate(self):
32        self.failUnlessEqual(44100, self.audio.info.sample_rate)
33
34    def test_bitrate(self):
35        self.failUnlessEqual(0, self.audio.info.bitrate)
36
37    def test_invalid_not_first(self):
38        with open(self.filename, "rb") as h:
39            page = OggPage(h)
40        page.first = False
41        self.failUnlessRaises(error, OggSpeexInfo, cBytesIO(page.write()))
42
43    def test_vendor(self):
44        self.failUnless(
45            self.audio.tags.vendor.startswith("Encoded with Speex 1.1.12"))
46        self.failUnlessRaises(KeyError, self.audio.tags.__getitem__, "vendor")
47
48    def test_not_my_ogg(self):
49        fn = os.path.join(DATA_DIR, 'empty.oggflac')
50        self.failUnlessRaises(error, type(self.audio), fn)
51        self.failUnlessRaises(error, self.audio.save, fn)
52        self.failUnlessRaises(error, self.audio.delete, fn)
53
54    def test_multiplexed_in_headers(self):
55        shutil.copy(
56            os.path.join(DATA_DIR, "multiplexed.spx"), self.filename)
57        audio = self.Kind(self.filename)
58        audio.tags["foo"] = ["bar"]
59        audio.save()
60        audio = self.Kind(self.filename)
61        self.failUnlessEqual(audio.tags["foo"], ["bar"])
62
63    def test_mime(self):
64        self.failUnless("audio/x-speex" in self.audio.mime)
65
66    def test_init_padding(self):
67        self.assertEqual(self.audio.tags._padding, 0)
68