1# -*- coding: utf-8 -*- 2 3import os 4 5from mutagen import MutagenError 6from mutagen.easymp4 import EasyMP4, error as MP4Error 7 8from tests import TestCase, DATA_DIR, get_temp_copy 9 10 11class TEasyMP4(TestCase): 12 13 def setUp(self): 14 self.filename = get_temp_copy(os.path.join(DATA_DIR, 'has-tags.m4a')) 15 self.mp4 = EasyMP4(self.filename) 16 self.mp4.delete() 17 18 def tearDown(self): 19 os.unlink(self.filename) 20 21 def test_no_tags(self): 22 audio = EasyMP4(os.path.join(DATA_DIR, 'no-tags.m4a')) 23 assert audio.tags is None 24 audio.add_tags() 25 assert audio.tags is not None 26 27 def test_padding(self): 28 assert self.mp4._padding == 1634 29 self.mp4.save(padding=lambda x: 42) 30 assert EasyMP4(self.mp4.filename)._padding == 42 31 32 def test_pprint(self): 33 self.mp4["artist"] = "baz" 34 self.mp4.pprint() 35 36 def test_has_key(self): 37 self.failIf("foo" in self.mp4) 38 39 def test_empty_file(self): 40 empty = os.path.join(DATA_DIR, 'emptyfile.mp3') 41 self.assertRaises(MP4Error, EasyMP4, filename=empty) 42 43 def test_nonexistent_file(self): 44 empty = os.path.join(DATA_DIR, 'does', 'not', 'exist') 45 self.assertRaises(MutagenError, EasyMP4, filename=empty) 46 47 def test_write_single(self): 48 for key in EasyMP4.Get: 49 if key in ["tracknumber", "discnumber", "date", "bpm"]: 50 continue 51 52 # Test creation 53 self.mp4[key] = "a test value" 54 self.mp4.save(self.filename) 55 mp4 = EasyMP4(self.filename) 56 self.failUnlessEqual(mp4[key], ["a test value"]) 57 self.failUnlessEqual(mp4.keys(), [key]) 58 59 # And non-creation setting. 60 self.mp4[key] = "a test value" 61 self.mp4.save(self.filename) 62 mp4 = EasyMP4(self.filename) 63 self.failUnlessEqual(mp4[key], ["a test value"]) 64 self.failUnlessEqual(mp4.keys(), [key]) 65 66 del(self.mp4[key]) 67 68 def test_write_double(self): 69 for key in EasyMP4.Get: 70 if key in ["tracknumber", "discnumber", "date", "bpm"]: 71 continue 72 73 self.mp4[key] = ["a test", "value"] 74 self.mp4.save(self.filename) 75 mp4 = EasyMP4(self.filename) 76 self.failUnlessEqual(mp4.get(key), ["a test", "value"]) 77 self.failUnlessEqual(mp4.keys(), [key]) 78 79 self.mp4[key] = ["a test", "value"] 80 self.mp4.save(self.filename) 81 mp4 = EasyMP4(self.filename) 82 self.failUnlessEqual(mp4.get(key), ["a test", "value"]) 83 self.failUnlessEqual(mp4.keys(), [key]) 84 85 del(self.mp4[key]) 86 87 def test_write_date(self): 88 self.mp4["date"] = "2004" 89 self.mp4.save(self.filename) 90 mp4 = EasyMP4(self.filename) 91 self.failUnlessEqual(mp4["date"], ["2004"]) 92 93 self.mp4["date"] = "2004" 94 self.mp4.save(self.filename) 95 mp4 = EasyMP4(self.filename) 96 self.failUnlessEqual(mp4["date"], ["2004"]) 97 98 def test_date_delete(self): 99 self.mp4["date"] = "2004" 100 self.failUnlessEqual(self.mp4["date"], ["2004"]) 101 del(self.mp4["date"]) 102 self.failIf("date" in self.mp4) 103 104 def test_write_date_double(self): 105 self.mp4["date"] = ["2004", "2005"] 106 self.mp4.save(self.filename) 107 mp4 = EasyMP4(self.filename) 108 self.failUnlessEqual(mp4["date"], ["2004", "2005"]) 109 110 self.mp4["date"] = ["2004", "2005"] 111 self.mp4.save(self.filename) 112 mp4 = EasyMP4(self.filename) 113 self.failUnlessEqual(mp4["date"], ["2004", "2005"]) 114 115 def test_write_invalid(self): 116 self.failUnlessRaises(ValueError, self.mp4.__getitem__, "notvalid") 117 self.failUnlessRaises(ValueError, self.mp4.__delitem__, "notvalid") 118 self.failUnlessRaises( 119 ValueError, self.mp4.__setitem__, "notvalid", "tests") 120 121 def test_numeric(self): 122 for tag in ["bpm"]: 123 self.mp4[tag] = "3" 124 self.failUnlessEqual(self.mp4[tag], ["3"]) 125 self.mp4.save() 126 mp4 = EasyMP4(self.filename) 127 self.failUnlessEqual(mp4[tag], ["3"]) 128 129 del(mp4[tag]) 130 self.failIf(tag in mp4) 131 self.failUnlessRaises(KeyError, mp4.__delitem__, tag) 132 133 self.failUnlessRaises( 134 ValueError, self.mp4.__setitem__, tag, "hello") 135 136 def test_numeric_pairs(self): 137 for tag in ["tracknumber", "discnumber"]: 138 self.mp4[tag] = "3" 139 self.failUnlessEqual(self.mp4[tag], ["3"]) 140 self.mp4.save() 141 mp4 = EasyMP4(self.filename) 142 self.failUnlessEqual(mp4[tag], ["3"]) 143 144 del(mp4[tag]) 145 self.failIf(tag in mp4) 146 self.failUnlessRaises(KeyError, mp4.__delitem__, tag) 147 148 self.mp4[tag] = "3/10" 149 self.failUnlessEqual(self.mp4[tag], ["3/10"]) 150 self.mp4.save() 151 mp4 = EasyMP4(self.filename) 152 self.failUnlessEqual(mp4[tag], ["3/10"]) 153 154 del(mp4[tag]) 155 self.failIf(tag in mp4) 156 self.failUnlessRaises(KeyError, mp4.__delitem__, tag) 157 158 self.failUnlessRaises( 159 ValueError, self.mp4.__setitem__, tag, "hello") 160