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