예제 #1
0
 def test_ape_item_init(self):
     ai = ApeTag.ApeItem()
     self.assertEqual([], ai)
     
     ai = ApeTag.ApeItem('BlaH')
     self.assertEqual(False, ai.readonly)
     self.assertEqual('utf8', ai.type)
     self.assertEqual('BlaH', ai.key)
     self.assertEqual([], ai)
     
     ai = ApeTag.ApeItem('BlaH', ['BlAh'])
     self.assertEqual(False, ai.readonly)
     self.assertEqual('utf8', ai.type)
     self.assertEqual('BlaH', ai.key)
     self.assertEqual(['BlAh'], ai)
     
     ai = ApeTag.ApeItem('BlaH', ['BlAh'], 'external')
     self.assertEqual(False, ai.readonly)
     self.assertEqual('external', ai.type)
     self.assertEqual('BlaH', ai.key)
     self.assertEqual(['BlAh'], ai)
     
     ai = ApeTag.ApeItem('BlaH', ['BlAh'], 'external', True)
     self.assertEqual(True, ai.readonly)
     self.assertEqual('external', ai.type)
     self.assertEqual('BlaH', ai.key)
     self.assertEqual(['BlAh'], ai)
예제 #2
0
 def test_remove(self):
     self.assertRemoved('good-empty', 'missing-ok')
     self.assertRemoved('good-empty-id3', 'missing-ok')
     self.assertRemoved('good-empty-id3-only', 'missing-ok')
     self.assertRemoved('missing-10k', 'missing-10k')
     self.assertFilesEqual(
         'good-empty', 'missing-ok',
         lambda: ApeTag.deletetags(file('test.tag', 'r+b')))
예제 #3
0
 def test_ape_item_valid_key(self):
     ai = ApeTag.ApeItem()
     # Test bad keys
     for x in [None, 1, '', 'x', 'x'*256]+["%s  " % c for c in ApeTag._badapeitemkeychars]+ApeTag._badapeitemkeys:
         self.assertEqual(False, ai.validkey(x))
     # Test good keys
     for x in ['xx', 'x'*255]+["%s  " % chr(c) for c in range(32,128)]+["%s  " % c for c in ApeTag._badapeitemkeys]:
         self.assertEqual(True, ai.validkey(x))
예제 #4
0
    def test_id3(self):
        self.assertFilesEqual('missing-ok', 'good-empty-id3', lambda: ApeTag.createtags('test.tag'))
        self.assertFilesEqual('good-empty', 'good-empty-id3', lambda: ApeTag.createtags('test.tag'))
        self.assertFilesEqual('good-empty-id3', 'good-empty-id3', lambda: ApeTag.createtags('test.tag'))
        self.assertFilesEqual('good-empty-id3-only', 'good-empty-id3', lambda: ApeTag.createtags('test.tag'))

        self.assertFilesEqual('good-empty-id3', 'good-simple-4', lambda: ApeTag.createtags('test.tag', {'track':'1', 'genre':'Game', 'year':'1999', 'title':'Test Title', 'artist':'Test Artist', 'album':'Test Album', 'comment':'Test Comment'}))
        self.assertFilesEqual('good-empty-id3', 'good-simple-4-uc', lambda: ApeTag.createtags('test.tag', {'Track':'1', 'Genre':'Game', 'Year':'1999', 'Title':'Test Title', 'Artist':'Test Artist', 'Album':'Test Album', 'Comment':'Test Comment'}))
        self.assertFilesEqual('good-empty-id3', 'good-simple-4-date', lambda: ApeTag.createtags('test.tag', {'track':'1', 'genre':'Game', 'date':'12/31/1999', 'title':'Test Title', 'artist':'Test Artist', 'album':'Test Album', 'comment':'Test Comment'}))
        self.assertFilesEqual('good-empty-id3', 'good-simple-4-long', lambda: ApeTag.createtags('test.tag', {'track':'1', 'genre':'Game', 'year':'1999'*2, 'title':'Test Title'*5, 'artist':'Test Artist'*5, 'album':'Test Album'*5, 'comment':'Test Comment'*5}))
