fish-shell/tests
ridiculousfish 6f682c8405 Fill io_buffer via background thread
This is a large change to how io_buffers are filled. The essential problem
comes about with code like (example):

    echo ( /bin/pwd )

The output of /bin/pwd must go to fish, not the tty. To arrange for this,
fish does the following:

1. Invoke pipe() to create a pipe.
2. Add an io_bufferfill_t redirection that owns the write end of the pipe.
3. After fork (or equiv), call dup2() to replace pwd's stdout with this  pipe.

Now when /bin/pwd writes, it will send output to the read end of the pipe.
But who reads it?

Prior to this fix, fish would do the following in a loop:

1. select() on the pipe with a 10 msec timeout
2. waitpid(WNOHANG) on the pwd proc

This polling is ugly and confusing and is what is replaced here.

With this new change, fish now reads from the pipe via a background thread:

1. Spawn a background pthread, which select()s on the pipe's read end with
a long (100 msec) timeout.
2. In the foreground, waitpid() (allowing hanging) on the pwd proc.

The big win here is a major simplification of job_t::continue_job() since
it no longer has to worry about filling buffers. This will make things
easier for concurrent execution.

It may not be obvious why the background thread still needs a poll (100 msec).
The answer is for cases where the write end of the fd escapes, in particular
background processes invoked inside command substitutions. psub is perhaps
the only important case of this (other shells typically just hang here).
2019-02-03 01:58:49 -08:00
..
invocation Fix invocation tests. 2019-01-28 20:44:07 -08:00
test_functions Don't resolve symlinks with cd 2018-10-06 17:03:18 -07:00
.gitignore tweak gitignore rules for *tests* directory 2017-02-20 20:29:43 -08:00
__fish_complete_directories.err improve __fish_complete_directories function 2017-04-11 13:45:53 -07:00
__fish_complete_directories.in Fix __fish_complete_suffix behavior per __fish_complete_directories test 2018-05-20 14:35:52 -05:00
__fish_complete_directories.out improve __fish_complete_directories function 2017-04-11 13:45:53 -07:00
__fish_contains_opt.err another __fish_sgrep replacement 2017-04-13 23:14:36 -07:00
__fish_contains_opt.in another __fish_sgrep replacement 2017-04-13 23:14:36 -07:00
__fish_contains_opt.out another __fish_sgrep replacement 2017-04-13 23:14:36 -07:00
__fish_not_contain_opt.err fix typo in unit test 2017-06-09 13:35:00 -07:00
__fish_not_contain_opt.in another __fish_sgrep replacement 2017-04-13 23:14:36 -07:00
__fish_not_contain_opt.out another __fish_sgrep replacement 2017-04-13 23:14:36 -07:00
abbr.err use new logmsg and set --show in tests 2017-08-03 21:25:20 -07:00
abbr.in the | tee /dev/stderr trick doesn't work on linux 2017-08-03 15:44:58 -07:00
abbr.out use new logmsg and set --show in tests 2017-08-03 21:25:20 -07:00
alias.err use new logmsg and set --show in tests 2017-08-04 11:02:11 -07:00
alias.in use new logmsg and set --show in tests 2017-08-04 11:02:11 -07:00
alias.out use new logmsg and set --show in tests 2017-08-04 11:02:11 -07:00
andandoror.err Add support for ! as an analog to 'not' 2018-03-05 14:04:49 -08:00
andandoror.in Add support for ! as an analog to 'not' 2018-03-05 14:04:49 -08:00
andandoror.out Add support for ! as an analog to 'not' 2018-03-05 14:04:49 -08:00
argparse.err Hoist for loop control var to enclosing scope (#4376) 2017-09-08 21:14:26 -07:00
argparse.in Hoist for loop control var to enclosing scope (#4376) 2017-09-08 21:14:26 -07:00
argparse.out use new logmsg and set --show in tests 2017-08-04 11:39:43 -07:00
bind.err Add separation of "preset" bindings 2018-09-30 16:54:56 +02:00
bind.expect Add till/repeat/reverse jump bindings 2018-08-18 14:42:29 -07:00
bind.expect.err Reset fish_bind_mode when changing fish_key_bindings 2014-09-18 15:46:17 -07:00
bind.expect.out Add till/repeat/reverse jump bindings 2018-08-18 14:42:29 -07:00
bind.in Add separation of "preset" bindings 2018-09-30 16:54:56 +02:00
bind.out Add separation of "preset" bindings 2018-09-30 16:54:56 +02:00
cd.err Correctly inherit a virtual PWD 2019-01-22 13:34:04 -08:00
cd.in Correctly remove the test directory again in cd test 2019-01-22 14:07:25 -08:00
cd.out Correctly inherit a virtual PWD 2019-01-22 13:34:04 -08:00
commandline.expect Stop unescaping strings with commandline -b 2016-01-10 17:25:22 -08:00
commandline.expect.err Stop unescaping strings with commandline -b 2016-01-10 17:25:22 -08:00
commandline.expect.out Stop unescaping strings with commandline -b 2016-01-10 17:25:22 -08:00
complete.err Teach alias about wrap argument injection 2018-02-27 14:12:44 -08:00
complete.in Test that things can't wrap themselves 2019-01-17 16:46:15 +01:00
complete.out Test that things can't wrap themselves 2019-01-17 16:46:15 +01:00
count.err Fill io_buffer via background thread 2019-02-03 01:58:49 -08:00
count.in Fill io_buffer via background thread 2019-02-03 01:58:49 -08:00
count.out Fill io_buffer via background thread 2019-02-03 01:58:49 -08:00
exit.expect Rename $pid (née %self) to $fish_pid 2018-03-24 11:54:27 -05:00
exit.expect.err correct handling of SIGHUP by interactive fish 2017-01-24 15:24:13 -08:00
exit.expect.out correct handling of SIGHUP by interactive fish 2017-01-24 15:24:13 -08:00
expansion.err Revert "Update tests" 2018-11-28 06:27:21 -08:00
expansion.in Allow nested square brackets again 2018-11-22 17:57:27 -08:00
expansion.out Allow nested square brackets again 2018-11-22 17:57:27 -08:00
fish_opt.err use new logmsg and set --show in tests 2017-08-04 12:01:16 -07:00
fish_opt.in use new logmsg and set --show in tests 2017-08-04 12:01:16 -07:00
fish_opt.out use new logmsg and set --show in tests 2017-08-04 12:01:16 -07:00
fkr.expect fix race condition in fkr test 2016-12-19 17:44:54 -08:00
fkr.expect.err don't allow f-k-r to run if stdin/stdout not a tty 2016-06-26 21:51:00 -07:00
fkr.expect.out f-k-r should use the user's locale 2016-06-30 20:49:56 -07:00
function.err functions -q: Return false without an argument 2019-02-01 18:34:45 +01:00
function.in functions -q: Return false without an argument 2019-02-01 18:34:45 +01:00
function.out functions -q: Return false without an argument 2019-02-01 18:34:45 +01:00
functions.err implement means to learn about a functions source 2017-01-20 21:48:41 -08:00
functions.in fix tests 2018-11-13 21:54:41 +08:00
functions.out implement means to learn about a functions source 2017-01-20 21:48:41 -08:00
gen_output.fish Remove caret redirection 2018-04-01 13:48:21 -07:00
generic.expect Move bare source test to expect 2018-12-11 18:23:37 +01:00
generic.expect.err Allow U+F8FF to be typed 2014-09-21 21:03:44 -07:00
generic.expect.out Allow U+F8FF to be typed 2014-09-21 21:03:44 -07:00
histfile.expect histfile tests: tweak expect commands to avoid crash on 32-bit platforms 2019-01-05 16:03:15 +08:00
histfile.expect.err Make the history session configurable 2017-06-30 17:13:02 -07:00
histfile.expect.out Make the history session configurable 2017-06-30 17:13:02 -07:00
histfile.expect.status Make the history session configurable 2017-06-30 17:13:02 -07:00
history.err modify read to require at least one var 2017-07-20 13:07:30 -07:00
history.expect history expect tests: fix the tests. 2018-11-20 05:26:54 -08:00
history.expect.err correct handling of history args 2016-07-20 21:18:48 -07:00
history.expect.out mplement history search glob searches 2017-09-15 13:43:45 -07:00
history.in update history to use argparse 2017-07-16 15:13:39 -07:00
history.out make it hard to use history command incorrectly 2016-09-09 19:23:06 -07:00
history_sample_bash improve bash history importing 2017-05-20 21:03:31 -07:00
history_sample_corrupt1 Improve history robustness against corrupt files 2014-07-29 14:42:03 -07:00
history_sample_fish_1_x Support for importing fish 1.x's history and format, and also bash 2012-06-15 16:24:05 -07:00
history_sample_fish_2_0 Support for importing fish 1.x's history and format, and also bash 2012-06-15 16:24:05 -07:00
indent.err Implement tests for fish_indent 2014-12-23 15:46:47 -08:00
indent.in Teach fish_indent about escaped newlines 2018-05-07 21:40:53 -07:00
indent.out Teach fish_indent about escaped newlines 2018-05-07 21:40:53 -07:00
interactive.config remove some uses of $IFS 2017-07-25 12:44:26 -07:00
interactive.expect.rc don't allow f-k-r to run if stdin/stdout not a tty 2016-06-26 21:51:00 -07:00
interactive.fish interactive tests: exit quietly if expect not available 2019-01-28 21:51:57 +08:00
invocation.sh tests/invocation.sh: Use a formatting string with printf 2019-01-23 22:53:53 +01:00
jobs.err split builtin bg into its own module 2017-06-16 21:01:56 -07:00
jobs.in Remove caret redirection 2018-04-01 13:48:21 -07:00
jobs.out Add tests for jobs -q 2018-03-04 15:33:36 -06:00
line-continuation.err fix handling of line continuation in keywords 2016-04-08 21:05:46 -07:00
line-continuation.in fix handling of line continuation in keywords 2016-04-08 21:05:46 -07:00
line-continuation.out fix handling of line continuation in keywords 2016-04-08 21:05:46 -07:00
locale.err remove unset vars from the environment 2016-06-15 22:10:11 -07:00
locale.in remove dependency on xxd 2017-01-31 22:10:53 -08:00
locale.out remove dependency on xxd 2017-01-31 22:10:53 -08:00
math.err Add 'round' function to builtin math 2018-12-01 13:25:00 -08:00
math.in Add 'round' function to builtin math 2018-12-01 13:25:00 -08:00
math.out Add 'round' function to builtin math 2018-12-01 13:25:00 -08:00
parameter_expansion.err Add tests for new parameter expansion features 2018-03-12 07:04:05 -05:00
parameter_expansion.in Fix parameter expansion tests on Travis macOS 2018-03-12 07:50:37 -05:00
parameter_expansion.out Add tests for new parameter expansion features 2018-03-12 07:04:05 -05:00
printf.err use a consistent ERANGE message 2017-02-20 18:43:13 -08:00
printf.in tests/printf: Skip locale test on musl 2019-01-01 14:52:26 +01:00
printf.out correct printf handling of %x with long ints 2017-02-20 17:58:08 -08:00
psub.err return to psub --file being the default 2017-07-17 14:33:51 -07:00
psub.in tests/psub: Don't use grep -o and diff -q 2019-01-03 11:05:03 +01:00
psub.out return to psub --file being the default 2017-07-17 14:33:51 -07:00
random.err implement an improved random command 2016-12-20 16:46:33 -08:00
random.in implement an improved random command 2016-12-20 16:46:33 -08:00
random.out implement an improved random command 2016-12-20 16:46:33 -08:00
read.err Fix unit tests for read to stdout behavior 2017-10-10 08:34:50 +02:00
read.expect tests/read.expect: Skip /dev/stdin if it doesn't exist 2019-01-01 14:52:26 +01:00
read.expect.err Add a test harness for interactive behavior 2014-09-07 23:56:59 -07:00
read.expect.out Fix read tests to reflect updated arguments 2018-03-09 12:19:20 -06:00
read.in tests/read: Set TERM=xterm explicitly 2019-01-01 14:52:26 +01:00
read.out Correct read behavior for unset values and update tests accordingly 2018-04-17 21:34:22 -05:00
realpath.err Revert "wrealpath: Fail for file/something" 2018-11-19 09:12:26 +01:00
realpath.in Revert "wrealpath: Fail for file/something" 2018-11-19 09:12:26 +01:00
realpath.out make fish's realpath compatible with GNU realpath 2016-10-04 20:19:44 -07:00
set.err Test setting readonly variables 2018-11-18 22:33:02 +01:00
set.in Test setting readonly variables 2018-11-18 22:33:02 +01:00
set.out Test setting readonly variables 2018-11-18 22:33:02 +01:00
setenv.err fix setenv and add unit tests 2017-04-05 15:31:13 -07:00
setenv.in fix setenv and add unit tests 2017-04-05 15:31:13 -07:00
setenv.out fix setenv and add unit tests 2017-04-05 15:31:13 -07:00
signals.expect Fix $pid -> $fish_pid in signals.expect 2018-03-24 12:15:58 -05:00
signals.expect.err correct handling of SIGHUP by interactive fish 2017-01-24 15:24:13 -08:00
signals.expect.out correct handling of SIGHUP by interactive fish 2017-01-24 15:24:13 -08:00
status.err Revert "Update tests" 2018-11-28 06:27:21 -08:00
status.in Add status subcomannds: features and test-feature 2018-05-06 11:20:14 -07:00
status.out Add a qmark-noglob feature flag 2018-05-06 11:20:15 -07:00
string.err Implement PCRE2 escaping 2018-11-15 12:00:56 -06:00
string.in Rename string escape --style=pcre2 to string escape --style=regex 2018-11-16 20:22:06 -06:00
string.out Implement PCRE2 escaping 2018-11-15 12:00:56 -06:00
test.fish Report duration of each test 2018-09-03 14:13:31 -07:00
test1.err Also set the read-only flag for non-electric vars 2019-01-18 19:27:41 +01:00
test1.in Also set the read-only flag for non-electric vars 2019-01-18 19:27:41 +01:00
test1.out Also set the read-only flag for non-electric vars 2019-01-18 19:27:41 +01:00
test2.err Add subdirectories 2005-09-20 23:31:55 +10:00
test2.in remove trialing spaces #2 2010-09-18 10:18:26 +08:00
test2.out Add subdirectories 2005-09-20 23:31:55 +10:00
test3.err Allow setting universal path variables 2018-10-27 01:05:00 -07:00
test3.in Correctly split path environment variables about colons 2018-10-27 15:20:32 -07:00
test3.out Correctly split path environment variables about colons 2018-10-27 15:20:32 -07:00
test4.err use new logmsg and set --show in tests 2017-08-04 13:36:51 -07:00
test4.in use new logmsg and set --show in tests 2017-08-04 13:36:51 -07:00
test4.out builtin_test: don't exit 1 for eval errors, add tests for big args 2018-12-15 22:05:19 -08:00
test5.err Revert "Update tests" 2018-11-28 06:27:21 -08:00
test5.in Remove support for the ? wildcard 2018-03-31 16:54:50 -07:00
test5.out make testing on local servers hermetic 2016-02-25 17:16:36 -08:00
test6.err allow complete -d '' 2016-11-17 14:53:50 -08:00
test6.in Remove caret redirection 2018-04-01 13:48:21 -07:00
test6.out Add a new completion test for optional arguments 2016-12-21 15:46:46 -08:00
test7.err Add a test case for switch error code (issue #161) 2012-06-24 13:43:44 -07:00
test7.in Update tests for new type behavior 2014-07-13 19:11:29 -07:00
test7.out Finish rewriting detect_errors to use new parser. All tests now pass (!) 2013-12-12 18:18:07 -08:00
test8.err Execute the conditions of if and while statements outside of their block 2018-03-31 14:57:24 -07:00
test8.in Execute the conditions of if and while statements outside of their block 2018-03-31 14:57:24 -07:00
test8.out Execute the conditions of if and while statements outside of their block 2018-03-31 14:57:24 -07:00
test9.err Error message prefix: Prefix the message, not the context 2017-04-11 20:00:29 -07:00
test9.in tests/test9: Guard locale 2019-01-01 14:52:26 +01:00
test9.out return to psub --file being the default 2017-07-17 14:33:51 -07:00
test_cmdsub.err Revert "Update tests" 2018-11-28 06:27:21 -08:00
test_cmdsub.in Rename FISH_READ_BYTE_LIMIT to fish_read_limit 2017-10-14 08:33:02 -07:00
test_cmdsub.out fix set --show of semi-empty var 2017-08-16 13:39:48 -07:00
test_util.fish remove some uses of $IFS 2017-07-25 12:44:26 -07:00
top.out Don't leave is_block in bad state after bad redirection 2014-09-30 17:06:56 -07:00
umask.err fix umask handling of symbolic modes 2017-03-28 16:28:24 -07:00
umask.in fix umask handling of symbolic modes 2017-03-28 16:28:24 -07:00
umask.out fix umask handling of symbolic modes 2017-03-28 16:28:24 -07:00
vars_as_commands.err Revert "Update tests" 2018-11-28 06:27:21 -08:00
vars_as_commands.in Allow variables in commands 2018-09-01 12:00:56 -07:00
vars_as_commands.out Allow variables in commands 2018-09-01 12:00:56 -07:00
wait.expect Speed up wait.expect test 2018-12-31 19:36:08 -06:00
wait.expect.err add wait command 2017-11-16 10:48:21 -08:00
wait.expect.out add wait command 2017-11-16 10:48:21 -08:00
while.err Make while loops evaluate to the last executed command status 2019-01-20 16:37:20 -08:00
while.in Make while loops evaluate to the last executed command status 2019-01-20 16:37:20 -08:00
while.out Make while loops evaluate to the last executed command status 2019-01-20 16:37:20 -08:00
zero_based_array.err Revert "Update tests" 2018-11-28 06:27:21 -08:00
zero_based_array.in Correct misdetection of [001] as literal zero index 2018-10-15 14:11:37 -05:00
zero_based_array.out Correct misdetection of [001] as literal zero index 2018-10-15 14:11:37 -05:00