79a4591478
of check-in [1590b401ff0670b6]. FossilOrigin-Name: b6ad35096d48de29fd8da498ac23cd7eba9194a70cad05ec49c318f11fe77199
248 lines
5.8 KiB
PL/PgSQL
248 lines
5.8 KiB
PL/PgSQL
#!sqlite3
|
|
#
|
|
# 2026-04-11
|
|
#
|
|
# The author disclaims copyright to this source code. In place of
|
|
# a legal notice, here is a blessing:
|
|
#
|
|
# May you do good and not evil.
|
|
# May you find forgiveness for yourself and forgive others.
|
|
# May you share freely, never taking more than you give.
|
|
#
|
|
#***********************************************************************
|
|
#
|
|
# Tests for the .prompt command and prompt rendering.
|
|
#
|
|
# ./sqlite3 test/shell-prompt.sql
|
|
#
|
|
|
|
.testcase setup
|
|
.open -new test.db
|
|
.mode list -quote off -escape ascii
|
|
.prompt --hard-reset
|
|
.check ''
|
|
|
|
.testcase 100
|
|
.prompt
|
|
.check ''
|
|
|
|
.testcase 110
|
|
.prompt --show
|
|
.check --glob <<END
|
|
Main prompt: '*/A*/f*-> '
|
|
Continuation: '/B*/C*-> '
|
|
END
|
|
.testcase 111
|
|
.prompt 'abc> ' '123> ' -show
|
|
.check <<END
|
|
Main prompt: 'abc> '
|
|
Continuation: '123> '
|
|
END
|
|
.testcase 112
|
|
.prompt -- --first --second
|
|
.prompt --show
|
|
.check <<END
|
|
Main prompt: '--first'
|
|
Continuation: '--second'
|
|
END
|
|
.testcase 113
|
|
.prompt --reset --show
|
|
.check --glob <<END
|
|
Main prompt: '*/A*/f*> '
|
|
Continuation: '/B*/C*> '
|
|
END
|
|
|
|
.testcase 120 --error-prefix ERROR:
|
|
.prompt show
|
|
.check <<END
|
|
ERROR: .prompt show
|
|
ERROR: ^--- use quotes around the prompt string
|
|
END
|
|
|
|
.testcase 121
|
|
.prompt 'show'
|
|
.check ''
|
|
.testcase 122
|
|
.prompt --show
|
|
.check --glob <<END
|
|
Main prompt: 'show'
|
|
Continuation: '/B*/C*> '
|
|
END
|
|
|
|
.testcase 130
|
|
.prompt --reset
|
|
.help prompt
|
|
.check <<END
|
|
.prompt MAIN CONTINUE Replace the standard prompts
|
|
--hard-reset Unset SQLITE_PS1/2 and then --reset
|
|
--no-color Disable color prompts. Use --color to re-enable
|
|
--reset Revert to default prompts
|
|
--show Show the current prompt strings
|
|
-- No more options. Subsequent args are prompts
|
|
END
|
|
|
|
.testcase 140 --error-prefix ERROR:
|
|
.prompt --xyz
|
|
.check <<END
|
|
ERROR: .prompt --xyz
|
|
ERROR: ^--- unknown option
|
|
END
|
|
|
|
|
|
.testcase 1000
|
|
SELECT shell_prompt_test(NULL);
|
|
.check --glob '*SQLite-3*test.db*-> ';
|
|
.testcase 1001
|
|
SELECT shell_prompt_test(NULL,'SELECT');
|
|
.check --glob ' *;*-> ';
|
|
.testcase 1002
|
|
SELECT shell_prompt_test(NULL,'SELECT ((("',null,2);
|
|
.check --glob ' *[ m]")));*-> ';
|
|
.testcase 1003
|
|
SELECT shell_prompt_test(NULL,'SELECT ((()[',null,2);
|
|
.check --glob ' *[ m]]));*-> ';
|
|
.testcase 1004
|
|
SELECT shell_prompt_test(NULL,'SELECT ''',null,2);
|
|
.check --glob " *[ m]';*-> ";
|
|
.testcase 1005
|
|
SELECT shell_prompt_test(NULL,'CREATE TRIGGER t1 BEGIN',null,2);
|
|
.check --glob " *[ m];END;*-> ";
|
|
.testcase 1006
|
|
SELECT shell_prompt_test(NULL,'CREATE TRIGGER t1 BEGIN SELECT ((([',null,2);
|
|
.check --glob " *[ m]])));END;*-> ";
|
|
.testcase 1007
|
|
SELECT shell_prompt_test(NULL,'CREATE TRIGGER t1 BEGIN SELECT ((/*a(((''bc',
|
|
null,2);
|
|
.check --glob " *[ m][*]/));END;*-> ";
|
|
.testcase 1008
|
|
SELECT shell_prompt_test(NULL,'CREATE TRIGGER t1 BEGIN SELECT 1;',null,2);
|
|
.check --glob " *[ m]END;*-> ";
|
|
|
|
.testcase 2000
|
|
.prompt 'SQLite/x-txn$/:>/; '
|
|
SELECT shell_prompt_test(NULL);
|
|
.check 'SQLite> ';
|
|
.testcase 2001
|
|
BEGIN;
|
|
SELECT shell_prompt_test(NULL);
|
|
.check 'SQLite-txn$ ';
|
|
.testcase 2002
|
|
ROLLBACK;
|
|
SELECT shell_prompt_test(NULL);
|
|
.check 'SQLite> ';
|
|
.testcase 2003
|
|
.prompt -- '--show '
|
|
SELECT shell_prompt_test(NULL);
|
|
.check '--show ';
|
|
.testcase 2004
|
|
.prompt --reset
|
|
SELECT shell_prompt_test(NULL);
|
|
.check --glob '*SQLite-3.# *test.db*-> ';
|
|
|
|
.testcase 3000
|
|
SELECT shell_prompt_test('(/A-/V)');
|
|
.check --glob '(SQLite-3.#.#)'
|
|
.testcase 3001
|
|
SELECT shell_prompt_test('(/A-/v)');
|
|
.check --glob '(SQLite-3.#)'
|
|
.testcase 3002
|
|
SELECT shell_prompt_test('(/A-/D%Y-%m-%dT%H:%M:%S/D)');
|
|
.check --glob '(SQLite-20#-#-#T#:#:#)'
|
|
|
|
.testcase 4000
|
|
.mode list -rowsep '' -escape ascii
|
|
SELECT shell_prompt_test('</myes/:no/;>',NULL,':memory:');
|
|
.check <yes>
|
|
.testcase 4001
|
|
.mode list -rowsep '' -escape ascii
|
|
SELECT shell_prompt_test('</myes/:no/;>',NULL,'t1.db');
|
|
.check <no>
|
|
|
|
.testcase 5000
|
|
SELECT shell_prompt_test('abc/e[0mxyz',NULL,NULL,1);
|
|
.check abc^A^[[0m^Bxyz
|
|
.testcase 5001
|
|
SELECT shell_prompt_test('abc/e[0mxyz',NULL,NULL,2);
|
|
.check abc^[[0mxyz
|
|
.testcase 5002
|
|
SELECT shell_prompt_test('/e[0mxyz',NULL,NULL,1);
|
|
.check ^A^[[0m^Bxyz
|
|
.testcase 5003
|
|
SELECT shell_prompt_test('abc/e[0m',NULL,NULL,1);
|
|
.check abc^A^[[0m^B
|
|
.testcase 5004
|
|
SELECT shell_prompt_test('abc/e[1;32m/e[0m/e[/exyz',NULL,NULL,1);
|
|
.check abc^A^[[1;32m^[[0m^B^[[^[xyz
|
|
.testcase 5005
|
|
SELECT shell_prompt_test('abc/e[1,32m/e[0m/e[/exyz',NULL,NULL,1);
|
|
.check abc^[[1,32m^A^[[0m^B^[[^[xyz
|
|
|
|
# Additional tests for octal escapes
|
|
#
|
|
.testcase 6000
|
|
SELECT shell_prompt_test('/7');
|
|
.check ^G
|
|
.testcase 6001
|
|
SELECT shell_prompt_test('/78');
|
|
.check ^G8
|
|
.testcase 6002
|
|
SELECT shell_prompt_test('/7//');
|
|
.check ^G/
|
|
.testcase 6003
|
|
SELECT shell_prompt_test('/7/');
|
|
.check ^G
|
|
.testcase 6004
|
|
SELECT shell_prompt_test('/57');
|
|
.check /
|
|
.testcase 6005
|
|
SELECT shell_prompt_test('/578');
|
|
.check /8
|
|
.testcase 6006
|
|
SELECT shell_prompt_test('/57//');
|
|
.check //
|
|
.testcase 6007
|
|
SELECT shell_prompt_test('/57/');
|
|
.check /
|
|
.testcase 6008
|
|
SELECT shell_prompt_test('/10');
|
|
.check ^H
|
|
.testcase 6009
|
|
SELECT shell_prompt_test('/101');
|
|
.check A
|
|
.testcase 6010
|
|
SELECT shell_prompt_test('/1011');
|
|
.check A1
|
|
.testcase 6011
|
|
SELECT shell_prompt_test('/33[0');
|
|
.check ^[[0
|
|
|
|
# The UNKNOWN() error is shown regardless of whether or not the
|
|
# escape is part of an active branch.
|
|
.testcase 6012
|
|
SELECT shell_prompt_test('/x/z/:/y/;');
|
|
.check 'UNKNOWN("/z")UNKNOWN("/y")'
|
|
|
|
# Additional tests of \001..\002 escapes
|
|
#
|
|
# Two or more disconneted ANSI escapes
|
|
#
|
|
.testcase 7000
|
|
SELECT shell_prompt_test('a-/e[1m-/e[0m-z',null,null,1);
|
|
.check a-^A^[[1m^B-^A^[[0m^B-z
|
|
|
|
# Empty parameter
|
|
.testcase 7001
|
|
SELECT shell_prompt_test('a-/e[m-z',null,null,1);
|
|
.check a-^A^[[m^B-z
|
|
|
|
# /e followed by non-[
|
|
.testcase 7002
|
|
SELECT shell_prompt_test('a-/eX-z',null,null,1);
|
|
.check a-^[X-z
|
|
.testcase 7003
|
|
SELECT shell_prompt_test('a-/eX/e[m-z',null,null,1);
|
|
.check a-^[X^A^[[m^B-z
|
|
.testcase 7004
|
|
SELECT shell_prompt_test('a-/e[m/eX-z',null,null,1);
|
|
.check a-^A^[[m^B^[X-z
|