1# -*- coding: utf-8 -*- 2 3import os 4 5from mutagen._compat import cBytesIO 6from mutagen.oggflac import OggFLAC, OggFLACStreamInfo, delete, error 7from mutagen.ogg import OggPage, error as OggError 8 9from tests import TestCase, DATA_DIR, get_temp_copy 10from tests.test_ogg import TOggFileTypeMixin 11from tests.test_flac import have_flac, call_flac 12 13 14class TOggFLAC(TestCase, TOggFileTypeMixin): 15 Kind = OggFLAC 16 PADDING_SUPPORT = False 17 18 def setUp(self): 19 self.filename = get_temp_copy(os.path.join(DATA_DIR, "empty.oggflac")) 20 self.audio = OggFLAC(self.filename) 21 22 def tearDown(self): 23 os.unlink(self.filename) 24 25 def test_vendor(self): 26 self.failUnless( 27 self.audio.tags.vendor.startswith("reference libFLAC")) 28 self.failUnlessRaises(KeyError, self.audio.tags.__getitem__, "vendor") 29 30 def test_streaminfo_bad_marker(self): 31 with open(self.filename, "rb") as h: 32 page = OggPage(h).write() 33 page = page.replace(b"fLaC", b"!fLa", 1) 34 self.failUnlessRaises(error, OggFLACStreamInfo, cBytesIO(page)) 35 36 def test_streaminfo_too_short(self): 37 with open(self.filename, "rb") as h: 38 page = OggPage(h).write() 39 self.failUnlessRaises(OggError, OggFLACStreamInfo, cBytesIO(page[:10])) 40 41 def test_streaminfo_bad_version(self): 42 with open(self.filename, "rb") as h: 43 page = OggPage(h).write() 44 page = page.replace(b"\x01\x00", b"\x02\x00", 1) 45 self.failUnlessRaises(error, OggFLACStreamInfo, cBytesIO(page)) 46 47 def test_flac_reference_simple_save(self): 48 if not have_flac: 49 return 50 self.audio.save() 51 self.scan_file() 52 self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) 53 54 def test_flac_reference_really_big(self): 55 if not have_flac: 56 return 57 self.test_really_big() 58 self.audio.save() 59 self.scan_file() 60 self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) 61 62 def test_module_delete(self): 63 delete(self.filename) 64 self.scan_file() 65 self.failIf(OggFLAC(self.filename).tags) 66 67 def test_flac_reference_delete(self): 68 if not have_flac: 69 return 70 self.audio.delete() 71 self.scan_file() 72 self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) 73 74 def test_flac_reference_medium_sized(self): 75 if not have_flac: 76 return 77 self.audio["foobar"] = "foobar" * 1000 78 self.audio.save() 79 self.scan_file() 80 self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) 81 82 def test_flac_reference_delete_readd(self): 83 if not have_flac: 84 return 85 self.audio.delete() 86 self.audio.tags.clear() 87 self.audio["foobar"] = "foobar" * 1000 88 self.audio.save() 89 self.scan_file() 90 self.assertEqual(call_flac("--ogg", "-t", self.filename), 0) 91 92 def test_not_my_ogg(self): 93 fn = os.path.join(DATA_DIR, 'empty.ogg') 94 self.failUnlessRaises(error, type(self.audio), fn) 95 self.failUnlessRaises(error, self.audio.save, fn) 96 self.failUnlessRaises(error, self.audio.delete, fn) 97 98 def test_mime(self): 99 self.failUnless("audio/x-oggflac" in self.audio.mime) 100 101 def test_info_pprint(self): 102 self.assertTrue(self.audio.info.pprint().startswith(u"Ogg FLAC")) 103