Fix tests

This commit is contained in:
Michael Wiencek
2013-06-09 01:45:18 -05:00
parent 7c4fdf765c
commit d5509680ab
9 changed files with 79 additions and 81 deletions

View File

@@ -23,7 +23,7 @@ import mutagen.musepack
import mutagen.wavpack
import mutagen.optimfrog
import mutagenext.tak
from picard import log
from picard import config, log
from picard.file import File
from picard.metadata import Metadata
from picard.util import encode_filename, sanitize_date, mimetype
@@ -96,16 +96,16 @@ class APEv2File(File):
self._info(metadata, file)
return metadata
def _save(self, filename, metadata, settings):
def _save(self, filename, metadata):
"""Save metadata to the file."""
log.debug("Saving file %r", filename)
try:
tags = mutagen.apev2.APEv2(encode_filename(filename))
except mutagen.apev2.APENoHeaderError:
tags = mutagen.apev2.APEv2()
if settings["clear_existing_tags"]:
if config.setting["clear_existing_tags"]:
tags.clear()
elif settings['save_images_to_tags'] and metadata.images:
elif config.setting['save_images_to_tags'] and metadata.images:
for name, value in tags.items():
if name.lower().startswith('cover art') and value.kind == mutagen.apev2.BINARY:
del tags[name]
@@ -142,7 +142,7 @@ class APEv2File(File):
temp.setdefault(name, []).append(value)
for name, values in temp.items():
tags[str(name)] = values
if settings['save_images_to_tags']:
if config.setting['save_images_to_tags']:
for image in metadata.images:
if "front" == image["type"]:
cover_filename = 'Cover Art (Front)'
@@ -170,13 +170,13 @@ class WavPackFile(APEv2File):
super(WavPackFile, self)._info(metadata, file)
metadata['~format'] = self.NAME
def _save_and_rename(self, old_filename, metadata, settings):
def _save_and_rename(self, old_filename, metadata):
"""Includes an additional check for WavPack correction files"""
wvc_filename = old_filename.replace(".wv", ".wvc")
if isfile(wvc_filename):
if settings["rename_files"] or settings["move_files"]:
self._rename(wvc_filename, metadata, settings)
return File._save_and_rename(self, old_filename, metadata, settings)
if config.setting["rename_files"] or config.setting["move_files"]:
self._rename(wvc_filename, metadata, config.setting)
return File._save_and_rename(self, old_filename, metadata, config.setting)
class OptimFROGFile(APEv2File):
"""OptimFROG file."""

View File

@@ -147,13 +147,13 @@ class ASFFile(File):
self._info(metadata, file)
return metadata
def _save(self, filename, metadata, settings):
def _save(self, filename, metadata):
log.debug("Saving file %r", filename)
file = ASF(encode_filename(filename))
if settings['clear_existing_tags']:
if config.setting['clear_existing_tags']:
file.tags.clear()
if settings['save_images_to_tags']:
if config.setting['save_images_to_tags']:
cover = []
for image in metadata.images:
if config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
@@ -169,7 +169,7 @@ class ASFFile(File):
if name.startswith('lyrics:'):
name = 'lyrics'
elif name == '~rating':
values[0] = int(values[0]) * 99 / (settings['rating_steps'] - 1)
values[0] = int(values[0]) * 99 / (config.setting['rating_steps'] - 1)
if name not in self.__TRANS:
continue
name = self.__TRANS[name]

View File

@@ -241,7 +241,7 @@ class ID3File(File):
self._info(metadata, file)
return metadata
def _save(self, filename, metadata, settings):
def _save(self, filename, metadata):
"""Save metadata to the file."""
log.debug("Saving file %r", filename)
try:
@@ -249,16 +249,16 @@ class ID3File(File):
except mutagen.id3.ID3NoHeaderError:
tags = compatid3.CompatID3()
if settings['clear_existing_tags']:
if config.setting['clear_existing_tags']:
tags.clear()
if settings['save_images_to_tags'] and metadata.images:
if config.setting['save_images_to_tags'] and metadata.images:
tags.delall('APIC')
if settings['write_id3v1']:
if config.setting['write_id3v1']:
v1 = 2
else:
v1 = 0
encoding = {'utf-8': 3, 'utf-16': 1}.get(settings['id3v2_encoding'], 0)
encoding = {'utf-8': 3, 'utf-16': 1}.get(config.setting['id3v2_encoding'], 0)
if 'tracknumber' in metadata:
if 'totaltracks' in metadata:
@@ -274,7 +274,7 @@ class ID3File(File):
text = metadata['discnumber']
tags.add(id3.TPOS(encoding=0, text=text))
if settings['save_images_to_tags']:
if config.setting['save_images_to_tags']:
# This is necessary because mutagens HashKey for APIC frames only
# includes the FrameID (APIC) and description - it's basically
# impossible to save two images, even of different types, without
@@ -325,15 +325,15 @@ class ID3File(File):
elif name == '~rating':
# Search for an existing POPM frame to get the current playcount
for frame in tags.values():
if frame.FrameID == 'POPM' and frame.email == settings['rating_user_email']:
if frame.FrameID == 'POPM' and frame.email == config.setting['rating_user_email']:
count = getattr(frame, 'count', 0)
break
else:
count = 0
# Convert rating to range between 0 and 255
rating = int(round(float(values[0]) * 255 / (settings['rating_steps'] - 1)))
tags.add(id3.POPM(email=settings['rating_user_email'], rating=rating, count=count))
rating = int(round(float(values[0]) * 255 / (config.setting['rating_steps'] - 1)))
tags.add(id3.POPM(email=config.setting['rating_user_email'], rating=rating, count=count))
elif name in self.__rtranslate:
frameid = self.__rtranslate[name]
if frameid.startswith('W'):
@@ -374,14 +374,14 @@ class ID3File(File):
if tipl.people:
tags.add(tipl)
if settings['write_id3v23']:
if config.setting['write_id3v23']:
tags.update_to_v23()
tags.save(encode_filename(filename), v2=3, v1=v1)
else:
tags.update_to_v24()
tags.save(encode_filename(filename), v2=4, v1=v1)
if self._IsMP3 and settings["remove_ape_from_mp3"]:
if self._IsMP3 and config.setting["remove_ape_from_mp3"]:
try: mutagen.apev2.delete(encode_filename(filename))
except: pass

