1"""
2Helper module for KeyValue tests
3"""
4from PyObjCTest.testbndl import PyObjCTest_KVBaseClass, PyObjCTest_KVPathClass
5import objc
6
7NSObject = objc.lookUpClass('NSObject')
8
9DirectString = u'Direct String'
10IndirectString = u'Indirect String'
11DirectNumber = 42
12IndirectNumber = 84
13
14class KVPyBase:
15    def __init__(self):
16        self.directString = DirectString
17        self._indirectString = IndirectString
18        self.directNumber = DirectNumber
19        self._indirectNumber = IndirectNumber
20
21    def get_indirectString(self):
22        return self._indirectString
23
24    def set_indirectString(self, aString):
25        self._indirectString = aString
26
27    def getIndirectNumber(self):
28        return self._indirectNumber
29
30    def setIndirectNumber(self, aNumber):
31        self._indirectNumber = aNumber
32
33class KVPyPath:
34    def __init__(self):
35        self.directHead = KVPyBase()
36        self._indirectHead = KVPyBase()
37
38    def indirectHead(self):
39        return self._indirectHead
40
41    def setIndirectHead(self, aHead):
42        self._indirectHead = aHead
43
44class KVPySubObjCBase (PyObjCTest_KVBaseClass):
45    pass
46
47class KVPySubObjCPath (PyObjCTest_KVPathClass):
48    pass
49
50class KVPySubOverObjCBase (PyObjCTest_KVBaseClass):
51    def init(self):
52        self = super(KVPySubOverObjCBase, self).init()
53        if not self:
54            return self
55
56        self.overDirectString = DirectString
57        self._overIndirectString = IndirectString
58        return self
59
60    def getOverIndirectString(self):
61        return self._overIndirectString
62
63    def setOverIndirectString_(self, aString):
64        self._overIndirectString = aString
65
66class KVPySubOverObjCPath(PyObjCTest_KVPathClass):
67    def init(self):
68        self = super(KVPySubOverObjCPath, self).init()
69        self.overDirectHead = KVPySubOverObjCBase.new()
70        self._overIndirectHead = KVPySubOverObjCBase.new()
71        return self
72
73    def overIndirectHead(self):
74        return self._overIndirectHead
75
76    def setOverIndirectHead_(self, aHead):
77        self._overIndirectHead = aHead
78
79class PyObjCTestObserver (NSObject):
80    def init(self):
81        self = super(PyObjCTestObserver, self).init()
82        if self is not None:
83            self.observed = []
84            self.willChange = []
85        return self
86
87    def observeValueForKeyPath_ofObject_change_context_(self, keyPath, obj, change, context):
88        self.observed.append( (keyPath, obj, change, context) )
89
90    def willChangeValueForKey_(self, key):
91        self.willChange.append(key)
92