riscv-openocd-wch/jimtcl/tests/interactive.test

139 lines
2.8 KiB
Plaintext

source [file dirname [info script]]/testing.tcl
needs constraint jim
needs cmd socket
package require expect
set saveenv $env
# Make sure we start with an empty history
set env(HOME) [pwd]
file delete .jim_history
# spawn the process to be used for testing
set p [expect::spawn [list [info nameofexecutable]]]
set env $saveenv
$p timeout 1
# Turn on echo since we get echo with linenoise anyway
$p tty echo 1
proc wait-for-prompt {p} {
$p expect {\. }
}
# Start with an empty history
file delete test_history
wait-for-prompt $p
$p send "history load test_history\r"
# skip echoed output
$p expect {\r\n}
wait-for-prompt $p
test interactive-1.1 {basic command} -body {
$p send "lsort \[info commands li*\]\r"
# skip echoed output
$p expect {\r\n}
# get command result
$p expect {\r\n}
$p before
} -result {lindex linsert list} -cleanup {
wait-for-prompt $p
}
test interactive-1.2 {command line completion} {
set check 0
set failed 0
$p send "li\t"
$p expect {lindex} { incr check } TIMEOUT { incr failed }
if {!$failed} {
$p send "\t"
$p expect {linsert} { incr check }
$p send "\t"
$p expect {list} { incr check }
$p send \r
}
$p expect {\r\n}
wait-for-prompt $p
list $check $failed
} {3 0}
test interactive-1.3 {history show} -body {
$p send "history show\r"
$p expect {\r\n}
$p expect {history show\r\n}
string cat [$p before] [$p after]
} -result " 1 history load test_history\r\n 2 lsort \[info commands li*\]\r\n 3 list\r\n 4 history show\r\n" -cleanup {
wait-for-prompt $p
}
test interactive-1.4 {history getline} -body {
$p send "history getline {PROMPT> }\r"
$p expect {\r\n}
sleep 0.25
$p send "abc\bd\x01e\r"
$p expect {\r\n}
$p expect {\r\n}
$p before
} -result {eabd} -cleanup {
wait-for-prompt $p
}
test interactive-1.4 {history getline} -body {
$p send "set len \[history getline {PROMPT> } buf\]\r"
$p expect {\r\n}
sleep 0.25
$p send "abcde\r"
$p expect {\r\n}
$p expect {\r\n}
sleep 0.25
$p wait-for-prompt
$p send "list \$len \$buf\r"
$p expect {\r\n}
$p expect {\r\n}
$p before
} -result {5 abcde} -cleanup {
wait-for-prompt $p
}
test interactive-1.5 {insert wide character} -constraints utf8 -body {
$p send "set x a\u1100b"
# now arrow left twice over the wide char and insert another char
$p send \x1bOD
$p send \x1bOD
$p send y
$p send \r
$p expect {\r\n}
sleep 0.25
$p expect {\r\n}
$p before
} -result ay\u1100b -cleanup {
wait-for-prompt $p
}
test interactive-1.6 {insert utf-8 combining character} -constraints utf8 -body {
$p send "set x x\u0300"
# now arrow left twice over the combining char and "x" and insert another char
$p send \x1bOD
$p send \x1bOD
$p send y
$p send \r
$p expect {\r\n}
sleep 0.25
$p expect {\r\n}
$p before
} -result yx\u0300 -cleanup {
wait-for-prompt $p
}
# send ^D to cause the interpeter to exit
$p send \x04
sleep 0.25
$p expect EOF
$p close
testreport