예제 #5
0
 def test_ape_item_maketag(self):
     ai = ApeTag.ApeItem('BlaH', ['BlAh'])
     self.assertEqual("\04\0\0\0\0\0\0\0BlaH\0BlAh", ai.maketag())
     ai.readonly=True
     self.assertEqual("\04\0\0\0\0\0\0\01BlaH\0BlAh", ai.maketag())
     ai.type='external'
     self.assertEqual("\04\0\0\0\0\0\0\05BlaH\0BlAh", ai.maketag())
     ai.append('XYZ')
     self.assertEqual("\010\0\0\0\0\0\0\05BlaH\0BlAh\0XYZ", ai.maketag())
예제 #6
0
    def test_id3(self):
        self.assertFilesEqual('missing-ok', 'good-empty-id3',
                              lambda: ApeTag.createtags('test.tag'))
        self.assertFilesEqual('good-empty', 'good-empty-id3',
                              lambda: ApeTag.createtags('test.tag'))
        self.assertFilesEqual('good-empty-id3', 'good-empty-id3',
                              lambda: ApeTag.createtags('test.tag'))
        self.assertFilesEqual('good-empty-id3-only', 'good-empty-id3',
                              lambda: ApeTag.createtags('test.tag'))

        self.assertFilesEqual(
            'good-empty-id3', 'good-simple-4', lambda: ApeTag.createtags(
                'test.tag', {
                    'track': '1',
                    'genre': 'Game',
                    'year': '1999',
                    'title': 'Test Title',
                    'artist': 'Test Artist',
                    'album': 'Test Album',
                    'comment': 'Test Comment'
                }))
        self.assertFilesEqual(
            'good-empty-id3', 'good-simple-4-uc', lambda: ApeTag.createtags(
                'test.tag', {
                    'Track': '1',
                    'Genre': 'Game',
                    'Year': '1999',
                    'Title': 'Test Title',
                    'Artist': 'Test Artist',
                    'Album': 'Test Album',
                    'Comment': 'Test Comment'
                }))
        self.assertFilesEqual(
            'good-empty-id3', 'good-simple-4-date', lambda: ApeTag.createtags(
                'test.tag', {
                    'track': '1',
                    'genre': 'Game',
                    'date': '12/31/1999',
                    'title': 'Test Title',
                    'artist': 'Test Artist',
                    'album': 'Test Album',
                    'comment': 'Test Comment'
                }))
        self.assertFilesEqual(
            'good-empty-id3', 'good-simple-4-long', lambda: ApeTag.createtags(
                'test.tag', {
                    'track': '1',
                    'genre': 'Game',
                    'year': '1999' * 2,
                    'title': 'Test Title' * 5,
                    'artist': 'Test Artist' * 5,
                    'album': 'Test Album' * 5,
                    'comment': 'Test Comment' * 5
                }))
예제 #7
0
    def test_ape_item_parsetag(self):
        data = "\010\0\0\0\0\0\0\05BlaH\0BlAh\0XYZ"
        # Test simple parsing
        ai = ApeTag.ApeItem()
        cp = ai.parsetag(data, 0)
        self.assertEqual(2, len(ai))
        self.assertEqual(len(data), cp)
        self.assertEqual(True, ai.readonly)
        self.assertEqual('external', ai.type)
        self.assertEqual('BlaH', ai.key)

        # Test parsing with bad key
        self.assertRaises(ApeTag.TagError,
                          ApeTag.ApeItem().parsetag, "\0\0\0\0\0\0\0\0x\0", 0)

        # Test parsing with no key end
        self.assertRaises(ApeTag.TagError,
                          ApeTag.ApeItem().parsetag, "\0\0\0\0\0\0\0\0xx", 0)

        # Test parsing with bad start value
        self.assertRaises(ApeTag.TagError, ApeTag.ApeItem().parsetag, data, 1)

        # Test parsing with bad flags
        self.assertRaises(ApeTag.TagError,
                          ApeTag.ApeItem().parsetag, "\0\0\0\0\0\0\0\010xx\0",
                          1)

        # Test parsing with length longer than string
        self.assertRaises(ApeTag.TagError,
                          ApeTag.ApeItem().parsetag, "\01\0\0\0\0\0\0\010xx\0",
                          1)

        # Test parsing with length shorter than string gives valid ApeItem
        # Of course, the next item will probably be parsed incorrectly
        ai = ApeTag.ApeItem()
        cp = ai.parsetag('\03' + data[1:], 0)
        self.assertEqual(16, cp)
        self.assertEqual('BlaH', ai.key)
        self.assertEqual(['BlA'], ai)

        # Test parsing of invalid UTF-8
        self.assertRaises(ApeTag.TagError,
                          ApeTag.ApeItem().parsetag,
                          "\01\0\0\0\0\0\0\010xx\0\x83", 1)
