1from PyObjCTools.TestSupport import *
2import objc
3from PyObjCTest.sockaddr import PyObjCTestSockAddr
4
5objc.registerMetaDataForSelector(b"PyObjCTestSockAddr", b"sockAddrToValue:",
6           dict(
7               arguments={
8                   2+0: dict(type_modifier=objc._C_IN),
9               }
10))
11objc.registerMetaDataForSelector(b"PyObjCTestSockAddr", b"getIPv4Addr:",
12           dict(
13               arguments={
14                   2+0: dict(type_modifier=objc._C_OUT),
15               }
16))
17objc.registerMetaDataForSelector(b"PyObjCTestSockAddr", b"getIPv6Addr:",
18           dict(
19               arguments={
20                   2+0: dict(type_modifier=objc._C_OUT),
21               }
22))
23
24
25
26class TestSockAddrSupport (TestCase):
27    def testToObjC(self):
28        o = PyObjCTestSockAddr
29
30        v = o.sockAddrToValue_(('1.2.3.4', 45))
31        self.assertEqual(v, ('IPv4', '1.2.3.4', 45))
32
33        v = o.sockAddrToValue_(('::1', 90, 4, 5))
34        self.assertEqual(v, ('IPv6', '::1', 90, 4, 5))
35
36    def testIPv4FromC(self):
37        o = PyObjCTestSockAddr
38
39        v = o.getIPv4Addr_(None)
40        self.assertEqual(v, (b'127.0.0.1', 80))
41
42    def testIPv6FromC(self):
43        o = PyObjCTestSockAddr
44
45        v = o.getIPv6Addr_(None)
46        self.assertEqual(v, (b'::1', 443, 2, 3))
47
48if __name__ == "__main__":
49    main()
50