View File

@@ -144,13 +144,13 @@ class MP4File(File):
self._info(metadata, file)
return metadata
def _save(self, filename, metadata, settings):
def _save(self, filename, metadata):
log.debug("Saving file %r", filename)
file = MP4(encode_filename(self.filename))
if file.tags is None:
file.add_tags()
if settings["clear_existing_tags"]:
if config.setting["clear_existing_tags"]:
file.tags.clear()
for name, values in metadata.rawitems():
@@ -185,7 +185,7 @@ class MP4File(File):
else:
file.tags["disk"] = [(int(metadata["discnumber"]), 0)]
if settings['save_images_to_tags']:
if config.setting['save_images_to_tags']:
covr = []
for image in metadata.images:
if config.setting["save_only_front_images_to_tags"] and image["type"] != "front":

View File

@@ -107,27 +107,27 @@ class VCommentFile(File):
self._info(metadata, file)
return metadata
def _save(self, filename, metadata, settings):
def _save(self, filename, metadata):
"""Save metadata to the file."""
log.debug("Saving file %r", filename)
file = self._File(encode_filename(filename))
if file.tags is None:
file.add_tags()
if settings["clear_existing_tags"]:
if config.setting["clear_existing_tags"]:
file.tags.clear()
if self._File == mutagen.flac.FLAC and (
settings["clear_existing_tags"] or
(settings['save_images_to_tags'] and metadata.images)):
config.setting["clear_existing_tags"] or
(config.setting['save_images_to_tags'] and metadata.images)):
file.clear_pictures()
tags = {}
for name, value in metadata.items():
if name == '~rating':
# Save rating according to http://code.google.com/p/quodlibet/wiki/Specs_VorbisComments
if settings['rating_user_email']:
name = 'rating:%s' % settings['rating_user_email']
if config.setting['rating_user_email']:
name = 'rating:%s' % config.setting['rating_user_email']
else:
name = 'rating'
value = unicode(float(value) / (settings['rating_steps'] - 1))
value = unicode(float(value) / (config.setting['rating_steps'] - 1))
# don't save private tags
elif name.startswith("~"):
continue
@@ -151,7 +151,7 @@ class VCommentFile(File):
if "totaldiscs" in metadata:
tags.setdefault(u"DISCTOTAL", []).append(metadata["totaldiscs"])
if settings['save_images_to_tags']:
if config.setting['save_images_to_tags']:
for image in metadata.images:
if config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
continue
@@ -167,7 +167,7 @@ class VCommentFile(File):
base64.standard_b64encode(picture.write()))
file.tags.update(tags)
kwargs = {}
if self._File == mutagen.flac.FLAC and settings["remove_id3_from_flac"]:
if self._File == mutagen.flac.FLAC and config.setting["remove_id3_from_flac"]:
kwargs["deleteid3"] = True
try:
file.save(**kwargs)

View File

@@ -40,6 +40,6 @@ class WAVFile(File):
self._add_path_to_metadata(metadata)
return metadata
def _save(self, filename, metadata, settings):
def _save(self, filename, metadata):
log.debug("Saving file %r", filename)
pass

View File