예제 #8
0
    def test_update(self):
        self.assertFilesEqual('good-empty', 'good-empty', lambda: ApeTag.createape('test.tag'))
        self.assertFilesEqual('missing-ok', 'good-empty', lambda: ApeTag.createape('test.tag'))
        self.assertFilesEqual('good-empty', 'good-simple-1', lambda: ApeTag.createape('test.tag', {'name': 'value'}))
        self.assertFilesEqual('good-simple-1', 'good-empty', lambda: ApeTag.updateape('test.tag', removefields=['name']))
        self.assertFilesEqual('good-simple-1', 'good-empty', lambda: ApeTag.updateape('test.tag', removefields=['Name']))
        self.assertFilesEqual('good-empty', 'good-simple-1-ro-external', lambda: ApeTag.createape('test.tag', {'name': ApeTag.ApeItem('name', ['value'], 'external', True)}))
        self.assertFilesEqual('good-empty', 'good-binary-non-utf8-value', lambda: ApeTag.createape('test.tag', {'name': ApeTag.ApeItem('name', ['v\x81lue'], 'binary')}))
        d = {}
        for i in range(63):
            d["%in" % i] = "a" * i
        self.assertFilesEqual('good-empty', 'good-many-items', lambda: ApeTag.createape('test.tag', d))
        self.assertFilesEqual('good-empty', 'good-multiple-values', lambda: ApeTag.createape('test.tag', {'name': ['va', 'ue']}))
        self.assertFilesEqual('good-multiple-values', 'good-simple-1-uc', lambda: ApeTag.createape('test.tag', {'NAME': 'value'}))
        self.assertFilesEqual('good-empty', 'good-simple-1-utf8', lambda: ApeTag.createape('test.tag', {'name': u'v\xc2\xd5'}))

        d['63n'] = 'a' * 63
        d['64n'] = 'a' * 64
        self.assertTagErrorRaised('New tag has too many items: 65 items', lambda: ApeTag.createape('test.tag', d))
        self.assertTagErrorRaised('New tag is too large: 8193 bytes', lambda: ApeTag.createape('test.tag', {'xn': 'a'*8118}))
        self.assertTagErrorRaised("Invalid item key for ape tag item: 'n'", lambda: ApeTag.createape('test.tag', {'n': 'a'}))
        self.assertTagErrorRaised("Invalid item key for ape tag item: 'n\\x00'", lambda: ApeTag.createape('test.tag', {'n\0': 'a'}))
        self.assertTagErrorRaised("Invalid item key for ape tag item: 'n\\x1f'", lambda: ApeTag.createape('test.tag', {'n\x1f': 'a'}))
        self.assertTagErrorRaised("Invalid item key for ape tag item: 'n\\x80'", lambda: ApeTag.createape('test.tag', {'n\x80': 'a'}))
        self.assertTagErrorRaised("Invalid item key for ape tag item: 'n\\xff'", lambda: ApeTag.createape('test.tag', {'n\xff': 'a'}))
        self.assertTagErrorRaised("Invalid item key for ape tag item: 'tag'", lambda: ApeTag.createape('test.tag', {'tag': 'a'}))
        self.assertTagErrorRaised(UnicodeDecodeError, lambda: ApeTag.createape('test.tag', {'ab': 'v\xff'}))
        self.assertTagErrorRaised("Invalid item type for ape tag item: 'foo'", lambda: ApeTag.createape('test.tag', {'ab': ApeTag.ApeItem('name', ['value'], 'foo')}))

        self.assertFilesEqual('good-empty', 'good-simple-1', lambda: ApeTag.createape(file('test.tag', 'r+b'), {'name': 'value'}))
