1from PyObjCTools.TestSupport import *
2from Foundation import *
3
4class TestNSStreamHelper (NSObject):
5    def stream_handleEvent_(self, a, b): pass
6
7class TestNSStreamUsage(TestCase):
8
9    def testUsage(self):
10        # Test the usage of methods that require extra work
11
12        # Try to create a connection to the IPP port on the local host
13        inputStream, outputStream = NSStream.getStreamsToHost_port_inputStream_outputStream_(
14                NSHost.hostWithAddress_(u"127.0.0.1"),
15                631, # IPP port
16                None,
17                None
18        )
19
20        self.assert_(isinstance(inputStream, NSInputStream))
21        self.assert_(isinstance(outputStream, NSOutputStream))
22
23        inputStream.close()
24        outputStream.close()
25
26    def testConstants(self):
27        self.failUnlessEqual(NSStreamStatusNotOpen, 0)
28        self.failUnlessEqual(NSStreamStatusOpening, 1)
29        self.failUnlessEqual(NSStreamStatusOpen, 2)
30        self.failUnlessEqual(NSStreamStatusReading, 3)
31        self.failUnlessEqual(NSStreamStatusWriting, 4)
32        self.failUnlessEqual(NSStreamStatusAtEnd, 5)
33        self.failUnlessEqual(NSStreamStatusClosed, 6)
34        self.failUnlessEqual(NSStreamStatusError, 7)
35
36        self.failUnlessEqual(NSStreamEventNone, 0)
37        self.failUnlessEqual(NSStreamEventOpenCompleted, 1 << 0)
38        self.failUnlessEqual(NSStreamEventHasBytesAvailable, 1 << 1)
39        self.failUnlessEqual(NSStreamEventHasSpaceAvailable, 1 << 2)
40        self.failUnlessEqual(NSStreamEventErrorOccurred, 1 << 3)
41        self.failUnlessEqual(NSStreamEventEndEncountered, 1 << 4)
42
43        self.failUnlessIsInstance(NSStreamSocketSecurityLevelKey, unicode)
44        self.failUnlessIsInstance(NSStreamSocketSecurityLevelNone, unicode)
45        self.failUnlessIsInstance(NSStreamSocketSecurityLevelSSLv2, unicode)
46        self.failUnlessIsInstance(NSStreamSocketSecurityLevelSSLv3, unicode)
47        self.failUnlessIsInstance(NSStreamSocketSecurityLevelTLSv1, unicode)
48        self.failUnlessIsInstance(NSStreamSocketSecurityLevelNegotiatedSSL, unicode)
49        self.failUnlessIsInstance(NSStreamSOCKSProxyConfigurationKey, unicode)
50        self.failUnlessIsInstance(NSStreamSOCKSProxyHostKey, unicode)
51        self.failUnlessIsInstance(NSStreamSOCKSProxyPortKey, unicode)
52        self.failUnlessIsInstance(NSStreamSOCKSProxyVersionKey, unicode)
53        self.failUnlessIsInstance(NSStreamSOCKSProxyUserKey, unicode)
54        self.failUnlessIsInstance(NSStreamSOCKSProxyPasswordKey, unicode)
55        self.failUnlessIsInstance(NSStreamSOCKSProxyVersion4, unicode)
56        self.failUnlessIsInstance(NSStreamSOCKSProxyVersion5, unicode)
57        self.failUnlessIsInstance(NSStreamDataWrittenToMemoryStreamKey, unicode)
58        self.failUnlessIsInstance(NSStreamFileCurrentOffsetKey, unicode)
59        self.failUnlessIsInstance(NSStreamSocketSSLErrorDomain, unicode)
60        self.failUnlessIsInstance(NSStreamSOCKSErrorDomain, unicode)
61
62    def testMethods(self):
63        self.failUnlessResultIsBOOL(NSStream.setProperty_forKey_)
64
65        self.failUnlessArgHasType(NSInputStream.read_maxLength_, 0, 'o^v')
66        self.failUnlessArgSizeInArg(NSInputStream.read_maxLength_, 0, 1)
67        self.failUnlessArgSizeInResult(NSInputStream.read_maxLength_, 0)
68
69        self.failUnlessResultIsBOOL(NSInputStream.hasBytesAvailable)
70
71        self.failUnlessArgHasType(NSOutputStream.write_maxLength_, 0, 'n^v')
72        self.failUnlessArgSizeInArg(NSOutputStream.write_maxLength_, 0, 1)
73        self.failUnlessResultIsBOOL(NSOutputStream.hasSpaceAvailable)
74
75        b = NSOutputStream.alloc().initToMemory()
76        self.failUnlessArgHasType(b.initToFileAtPath_append_, 1, objc._C_NSBOOL)
77        self.failUnlessArgHasType(NSOutputStream.outputStreamToFileAtPath_append_, 1, objc._C_NSBOOL)
78
79        self.failUnlessArgHasType(b.initToBuffer_capacity_, 0, 'o^v')
80        self.failUnlessArgSizeInArg(b.initToBuffer_capacity_, 0, 1)
81        self.failUnlessArgHasType(NSOutputStream.outputStreamToBuffer_capacity_, 0, 'o^v')
82        self.failUnlessArgSizeInArg(NSOutputStream.outputStreamToBuffer_capacity_, 0, 1)
83
84    def testDelegate(self):
85        self.failUnlessArgHasType(TestNSStreamHelper.stream_handleEvent_, 1, objc._C_NSUInteger)
86
87if __name__ == '__main__':
88    main()
89