@@ -2,52 +2,47 @@ import os.path
import unittest
import shutil
from tempfile import mkstemp
from picard import log
from picard import config, log
from picard.metadata import Metadata
import picard.formats
from PyQt4 import QtCore
settings = {
'enabled_plugins': '',
'clear_existing_tags': False,
'remove_images_from_tags': False,
'write_id3v1': True,
'id3v2_encoding': 'utf-8',
'save_images_to_tags': True,
'write_id3v23': False,
'remove_ape_from_mp3': False,
'remove_id3_from_flac': False,
'rating_steps': 6,
'rating_user_email': 'users@musicbrainz.org',
'save_only_front_images_to_tags': False,
}
class FakeTagger(QtCore.QObject):
file_state_changed = QtCore.pyqtSignal(int)
def __init__(self):
QtCore.QObject.__init__(self)
if "PICARD_DEBUG" in os.environ:
self.log = log.DebugLog()
else:
self.log = log.Log()
QtCore.QObject.log = self.log
QtCore.QObject.config = config
QtCore.QObject.log = log
def emit(self, *args):
pass
class FakeConfig():
def __init__(self):
self.setting = {
'enabled_plugins': '',
'clear_existing_tags': False,
'remove_images_from_tags': False,
'write_id3v1': True,
'id3v2_encoding': 'utf-8',
'save_images_to_tags': True,
'write_id3v23': False,
'remove_ape_from_mp3': False,
'remove_id3_from_flac': False,
'rating_steps': 6,
'rating_user_email': 'users@musicbrainz.org',
'save_only_front_images_to_tags': False,
}
def save_and_load_metadata(filename, metadata):
"""Save new metadata to a file and load it again."""
f = picard.formats.open(filename)
loaded_metadata = f._load(filename)
f._copy_loaded_metadata(loaded_metadata)
f._save(filename, metadata, f.config.setting)
f._save(filename, metadata)
f = picard.formats.open(filename)
loaded_metadata = f._load(filename)
return loaded_metadata
@@ -64,8 +59,8 @@ class FormatsTest(unittest.TestCase):
fd, self.filename = mkstemp(suffix=os.path.splitext(self.original)[1])
os.close(fd)
shutil.copy(self.original, self.filename)
config.setting = settings
QtCore.QObject.tagger = FakeTagger()
QtCore.QObject.config = FakeConfig()
def tearDown(self):
if not self.original:
@@ -506,7 +501,6 @@ class TestCoverArt(unittest.TestCase):
os.close(fd)
shutil.copy(original, self.filename)
QtCore.QObject.tagger = FakeTagger()
QtCore.QObject.config = FakeConfig()
def _tear_down(self):
os.unlink(self.filename)
@@ -544,7 +538,7 @@ class TestCoverArt(unittest.TestCase):
metadata = Metadata()
imgdata = tests[t]['head'] + dummyload
metadata.add_image(tests[t]['mime'], imgdata)
f._save(self.filename, metadata, f.config.setting)
f._save(self.filename, metadata)
f = picard.formats.open(self.filename)
loaded_metadata = f._load(self.filename)

View File

@@ -1,14 +1,17 @@
import unittest
import picard
from picard import config
from picard.metadata import Metadata
from picard.mbxml import track_to_metadata, release_to_metadata
class config:
setting = {
"standardize_tracks": False,
"standardize_artists": False,
"standardize_releases": False,
"translate_artist_names": False
}
settings = {
"standardize_tracks": False,
"standardize_artists": False,
"standardize_releases": False,
"translate_artist_names": False
}
class XmlNode(object):
@@ -34,6 +37,7 @@ class XmlNode(object):
class TrackTest(unittest.TestCase):
def test_1(self):
config.setting = settings
class Track:
pass
node = XmlNode(children={
@@ -65,7 +69,7 @@ class TrackTest(unittest.TestCase):
})
track = Track()
m = track.metadata = Metadata()
track_to_metadata(node, track, config)
track_to_metadata(node, track)
self.failUnlessEqual('123', m['musicbrainz_trackid'])
self.failUnlessEqual('456; 789', m['musicbrainz_artistid'])
self.failUnlessEqual('Foo', m['title'])
@@ -77,6 +81,7 @@ class TrackTest(unittest.TestCase):
class ReleaseTest(unittest.TestCase):
def test_1(self):
config.setting = settings
release = XmlNode(attribs={'id': '123'}, children={
'title': [XmlNode(text='Foo')],
'status': [XmlNode(text='Official')],
@@ -111,7 +116,7 @@ class ReleaseTest(unittest.TestCase):
})]
})
m = Metadata()
release_to_metadata(release, m, config)
release_to_metadata(release, m)
self.failUnlessEqual('123', m['musicbrainz_albumid'])
self.failUnlessEqual('456; 789', m['musicbrainz_albumartistid'])
self.failUnlessEqual('Foo', m['album'])

View File

@@ -1,18 +1,17 @@
import unittest
import picard
from PyQt4 import QtCore
from picard import config
from picard.script import ScriptParser
from picard.metadata import Metadata
class FakeConfig(object):
def __init__(self):
self.setting = {
'enabled_plugins': '',
}
class ScriptParserTest(unittest.TestCase):
def setUp(self):
QtCore.QObject.config = FakeConfig()
config.setting = {
'enabled_plugins': '',
}
self.parser = ScriptParser()
def test_cmd_noop(self):