예제 #9
0
    def test_update(self):
        self.assertFilesEqual('good-empty', 'good-empty',
                              lambda: ApeTag.createape('test.tag'))
        self.assertFilesEqual('missing-ok', 'good-empty',
                              lambda: ApeTag.createape('test.tag'))
        self.assertFilesEqual(
            'good-empty', 'good-simple-1',
            lambda: ApeTag.createape('test.tag', {'name': 'value'}))
        self.assertFilesEqual(
            'good-simple-1', 'good-empty',
            lambda: ApeTag.updateape('test.tag', removefields=['name']))
        self.assertFilesEqual(
            'good-simple-1', 'good-empty',
            lambda: ApeTag.updateape('test.tag', removefields=['Name']))
        self.assertFilesEqual(
            'good-empty',
            'good-simple-1-ro-external', lambda: ApeTag.createape(
                'test.tag',
                {'name': ApeTag.ApeItem('name', ['value'], 'external', True)}))
        self.assertFilesEqual(
            'good-empty',
            'good-binary-non-utf8-value', lambda: ApeTag.createape(
                'test.tag',
                {'name': ApeTag.ApeItem('name', ['v\x81lue'], 'binary')}))
        d = {}
        for i in range(63):
            d["%in" % i] = "a" * i
        self.assertFilesEqual('good-empty', 'good-many-items',
                              lambda: ApeTag.createape('test.tag', d))
        self.assertFilesEqual(
            'good-empty', 'good-multiple-values',
            lambda: ApeTag.createape('test.tag', {'name': ['va', 'ue']}))
        self.assertFilesEqual(
            'good-multiple-values', 'good-simple-1-uc',
            lambda: ApeTag.createape('test.tag', {'NAME': 'value'}))
        self.assertFilesEqual(
            'good-empty', 'good-simple-1-utf8',
            lambda: ApeTag.createape('test.tag', {'name': u'v\xc2\xd5'}))

        d['63n'] = 'a' * 63
        d['64n'] = 'a' * 64
        self.assertTagErrorRaised('New tag has too many items: 65 items',
                                  lambda: ApeTag.createape('test.tag', d))
        self.assertTagErrorRaised(
            'New tag is too large: 8193 bytes',
            lambda: ApeTag.createape('test.tag', {'xn': 'a' * 8118}))
        self.assertTagErrorRaised(
            "Invalid item key for ape tag item: 'n'",
            lambda: ApeTag.createape('test.tag', {'n': 'a'}))
        self.assertTagErrorRaised(
            "Invalid item key for ape tag item: 'n\\x00'",
            lambda: ApeTag.createape('test.tag', {'n\0': 'a'}))
        self.assertTagErrorRaised(
            "Invalid item key for ape tag item: 'n\\x1f'",
            lambda: ApeTag.createape('test.tag', {'n\x1f': 'a'}))
        self.assertTagErrorRaised(
            "Invalid item key for ape tag item: 'n\\x80'",
            lambda: ApeTag.createape('test.tag', {'n\x80': 'a'}))
        self.assertTagErrorRaised(
            "Invalid item key for ape tag item: 'n\\xff'",
            lambda: ApeTag.createape('test.tag', {'n\xff': 'a'}))
        self.assertTagErrorRaised(
            "Invalid item key for ape tag item: 'tag'",
            lambda: ApeTag.createape('test.tag', {'tag': 'a'}))
        self.assertTagErrorRaised(
            UnicodeDecodeError,
            lambda: ApeTag.createape('test.tag', {'ab': 'v\xff'}))
        self.assertTagErrorRaised(
            "Invalid item type for ape tag item: 'foo'",
            lambda: ApeTag.createape(
                'test.tag', {'ab': ApeTag.ApeItem('name', ['value'], 'foo')}))

        self.assertFilesEqual(
            'good-empty', 'good-simple-1', lambda: ApeTag.createape(
                file('test.tag', 'r+b'), {'name': 'value'}))
예제 #10
0
 def corrupt(self, filename, msg):
     self._assertTagErrorRaised(
         msg, lambda: ApeTag.getapefields(filename + '.tag'))
