Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
| 3 | # Copyright 2013 Robin Mittal <robinmittal.it@gmail.com> |
| 4 | # Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com> |
| 5 | |
| 6 | [ -f testing.sh ] && . testing.sh |
| 7 | |
| 8 | #testing "name" "command" "result" "infile" "stdin" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 9 | |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 10 | # Disable shell builtin |
| 11 | PRINTF="$(which printf)" |
Rob Landley | cc39d95 | 2015-01-06 12:07:20 -0600 | [diff] [blame] | 12 | |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 13 | testing "text" "$PRINTF TEXT" "TEXT" "" "" |
| 14 | testing "escapes" "$PRINTF 'one\ntwo\n\v\t\r\f\e\b\athree'" \ |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 15 | "one\ntwo\n\v\t\r\f\e\b\athree" "" "" |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 16 | testing "%b escapes" "$PRINTF %b 'one\ntwo\n\v\t\r\f\e\b\athree'" \ |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 17 | "one\ntwo\n\v\t\r\f\e\b\athree" "" "" |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 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" \ |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 23 | ' 41 1b 2b 03 51 0a\n' "" "" |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 24 | testing "%x" "$PRINTF '%x\n' 0x2a" "2a\n" "" "" |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 25 | |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 26 | testing "%d 42" "$PRINTF %d 42" "42" "" "" |
| 27 | testing "%d 0x2a" "$PRINTF %d 0x2a" "42" "" "" |
| 28 | testing "%d 052" "$PRINTF %d 052" "42" "" "" |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 29 | |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 30 | testing "%s width precision" \ |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 31 | "$PRINTF '%3s,%.3s,%10s,%10.3s' abcde fghij klmno pqrst" \ |
| 32 | "abcde,fgh, klmno, pqr" "" "" |
Rob Landley | cc39d95 | 2015-01-06 12:07:20 -0600 | [diff] [blame] | 33 | |
Rob Landley | 70cbfe8 | 2015-01-10 20:02:21 -0600 | [diff] [blame] | 34 | # posix: "The format operand shall be reused as often as necessary to satisfy |
| 35 | # the argument operands." |
| 36 | |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 37 | testing "extra args" "$PRINTF 'abc%s!%ddef\n' X 42 ARG 36" \ |
Rob Landley | 70cbfe8 | 2015-01-10 20:02:21 -0600 | [diff] [blame] | 38 | "abcX!42def\nabcARG!36def\n" "" "" |
| 39 | |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 40 | testing "'%3c'" "$PRINTF '%3c' x" " x" "" "" |
| 41 | testing "'%-3c'" "$PRINTF '%-3c' x" "x " "" "" |
| 42 | testing "'%+d'" "$PRINTF '%+d' 5" "+5" "" "" |
Rob Landley | d0dead3 | 2015-01-11 10:16:38 -0600 | [diff] [blame] | 43 | |
Rob Landley | 70cbfe8 | 2015-01-10 20:02:21 -0600 | [diff] [blame] | 44 | |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 45 | testing "'%5d%4d' 1 21 321 4321 54321" \ |
Rob Landley | dd2cc65 | 2015-01-06 15:06:51 -0600 | [diff] [blame] | 46 | "$PRINTF '%5d%4d' 1 21 321 4321 54321" " 1 21 321432154321 0" "" "" |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 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" \ |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 50 | "78.000000 79.000000" "" "" |
Rob Landley | 54e8313 | 2016-10-18 16:28:47 -0500 | [diff] [blame] | 51 | testing "'f f' 78 79" "$PRINTF 'f f' 78 79 2>/dev/null" "f f" "" "" |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 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" \ |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 56 | "18446744073709551615 18446744073709551614" "" "" |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 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" "" "" |
Rob Landley | 5d431d1 | 2015-03-28 13:22:27 -0500 | [diff] [blame] | 60 | |
Rob Landley | 336c44a | 2016-03-02 15:20:04 -0600 | [diff] [blame] | 61 | testing "%.s acts like %.0s" "$PRINTF %.s_ 1 2 3 4 5" "_____" "" "" |
Rob Landley | bf950cd | 2016-07-04 02:59:09 -0500 | [diff] [blame] | 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 | "" "" |
Rob Landley | 54e8313 | 2016-10-18 16:28:47 -0500 | [diff] [blame] | 68 | |
| 69 | testing "printf \x" "$PRINTF 'A\x1b\x2B\x3Q\xa' | od -An -tx1" \ |
| 70 | " 41 1b 2b 03 51 0a\n" "" "" |