17db96d56Sopenharmony_ci"""Unit tests for code in urllib.response."""
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciimport socket
47db96d56Sopenharmony_ciimport tempfile
57db96d56Sopenharmony_ciimport urllib.response
67db96d56Sopenharmony_ciimport unittest
77db96d56Sopenharmony_cifrom test import support
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciif support.is_wasi:
107db96d56Sopenharmony_ci    raise unittest.SkipTest("Cannot create socket on WASI")
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciclass TestResponse(unittest.TestCase):
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci    def setUp(self):
167db96d56Sopenharmony_ci        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
177db96d56Sopenharmony_ci        self.fp = self.sock.makefile('rb')
187db96d56Sopenharmony_ci        self.test_headers = {"Host": "www.python.org",
197db96d56Sopenharmony_ci                             "Connection": "close"}
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci    def test_with(self):
227db96d56Sopenharmony_ci        addbase = urllib.response.addbase(self.fp)
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci        self.assertIsInstance(addbase, tempfile._TemporaryFileWrapper)
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci        def f():
277db96d56Sopenharmony_ci            with addbase as spam:
287db96d56Sopenharmony_ci                pass
297db96d56Sopenharmony_ci        self.assertFalse(self.fp.closed)
307db96d56Sopenharmony_ci        f()
317db96d56Sopenharmony_ci        self.assertTrue(self.fp.closed)
327db96d56Sopenharmony_ci        self.assertRaises(ValueError, f)
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci    def test_addclosehook(self):
357db96d56Sopenharmony_ci        closehook_called = False
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci        def closehook():
387db96d56Sopenharmony_ci            nonlocal closehook_called
397db96d56Sopenharmony_ci            closehook_called = True
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci        closehook = urllib.response.addclosehook(self.fp, closehook)
427db96d56Sopenharmony_ci        closehook.close()
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci        self.assertTrue(self.fp.closed)
457db96d56Sopenharmony_ci        self.assertTrue(closehook_called)
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci    def test_addinfo(self):
487db96d56Sopenharmony_ci        info = urllib.response.addinfo(self.fp, self.test_headers)
497db96d56Sopenharmony_ci        self.assertEqual(info.info(), self.test_headers)
507db96d56Sopenharmony_ci        self.assertEqual(info.headers, self.test_headers)
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci    def test_addinfourl(self):
537db96d56Sopenharmony_ci        url = "http://www.python.org"
547db96d56Sopenharmony_ci        code = 200
557db96d56Sopenharmony_ci        infourl = urllib.response.addinfourl(self.fp, self.test_headers,
567db96d56Sopenharmony_ci                                             url, code)
577db96d56Sopenharmony_ci        self.assertEqual(infourl.info(), self.test_headers)
587db96d56Sopenharmony_ci        self.assertEqual(infourl.geturl(), url)
597db96d56Sopenharmony_ci        self.assertEqual(infourl.getcode(), code)
607db96d56Sopenharmony_ci        self.assertEqual(infourl.headers, self.test_headers)
617db96d56Sopenharmony_ci        self.assertEqual(infourl.url, url)
627db96d56Sopenharmony_ci        self.assertEqual(infourl.status, code)
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci    def tearDown(self):
657db96d56Sopenharmony_ci        self.sock.close()
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ciif __name__ == '__main__':
687db96d56Sopenharmony_ci    unittest.main()
69