예제 #11
0
    def test_parse(self):
        self.assertEquals({}, ApeTag.getapefields("good-empty.tag"))
        self.assertEquals({'name': ['value']}, ApeTag.getapefields("good-simple-1.tag"))
        #self.assertEquals(['value'], ApeTag.getapefields("good-simple-1.tag")['Name'])

        self.assertEquals(63, len(ApeTag.getapefields("good-many-items.tag")))
        self.assertEquals([''], ApeTag.getapefields("good-many-items.tag")['0n'])
        self.assertEquals(['a'], ApeTag.getapefields("good-many-items.tag")['1n'])
        self.assertEquals(['a' * 62], ApeTag.getapefields("good-many-items.tag")['62n'])

        self.assertEquals({'name': ['va', 'ue']}, ApeTag.getapefields("good-multiple-values.tag"))

        self.assertEquals('name', ApeTag.getapefields("good-simple-1.tag")['name'].key)
        self.assertEquals('utf8', ApeTag.getapefields("good-simple-1.tag")['name'].type)
        self.assertEquals(False, ApeTag.getapefields("good-simple-1.tag")['name'].readonly)
        
        self.assertEquals('name', ApeTag.getapefields("good-simple-1-ro-external.tag")['name'].key)
        self.assertEquals(['value'], ApeTag.getapefields("good-simple-1.tag")['name'])
        self.assertEquals('external', ApeTag.getapefields("good-simple-1-ro-external.tag")['name'].type)
        self.assertEquals(True, ApeTag.getapefields("good-simple-1-ro-external.tag")['name'].readonly)
        
        self.assertEquals('name', ApeTag.getapefields("good-binary-non-utf8-value.tag")['name'].key)
        self.assertEquals(['v\x81lue'], ApeTag.getapefields("good-binary-non-utf8-value.tag")['name'])
        self.assertEquals('binary', ApeTag.getapefields("good-binary-non-utf8-value.tag")['name'].type)
        self.assertEquals(False, ApeTag.getapefields("good-binary-non-utf8-value.tag")['name'].readonly)

        self.assertEquals({'name': ['value']}, ApeTag.getapefields(file("good-simple-1.tag")))
예제 #12
0
 def test_has_id3(self):
     self.assertEquals(False, ApeTag.hasid3tag("missing-ok.tag"))
     self.assertEquals(False, ApeTag.hasid3tag("good-empty.tag"))
     self.assertEquals(True, ApeTag.hasid3tag("good-empty-id3-only.tag"))
     self.assertEquals(True, ApeTag.hasid3tag("good-empty-id3.tag"))
예제 #13
0
 def assertRemoved(self, before, after):
     self.assertFilesEqual(before, after, lambda: ApeTag.deletetags('test.tag'))
예제 #14
0
 def corrupt(self, filename, msg):
     self._assertTagErrorRaised(msg, lambda: ApeTag.getapefields(filename + '.tag'))
예제 #15
0
    def test_bad_tags(self):
        # Test read only tag flag works
        ro_tag = rc(rc(EMPTY_APE_TAG, 20, 1, False), 52, 1)
        ro_tag.seek(0)
        ro_tag = ro_tag.read()
        self.assertEqual(''.join(ApeTag.getrawtags(rc(rc(EMPTY_APE_TAG, 20, 1, False), 52, 1))), ro_tag)
        # Test bad tag flags
        for i in range(2,256):
            self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, rc(EMPTY_APE_TAG, 20, i))
            self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, rc(EMPTY_APE_TAG, 52, i))
            self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, rc(rc(EMPTY_APE_TAG, 20, i, False), 52, i))

        # Test footer size less than minimum size (32)
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, rc(EMPTY_APE_TAG, 44, 31))
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, rc(EMPTY_APE_TAG, 44, 0))
        
        # Test tag size > 8192, when both larger than file and smaller than file
        large = rc(rc(EMPTY_APE_TAG, 44, 225, False), 45, 31, False)
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, sio(large))
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, sio(' '*8192+large))
        
        # Test unmatching header and footer tag size, with footer size wrong
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, rc(EMPTY_APE_TAG, 44, 33))
        
        # Test matching header and footer but size to large for file
        wrong = rc(rc(EMPTY_APE_TAG, 12, 33, False), 44, 33, False)
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, sio(wrong))
        
        # Test that header and footer size isn't too large for file, but doesn't 
        # find the header
        wrong=" "+wrong
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, sio(wrong))
        
        # Test unmatching header and footer tag size, with header size wrong
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, rc(EMPTY_APE_TAG, 45, 32))
        
        # Test item count greater than possible given tag size
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(EMPTY_APE_TAG, 48, 1))
        
        # Test unmatched header and footer item size, header size wrong
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(EMPTY_APE_TAG, 16, 1))
        
        # Test unmatched header and footer item size, footer size wrong
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(EXAMPLE_APE_TAG, 192, ord(EXAMPLE_APE_TAG[192])-1))
        
        # Test missing/corrupt header
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(EMPTY_APE_TAG, 0, 0))
        
        # Test parsing bad first item size
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(EXAMPLE_APE_TAG, 32, ord(EXAMPLE_APE_TAG[32])+1))
        
        # Test parsing bad first item invalid key
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(EXAMPLE_APE_TAG, 40, 0))
        
        # Test parsing bad first item key end
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(EXAMPLE_APE_TAG, 45, 1))
        
        # Test parsing bad second item length too long
        self.assertRaises((ApeTag.TagError, UnicodeDecodeError), ApeTag.gettagfields, rc(EXAMPLE_APE_TAG, 47, 255))
        
        # Test parsing case insensitive duplicate keys
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rr(EXAMPLE_APE_TAG, 40, 'Album'))
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rr(EXAMPLE_APE_TAG, 40, 'album'))
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rr(EXAMPLE_APE_TAG, 40, 'ALBUM'))
        
        # Test parsing incorrect item counts
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(rc(EXAMPLE_APE_TAG, 16, ord(EXAMPLE_APE_TAG[16])+1, False), 192, ord(EXAMPLE_APE_TAG[192])+1))
        self.assertRaises(ApeTag.TagError, ApeTag.gettagfields, rc(rc(EXAMPLE_APE_TAG, 16, ord(EXAMPLE_APE_TAG[16])-1, False), 192, ord(EXAMPLE_APE_TAG[192])-1))
        
        # Test updating with invalid key
        self.assertRaises(ApeTag.TagError, ApeTag.updatetags, sio(EXAMPLE_APE_TAG), {'x':'x'})
        
        # Test updating with too large a tag
        self.assertRaises(ApeTag.TagError, ApeTag.updatetags, sio(EXAMPLE_APE_TAG), {'x':'x'*8192})
