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