예제 #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_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))
예제 #3
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())
예제 #4
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)
예제 #5
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'}))