# 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