1import unittest 2import objc 3 4from Foundation import * 5from PyObjCTools.Conversion import * 6 7samplePropertyList = u'{ "" = 1; "x" = "2"; 1 = "one";}' 8 9class TestCollections(unittest.TestCase): 10 def assertSameArrayContents(self, a1, a2): 11 self.assertEqual(len(a1), len(a2)) 12 13 if isinstance(a2, NSArray): 14 for o in a1: 15 self.assert_( a2.indexOfObject_(o) != NSNotFound ) 16 else: 17 for o in a1: 18 a2.index(o) 19 20 if isinstance(a1, NSArray): 21 for o in a2: 22 self.assert_( a1.indexOfObject_(o) != NSNotFound ) 23 else: 24 for o in a2: 25 a1.index(o) 26 27 def assertSameDictionaryContents(self, d1, d2): 28 self.assertEqual(len(d1), len(d2)) 29 30 self.assertSameArrayContents(d1.keys(), d2.keys()) 31 32 for k in d1: 33 self.assert_(d1.has_key(k), "Missing key %s in %s"%(`k`, `d1`)) 34 self.assert_(d2.has_key(k), "Missing key %s in %s"%(`k`, `d2`)) 35 self.assertEqual(d1[k], d2[k], 36 "assertSameDictionary() failed for key '%s'. [%s != %s]" % (k, d1[k], d2[k])) 37 for k in d2: 38 self.assert_(d1.has_key(k), "Missing key %s in %s"%(`k`, `d1`)) 39 self.assert_(d2.has_key(k), "Missing key %s in %s"%(`k`, `d2`)) 40 self.assertEqual(d1[k], d2[k], 41 "assertSameDictionary() failed for key '%s'. [%s != %s]" % (k, d1[k], d2[k])) 42 43 def testConversion(self): 44 originalNSDictionary = NSString.propertyList(samplePropertyList) 45 aPythonDictionary = pythonCollectionFromPropertyList(originalNSDictionary) 46 convertedNSDictionary = propertyListFromPythonCollection(aPythonDictionary) 47 48 self.assertSameDictionaryContents(originalNSDictionary, originalNSDictionary) 49 self.assertSameDictionaryContents(aPythonDictionary, aPythonDictionary) 50 self.assertSameDictionaryContents(originalNSDictionary, aPythonDictionary) 51 self.assertSameDictionaryContents(originalNSDictionary, convertedNSDictionary) 52 self.assertSameDictionaryContents(convertedNSDictionary, aPythonDictionary) 53 54 def testIntegerConversion(self): 55 x = NSArray.arrayWithArray_([1,2,3,4]) 56 y = pythonCollectionFromPropertyList(x) 57 z = propertyListFromPythonCollection(y) 58 59 self.assertSameArrayContents(x,y) 60 self.assertSameArrayContents(x,z) 61 self.assertSameArrayContents(z,y) 62 63 def testHelpers(self): 64 def conversionHelper(anObject): 65 return anObject 66 67 self.assertRaises(TypeError, propertyListFromPythonCollection, { u'1' : type([]) }) 68 propertyListFromPythonCollection({u'1' : type([])}, conversionHelper) 69 70 d = NSDictionary.dictionaryWithDictionary_( {u'1' : NSObject.alloc().init() }) 71 # was: NSBundle.bundleForClass_(NSObject)} ) 72 # XXX: using NSBundle doesn't work on GNUstep 73 74 self.assertRaises(TypeError, pythonCollectionFromPropertyList, d) 75 pythonCollectionFromPropertyList(d, conversionHelper) 76 77 78if __name__ == '__main__': 79 try: 80 unittest.main( ) 81 except SystemExit : 82 pass 83 objc.recycleAutoreleasePool() 84