1# This just tests the definitions in the NSKeyedArchiver header
2from PyObjCTools.TestSupport import *
3from Foundation import *
4
5try:
6    unicode
7except NameError:
8    unicode = str
9
10
11class TestNSKeyedArchiver (TestCase):
12    def testConstants(self):
13        self.assertIsInstance(NSInvalidArchiveOperationException, unicode)
14        self.assertIsInstance(NSInvalidUnarchiveOperationException, unicode)
15
16    def testOutput(self):
17        o = NSKeyedUnarchiver.alloc().initForReadingWithData_(
18                NSKeyedArchiver.archivedDataWithRootObject_(b"foobar".decode('ascii')))
19        self.assertIsInstance(o, NSKeyedUnarchiver)
20        m = o.decodeBytesForKey_returnedLength_.__metadata__()
21        self.assertEqual(m['retval']['type'], b'^v')
22        self.assertTrue(m['arguments'][3]['type'].startswith(b'o^'))
23
24        data = NSMutableData.alloc().init()
25        o = NSArchiver.alloc().initForWritingWithMutableData_(data)
26        m = o.encodeBytes_length_forKey_.__metadata__()
27        self.assertEqual(m['arguments'][2]['type'], b'n^v')
28
29    def testMethods(self):
30        self.assertResultIsBOOL(NSKeyedArchiver.archiveRootObject_toFile_)
31        self.assertArgIsBOOL(NSKeyedArchiver.encodeBool_forKey_, 0)
32        self.assertArgHasType(NSKeyedArchiver.encodeBytes_length_forKey_, 0, b'n^v')
33        self.assertArgSizeInArg(NSKeyedArchiver.encodeBytes_length_forKey_, 0, 1)
34
35        self.assertResultIsBOOL(NSKeyedUnarchiver.containsValueForKey_)
36        self.assertResultIsBOOL(NSKeyedUnarchiver.decodeBoolForKey_)
37
38        self.assertResultHasType(NSKeyedUnarchiver.decodeBytesForKey_returnedLength_, b'^v')
39        self.assertResultSizeInArg(NSKeyedUnarchiver.decodeBytesForKey_returnedLength_, 1)
40        self.assertArgIsOut(NSKeyedUnarchiver.decodeBytesForKey_returnedLength_, 1)
41
42        self.assertArgHasType(NSCoder.encodePoint_forKey_, 0, NSPoint.__typestr__)
43        self.assertArgHasType(NSCoder.encodeSize_forKey_, 0, NSSize.__typestr__)
44        self.assertArgHasType(NSCoder.encodeRect_forKey_, 0, NSRect.__typestr__)
45        self.assertResultHasType(NSCoder.decodePointForKey_, NSPoint.__typestr__)
46        self.assertResultHasType(NSCoder.decodeSizeForKey_, NSSize.__typestr__)
47        self.assertResultHasType(NSCoder.decodeRectForKey_, NSRect.__typestr__)
48
49
50if __name__ == "__main__":
51    main()
52