Home | History | Annotate | Download | only in tests
      1 #!/bin/bash
      2 
      3 # Copyright 2013 Robin Mittal <robinmittal.it (at] gmail.com>
      4 # Copyright 2013 Divya Kothari <divya.s.kothari (at] gmail.com>
      5 
      6 [ -f testing.sh ] && . testing.sh
      7 
      8 #testing "name" "command" "result" "infile" "stdin"
      9 
     10 # Disable shell builtin
     11 PRINTF="$(which printf)"
     12 
     13 testing "text" "$PRINTF TEXT" "TEXT" "" ""
     14 testing "escapes" "$PRINTF 'one\ntwo\n\v\t\r\f\e\b\athree'" \
     15   "one\ntwo\n\v\t\r\f\e\b\athree" "" ""
     16 testing "%b escapes" "$PRINTF %b 'one\ntwo\n\v\t\r\f\e\b\athree'" \
     17   "one\ntwo\n\v\t\r\f\e\b\athree" "" ""
     18 testing "null" "$PRINTF 'x\0y' | od -An -tx1" ' 78 00 79\n' "" ""
     19 testing "trailing slash" "$PRINTF 'abc\'" 'abc\' "" ""
     20 testing "octal" "$PRINTF ' \1\002\429\045x'" ' \001\002"9%x' "" ""
     21 testing "not octal" "$PRINTF '\9'" '\9' "" ""
     22 testing "hex" "$PRINTF 'A\x1b\x2B\x3Q\xa' | od -An -tx1" \
     23   ' 41 1b 2b 03 51 0a\n' "" ""
     24 testing "%x" "$PRINTF '%x\n' 0x2a" "2a\n" "" ""
     25 
     26 testing "%d 42" "$PRINTF %d 42" "42" "" ""
     27 testing "%d 0x2a" "$PRINTF %d 0x2a" "42" "" ""
     28 testing "%d 052" "$PRINTF %d 052" "42" "" ""
     29 
     30 testing "%s width precision" \
     31   "$PRINTF '%3s,%.3s,%10s,%10.3s' abcde fghij klmno pqrst" \
     32   "abcde,fgh,     klmno,       pqr" "" ""
     33 
     34 # posix: "The format operand shall be reused as often as necessary to satisfy
     35 # the argument operands."
     36 
     37 testing "extra args" "$PRINTF 'abc%s!%ddef\n' X 42 ARG 36" \
     38 	"abcX!42def\nabcARG!36def\n" "" ""
     39 
     40 testing "'%3c'" "$PRINTF '%3c' x" "  x" "" ""
     41 testing "'%-3c'" "$PRINTF '%-3c' x" "x  " "" ""
     42 testing "'%+d'" "$PRINTF '%+d' 5" "+5" "" ""
     43 
     44 
     45 testing "'%5d%4d' 1 21 321 4321 54321" \
     46   "$PRINTF '%5d%4d' 1 21 321 4321 54321" "    1  21  321432154321   0" "" ""
     47 testing "'%c %c' 78 79" "$PRINTF '%c %c' 78 79" "7 7" "" ""
     48 testing "'%d %d' 78 79" "$PRINTF '%d %d' 78 79" "78 79" "" ""
     49 testing "'%f %f' 78 79" "$PRINTF '%f %f' 78 79" \
     50   "78.000000 79.000000" "" ""
     51 testing "'f f' 78 79" "$PRINTF 'f f' 78 79 2>/dev/null" "f f" "" ""
     52 testing "'%i %i' 78 79" "$PRINTF '%i %i' 78 79" "78 79" "" ""
     53 testing "'%o %o' 78 79" "$PRINTF '%o %o' 78 79" "116 117" "" ""
     54 testing "'%u %u' 78 79" "$PRINTF '%u %u' 78 79" "78 79" "" ""
     55 testing "'%u %u' -1 -2" "$PRINTF '%u %u' -1 -2" \
     56   "18446744073709551615 18446744073709551614" "" ""
     57 testing "'%x %X' 78 79" "$PRINTF '%x %X' 78 79" "4e 4F" "" ""
     58 testing "'%g %G' 78 79" "$PRINTF '%g %G' 78 79" "78 79" "" ""
     59 testing "'%s %s' 78 79" "$PRINTF '%s %s' 78 79" "78 79" "" ""
     60 
     61 testing "%.s acts like %.0s" "$PRINTF %.s_ 1 2 3 4 5" "_____" "" ""
     62 testing "corner case" "$PRINTF '\\8'" '\8' '' ''
     63 
     64 # The posix spec explicitly specifies inconsistent behavior,
     65 # so treating the \0066 in %b like the \0066 not in %b is wrong because posix.
     66 testing "printf posix inconsistency" "$PRINTF '\\0066-%b' '\\0066'" "\x066-6" \
     67   "" ""
     68 
     69 testing "printf \x" "$PRINTF 'A\x1b\x2B\x3Q\xa' | od -An -tx1" \
     70   " 41 1b 2b 03 51 0a\n" "" ""
     71