mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-28 13:53:10 +00:00
472fc3ec10
I forgot `stat` is non-portable. There's no great way to portably get a machine-readable representation of stat(2) for a file. I don't want to ship our own lstat(2) wrapper executable just for this test and don't want to fork out to python or perl for this either - I just wanted to get the tests to pass under WSL :'( Anyway, just give up and make it skip just for WSL. If another OS fails this test in the future, the comments and existing workaround will make it easy to figure out what the problem is and what needs to be done. We'll cross that bridge when we get there.
104 lines
2.9 KiB
Fish
104 lines
2.9 KiB
Fish
# RUN: %fish %s
|
|
#
|
|
# Tests for the `test` builtin, aka `[`.
|
|
test inf -gt 0
|
|
# CHECKERR: Number is infinite
|
|
# CHECKERR: {{.*}}test.fish (line {{\d+}}):
|
|
# CHECKERR: test inf -gt 0
|
|
# CHECKERR: ^
|
|
|
|
test 5 -eq nan
|
|
# CHECKERR: Not a number
|
|
# CHECKERR: {{.*}}test.fish (line {{\d+}}):
|
|
# CHECKERR: test 5 -eq nan
|
|
# CHECKERR: ^
|
|
|
|
test -z nan || echo nan is fine
|
|
# CHECK: nan is fine
|
|
|
|
test 1 =
|
|
# CHECKERR: test: Missing argument at index 3
|
|
# CHECKERR: 1 =
|
|
# CHECKERR: ^
|
|
# CHECKERR: {{.*}}test.fish (line {{\d+}}):
|
|
# CHECKERR: test 1 =
|
|
# CHECKERR: ^
|
|
|
|
test 1 = 2 and echo true or echo false
|
|
# CHECKERR: test: Expected a combining operator like '-a' at index 4
|
|
# CHECKERR: 1 = 2 and echo true or echo false
|
|
# CHECKERR: ^
|
|
# CHECKERR: {{.*}}test.fish (line {{\d+}}):
|
|
# CHECKERR: test 1 = 2 and echo true or echo false
|
|
# CHECKERR: ^
|
|
|
|
function t
|
|
test $argv[1] -eq 5
|
|
end
|
|
|
|
t foo
|
|
# CHECKERR: Argument is not a number: 'foo'
|
|
# CHECKERR: {{.*}}test.fish (line {{\d+}}):
|
|
# CHECKERR: test $argv[1] -eq 5
|
|
# CHECKERR: ^
|
|
# CHECKERR: in function 't' with arguments 'foo'
|
|
# CHECKERR: called on line {{\d+}} of file {{.*}}test.fish
|
|
|
|
t 5,2
|
|
# CHECKERR: Integer 5 in '5,2' followed by non-digit
|
|
# CHECKERR: {{.*}}test.fish (line {{\d+}}):
|
|
# CHECKERR: test $argv[1] -eq 5
|
|
# CHECKERR: ^
|
|
# CHECKERR: in function 't' with arguments '5,2'
|
|
# CHECKERR: called on line {{\d+}} of file {{.*}}test.fish
|
|
|
|
test -x /usr/bin/go /usr/local/bin/go
|
|
# CHECKERR: test: unexpected argument at index 3: '/usr/local/bin/go'
|
|
# CHECKERR: -x /usr/bin/go /usr/local/bin/go
|
|
# CHECKERR: {{ \^}}
|
|
# CHECKERR: {{.*}}test.fish (line {{\d+}}):
|
|
# CHECKERR: test -x /usr/bin/go /usr/local/bin/go
|
|
# CHECKERR: ^
|
|
|
|
# Test `test` date comparison logic for dates older than epoch
|
|
touch -m -t 197001010000.00 epoch
|
|
touch -m -t 190212112045.40 old
|
|
touch -m -t 190112112040.39 oldest
|
|
touch -m -t 203801080314.07 newest
|
|
|
|
# XXX: This workaround only works w/ GNU `stat`. There is no great portable way of getting mtime.
|
|
if string match -qr -- "GNU coreutils" "$(stat --version 2>/dev/null)" && \
|
|
string match -qr -- '^(0|'(stat -c %Y epoch)')$' (stat -c %Y oldest)
|
|
# Filesystem does not support dates older than epoch, so silently skip this test - there's no
|
|
# guarantee that an FS supports pre-epoch timestamps and lxfs (virtual WSLv1 fs) doesn't.
|
|
else
|
|
test oldest -ot old || echo bad ot 1
|
|
test newest -nt old || echo bad nt
|
|
test old -ot oldest && echo bad ot 2
|
|
test epoch -nt newest && echo bad nt
|
|
end
|
|
|
|
for file in epoch old oldest newest
|
|
test $file -nt nonexist && echo good nt || echo $file: bad nt;
|
|
end
|
|
#CHECK: good nt
|
|
#CHECK: good nt
|
|
#CHECK: good nt
|
|
#CHECK: good nt
|
|
|
|
for file in epoch old oldest newest
|
|
test nonexist -ot $file && echo good ot || echo $file: bad ot;
|
|
end
|
|
#CHECK: good ot
|
|
#CHECK: good ot
|
|
#CHECK: good ot
|
|
#CHECK: good ot
|
|
|
|
ln -sf epoch epochlink
|
|
test epoch -ef epochlink && echo good ef || echo bad ef
|
|
#CHECK: good ef
|
|
|
|
test epoch -ef old && echo bad ef || echo good ef
|
|
#CHECK: good ef
|
|
|
|
rm -f epoch old oldest newest epochlink
|