152 runnerformatter = formatters.Terminal256Formatter(style=TestRunnerStyle) |
153 runnerformatter = formatters.Terminal256Formatter(style=TestRunnerStyle) |
153 runnerlexer = TestRunnerLexer() |
154 runnerlexer = TestRunnerLexer() |
154 |
155 |
155 origenviron = os.environ.copy() |
156 origenviron = os.environ.copy() |
156 |
157 |
157 |
158 if sys.version_info < (3, 5, 0): |
158 if sys.version_info > (3, 5, 0): |
|
159 PYTHON3 = True |
|
160 xrange = range # we use xrange in one place, and we'd rather not use range |
|
161 |
|
162 def _sys2bytes(p): |
|
163 if p is None: |
|
164 return p |
|
165 return p.encode('utf-8') |
|
166 |
|
167 def _bytes2sys(p): |
|
168 if p is None: |
|
169 return p |
|
170 return p.decode('utf-8') |
|
171 |
|
172 osenvironb = getattr(os, 'environb', None) |
|
173 if osenvironb is None: |
|
174 # Windows lacks os.environb, for instance. A proxy over the real thing |
|
175 # instead of a copy allows the environment to be updated via bytes on |
|
176 # all platforms. |
|
177 class environbytes(object): |
|
178 def __init__(self, strenv): |
|
179 self.__len__ = strenv.__len__ |
|
180 self.clear = strenv.clear |
|
181 self._strenv = strenv |
|
182 |
|
183 def __getitem__(self, k): |
|
184 v = self._strenv.__getitem__(_bytes2sys(k)) |
|
185 return _sys2bytes(v) |
|
186 |
|
187 def __setitem__(self, k, v): |
|
188 self._strenv.__setitem__(_bytes2sys(k), _bytes2sys(v)) |
|
189 |
|
190 def __delitem__(self, k): |
|
191 self._strenv.__delitem__(_bytes2sys(k)) |
|
192 |
|
193 def __contains__(self, k): |
|
194 return self._strenv.__contains__(_bytes2sys(k)) |
|
195 |
|
196 def __iter__(self): |
|
197 return iter([_sys2bytes(k) for k in iter(self._strenv)]) |
|
198 |
|
199 def get(self, k, default=None): |
|
200 v = self._strenv.get(_bytes2sys(k), _bytes2sys(default)) |
|
201 return _sys2bytes(v) |
|
202 |
|
203 def pop(self, k, default=None): |
|
204 v = self._strenv.pop(_bytes2sys(k), _bytes2sys(default)) |
|
205 return _sys2bytes(v) |
|
206 |
|
207 osenvironb = environbytes(os.environ) |
|
208 |
|
209 getcwdb = getattr(os, 'getcwdb') |
|
210 if not getcwdb or WINDOWS: |
|
211 getcwdb = lambda: _sys2bytes(os.getcwd()) |
|
212 |
|
213 elif sys.version_info >= (3, 0, 0): |
|
214 print( |
159 print( |
215 '%s is only supported on Python 3.5+ and 2.7, not %s' |
160 '%s is only supported on Python 3.5+, not %s' |
216 % (sys.argv[0], '.'.join(str(v) for v in sys.version_info[:3])) |
161 % (sys.argv[0], '.'.join(str(v) for v in sys.version_info[:3])) |
217 ) |
162 ) |
218 sys.exit(70) # EX_SOFTWARE from `man 3 sysexit` |
163 sys.exit(70) # EX_SOFTWARE from `man 3 sysexit` |
219 else: |
164 |
220 PYTHON3 = False |
165 PYTHON3 = True |
221 |
166 xrange = range # we use xrange in one place, and we'd rather not use range |
222 # In python 2.x, path operations are generally done using |
167 |
223 # bytestrings by default, so we don't have to do any extra |
168 |
224 # fiddling there. We define the wrapper functions anyway just to |
169 def _sys2bytes(p): |
225 # help keep code consistent between platforms. |
170 if p is None: |
226 def _sys2bytes(p): |
|
227 return p |
171 return p |
228 |
172 return p.encode('utf-8') |
229 _bytes2sys = _sys2bytes |
173 |
230 osenvironb = os.environ |
174 |
231 getcwdb = os.getcwd |
175 def _bytes2sys(p): |
|
176 if p is None: |
|
177 return p |
|
178 return p.decode('utf-8') |
|
179 |
|
180 |
|
181 osenvironb = getattr(os, 'environb', None) |
|
182 if osenvironb is None: |
|
183 # Windows lacks os.environb, for instance. A proxy over the real thing |
|
184 # instead of a copy allows the environment to be updated via bytes on |
|
185 # all platforms. |
|
186 class environbytes(object): |
|
187 def __init__(self, strenv): |
|
188 self.__len__ = strenv.__len__ |
|
189 self.clear = strenv.clear |
|
190 self._strenv = strenv |
|
191 |
|
192 def __getitem__(self, k): |
|
193 v = self._strenv.__getitem__(_bytes2sys(k)) |
|
194 return _sys2bytes(v) |
|
195 |
|
196 def __setitem__(self, k, v): |
|
197 self._strenv.__setitem__(_bytes2sys(k), _bytes2sys(v)) |
|
198 |
|
199 def __delitem__(self, k): |
|
200 self._strenv.__delitem__(_bytes2sys(k)) |
|
201 |
|
202 def __contains__(self, k): |
|
203 return self._strenv.__contains__(_bytes2sys(k)) |
|
204 |
|
205 def __iter__(self): |
|
206 return iter([_sys2bytes(k) for k in iter(self._strenv)]) |
|
207 |
|
208 def get(self, k, default=None): |
|
209 v = self._strenv.get(_bytes2sys(k), _bytes2sys(default)) |
|
210 return _sys2bytes(v) |
|
211 |
|
212 def pop(self, k, default=None): |
|
213 v = self._strenv.pop(_bytes2sys(k), _bytes2sys(default)) |
|
214 return _sys2bytes(v) |
|
215 |
|
216 osenvironb = environbytes(os.environ) |
|
217 |
|
218 getcwdb = getattr(os, 'getcwdb') |
|
219 if not getcwdb or WINDOWS: |
|
220 getcwdb = lambda: _sys2bytes(os.getcwd()) |
|
221 |
232 |
222 |
233 if WINDOWS: |
223 if WINDOWS: |
234 _getcwdb = getcwdb |
224 _getcwdb = getcwdb |
235 |
225 |
236 def getcwdb(): |
226 def getcwdb(): |