1from CFNetwork import *
2from PyObjCTools.TestSupport import *
3import sys
4
5try:
6    long
7except NameError:
8    long = int
9
10try:
11    unicode
12except NameError:
13    unicode = str
14
15if sys.version_info[0] != 2:
16    def buffer(value):
17        return value.encode('latin1')
18
19class TestCFHTTPMessage (TestCase):
20    @min_os_level('10.6')
21    def testConstants10_6(self):
22        self.assertIsInstance(kCFHTTPAuthenticationSchemeNegotiate2, unicode)
23        self.assertIsInstance(kCFHTTPAuthenticationSchemeXMobileMeAuthToken, unicode)
24
25    @min_os_level('10.5')
26    def testConstants10_5(self):
27        self.assertIsInstance(kCFHTTPAuthenticationSchemeNTLM, unicode)
28        self.assertIsInstance(kCFHTTPAuthenticationSchemeNegotiate, unicode)
29
30    @expectedFailure
31    @min_os_level('10.5')
32    def testConstants10_5_failure(self):
33        self.assertIsInstance(kCFHTTPAuthenticationSchemeKerberos, unicode)
34
35    def testConstants(self):
36        self.assertIsInstance(kCFHTTPVersion1_0, unicode)
37        self.assertIsInstance(kCFHTTPVersion1_1, unicode)
38        self.assertIsInstance(kCFHTTPAuthenticationSchemeBasic, unicode)
39        self.assertIsInstance(kCFHTTPAuthenticationSchemeDigest, unicode)
40
41    def testTypes(self):
42        self.assertIsCFType(CFHTTPMessageRef)
43
44    def testFunctions(self):
45        self.assertIsInstance(CFHTTPMessageGetTypeID(), (int, long))
46
47        url = CFURLCreateWithString(None, "http://www.python.org/", None)
48        self.assertIsInstance(url, CFURLRef)
49
50        self.assertResultIsCFRetained(CFHTTPMessageCreateRequest)
51        req = CFHTTPMessageCreateRequest(None, "GET", url, kCFHTTPVersion1_1)
52        self.assertIsInstance(req, CFHTTPMessageRef)
53
54        self.assertResultIsCFRetained(CFHTTPMessageCreateResponse)
55        resp = CFHTTPMessageCreateResponse(None, 200, "Okidoki", kCFHTTPVersion1_1)
56        self.assertIsInstance(req, CFHTTPMessageRef)
57
58        self.assertResultIsCFRetained(CFHTTPMessageCreateEmpty)
59        self.assertArgIsBOOL(CFHTTPMessageCreateEmpty, 1)
60        m = CFHTTPMessageCreateEmpty(None, True)
61        self.assertIsInstance(m, CFHTTPMessageRef)
62
63        self.assertResultIsCFRetained(CFHTTPMessageCreateCopy)
64        m = CFHTTPMessageCreateCopy(None, req)
65        self.assertIsInstance(m, CFHTTPMessageRef)
66
67        self.assertResultIsBOOL(CFHTTPMessageIsRequest)
68        self.assertTrue(CFHTTPMessageIsRequest(req) is True)
69        self.assertTrue(CFHTTPMessageIsRequest(resp) is False)
70
71        self.assertResultIsCFRetained(CFHTTPMessageCopyVersion)
72        v = CFHTTPMessageCopyVersion(req)
73        self.assertIsInstance(v, unicode)
74
75        CFHTTPMessageSetBody(req, buffer("hello world"))
76
77        self.assertResultIsCFRetained(CFHTTPMessageCopyBody)
78        b = CFHTTPMessageCopyBody(req)
79        if sys.version_info[0] == 2:
80            self.assertIsInstance(b, (CFDataRef, buffer))
81        else:
82            self.assertIsInstance(b, (CFDataRef, memoryview, bytes))
83
84        self.assertResultIsCFRetained(CFHTTPMessageCopyAllHeaderFields)
85        v = CFHTTPMessageCopyAllHeaderFields(req)
86        self.assertIsInstance(v, CFDictionaryRef)
87
88        self.assertResultIsCFRetained(CFHTTPMessageCopyHeaderFieldValue)
89        v = CFHTTPMessageCopyHeaderFieldValue(req, "X-Python")
90        self.assertTrue(v is None)
91
92        CFHTTPMessageSetHeaderFieldValue(req, "X-Python", "Rocks")
93        v = CFHTTPMessageCopyHeaderFieldValue(req, "X-Python")
94        self.assertEqual(v, "Rocks")
95
96        self.assertResultIsBOOL(CFHTTPMessageAppendBytes)
97        self.assertArgHasType(CFHTTPMessageAppendBytes, 1, b'n^v')
98        self.assertArgSizeInArg(CFHTTPMessageAppendBytes, 1, 2)
99
100        v = CFHTTPMessageAppendBytes(req, b"hello world", 11)
101        self.assertTrue(v is True)
102
103
104        self.assertResultIsBOOL(CFHTTPMessageIsHeaderComplete)
105        v = CFHTTPMessageIsHeaderComplete(req)
106        self.assertTrue(v is False or v is True)
107
108        self.assertResultIsCFRetained(CFHTTPMessageCopySerializedMessage)
109        v = CFHTTPMessageCopySerializedMessage(resp)
110        self.assertIsInstance(v, CFDataRef)
111
112        self.assertResultIsCFRetained(CFHTTPMessageCopyRequestURL)
113        v = CFHTTPMessageCopyRequestURL(req)
114        self.assertIsInstance(v, CFURLRef)
115
116        self.assertResultIsCFRetained(CFHTTPMessageCopyRequestMethod)
117        v = CFHTTPMessageCopyRequestMethod(req)
118        self.assertIsInstance(v, unicode)
119
120        self.assertResultIsBOOL(CFHTTPMessageAddAuthentication)
121        self.assertArgIsBOOL(CFHTTPMessageAddAuthentication, 5)
122        v = CFHTTPMessageAddAuthentication(req, resp, "ronald", "secret", kCFHTTPAuthenticationSchemeBasic, False)
123        self.assertIsInstance(v, bool)
124
125        v = CFHTTPMessageGetResponseStatusCode(resp)
126        self.assertIsInstance(v, (int, long))
127
128        self.assertResultIsCFRetained(CFHTTPMessageCopyResponseStatusLine)
129        v = CFHTTPMessageCopyResponseStatusLine(resp)
130        self.assertIsInstance(v, unicode)
131
132if __name__ == "__main__":
133    main()
134