mirror of
https://github.com/wader/fq.git
synced 2024-12-29 00:22:38 +03:00
Merge pull request #198 from wader/interp-handle-cancel
interp,cli: Handle ctrl-c properly
This commit is contained in:
commit
b20ae90744
4
Makefile
4
Makefile
@ -23,7 +23,9 @@ testjq: fq
|
||||
|
||||
.PHONY: testcli
|
||||
testcli: fq
|
||||
@pkg/cli/test.sh ./fq pkg/cli/test.exp
|
||||
@pkg/cli/test_exp.sh ./fq pkg/cli/test_repl.exp
|
||||
@pkg/cli/test_exp.sh ./fq pkg/cli/test_cli_ctrlc.exp
|
||||
@pkg/cli/test_exp.sh ./fq pkg/cli/test_cli_ctrld.exp
|
||||
|
||||
.PHONY: cover
|
||||
cover: COVER=-cover -coverpkg=./... -coverprofile=cover.out
|
||||
|
19
pkg/cli/test_cli_ctrlc.exp
Normal file
19
pkg/cli/test_cli_ctrlc.exp
Normal file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env expect
|
||||
|
||||
log_user 1
|
||||
set timeout 3
|
||||
|
||||
expect_after {
|
||||
timeout {exit 1}
|
||||
}
|
||||
|
||||
spawn sh -c "cat | fq 2>&1"
|
||||
sleep 1
|
||||
# ctrl-c
|
||||
send "\x03"
|
||||
expect eof
|
||||
|
||||
# should not have outputted anything except maybe "^C", seems flakey
|
||||
if { $expect_out(buffer) != "" && $expect_out(buffer) != "^C" } {
|
||||
exit 1
|
||||
}
|
15
pkg/cli/test_cli_ctrld.exp
Normal file
15
pkg/cli/test_cli_ctrld.exp
Normal file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env expect
|
||||
|
||||
log_user 1
|
||||
set timeout 3
|
||||
|
||||
expect_after {
|
||||
timeout {exit 1}
|
||||
}
|
||||
|
||||
spawn sh -c "cat | fq 2>&1"
|
||||
sleep 1
|
||||
# ctrl-d
|
||||
send "\x04"
|
||||
expect "failed to decode"
|
||||
expect eof
|
@ -9,48 +9,49 @@ expect_after {
|
||||
timeout {exit 1}
|
||||
}
|
||||
|
||||
proc expect_prompt {} {
|
||||
global spawn_id
|
||||
sleep 0.2
|
||||
expect *
|
||||
send "\n"
|
||||
expect "> "
|
||||
}
|
||||
|
||||
spawn sh -c "NO_DECODE_PROGRESS=1 fq -o color=false -i . pkg/interp/testdata/test.mp3 2>&1"
|
||||
|
||||
expect "mp3> "
|
||||
expect_prompt
|
||||
|
||||
send ".\n"
|
||||
expect "footers"
|
||||
expect "mp3> "
|
||||
|
||||
# test completion
|
||||
send ".frames | mp3_fr\t"
|
||||
expect "mp3_frame"
|
||||
send "\n"
|
||||
expect "side_info"
|
||||
expect "mp3> "
|
||||
expect_prompt
|
||||
|
||||
# test interrupt multiple outputs
|
||||
send "range(100000) | d\n"
|
||||
expect "123"
|
||||
# ctrl-c
|
||||
send "\x03"
|
||||
expect "mp3> "
|
||||
expect_prompt
|
||||
|
||||
# test interrupt multiple outputs implicit display
|
||||
send "range(100000)\n"
|
||||
expect "123"
|
||||
# ctrl-c
|
||||
send "\x03"
|
||||
expect "mp3> "
|
||||
expect_prompt
|
||||
|
||||
# test interrupt big json output
|
||||
send "\[range(100000)\] | d\n"
|
||||
expect "123"
|
||||
# ctrl-c
|
||||
send "\x03"
|
||||
expect "mp3> "
|
||||
expect_prompt
|
||||
|
||||
# test interrupt big json output implicit display
|
||||
send "\[range(100000)\]\n"
|
||||
expect "123"
|
||||
# ctrl-c
|
||||
send "\x03"
|
||||
expect "mp3> "
|
||||
expect_prompt
|
||||
|
||||
# test exit
|
||||
# ctrl-d
|
@ -130,9 +130,11 @@ def _cli_eval_on_expr_error:
|
||||
| _cli_last_expr_error($err) as $_
|
||||
| (_error_str([input_filename // empty]) | printerrln)
|
||||
);
|
||||
# other expr error, should not happen, report and halt
|
||||
# other expr error, other errors then cancel should not happen, report and halt
|
||||
def _cli_eval_on_error:
|
||||
halt_error(_exit_code_expr_error);
|
||||
if .error | _is_context_canceled_error then (null | halt_error(_exit_code_expr_error))
|
||||
else halt_error(_exit_code_expr_error)
|
||||
end;
|
||||
# could not compile expr, report and halt
|
||||
def _cli_eval_on_compile_error:
|
||||
( .error
|
||||
|
Loading…
Reference in New Issue
Block a user