1# NOTE: This file only contains basic tests of the keyvalue coding header definitions,
2# test_keyvalue contains tests for the actualy KVC/KVO mechanisms.
3from PyObjCTools.TestSupport import *
4
5from Foundation import *
6
7try:
8    unicode
9except NameError:
10    unicode = str
11
12class TestNSKeyValueCodingHelper (NSObject):
13    def validateValue_forKey_error_(self, a, b, c): return 1
14    def validateValue_forKeyPath_error_(self, a, b, c): return 1
15    def useStoredAccessor(self): return 1
16
17
18class TestNSKeyValueCoding (TestCase):
19    def testConstants(self):
20        self.assertIsInstance(NSUndefinedKeyException, unicode)
21        self.assertIsInstance(NSAverageKeyValueOperator, unicode)
22        self.assertIsInstance(NSCountKeyValueOperator, unicode)
23        self.assertIsInstance(NSDistinctUnionOfArraysKeyValueOperator, unicode)
24        self.assertIsInstance(NSDistinctUnionOfObjectsKeyValueOperator, unicode)
25        self.assertIsInstance(NSDistinctUnionOfSetsKeyValueOperator, unicode)
26        self.assertIsInstance(NSMaximumKeyValueOperator, unicode)
27        self.assertIsInstance(NSMinimumKeyValueOperator, unicode)
28        self.assertIsInstance(NSSumKeyValueOperator, unicode)
29        self.assertIsInstance(NSUnionOfArraysKeyValueOperator, unicode)
30        self.assertIsInstance(NSUnionOfObjectsKeyValueOperator, unicode)
31        self.assertIsInstance(NSUnionOfSetsKeyValueOperator, unicode)
32
33    def testDefineValidation(self):
34        o = NSObject.alloc().init()
35
36        m = o.validateValue_forKey_error_.__metadata__()
37        self.assertEqual(  m['arguments'][4]['type'], b'o^@' )
38
39        m = o.validateValue_forKeyPath_error_.__metadata__()
40        self.assertEqual(  m['arguments'][4]['type'], b'o^@' )
41
42
43    def testMethods(self):
44        self.assertResultIsBOOL(NSObject.accessInstanceVariablesDirectly)
45
46        self.assertResultIsBOOL(TestNSKeyValueCodingHelper.validateValue_forKey_error_)
47        self.assertArgIsOut(TestNSKeyValueCodingHelper.validateValue_forKey_error_, 2)
48        self.assertResultIsBOOL(TestNSKeyValueCodingHelper.validateValue_forKeyPath_error_)
49
50        self.assertArgIsInOut(TestNSKeyValueCodingHelper.validateValue_forKeyPath_error_, 0)
51        self.assertArgIsOut(TestNSKeyValueCodingHelper.validateValue_forKeyPath_error_, 2)
52        self.assertResultIsBOOL(TestNSKeyValueCodingHelper.useStoredAccessor)
53
54if __name__ == "__main__":
55    main()
56