예제 #1
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'}))
예제 #2
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))
예제 #3
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'}))