Permalink
Switch branches/tags
v2.2.0-alpha.00000000 v2.1.0-beta.20181015 v2.1.0-beta.20181008 v2.1.0-beta.20181001 v2.1.0-beta.20180924 v2.1.0-beta.20180917 v2.1.0-beta.20180910 v2.1.0-beta.20180904 v2.1.0-beta.20180827 v2.1.0-alpha.20180730 v2.1.0-alpha.20180702 v2.1.0-alpha.20180604 v2.1.0-alpha.20180507 v2.1.0-alpha.20180416 v2.1.0-alpha.00000000 v2.0.6 v2.0.6-rc.1 v2.0.5 v2.0.4 v2.0.3 v2.0.2 v2.0.1 v2.0.0 v2.0-rc.1 v2.0-beta.20180326 v2.0-beta.20180319 v2.0-beta.20180312 v2.0-beta.20180305 v2.0-alpha.20180212 v2.0-alpha.20180129 v2.0-alpha.20180122 v2.0-alpha.20180116 v2.0-alpha.20171218 v2.0-alpha.20171218-plus-left-join-fix v1.2-alpha.20171211 v1.2-alpha.20171204 v1.2-alpha.20171113 v1.2-alpha.20171026 v1.2-alpha.20170901 v1.1.9 v1.1.9-rc.1 v1.1.8 v1.1.7 v1.1.6 v1.1.5 v1.1.4 v1.1.3 v1.1.2 v1.1.1 v1.1.0 v1.1.0-rc.1 v1.1-beta.20170928 v1.1-beta.20170921 v1.1-beta.20170907 v1.1-alpha.20170817 v1.1-alpha.20170810 v1.1-alpha.20170803 v1.1-alpha.20170720 v1.1-alpha.20170713 v1.1-alpha.20170629 v1.1-alpha.20170622 v1.1-alpha.20170608 v1.1-alpha.20170601 v1.0.7 v1.0.6 v1.0.5 v1.0.4 v1.0.3 v1.0.2 v1.0.1 v1.0 v1.0-rc.3 v1.0-rc.2 v1.0-rc.1 v0.1-alpha beta-20170420 beta-20170413 beta-20170406 beta-20170330 beta-20170323 beta-20170309 beta-20170223 beta-20170216 beta-20170209 beta-20170126 beta-20170112 beta-20170105 beta-20161215 beta-20161208 beta-20161201 beta-20161110 beta-20161103 beta-20161027 beta-20161013 beta-20161006 beta-20160929 beta-20160915 beta-20160908 beta-20160829 beta-20160728
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
236 lines (201 sloc) 5.12 KB
#! /usr/bin/env expect -f
source [file join [file dirname $argv0] common.tcl]
start_server $argv
spawn $argv sql
eexpect root@
start_test "Check that times are displayed by default on interactive terminals."
send "select 1;\r"
eexpect "(1 row)"
eexpect "Time:"
eexpect root@
end_test
start_test "Check that \\? prints the help text."
send "\\?\r"
eexpect "You are using"
eexpect "More documentation"
eexpect root@
end_test
start_test "Check that \\! invokes external commands."
send "\\! echo -n he; echo llo\r"
eexpect "hello"
eexpect "root@"
end_test
start_test "Check that \\q terminates the client."
send "\\q\r"
eexpect eof
spawn $argv sql --format=tsv
eexpect root@
end_test
start_test "Check that \\| reads statements."
send "\\| echo 'select '; echo '38 + 4;'\r"
eexpect 42
eexpect root@
end_test
start_test "Check that \\| does not execute upon encountering an error."
send "\\| echo 'create database dontcreate;'; exit 1\r"
eexpect "error in external command"
eexpect root@
send "drop database dontcreate;\r"
eexpect "database * does not exist"
eexpect root@
end_test
start_test "Check that a buit-in command in between tokens of a statement is processed locally."
send "select\r"
eexpect " ->"
send "\\?\r"
eexpect " ->"
send "1;\r"
expect "Time"
eexpect root@
end_test
start_test "Check that \\set without argument prints the current options"
send "\\set\r"
eexpect "display_format\ttsv"
eexpect root@
end_test
start_test "Check that \\set display_format properly errors out"
send "\\set display_format blabla\r"
eexpect "invalid table display format"
# check we don't see a stray "cannot change option during multi-line editing" tacked at the end
eexpect "html, raw)\r\n"
eexpect root@
end_test
start_test "Check that \\set can change the display format"
send "\\set display_format csv\r\\set\r"
eexpect "display_format,csv"
eexpect root@
send "\\set display_format=tsv\r\\set\r"
eexpect "display_format\ttsv"
eexpect root@
end_test
start_test "Check various ways to set a boolean flag."
send "\\set show_times=false\r\\set\r"
eexpect "show_times\tfalse"
eexpect root@
send "\\set show_times=true\r\\set\r"
eexpect "show_times\ttrue"
eexpect root@
send "\\set show_times=0\r\\set\r"
eexpect "show_times\tfalse"
eexpect root@
send "\\set show_times=1\r\\set\r"
eexpect "show_times\ttrue"
eexpect root@
send "\\set show_times=off\r\\set\r"
eexpect "show_times\tfalse"
eexpect root@
send "\\set show_times=on\r\\set\r"
eexpect "show_times\ttrue"
eexpect root@
send "\\set show_times=blah\r"
eexpect "invalid syntax"
eexpect root@
end_test
start_test "Check that a built-in command in the middle of a token (eg a string) is processed locally."
send "select 'hello\r"
eexpect " ->"
send "\\?\r"
eexpect " ->"
send "world' as woo;\r"
eexpect "hello\r\nworld"
eexpect "Time"
eexpect root@
end_test
start_test "Check that \\set can change the display of query times"
# check the override
send "\\unset show_times\r\\set\r"
eexpect "show_times\tfalse"
eexpect root@
send "select 1 as woo;\r"
eexpect "woo\r\n1\r\n"
expect {
"Time:" {
report "unexpected Time"
exit 1
}
root@ {}
}
eexpect "/defaultdb> "
# restore
send "\\set show_times\r"
end_test
start_test "Check that \\h with invalid commands print a reminder."
send "\\h invalid\r"
eexpect "no help available"
eexpect "Try"
expect "with no argument"
eexpect root@
end_test
start_test "Check that \\h with no argument prints a full list."
send "\\h\r"
eexpect "TRUNCATE"
eexpect "SHOW"
eexpect "ROLLBACK"
eexpect root@
end_test
start_test "Check that \\h with a known statement prints details."
send "\\h select\r"
eexpect "Command:"
eexpect "SELECT"
eexpect "data manipulation"
eexpect "FROM"
eexpect "ORDER BY"
eexpect "See also"
eexpect root@
end_test
start_test "Check that \\h with a documented clause name prints details."
send "\\h <source>\r"
eexpect "Command:"
eexpect "<SOURCE>"
eexpect "data manipulation"
eexpect "JOIN"
eexpect "SHOW"
eexpect "See also"
eexpect root@
end_test
start_test "Check that \\hf without argument prints a list."
send "\\hf\r"
eexpect "abs"
eexpect "count"
eexpect "round"
eexpect root@
end_test
start_test "Check that \\hf with a valid function name prints that functions help."
send "\\hf version\r"
eexpect "Category:"
eexpect "Signature"
eexpect root@
end_test
start_test "Check that \\hf with an invalid function name prints an error."
send "\\hf invalid\r"
eexpect "no help available"
eexpect "Try"
eexpect "with no argument"
eexpect root@
end_test
start_test "Check that commands are also recognized with a final semicolon."
send "\\set;\r"
eexpect "display_format"
eexpect root@
send "\\h select;\r"
eexpect SELECT
eexpect Description
eexpect root@
end_test
# Finally terminate with Ctrl+C.
interrupt
eexpect eof
spawn /bin/bash
send "PS1=':''/# '\r"
eexpect ":/# "
start_test "Check that non-interactive built-in commands are only accepted at the start of a statement."
send "(echo '\\set check_syntax'; echo 'select '; echo '\\help'; echo ';') | $argv sql\r"
eexpect "statement ignored"
eexpect ":/# "
send "(echo '\\unset check_syntax'; echo 'select '; echo '\\help'; echo '1;') | $argv sql\r"
eexpect "pq: syntax error"
eexpect ":/# "
end_test
send "exit 0\r"
eexpect eof
stop_server $argv