Add __repr__ to ImmutableObject to get better output from failed model comparisions in tests

This commit is contained in:
Stein Magnus Jodal 2011-04-06 18:18:00 +02:00
parent 037da6f460
commit 005260eb9c
2 changed files with 47 additions and 0 deletions

View File

@ -21,6 +21,17 @@ class ImmutableObject(object):
return super(ImmutableObject, self).__setattr__(name, value)
raise AttributeError('Object is immutable.')
def __repr__(self):
kwarg_pairs = []
for (key, value) in sorted(self.__dict__.items()):
if isinstance(value, (frozenset, tuple)):
value = list(value)
kwarg_pairs.append('%s=%s' % (key, repr(value)))
return '%(classname)s(%(kwargs)s)' % {
'classname': self.__class__.__name__,
'kwargs': ', '.join(kwarg_pairs),
}
def __hash__(self):
hash_sum = 0
for key, value in self.__dict__.items():

View File

@ -73,6 +73,11 @@ class ArtistTest(unittest.TestCase):
test = lambda: Artist(foo='baz')
self.assertRaises(TypeError, test)
def test_repr(self):
self.assertEquals(
"Artist(name='name', uri='uri')",
repr(Artist(uri='uri', name='name')))
def test_eq_name(self):
artist1 = Artist(name=u'name')
artist2 = Artist(name=u'name')
@ -164,6 +169,16 @@ class AlbumTest(unittest.TestCase):
test = lambda: Album(foo='baz')
self.assertRaises(TypeError, test)
def test_repr_without_artists(self):
self.assertEquals(
"Album(artists=[], name='name', uri='uri')",
repr(Album(uri='uri', name='name')))
def test_repr_with_artists(self):
self.assertEquals(
"Album(artists=[Artist(name='foo')], name='name', uri='uri')",
repr(Album(uri='uri', name='name', artists=[Artist(name='foo')])))
def test_eq_name(self):
album1 = Album(name=u'name')
album2 = Album(name=u'name')
@ -319,6 +334,16 @@ class TrackTest(unittest.TestCase):
test = lambda: Track(foo='baz')
self.assertRaises(TypeError, test)
def test_repr_without_artists(self):
self.assertEquals(
"Track(artists=[], name='name', uri='uri')",
repr(Track(uri='uri', name='name')))
def test_repr_with_artists(self):
self.assertEquals(
"Track(artists=[Artist(name='foo')], name='name', uri='uri')",
repr(Track(uri='uri', name='name', artists=[Artist(name='foo')])))
def test_eq_uri(self):
track1 = Track(uri=u'uri1')
track2 = Track(uri=u'uri1')
@ -551,6 +576,17 @@ class PlaylistTest(unittest.TestCase):
test = lambda: Playlist(foo='baz')
self.assertRaises(TypeError, test)
def test_repr_without_tracks(self):
self.assertEquals(
"Playlist(name='name', tracks=[], uri='uri')",
repr(Playlist(uri='uri', name='name')))
def test_repr_with_tracks(self):
self.assertEquals(
"Playlist(name='name', tracks=[Track(artists=[], name='foo')], "
"uri='uri')",
repr(Playlist(uri='uri', name='name', tracks=[Track(name='foo')])))
def test_eq(self):
# FIXME missing all equal and hash tests
raise SkipTest