21
21
from _common import unittest
22
22
import beets .mediafile
23
23
24
+
24
25
class EdgeTest (unittest .TestCase ):
25
26
def test_emptylist (self ):
26
27
# Some files have an ID3 frame that has a list with no elements.
@@ -67,6 +68,7 @@ def test_old_ape_version_bitrate(self):
67
68
f = beets .mediafile .MediaFile (os .path .join (_common .RSRC , 'oldape.ape' ))
68
69
self .assertEqual (f .bitrate , 0 )
69
70
71
+
70
72
_sc = beets .mediafile ._safe_cast
71
73
class InvalidValueToleranceTest (unittest .TestCase ):
72
74
def test_packed_integer_with_extra_chars (self ):
@@ -110,6 +112,7 @@ def test_safe_cast_special_chars_to_unicode(self):
110
112
self .assertTrue (isinstance (us , unicode ))
111
113
self .assertTrue (us .startswith (u'caf' ))
112
114
115
+
113
116
class SafetyTest (unittest .TestCase ):
114
117
def _exccheck (self , fn , exc , data = '' ):
115
118
fn = os .path .join (_common .RSRC , fn )
@@ -156,6 +159,7 @@ def test_broken_symlink(self):
156
159
finally :
157
160
os .unlink (fn )
158
161
162
+
159
163
class SideEffectsTest (unittest .TestCase ):
160
164
def setUp (self ):
161
165
self .empty = os .path .join (_common .RSRC , 'empty.mp3' )
@@ -166,6 +170,7 @@ def test_opening_tagless_file_leaves_untouched(self):
166
170
new_mtime = os .stat (self .empty ).st_mtime
167
171
self .assertEqual (old_mtime , new_mtime )
168
172
173
+
169
174
class EncodingTest (unittest .TestCase ):
170
175
def setUp (self ):
171
176
src = os .path .join (_common .RSRC , 'full.m4a' )
@@ -183,10 +188,13 @@ def test_unicode_label_in_m4a(self):
183
188
new_mf = beets .mediafile .MediaFile (self .path )
184
189
self .assertEqual (new_mf .label , u'foo\xe8 bar' )
185
190
191
+
186
192
class ZeroLengthMediaFile (beets .mediafile .MediaFile ):
187
193
@property
188
194
def length (self ):
189
195
return 0.0
196
+
197
+
190
198
class MissingAudioDataTest (unittest .TestCase ):
191
199
def setUp (self ):
192
200
super (MissingAudioDataTest , self ).setUp ()
@@ -197,6 +205,7 @@ def test_bitrate_with_zero_length(self):
197
205
del self .mf .mgfile .info .bitrate # Not available directly.
198
206
self .assertEqual (self .mf .bitrate , 0 )
199
207
208
+
200
209
class TypeTest (unittest .TestCase ):
201
210
def setUp (self ):
202
211
super (TypeTest , self ).setUp ()
@@ -223,6 +232,7 @@ def test_set_track_to_none(self):
223
232
self .mf .track = None
224
233
self .assertEqual (self .mf .track , 0 )
225
234
235
+
226
236
class SoundCheckTest (unittest .TestCase ):
227
237
def test_round_trip (self ):
228
238
data = beets .mediafile ._sc_encode (1.0 , 1.0 )
@@ -242,8 +252,51 @@ def test_malformatted(self):
242
252
self .assertEqual (gain , 0.0 )
243
253
self .assertEqual (peak , 0.0 )
244
254
255
+
256
+ class ID3v23Test (unittest .TestCase ):
257
+ def _make_test (self , ext = 'mp3' ):
258
+ src = os .path .join (_common .RSRC , 'full.{0}' .format (ext ))
259
+ self .path = os .path .join (_common .RSRC , 'test.{0}' .format (ext ))
260
+ shutil .copy (src , self .path )
261
+ return beets .mediafile .MediaFile (self .path )
262
+
263
+ def _delete_test (self ):
264
+ os .remove (self .path )
265
+
266
+ def test_v24_year_tag (self ):
267
+ mf = self ._make_test ()
268
+ try :
269
+ mf .year = 2013
270
+ mf .save (id3v23 = False )
271
+ frame = mf .mgfile ['TDRC' ]
272
+ self .assertTrue ('2013' in str (frame ))
273
+ self .assertTrue ('TYER' not in mf .mgfile )
274
+ finally :
275
+ self ._delete_test ()
276
+
277
+ def test_v23_year_tag (self ):
278
+ mf = self ._make_test ()
279
+ try :
280
+ mf .year = 2013
281
+ mf .save (id3v23 = True )
282
+ frame = mf .mgfile ['TYER' ]
283
+ self .assertTrue ('2013' in str (frame ))
284
+ self .assertTrue ('TDRC' not in mf .mgfile )
285
+ finally :
286
+ self ._delete_test ()
287
+
288
+ def test_v23_on_non_mp3_is_noop (self ):
289
+ mf = self ._make_test ('m4a' )
290
+ try :
291
+ mf .year = 2013
292
+ mf .save (id3v23 = True )
293
+ finally :
294
+ self ._delete_test ()
295
+
296
+
245
297
def suite ():
246
298
return unittest .TestLoader ().loadTestsFromName (__name__ )
247
299
300
+
248
301
if __name__ == '__main__' :
249
302
unittest .main (defaultTest = 'suite' )
0 commit comments