Skip to content

Commit 782a599

Browse files
committed
Add test
1 parent 4d0d426 commit 782a599

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

Lib/test/test_sqlite3/test_cli.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
"""sqlite3 CLI tests."""
2+
import re
23
import sqlite3
34
import unittest
45

56
from sqlite3.__main__ import main as cli
7+
from test.support import captured_stdout, captured_stderr, captured_stdin, requires_subprocess
8+
from test.support.import_helper import import_module
69
from test.support.os_helper import TESTFN, unlink
7-
from test.support import captured_stdout, captured_stderr, captured_stdin
8-
10+
from test.support.pty_helper import run_pty
911

1012
class CommandLineInterface(unittest.TestCase):
1113

@@ -153,5 +155,36 @@ def test_interact_on_disk_file(self):
153155
self.assertIn("(0,)\n", out)
154156

155157

158+
@requires_subprocess()
159+
class Completer(unittest.TestCase):
160+
@classmethod
161+
def setUpClass(cls):
162+
# Ensure that the readline module is loaded
163+
# If this fails, the test is skipped because SkipTest will be raised
164+
readline = import_module("readline")
165+
if readline.backend == "editline":
166+
raise unittest.SkipTest("libedit readline is not supported")
167+
168+
def test_keyword_completion(self):
169+
script = "from sqlite3.__main__ import main; main()"
170+
# List candidates starting with 'S', there should be multiple matches.
171+
# Then add 'EL' and complete 'SEL' to 'SELECT'. Quit console in the end
172+
# to let run_pty() return.
173+
input = b"S\t\tEL\t 1;\n.quit\n"
174+
output = run_pty(script, input)
175+
# Remove control sequences that colorize typed prefix 'S'
176+
output = re.sub(rb"\x1b\[[0-9;]*[mK]", b"", output)
177+
self.assertIn(b"SELECT", output)
178+
self.assertIn(b"SET", output)
179+
self.assertIn(b"SAVEPOINT", output)
180+
self.assertIn(b"(1,)", output)
181+
182+
# Keywords are completed in upper case for even lower case user input
183+
input = b"sel\t\t 1;\n.quit\n"
184+
output = run_pty(script, input)
185+
output = re.sub(rb"\x1b\[[0-9;]*[mK]", b"", output)
186+
self.assertIn(b"SELECT", output)
187+
self.assertIn(b"(1,)", output)
188+
156189
if __name__ == "__main__":
157190
unittest.main()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Support keyword completion for :mod:`sqlite3` command-line interface.
1+
Support keyword completion in the :mod:`sqlite3` command-line interface.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy