|
1 | 1 | """sqlite3 CLI tests."""
|
2 | 2 | import sqlite3
|
3 |
| -import sys |
4 |
| -import textwrap |
5 | 3 | import unittest
|
6 | 4 |
|
7 | 5 | from sqlite3.__main__ import main as cli
|
8 |
| -from test.support.import_helper import import_module |
9 | 6 | from test.support.os_helper import TESTFN, unlink
|
10 |
| -from test.support.pty_helper import run_pty |
11 | 7 | from test.support import (
|
12 | 8 | captured_stdout,
|
13 | 9 | captured_stderr,
|
14 | 10 | captured_stdin,
|
15 | 11 | force_not_colorized_test_class,
|
16 |
| - requires_subprocess, |
17 | 12 | )
|
18 | 13 |
|
19 | 14 |
|
@@ -205,98 +200,5 @@ def test_color(self):
|
205 | 200 | self.assertIn('\x1b[1;35mOperationalError (SQLITE_ERROR)\x1b[0m: '
|
206 | 201 | '\x1b[35mnear "sel": syntax error\x1b[0m', err)
|
207 | 202 |
|
208 |
| - |
209 |
| -@requires_subprocess() |
210 |
| -@force_not_colorized_test_class |
211 |
| -class Completion(unittest.TestCase): |
212 |
| - PS1 = "sqlite> " |
213 |
| - |
214 |
| - @classmethod |
215 |
| - def setUpClass(cls): |
216 |
| - _sqlite3 = import_module("_sqlite3") |
217 |
| - if not hasattr(_sqlite3, "SQLITE_KEYWORDS"): |
218 |
| - raise unittest.SkipTest("unable to determine SQLite keywords") |
219 |
| - |
220 |
| - readline = import_module("readline") |
221 |
| - if readline.backend == "editline": |
222 |
| - raise unittest.SkipTest("libedit readline is not supported") |
223 |
| - |
224 |
| - def write_input(self, input_, env=None): |
225 |
| - script = textwrap.dedent(""" |
226 |
| - import readline |
227 |
| - from sqlite3.__main__ import main |
228 |
| -
|
229 |
| - readline.parse_and_bind("set colored-completion-prefix off") |
230 |
| - main() |
231 |
| - """) |
232 |
| - return run_pty(script, input_, env) |
233 |
| - |
234 |
| - def test_complete_sql_keywords(self): |
235 |
| - # List candidates starting with 'S', there should be multiple matches. |
236 |
| - input_ = b"S\t\tEL\t 1;\n.quit\n" |
237 |
| - output = self.write_input(input_) |
238 |
| - self.assertIn(b"SELECT", output) |
239 |
| - self.assertIn(b"SET", output) |
240 |
| - self.assertIn(b"SAVEPOINT", output) |
241 |
| - self.assertIn(b"(1,)", output) |
242 |
| - |
243 |
| - # Keywords are completed in upper case for even lower case user input. |
244 |
| - input_ = b"sel\t\t 1;\n.quit\n" |
245 |
| - output = self.write_input(input_) |
246 |
| - self.assertIn(b"SELECT", output) |
247 |
| - self.assertIn(b"(1,)", output) |
248 |
| - |
249 |
| - @unittest.skipIf(sys.platform.startswith("freebsd"), |
250 |
| - "Two actual tabs are inserted when there are no matching" |
251 |
| - " completions in the pseudo-terminal opened by run_pty()" |
252 |
| - " on FreeBSD") |
253 |
| - def test_complete_no_match(self): |
254 |
| - input_ = b"xyzzy\t\t\b\b\b\b\b\b\b.quit\n" |
255 |
| - # Set NO_COLOR to disable coloring for self.PS1. |
256 |
| - output = self.write_input(input_, env={"NO_COLOR": "1"}) |
257 |
| - lines = output.decode().splitlines() |
258 |
| - indices = ( |
259 |
| - i for i, line in enumerate(lines, 1) |
260 |
| - if line.startswith(f"{self.PS1}xyzzy") |
261 |
| - ) |
262 |
| - line_num = next(indices, -1) |
263 |
| - self.assertNotEqual(line_num, -1) |
264 |
| - # Completions occupy lines, assert no extra lines when there is nothing |
265 |
| - # to complete. |
266 |
| - self.assertEqual(line_num, len(lines)) |
267 |
| - |
268 |
| - def test_complete_no_input(self): |
269 |
| - from _sqlite3 import SQLITE_KEYWORDS |
270 |
| - |
271 |
| - script = textwrap.dedent(""" |
272 |
| - import readline |
273 |
| - from sqlite3.__main__ import main |
274 |
| -
|
275 |
| - # Configure readline to ...: |
276 |
| - # - hide control sequences surrounding each candidate |
277 |
| - # - hide "Display all xxx possibilities? (y or n)" |
278 |
| - # - hide "--More--" |
279 |
| - # - show candidates one per line |
280 |
| - readline.parse_and_bind("set colored-completion-prefix off") |
281 |
| - readline.parse_and_bind("set colored-stats off") |
282 |
| - readline.parse_and_bind("set completion-query-items 0") |
283 |
| - readline.parse_and_bind("set page-completions off") |
284 |
| - readline.parse_and_bind("set completion-display-width 0") |
285 |
| -
|
286 |
| - main() |
287 |
| - """) |
288 |
| - input_ = b"\t\t.quit\n" |
289 |
| - output = run_pty(script, input_, env={"NO_COLOR": "1"}) |
290 |
| - lines = output.decode().splitlines() |
291 |
| - indices = [ |
292 |
| - i for i, line in enumerate(lines) |
293 |
| - if line.startswith(self.PS1) |
294 |
| - ] |
295 |
| - self.assertEqual(len(indices), 2) |
296 |
| - start, end = indices |
297 |
| - candidates = [l.strip() for l in lines[start+1:end]] |
298 |
| - self.assertEqual(candidates, sorted(SQLITE_KEYWORDS)) |
299 |
| - |
300 |
| - |
301 | 203 | if __name__ == "__main__":
|
302 | 204 | unittest.main()
|
0 commit comments