|
14 | 14 | import re |
15 | 15 | import base64 |
16 | 16 | import ntpath |
| 17 | +import pathlib |
17 | 18 | import shutil |
18 | 19 | import email.message |
19 | 20 | import email.utils |
@@ -790,10 +791,10 @@ def test_query_with_continuous_slashes(self): |
790 | 791 |
|
791 | 792 |
|
792 | 793 | class SocketlessRequestHandler(SimpleHTTPRequestHandler): |
793 | | - def __init__(self, *args, **kwargs): |
| 794 | + def __init__(self, directory=None): |
794 | 795 | request = mock.Mock() |
795 | 796 | request.makefile.return_value = BytesIO() |
796 | | - super().__init__(request, None, None) |
| 797 | + super().__init__(request, None, None, directory=directory) |
797 | 798 |
|
798 | 799 | self.get_called = False |
799 | 800 | self.protocol_version = "HTTP/1.1" |
@@ -1068,41 +1069,91 @@ def test_date_time_string(self): |
1068 | 1069 | class SimpleHTTPRequestHandlerTestCase(unittest.TestCase): |
1069 | 1070 | """ Test url parsing """ |
1070 | 1071 | def setUp(self): |
1071 | | - self.translated = os.getcwd() |
1072 | | - self.translated = os.path.join(self.translated, 'filename') |
1073 | | - self.handler = SocketlessRequestHandler() |
| 1072 | + self.translated_1 = os.path.join(os.getcwd(), 'filename') |
| 1073 | + self.translated_2 = os.path.join('foo', 'filename') |
| 1074 | + self.translated_3 = os.path.join('bar', 'filename') |
| 1075 | + self.handler_1 = SocketlessRequestHandler() |
| 1076 | + self.handler_2 = SocketlessRequestHandler(directory='foo') |
| 1077 | + self.handler_3 = SocketlessRequestHandler(directory=pathlib.PurePath('bar')) |
1074 | 1078 |
|
1075 | 1079 | def test_query_arguments(self): |
1076 | | - path = self.handler.translate_path('/filename') |
1077 | | - self.assertEqual(path, self.translated) |
1078 | | - path = self.handler.translate_path('/filename?foo=bar') |
1079 | | - self.assertEqual(path, self.translated) |
1080 | | - path = self.handler.translate_path('/filename?a=b&spam=eggs#zot') |
1081 | | - self.assertEqual(path, self.translated) |
| 1080 | + path = self.handler_1.translate_path('/filename') |
| 1081 | + self.assertEqual(path, self.translated_1) |
| 1082 | + path = self.handler_2.translate_path('/filename') |
| 1083 | + self.assertEqual(path, self.translated_2) |
| 1084 | + path = self.handler_3.translate_path('/filename') |
| 1085 | + self.assertEqual(path, self.translated_3) |
| 1086 | + |
| 1087 | + path = self.handler_1.translate_path('/filename?foo=bar') |
| 1088 | + self.assertEqual(path, self.translated_1) |
| 1089 | + path = self.handler_2.translate_path('/filename?foo=bar') |
| 1090 | + self.assertEqual(path, self.translated_2) |
| 1091 | + path = self.handler_3.translate_path('/filename?foo=bar') |
| 1092 | + self.assertEqual(path, self.translated_3) |
| 1093 | + |
| 1094 | + path = self.handler_1.translate_path('/filename?a=b&spam=eggs#zot') |
| 1095 | + self.assertEqual(path, self.translated_1) |
| 1096 | + path = self.handler_2.translate_path('/filename?a=b&spam=eggs#zot') |
| 1097 | + self.assertEqual(path, self.translated_2) |
| 1098 | + path = self.handler_3.translate_path('/filename?a=b&spam=eggs#zot') |
| 1099 | + self.assertEqual(path, self.translated_3) |
1082 | 1100 |
|
1083 | 1101 | def test_start_with_double_slash(self): |
1084 | | - path = self.handler.translate_path('//filename') |
1085 | | - self.assertEqual(path, self.translated) |
1086 | | - path = self.handler.translate_path('//filename?foo=bar') |
1087 | | - self.assertEqual(path, self.translated) |
| 1102 | + path = self.handler_1.translate_path('//filename') |
| 1103 | + self.assertEqual(path, self.translated_1) |
| 1104 | + path = self.handler_2.translate_path('//filename') |
| 1105 | + self.assertEqual(path, self.translated_2) |
| 1106 | + path = self.handler_3.translate_path('//filename') |
| 1107 | + self.assertEqual(path, self.translated_3) |
| 1108 | + |
| 1109 | + path = self.handler_1.translate_path('//filename?foo=bar') |
| 1110 | + self.assertEqual(path, self.translated_1) |
| 1111 | + path = self.handler_2.translate_path('//filename?foo=bar') |
| 1112 | + self.assertEqual(path, self.translated_2) |
| 1113 | + path = self.handler_3.translate_path('//filename?foo=bar') |
| 1114 | + self.assertEqual(path, self.translated_3) |
1088 | 1115 |
|
1089 | 1116 | def test_windows_colon(self): |
1090 | 1117 | with support.swap_attr(server.os, 'path', ntpath): |
1091 | | - path = self.handler.translate_path('c:c:c:foo/filename') |
| 1118 | + path = self.handler_1.translate_path('c:c:c:foo/filename') |
| 1119 | + path = path.replace(ntpath.sep, os.sep) |
| 1120 | + self.assertEqual(path, self.translated_1) |
| 1121 | + path = self.handler_2.translate_path('c:c:c:foo/filename') |
| 1122 | + path = path.replace(ntpath.sep, os.sep) |
| 1123 | + self.assertEqual(path, self.translated_2) |
| 1124 | + path = self.handler_3.translate_path('c:c:c:foo/filename') |
1092 | 1125 | path = path.replace(ntpath.sep, os.sep) |
1093 | | - self.assertEqual(path, self.translated) |
| 1126 | + self.assertEqual(path, self.translated_3) |
1094 | 1127 |
|
1095 | | - path = self.handler.translate_path('\\c:../filename') |
| 1128 | + path = self.handler_1.translate_path('\\c:../filename') |
| 1129 | + path = path.replace(ntpath.sep, os.sep) |
| 1130 | + self.assertEqual(path, self.translated_1) |
| 1131 | + path = self.handler_2.translate_path('\\c:../filename') |
| 1132 | + path = path.replace(ntpath.sep, os.sep) |
| 1133 | + self.assertEqual(path, self.translated_2) |
| 1134 | + path = self.handler_3.translate_path('\\c:../filename') |
1096 | 1135 | path = path.replace(ntpath.sep, os.sep) |
1097 | | - self.assertEqual(path, self.translated) |
| 1136 | + self.assertEqual(path, self.translated_3) |
1098 | 1137 |
|
1099 | | - path = self.handler.translate_path('c:\\c:..\\foo/filename') |
| 1138 | + path = self.handler_1.translate_path('c:\\c:..\\foo/filename') |
1100 | 1139 | path = path.replace(ntpath.sep, os.sep) |
1101 | | - self.assertEqual(path, self.translated) |
| 1140 | + self.assertEqual(path, self.translated_1) |
| 1141 | + path = self.handler_2.translate_path('c:\\c:..\\foo/filename') |
| 1142 | + path = path.replace(ntpath.sep, os.sep) |
| 1143 | + self.assertEqual(path, self.translated_2) |
| 1144 | + path = self.handler_3.translate_path('c:\\c:..\\foo/filename') |
| 1145 | + path = path.replace(ntpath.sep, os.sep) |
| 1146 | + self.assertEqual(path, self.translated_3) |
1102 | 1147 |
|
1103 | | - path = self.handler.translate_path('c:c:foo\\c:c:bar/filename') |
| 1148 | + path = self.handler_1.translate_path('c:c:foo\\c:c:bar/filename') |
| 1149 | + path = path.replace(ntpath.sep, os.sep) |
| 1150 | + self.assertEqual(path, self.translated_1) |
| 1151 | + path = self.handler_2.translate_path('c:c:foo\\c:c:bar/filename') |
| 1152 | + path = path.replace(ntpath.sep, os.sep) |
| 1153 | + self.assertEqual(path, self.translated_2) |
| 1154 | + path = self.handler_3.translate_path('c:c:foo\\c:c:bar/filename') |
1104 | 1155 | path = path.replace(ntpath.sep, os.sep) |
1105 | | - self.assertEqual(path, self.translated) |
| 1156 | + self.assertEqual(path, self.translated_3) |
1106 | 1157 |
|
1107 | 1158 |
|
1108 | 1159 | class MiscTestCase(unittest.TestCase): |
|
0 commit comments