mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-24 10:46:59 +08:00
44cfe3e340
Fixes #3797
180 lines
3.8 KiB
Fish
180 lines
3.8 KiB
Fish
#
|
||
#Test aliases, loops, conditionals and some basic elements
|
||
#
|
||
|
||
for i in 1 2 #Comment on same line as command
|
||
#Comment inside loop
|
||
for j in a b
|
||
#Double loop
|
||
echo $i$j
|
||
end;
|
||
end
|
||
|
||
# Bracket expansion
|
||
echo x-{1}
|
||
echo x-{1,2}
|
||
echo foo-{1,2{3,4}}
|
||
|
||
# Escaped newlines
|
||
echo foo\ bar
|
||
echo foo\
|
||
bar
|
||
echo "foo\
|
||
bar"
|
||
echo 'foo\
|
||
bar'
|
||
|
||
for i in \
|
||
a b c
|
||
echo $i
|
||
end
|
||
|
||
|
||
# Simple alias tests
|
||
|
||
function foo
|
||
echo >../test/temp/fish_foo.txt $argv
|
||
end
|
||
|
||
foo hello
|
||
|
||
cat ../test/temp/fish_foo.txt |read foo
|
||
|
||
if test $foo = hello;
|
||
echo Test 2 pass
|
||
else
|
||
echo Test 2 fail
|
||
end
|
||
|
||
function foo
|
||
printf 'Test %s' $1; echo ' pass'
|
||
end
|
||
|
||
foo 3
|
||
|
||
for i in Test for continue break and switch builtins problems;
|
||
switch $i
|
||
case Test
|
||
printf "%s " $i
|
||
case "f??"
|
||
printf "%s " 3
|
||
case "c*"
|
||
echo pass
|
||
case break
|
||
continue
|
||
echo fail
|
||
case and
|
||
break
|
||
echo fail
|
||
case "*"
|
||
echo fail
|
||
end
|
||
end
|
||
|
||
set -l sta
|
||
if eval true
|
||
if eval false
|
||
set sta fail
|
||
else
|
||
set sta pass
|
||
end
|
||
else
|
||
set sta fail
|
||
end
|
||
echo Test 4 $sta
|
||
|
||
# Ensure eval doesn't unnecessarily mess with the exit status
|
||
function empty_func ; end
|
||
false ; eval empty_func ; echo $status
|
||
true ; eval empty_func ; echo $status
|
||
|
||
function test_builtin_status
|
||
return 1
|
||
end
|
||
test_builtin_status
|
||
if [ $status -eq 1 ]
|
||
set sta pass
|
||
else
|
||
set sta fail
|
||
end
|
||
echo Test 5 $sta
|
||
|
||
# Verify that we can turn stderr into stdout and then pipe it.
|
||
# Note that the order here seems unspecified - 'errput' appears before 'output', why?
|
||
echo Test redirections
|
||
begin ; echo output ; echo errput 1>&2 ; end 2>&1 | tee ../test/temp/tee_test.txt ; cat ../test/temp/tee_test.txt
|
||
|
||
# Test that trailing ^ doesn't trigger redirection, see #1873
|
||
echo caret_no_redirect 12345^
|
||
|
||
# Verify that we can pipe something other than stdout
|
||
# The first line should be printed, since we output to stdout but pipe stderr to /dev/null
|
||
# The second line should not be printed, since we output to stderr and pipe it to /dev/null
|
||
begin ; echo is_stdout ; end 2>| cat > /dev/null
|
||
begin ; echo is_stderr 1>&2 ; end 2>| cat > /dev/null
|
||
|
||
# echo tests
|
||
|
||
echo 'abc\ndef'
|
||
echo -e 'abc\ndef'
|
||
echo -e 'abc\zdef'
|
||
echo -e 'abc\41def'
|
||
echo -e 'abc\041def'
|
||
echo -e 'abc\121def'
|
||
echo -e 'abc\1212def'
|
||
echo -e 'abc\cdef' # won't output a newline!
|
||
echo ''
|
||
echo -
|
||
|
||
echo -ne '\376' | display_bytes
|
||
|
||
echo -e Catch your breath
|
||
|
||
echo -e 'abc\x21def'
|
||
echo -e 'abc\x211def'
|
||
|
||
# Verify that pipes don’t conflict with fd redirections
|
||
# This code is very similar to eval. We go over a bunch of fads
|
||
# to make it likely that we will nominally conflict with a pipe
|
||
# fish is supposed to detect this case and dup the pipe to something else
|
||
echo "/bin/echo pipe 3 <&3 3<&-" | source 3<&0
|
||
echo "/bin/echo pipe 4 <&4 4<&-" | source 4<&0
|
||
echo "/bin/echo pipe 5 <&5 5<&-" | source 5<&0
|
||
echo "/bin/echo pipe 6 <&6 6<&-" | source 6<&0
|
||
echo "/bin/echo pipe 7 <&7 7<&-" | source 7<&0
|
||
echo "/bin/echo pipe 8 <&8 8<&-" | source 8<&0
|
||
echo "/bin/echo pipe 9 <&9 9<&-" | source 9<&0
|
||
echo "/bin/echo pipe 10 <&10 10<&-" | source 10<&0
|
||
echo "/bin/echo pipe 11 <&11 11<&-" | source 11<&0
|
||
echo "/bin/echo pipe 12 <&12 12<&-" | source 12<&0
|
||
|
||
|
||
# Make sure while loops don't run forever with no-exec (#1543)
|
||
echo "Checking for infinite loops in no-execute"
|
||
echo "while true; end" | ../test/root/bin/fish --no-execute
|
||
|
||
# Comments allowed in between lines (#1987)
|
||
echo before comment \
|
||
# comment
|
||
after comment
|
||
|
||
# Backslashes are part of comments and do not join lines (#1255)
|
||
# This should execute false, not echo it
|
||
echo -n # comment\
|
||
false
|
||
|
||
function always_fails
|
||
if true
|
||
return 1
|
||
end
|
||
end
|
||
|
||
# Verify $argv set correctly in sourced scripts.
|
||
# Issue #139
|
||
echo 'echo "source argv {$argv}"' | source
|
||
echo 'echo "source argv {$argv}"' | source -
|
||
echo 'echo "source argv {$argv}"' | source - abc
|
||
echo 'echo "source argv {$argv}"' | source - abc def
|
||
|
||
always_fails ; echo $status
|