Files
picard/test/test_mbxml.py
2014-02-22 23:01:06 -06:00

167 lines
6.2 KiB
Python

import unittest
import picard
from picard import config
from picard.metadata import Metadata
from picard.mbxml import (
track_to_metadata,
release_to_metadata,
artist_credit_from_node
)
settings = {
"standardize_tracks": False,
"standardize_artists": False,
"standardize_releases": False,
"translate_artist_names": False
}
class XmlNode(object):
def __init__(self, text=u'', children={}, attribs={}):
self.text = text
self.children = children
self.attribs = attribs
def __repr__(self):
return repr(self.__dict__)
def __getattr__(self, name):
try:
return self.children[name]
except KeyError:
try:
return self.attribs[name]
except KeyError:
raise
#raise AttributeError, name
class TrackTest(unittest.TestCase):
def test_1(self):
config.setting = settings
class Track:
pass
node = XmlNode(attribs={'id': '321'}, children={
'title': [XmlNode(text='Foo')],
'length': [XmlNode(text='180000')],
'position': [XmlNode(text='1')],
'recording': [XmlNode(attribs={'id': '123'}, children={
'relation_list': [XmlNode(attribs={'target_type': 'work'}, children={
'relation': [XmlNode(attribs={'type': 'performance'}, children={
'work': [XmlNode(attribs={'id': 'workid123'}, children={
'title': [XmlNode(text='Bar')],
'language': [XmlNode(text='eng')]
})]
})]
})]
})],
'artist_credit': [XmlNode(children={
'name_credit': [XmlNode(attribs={'joinphrase': ' & '}, children={
'artist': [XmlNode(attribs={'id': '456'}, children={
'name': [XmlNode(text='Foo Bar')],
'sort_name': [XmlNode(text='Bar, Foo')]
})]
}), XmlNode(children={
'artist': [XmlNode(attribs={'id': '789'}, children={
'name': [XmlNode(text='Baz')],
'sort_name': [XmlNode(text='Baz')]
})]
})]
})]
})
track = Track()
m = track.metadata = Metadata()
track_to_metadata(node, track)
self.assertEqual('123', m['musicbrainz_recordingid'])
self.assertEqual('321', m['musicbrainz_trackid'])
self.assertEqual('456; 789', m['musicbrainz_artistid'])
self.assertEqual('Foo', m['title'])
self.assertEqual('Foo Bar & Baz', m['artist'])
self.assertEqual('Bar, Foo & Baz', m['artistsort'])
self.assertEqual('workid123', m['musicbrainz_workid'])
self.assertEqual('Bar', m['work'])
self.assertEqual('eng', m['language'])
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')],
'text_representation': [XmlNode(children={
'language': [XmlNode(text='eng')],
'script': [XmlNode(text='Latn')]
})],
'artist_credit': [XmlNode(children={
'name_credit': [XmlNode(attribs={'joinphrase': ' & '}, children={
'artist': [XmlNode(attribs={'id': '456'}, children={
'name': [XmlNode(text='Foo Bar')],
'sort_name': [XmlNode(text='Bar, Foo')]
})]
}), XmlNode(children={
'artist': [XmlNode(attribs={'id': '789'}, children={
'name': [XmlNode(text='Baz')],
'sort_name': [XmlNode(text='Baz')]
})]
})]
})],
'date': [XmlNode(text='2009-08-07')],
'country': [XmlNode(text='GB')],
'barcode': [XmlNode(text='012345678929')],
'asin': [XmlNode(text='B123456789')],
'label_info_list': [XmlNode(attribs={'count': '1'}, children={
'label_info': [XmlNode(children={
'catalog_number': [XmlNode(text='ABC 123')],
'label': [XmlNode(children={
'name': [XmlNode(text='ABC')]
})]
})]
})]
})
m = Metadata()
release_to_metadata(release, m)
self.assertEqual('123', m['musicbrainz_albumid'])
self.assertEqual('456; 789', m['musicbrainz_albumartistid'])
self.assertEqual('Foo', m['album'])
self.assertEqual('official', m['releasestatus'])
self.assertEqual('eng', m['~releaselanguage'])
self.assertEqual('Latn', m['script'])
self.assertEqual('Foo Bar & Baz', m['albumartist'])
self.assertEqual('Bar, Foo & Baz', m['albumartistsort'])
self.assertEqual('2009-08-07', m['date'])
self.assertEqual('GB', m['releasecountry'])
self.assertEqual('012345678929', m['barcode'])
self.assertEqual('B123456789', m['asin'])
self.assertEqual('ABC', m['label'])
self.assertEqual('ABC 123', m['catalognumber'])
class ArtistTest(unittest.TestCase):
def test_1(self):
config.setting = settings
node = XmlNode(children={
'name_credit': [XmlNode(attribs={'joinphrase': ' & '}, children={
'artist': [XmlNode(attribs={'id': '456'}, children={
'name': [XmlNode(text='Foo Bar')],
'sort_name': [XmlNode(text='Bar, Foo')]
})]
}), XmlNode(children={
'artist': [XmlNode(attribs={'id': '789'}, children={
'name': [XmlNode(text='Baz')],
'sort_name': [XmlNode(text='Baz')]
})]
})]
})
artist, artist_sort, artists = artist_credit_from_node(node)
self.assertEqual(['Foo Bar', 'Baz'], artists)
self.assertEqual('Foo Bar & Baz', artist)
self.assertEqual('Bar, Foo & Baz', artist_sort)