fish-shell/tests/test1.in

177 lines
3.7 KiB
Plaintext
Raw Normal View History

#
2010-11-23 23:05:21 +08:00
#Test aliases, loops, conditionals and some basic elements
#
for i in 1 2 #Comment on same line as command
2010-09-18 10:18:26 +08:00
#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
2010-09-18 10:18:26 +08:00
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
2010-09-18 10:18:26 +08:00
function foo
printf 'Test %s' $1; echo ' pass'
end
2010-09-18 10:18:26 +08:00
foo 3
for i in Test for continue break and switch builtins problems;
switch $i
case Test
2010-09-18 10:18:26 +08:00
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
2010-11-23 23:05:21 +08:00
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
2010-11-24 00:35:56 +08:00
2015-01-18 07:22:37 +08:00
# 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
2010-11-24 00:35:56 +08:00
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
# 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' | xxd -p
echo -e Catch your breath
echo -e 'abc\x21def'
echo -e 'abc\x211def'
# Verify that pipes dont 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
2015-04-06 14:47:04 +08:00
# 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