예제 #16
0
 def test_remove(self):
     self.assertRemoved('good-empty', 'missing-ok')
     self.assertRemoved('good-empty-id3', 'missing-ok')
     self.assertRemoved('good-empty-id3-only', 'missing-ok')
     self.assertRemoved('missing-10k', 'missing-10k')
     self.assertFilesEqual('good-empty', 'missing-ok', lambda: ApeTag.deletetags(file('test.tag', 'r+b')))
예제 #17
0
 def test_has_ape(self):
     self.assertEquals(False, ApeTag.hasapetag("missing-ok.tag"))
     self.assertEquals(True, ApeTag.hasapetag("good-empty.tag"))
     self.assertEquals(False, ApeTag.hasapetag("good-empty-id3-only.tag"))
     self.assertEquals(True, ApeTag.hasapetag("good-empty-id3.tag"))
예제 #18
0
 def assertRemoved(self, before, after):
     self.assertFilesEqual(before, after,
                           lambda: ApeTag.deletetags('test.tag'))
예제 #19
0
    def tag_test(self, f):
        size = filesize(f)
        self.assertEqual(False, ApeTag.hasapetag(f))
        self.assertEqual(size, filesize(f))
        self.assertEqual(False, ApeTag.hasid3tag(f))
        self.assertEqual(size, filesize(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size, filesize(f))

        self.assertEqual(0, ApeTag.deleteape(f))
        self.assertEqual(size, filesize(f))
        self.assertEqual(0, ApeTag.deleteid3(f))
        self.assertEqual(size, filesize(f))
        self.assertEqual(0, ApeTag.deletetags(f))
        self.assertEqual(size, filesize(f))
        
        self.assertRaises(ApeTag.TagError, ApeTag.getrawape, f)
        self.assertRaises(ApeTag.TagError, ApeTag.getrawid3, f)
        self.assertRaises(ApeTag.TagError, ApeTag.getrawtags, f)
        self.assertRaises(ApeTag.TagError, ApeTag.printapetag, f)
        self.assertRaises(ApeTag.TagError, ApeTag.printid3tag, f)
        self.assertRaises(ApeTag.TagError, ApeTag.printtags, f)
        self.assertRaises(ApeTag.TagError, ApeTag.updateape, f)
        self.assertRaises(ApeTag.TagError, ApeTag.updateid3, f)
        self.assertRaises(ApeTag.TagError, ApeTag.updatetags, f)
        
        self.assertEqual({}, ApeTag.createape(f, {}))
        self.assertEqual({}, ApeTag.getapefields(f))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(False, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+64, filesize(f))
        self.assertEqual(EMPTY_APE_TAG[:64], ApeTag.getrawape(f))
        self.assertEqual(0, ApeTag.deleteape(f))
        self.assertEqual(size, filesize(f))
        
        self.assertEqual(EMPTY_ID3_FIELDS, ApeTag.createid3(f, {}))
        self.assertEqual(EMPTY_ID3_FIELDS, ApeTag.getid3fields(f))
        self.assertEqual(False, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+128, filesize(f))
        self.assertEqual(EMPTY_APE_TAG[64:], ApeTag.getrawid3(f))
        self.assertEqual(0, ApeTag.deleteid3(f))
        self.assertEqual(size, filesize(f))
        
        self.assertEqual({}, ApeTag.createtags(f, {}))
        self.assertEqual(({},EMPTY_ID3_FIELDS), ApeTag.gettagfields(f))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(True, ApeTag.hastags(f))
        self.assertEqual(size+192, filesize(f))
        self.assertEqual((EMPTY_APE_TAG[:64], EMPTY_APE_TAG[64:]), ApeTag.getrawtags(f))
        self.assertEqual(0, ApeTag.deletetags(f))
        self.assertEqual(size, filesize(f))
        
        
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.createape(f, EXAMPLE_APE_FIELDS))
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.getapefields(f))
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.createape(f, EXAMPLE_APE_FIELDS))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(False, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+208, filesize(f))
        self.assertEqual(EXAMPLE_APE_TAG[:-128], ApeTag.getrawape(f))
        self.assertEqual(0, ApeTag.deleteape(f))
        self.assertEqual(size, filesize(f))
        
        self.assertEqual(EXAMPLE_ID3_FIELDS, ApeTag.createid3(f, EXAMPLE_ID3_FIELDS))
        self.assertEqual(EXAMPLE_ID3_FIELDS, ApeTag.getid3fields(f))
        self.assertEqual(EXAMPLE_ID3_FIELDS, ApeTag.createid3(f, EXAMPLE_ID3_FIELDS))
        self.assertEqual(False, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+128, filesize(f))
        self.assertEqual(EXAMPLE_APE_TAG[-128:], ApeTag.getrawid3(f))
        self.assertEqual(0, ApeTag.deleteid3(f))
        self.assertEqual(size, filesize(f))
        
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.createtags(f, EXAMPLE_APE_FIELDS))
        self.assertEqual((EXAMPLE_APE_FIELDS,EXAMPLE_ID3_FIELDS), ApeTag.gettagfields(f))
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.createtags(f, EXAMPLE_APE_FIELDS))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(True, ApeTag.hastags(f))
        self.assertEqual(size+336, filesize(f))
        self.assertEqual((EXAMPLE_APE_TAG[:-128], EXAMPLE_APE_TAG[-128:]), ApeTag.getrawtags(f))
        self.assertEqual(0, ApeTag.deletetags(f))
        self.assertEqual(size, filesize(f))
        
        
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.createape(f, EXAMPLE_APE_FIELDS))
        self.assertEqual(EXAMPLE_APE_FIELDS2, ApeTag.updateape(f, {'Blah':'Blah'}, ['Track', 'Title']))
        self.assertEqual(EXAMPLE_APE_FIELDS2, ApeTag.getapefields(f))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(False, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+185, filesize(f))
        self.assertEqual(EXAMPLE_APE_TAG2[:-128], ApeTag.getrawape(f))
            
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.replaceape(f, EXAMPLE_APE_FIELDS))
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.getapefields(f))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(False, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+208, filesize(f))
        self.assertEqual(EXAMPLE_APE_TAG[:-128], ApeTag.getrawape(f))
        self.assertEqual(EXAMPLE_APE_FIELDS2, ApeTag.updateape(f, {'Blah':'Blah'}, ['track', 'title']))
        self.assertEqual(EXAMPLE_APE_TAG2[:-128], ApeTag.getrawape(f))
        self.assertEqual(0, ApeTag.deleteape(f))
        self.assertEqual(size, filesize(f))
        
        self.assertEqual(EXAMPLE_ID3_FIELDS, ApeTag.createid3(f, EXAMPLE_ID3_FIELDS))
        self.assertEqual(EXAMPLE_ID3_FIELDS2, ApeTag.updateid3(f, {'Track':0, 'Title':''}))
        self.assertEqual(EXAMPLE_ID3_FIELDS2, ApeTag.getid3fields(f))
        self.assertEqual(False, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+128, filesize(f))
        self.assertEqual(EXAMPLE_APE_TAG2[-128:], ApeTag.getrawid3(f))
            
        self.assertEqual(EXAMPLE_ID3_FIELDS, ApeTag.replaceid3(f, EXAMPLE_ID3_FIELDS))
        self.assertEqual(EXAMPLE_ID3_FIELDS, ApeTag.getid3fields(f))
        self.assertEqual(False, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(False, ApeTag.hastags(f))
        self.assertEqual(size+128, filesize(f))
        self.assertEqual(EXAMPLE_APE_TAG[-128:], ApeTag.getrawid3(f))
        self.assertEqual(0, ApeTag.deleteid3(f))
        self.assertEqual(size, filesize(f))
        
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.createtags(f, EXAMPLE_APE_FIELDS))
        self.assertEqual(EXAMPLE_APE_FIELDS2, ApeTag.updatetags(f, {'Blah':'Blah'}, ['Track', 'Title']))
        self.assertEqual((EXAMPLE_APE_FIELDS2, EXAMPLE_ID3_FIELDS2), ApeTag.gettagfields(f))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(True, ApeTag.hastags(f))
        self.assertEqual(size+313, filesize(f))
        self.assertEqual((EXAMPLE_APE_TAG2[:-128], EXAMPLE_APE_TAG2[-128:]), ApeTag.getrawtags(f))
            
        self.assertEqual(EXAMPLE_APE_FIELDS, ApeTag.replacetags(f, EXAMPLE_APE_FIELDS))
        self.assertEqual((EXAMPLE_APE_FIELDS, EXAMPLE_ID3_FIELDS), ApeTag.gettagfields(f))
        self.assertEqual(True, ApeTag.hasapetag(f))
        self.assertEqual(True, ApeTag.hasid3tag(f))
        self.assertEqual(True, ApeTag.hastags(f))
        self.assertEqual(size+336, filesize(f))
        self.assertEqual((EXAMPLE_APE_TAG[:-128], EXAMPLE_APE_TAG[-128:]), ApeTag.getrawtags(f))
        self.assertEqual(EXAMPLE_APE_FIELDS2, ApeTag.updatetags(f, {'Blah':'Blah'}, ['track', 'title']))
        self.assertEqual((EXAMPLE_APE_TAG2[:-128], EXAMPLE_APE_TAG2[-128:]), ApeTag.getrawtags(f))
        self.assertEqual(0, ApeTag.deletetags(f))
        self.assertEqual(size, filesize(f))
