mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-28 22:03:12 +00:00
8bf8b10f68
See the changelog additions for user-visible changes. Since we enable/disable terminal protocols whenever we pass terminal ownership, tests can no longer run in parallel on the same terminal. For the same reason, readline shortcuts in the gdb REPL will not work anymore. As a remedy, use gdbserver, or lobby for CSI u support in libreadline. Add sleep to some tests, otherwise they fall (both in CI and locally). There are two weird failures on FreeBSD remaining, disable them for now https://github.com/fish-shell/fish-shell/pull/10359/checks?check_run_id=23330096362 Design and implementation borrows heavily from Kakoune. In future, we should try to implement more of the kitty progressive enhancements. Closes #10359
153 lines
3.4 KiB
Fish
153 lines
3.4 KiB
Fish
# RUN: %fish %s | %filter-ctrlseqs
|
||
|
||
printf "%d %d\n" 1 2 3
|
||
# CHECK: 1 2
|
||
# CHECK: 3 0
|
||
|
||
printf "Hello %d %i %f %F %g %G\n" 1 2 3 4 5 6
|
||
# CHECK: Hello 1 2 3.000000 4.000000 5 6
|
||
|
||
printf "%x %X %o %llu\n" 10 11 8 -1
|
||
# CHECK: a B 10 18446744073709551615
|
||
|
||
# %a has OS-dependent output - see #1139
|
||
#printf "%a %A\n" 14 15
|
||
|
||
printf "%c %s\n" a hello
|
||
# CHECK: a hello
|
||
|
||
printf "%c%c%c\n" hello … o
|
||
# CHECK: h…o
|
||
|
||
printf "%e %E\n" 5 6
|
||
# CHECK: 5.000000e+00 6.000000E+00
|
||
|
||
printf "%20d\n" 50
|
||
# CHECK: 50
|
||
|
||
printf "%-20d%d\n" 5 10
|
||
# CHECK: 5 10
|
||
|
||
printf "%*d\n" 10 100
|
||
# CHECK: 100
|
||
|
||
printf "%%\"\\\n"
|
||
printf "%s\b%s\n" x y
|
||
# CHECK: %"\nxy
|
||
|
||
printf "abc\rdef\n"
|
||
# CHECK: abc{{\r}}def
|
||
|
||
printf "Msg1\fMsg2\n"
|
||
# CHECK: Msg1{{\f}}Msg2
|
||
|
||
printf "foo\vbar\vbaz\n"
|
||
# CHECK: foobarbaz
|
||
|
||
printf "\111 \x50 \u0051 \U00000052"
|
||
echo
|
||
# CHECK: I P Q R
|
||
|
||
# \c escape means "stop printing"
|
||
printf 'a\cb'
|
||
echo
|
||
# CHECK: a
|
||
|
||
# Bogus printf specifier, should produce no stdout
|
||
printf "%5" 10 2>/dev/null
|
||
|
||
# Octal escapes produce literal bytes, not characters
|
||
# \376 is 0xFE
|
||
printf '\376' | display_bytes
|
||
# CHECK: 0000000 376
|
||
# CHECK: 0000001
|
||
|
||
# Verify that floating point conversions and output work correctly with
|
||
# different combinations of locales and floating point strings. See issue
|
||
# #3334. This starts by assuming an locale using english conventions.
|
||
printf '%e\n' "1.23" # should succeed, output should be 1.230000e+00
|
||
# CHECK: 1.230000e+00
|
||
|
||
printf '%e\n' "2,34" # should fail
|
||
# CHECK: 2.000000e+00
|
||
# CHECKERR: 2,34: value not completely converted (can't convert ',34')
|
||
|
||
# Verify long long ints are handled correctly. See issue #3352.
|
||
printf 'long hex1 %x\n' 498216206234
|
||
# CHECK: long hex1 73ffffff9a
|
||
printf 'long hex2 %X\n' 498216206234
|
||
# CHECK: long hex2 73FFFFFF9A
|
||
printf 'long hex3 %X\n' 0xABCDEF1234567890
|
||
# CHECK: long hex3 ABCDEF1234567890
|
||
printf 'long hex4 %X\n' 0xABCDEF12345678901
|
||
# CHECKERR: 0xABCDEF12345678901: Number out of range
|
||
printf 'long decimal %d\n' 498216206594
|
||
# CHECK: long hex4 long decimal 498216206594
|
||
printf 'long signed %d\n' -498216206595
|
||
# CHECK: long signed -498216206595
|
||
printf 'long signed to unsigned %u\n' -498216206596
|
||
# CHECK: long signed to unsigned 18446743575493345020
|
||
|
||
# Just check that we print no error for no arguments
|
||
printf
|
||
echo $status
|
||
# CHECK: 2
|
||
|
||
# Verify numeric conversion still happens even if it couldn't be fully converted
|
||
printf '%d\n' 15.1
|
||
# CHECK: 15
|
||
# CHECKERR: 15.1: value not completely converted (can't convert '.1')
|
||
echo $status
|
||
# CHECK: 1
|
||
|
||
printf '%d\n' 07
|
||
# CHECK: 7
|
||
echo $status
|
||
# CHECK: 0
|
||
printf '%d\n' 08
|
||
# CHECK: 0
|
||
# CHECKERR: 08: value not completely converted (can't convert '8')
|
||
# CHECKERR: Hint: a leading '0' without an 'x' indicates an octal number
|
||
echo $status
|
||
# CHECK: 1
|
||
|
||
printf '%d\n' 0f
|
||
# CHECK: 0
|
||
# CHECKERR: 0f: value not completely converted (can't convert 'f')
|
||
# CHECKERR: Hint: a leading '0' without an 'x' indicates an octal number
|
||
echo $status
|
||
# CHECK: 1
|
||
|
||
printf '%d\n' 0g
|
||
# CHECK: 0
|
||
# CHECKERR: 0g: value not completely converted (can't convert 'g')
|
||
echo $status
|
||
# CHECK: 1
|
||
|
||
printf '%f\n' 0x2
|
||
# CHECK: 2.000000
|
||
|
||
printf '%f\n' 0x2p3
|
||
# CHECK: 16.000000
|
||
|
||
printf '%.1f\n' -0X1.5P8
|
||
# CHECK: -336.0
|
||
|
||
# Test that we ignore options
|
||
printf -a
|
||
printf --foo
|
||
# CHECK: -a--foo
|
||
echo
|
||
|
||
set -l helpvar --help
|
||
printf $helpvar
|
||
echo
|
||
# CHECK: --help
|
||
|
||
printf --help
|
||
echo
|
||
# CHECK: --help
|
||
|
||
# This is how mc likes to encode the directory we should cd to.
|
||
printf '%b\n' '\0057foo\0057bar\0057'
|
||
# CHECK: /foo/bar/
|