예제 #20
0
    def test_parse(self):
        self.assertEquals({}, ApeTag.getapefields("good-empty.tag"))
        self.assertEquals({'name': ['value']},
                          ApeTag.getapefields("good-simple-1.tag"))
        #self.assertEquals(['value'], ApeTag.getapefields("good-simple-1.tag")['Name'])

        self.assertEquals(63, len(ApeTag.getapefields("good-many-items.tag")))
        self.assertEquals([''],
                          ApeTag.getapefields("good-many-items.tag")['0n'])
        self.assertEquals(['a'],
                          ApeTag.getapefields("good-many-items.tag")['1n'])
        self.assertEquals(['a' * 62],
                          ApeTag.getapefields("good-many-items.tag")['62n'])

        self.assertEquals({'name': ['va', 'ue']},
                          ApeTag.getapefields("good-multiple-values.tag"))

        self.assertEquals('name',
                          ApeTag.getapefields("good-simple-1.tag")['name'].key)
        self.assertEquals(
            'utf8',
            ApeTag.getapefields("good-simple-1.tag")['name'].type)
        self.assertEquals(
            False,
            ApeTag.getapefields("good-simple-1.tag")['name'].readonly)

        self.assertEquals(
            'name',
            ApeTag.getapefields("good-simple-1-ro-external.tag")['name'].key)
        self.assertEquals(['value'],
                          ApeTag.getapefields("good-simple-1.tag")['name'])
        self.assertEquals(
            'external',
            ApeTag.getapefields("good-simple-1-ro-external.tag")['name'].type)
        self.assertEquals(
            True,
            ApeTag.getapefields("good-simple-1-ro-external.tag")
            ['name'].readonly)

        self.assertEquals(
            'name',
            ApeTag.getapefields("good-binary-non-utf8-value.tag")['name'].key)
        self.assertEquals(
            ['v\x81lue'],
            ApeTag.getapefields("good-binary-non-utf8-value.tag")['name'])
        self.assertEquals(
            'binary',
            ApeTag.getapefields("good-binary-non-utf8-value.tag")['name'].type)
        self.assertEquals(
            False,
            ApeTag.getapefields("good-binary-non-utf8-value.tag")
            ['name'].readonly)

        self.assertEquals({'name': ['value']},
                          ApeTag.getapefields(file("good-simple-1.tag")))