summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtests.sh745
-rw-r--r--tests/test_E.out (renamed from tests/test_0103.out)0
-rw-r--r--tests/test_H.out (renamed from tests/test_0027.out)0
-rw-r--r--tests/test_H_broken.out (renamed from tests/test_0032.out)0
-rw-r--r--tests/test_H_mnewer.out (renamed from tests/test_0022.out)0
-rw-r--r--tests/test_H_newer.out (renamed from tests/test_0023.out)0
-rw-r--r--tests/test_H_slash.out (renamed from tests/test_0028.out)0
-rw-r--r--tests/test_L.out (renamed from tests/test_0033.out)0
-rw-r--r--tests/test_L_depth.out (renamed from tests/test_0034.out)0
-rw-r--r--tests/test_L_ilname.out (renamed from tests/test_0049.out)0
-rw-r--r--tests/test_L_lname.out (renamed from tests/test_0050.out)0
-rw-r--r--tests/test_L_xtype_f.out (renamed from tests/test_0024.out)0
-rw-r--r--tests/test_L_xtype_l.out (renamed from tests/test_0039.out)0
-rw-r--r--tests/test_P.out (renamed from tests/test_0029.out)0
-rw-r--r--tests/test_P_slash.out (renamed from tests/test_0030.out)0
-rw-r--r--tests/test_anewer.out (renamed from tests/test_0031.out)0
-rw-r--r--tests/test_basic.out (renamed from tests/test_0001.out)0
-rw-r--r--tests/test_comma.out (renamed from tests/test_0068.out)0
-rw-r--r--tests/test_d_path.out (renamed from tests/test_0016.out)0
-rw-r--r--tests/test_daystart.out (renamed from tests/test_0017.out)0
-rw-r--r--tests/test_daystart_twice.out (renamed from tests/test_0018.out)0
-rw-r--r--tests/test_depth.out (renamed from tests/test_0019.out)0
-rw-r--r--tests/test_depth_depth_n.out (renamed from tests/test_0112.out)0
-rw-r--r--tests/test_depth_depth_n_minus.out (renamed from tests/test_0005.out)0
-rw-r--r--tests/test_depth_depth_n_plus.out (renamed from tests/test_0113.out)0
-rw-r--r--tests/test_depth_maxdepth_1.out (renamed from tests/test_0008.out)0
-rw-r--r--tests/test_depth_maxdepth_2.out (renamed from tests/test_0009.out)0
-rw-r--r--tests/test_depth_mindepth_1.out (renamed from tests/test_0004.out)0
-rw-r--r--tests/test_depth_mindepth_2.out (renamed from tests/test_0007.out)0
-rw-r--r--tests/test_depth_n.out (renamed from tests/test_0115.out)0
-rw-r--r--tests/test_depth_n_minus.out (renamed from tests/test_0114.out)0
-rw-r--r--tests/test_depth_n_plus.out (renamed from tests/test_0116.out)0
-rw-r--r--tests/test_depth_slash.out (renamed from tests/test_0096.out)0
-rw-r--r--tests/test_double_dash.out (renamed from tests/test_0074.out)0
-rw-r--r--tests/test_empty.out (renamed from tests/test_0015.out)0
-rw-r--r--tests/test_exec.out (renamed from tests/test_0020.out)0
-rw-r--r--tests/test_exec_substring.out (renamed from tests/test_0063.out)0
-rw-r--r--tests/test_execdir.out (renamed from tests/test_0065.out)0
-rw-r--r--tests/test_execdir_pwd.out (renamed from tests/test_0064.out)0
-rw-r--r--tests/test_execdir_slash.out (renamed from tests/test_0043.out)0
-rw-r--r--tests/test_execdir_slash_pwd.out (renamed from tests/test_0098.out)0
-rw-r--r--tests/test_execdir_slashes.out (renamed from tests/test_0044.out)0
-rw-r--r--tests/test_execdir_substring.out (renamed from tests/test_0066.out)0
-rw-r--r--tests/test_executable.out (renamed from tests/test_0012.out)0
-rw-r--r--tests/test_f.out (renamed from tests/test_0109.out)0
-rw-r--r--tests/test_flag_comma.out (renamed from tests/test_0071.out)0
-rw-r--r--tests/test_flag_double_dash.out (renamed from tests/test_0075.out)0
-rw-r--r--tests/test_flag_weird_names.out (renamed from tests/test_0069.out)0
-rw-r--r--tests/test_follow.out (renamed from tests/test_0035.out)0
-rw-r--r--tests/test_follow_comma.out (renamed from tests/test_0072.out)0
-rw-r--r--tests/test_fprint.out (renamed from tests/test_0073.out)0
-rw-r--r--tests/test_gid.out (renamed from tests/test_0021.out)0
-rw-r--r--tests/test_gid_minus.out (renamed from tests/test_0051.out)0
-rw-r--r--tests/test_gid_name.out (renamed from tests/test_0052.out)0
-rw-r--r--tests/test_gid_plus.out (renamed from tests/test_0053.out)0
-rw-r--r--tests/test_group_id.out (renamed from tests/test_0054.out)0
-rw-r--r--tests/test_group_name.out (renamed from tests/test_0055.out)0
-rw-r--r--tests/test_hidden.out (renamed from tests/test_0110.out)0
-rw-r--r--tests/test_ilname.out (renamed from tests/test_0047.out)0
-rw-r--r--tests/test_iname.out (renamed from tests/test_0010.out)0
-rw-r--r--tests/test_inum.out (renamed from tests/test_0127.out)0
-rw-r--r--tests/test_ipath.out (renamed from tests/test_0011.out)0
-rw-r--r--tests/test_iregex.out (renamed from tests/test_0101.out)0
-rw-r--r--tests/test_links.out (renamed from tests/test_0026.out)0
-rw-r--r--tests/test_links_minus.out (renamed from tests/test_0025.out)0
-rw-r--r--tests/test_links_plus.out (renamed from tests/test_0036.out)0
-rw-r--r--tests/test_lname.out (renamed from tests/test_0048.out)0
-rw-r--r--tests/test_maxdepth.out (renamed from tests/test_0117.out)0
-rw-r--r--tests/test_mindepth.out (renamed from tests/test_0006.out)0
-rw-r--r--tests/test_mnewer.out (renamed from tests/test_0057.out)0
-rw-r--r--tests/test_name.out (renamed from tests/test_0045.out)0
-rw-r--r--tests/test_name_root.out (renamed from tests/test_0041.out)0
-rw-r--r--tests/test_name_root_depth.out (renamed from tests/test_0123.out)0
-rw-r--r--tests/test_name_slash.out (renamed from tests/test_0099.out)0
-rw-r--r--tests/test_name_slashes.out (renamed from tests/test_0100.out)0
-rw-r--r--tests/test_name_trailing_slash.out (renamed from tests/test_0042.out)0
-rw-r--r--tests/test_newer.out (renamed from tests/test_0120.out)0
-rw-r--r--tests/test_newerma.out (renamed from tests/test_0121.out)0
-rw-r--r--tests/test_nogroup.out (renamed from tests/test_0061.out)0
-rw-r--r--tests/test_nohidden.out (renamed from tests/test_0111.out)0
-rw-r--r--tests/test_nouser.out (renamed from tests/test_0084.out)0
-rw-r--r--tests/test_ok_stdin.out (renamed from tests/test_0094.out)0
-rw-r--r--tests/test_okdir_stdin.out (renamed from tests/test_0095.out)0
-rw-r--r--tests/test_parens.out (renamed from tests/test_0067.out)0
-rw-r--r--tests/test_path.out (renamed from tests/test_0046.out)0
-rw-r--r--tests/test_path_d.out (renamed from tests/test_0056.out)0
-rw-r--r--tests/test_perm_222.out (renamed from tests/test_0078.out)0
-rw-r--r--tests/test_perm_222_minus.out (renamed from tests/test_0079.out)0
-rw-r--r--tests/test_perm_222_slash.out (renamed from tests/test_0014.out)0
-rw-r--r--tests/test_perm_644.out (renamed from tests/test_0081.out)0
-rw-r--r--tests/test_perm_644_minus.out (renamed from tests/test_0082.out)0
-rw-r--r--tests/test_perm_644_slash.out (renamed from tests/test_0083.out)0
-rw-r--r--tests/test_perm_leading_plus_symbolic.out (renamed from tests/test_0090.out)0
-rw-r--r--tests/test_perm_leading_plus_symbolic_minus.out (renamed from tests/test_0092.out)0
-rw-r--r--tests/test_perm_leading_plus_symbolic_slash.out (renamed from tests/test_0086.out)0
-rw-r--r--tests/test_perm_symbolic.out (renamed from tests/test_0128.out)0
-rw-r--r--tests/test_perm_symbolic_minus.out (renamed from tests/test_0085.out)0
-rw-r--r--tests/test_perm_symbolic_slash.out (renamed from tests/test_0091.out)0
-rw-r--r--tests/test_printf.out (renamed from tests/test_0130.out)0
-rw-r--r--tests/test_printf_escapes.out (renamed from tests/test_0137.out)0
-rw-r--r--tests/test_printf_flags.out (renamed from tests/test_0135.out)0
-rw-r--r--tests/test_printf_leak.out (renamed from tests/test_0139.out)0
-rw-r--r--tests/test_printf_slash.out (renamed from tests/test_0131.out)0
-rw-r--r--tests/test_printf_slashes.out (renamed from tests/test_0132.out)0
-rw-r--r--tests/test_printf_trailing_slash.out (renamed from tests/test_0133.out)0
-rw-r--r--tests/test_printf_trailing_slashes.out (renamed from tests/test_0134.out)0
-rw-r--r--tests/test_printf_types.out (renamed from tests/test_0136.out)0
-rw-r--r--tests/test_quit.out (renamed from tests/test_0138.out)0
-rw-r--r--tests/test_quit_after_print.out (renamed from tests/test_0141.out)0
-rw-r--r--tests/test_quit_before_print.out (renamed from tests/test_0129.out)0
-rw-r--r--tests/test_quit_child.out (renamed from tests/test_0124.out)0
-rw-r--r--tests/test_quit_depth.out (renamed from tests/test_0125.out)0
-rw-r--r--tests/test_quit_depth_child.out (renamed from tests/test_0126.out)0
-rw-r--r--tests/test_readable.out (renamed from tests/test_0013.out)0
-rw-r--r--tests/test_regex.out (renamed from tests/test_0102.out)0
-rw-r--r--tests/test_regex_parens.out (renamed from tests/test_0104.out)0
-rw-r--r--tests/test_regextype_posix_basic.out (renamed from tests/test_0105.out)0
-rw-r--r--tests/test_regextype_posix_extended.out (renamed from tests/test_0106.out)0
-rw-r--r--tests/test_samefile.out (renamed from tests/test_0040.out)0
-rw-r--r--tests/test_size.out (renamed from tests/test_0058.out)0
-rw-r--r--tests/test_size_T.out (renamed from tests/test_0059.out)0
-rw-r--r--tests/test_size_big.out (renamed from tests/test_0140.out)0
-rw-r--r--tests/test_size_bytes.out (renamed from tests/test_0060.out)0
-rw-r--r--tests/test_size_plus.out (renamed from tests/test_0122.out)0
-rw-r--r--tests/test_type_d.out (renamed from tests/test_0002.out)0
-rw-r--r--tests/test_type_f.out (renamed from tests/test_0003.out)0
-rw-r--r--tests/test_type_multi.out (renamed from tests/test_0142.out)0
-rw-r--r--tests/test_uid.out (renamed from tests/test_0062.out)0
-rw-r--r--tests/test_uid_minus.out (renamed from tests/test_0107.out)0
-rw-r--r--tests/test_uid_name.out (renamed from tests/test_0108.out)0
-rw-r--r--tests/test_uid_plus.out (renamed from tests/test_0118.out)0
-rw-r--r--tests/test_user_id.out (renamed from tests/test_0119.out)0
-rw-r--r--tests/test_user_name.out19
-rw-r--r--tests/test_weird_names.out (renamed from tests/test_0070.out)0
-rw-r--r--tests/test_writable.out (renamed from tests/test_0080.out)0
-rw-r--r--tests/test_xtype_f.out (renamed from tests/test_0038.out)0
-rw-r--r--tests/test_xtype_l.out (renamed from tests/test_0037.out)0
-rw-r--r--tests/test_xtype_multi.out (renamed from tests/test_0143.out)0
138 files changed, 452 insertions, 312 deletions
diff --git a/tests.sh b/tests.sh
index 084e8ac..bf5aab8 100755
--- a/tests.sh
+++ b/tests.sh
@@ -106,6 +106,196 @@ function _realpath() {
BFS="$(_realpath ./bfs)"
TESTS="$(_realpath ./tests)"
+posix_tests=(
+ test_basic
+ test_type_d
+ test_type_f
+ test_mindepth
+ test_maxdepth
+ test_depth
+ test_depth_slash
+ test_depth_mindepth_1
+ test_depth_mindepth_2
+ test_depth_maxdepth_1
+ test_depth_maxdepth_2
+ test_name
+ test_name_root
+ test_name_root_depth
+ test_name_trailing_slash
+ test_path
+ test_newer
+ test_links
+ test_links_plus
+ test_links_minus
+ test_H
+ test_H_slash
+ test_H_broken
+ test_H_newer
+ test_L
+ test_L_depth
+ test_user_name
+ test_user_id
+ test_group_name
+ test_group_id
+ test_size
+ test_size_plus
+ test_size_bytes
+ test_exec
+ test_parens
+ test_flag_comma
+ test_perm_222
+ test_perm_222_minus
+ test_perm_644
+ test_perm_644_minus
+ test_perm_symbolic
+ test_perm_symbolic_minus
+ test_perm_leading_plus_symbolic_minus
+ test_ok_stdin
+)
+
+bsd_tests=(
+ test_P
+ test_P_slash
+ test_follow
+ test_samefile
+ test_name_slash
+ test_name_slashes
+ test_iname
+ test_ipath
+ test_lname
+ test_ilname
+ test_L_lname
+ test_L_ilname
+ test_newerma
+ test_size_big
+ test_exec_substring
+ test_execdir_pwd
+ test_double_dash
+ test_flag_double_dash
+ test_ok_stdin
+ test_okdir_stdin
+ test_delete_root
+ test_execdir_slash
+ test_execdir_slash_pwd
+ test_regex
+ test_iregex
+ test_regex_parens
+ test_E
+ test_d_path
+ test_f
+ test_depth_n
+ test_depth_n_plus
+ test_depth_n_minus
+ test_depth_depth_n
+ test_depth_depth_n_plus
+ test_depth_depth_n_minus
+ test_gid_name
+ test_uid_name
+ test_mnewer
+ test_H_mnewer
+ test_size_T
+ test_quit
+ test_quit_child
+ test_quit_depth
+ test_quit_depth_child
+ test_inum
+ test_nogroup
+ test_nouser
+ test_quit_after_print
+ test_quit_before_print
+)
+
+gnu_tests=(
+ test_executable
+ test_readable
+ test_writable
+ test_empty
+ test_gid
+ test_gid_plus
+ test_gid_minus
+ test_uid
+ test_uid_plus
+ test_uid_minus
+ test_anewer
+ test_P
+ test_P_slash
+ test_follow
+ test_samefile
+ test_xtype_l
+ test_xtype_f
+ test_L_xtype_l
+ test_L_xtype_f
+ test_name_slash
+ test_name_slashes
+ test_iname
+ test_ipath
+ test_lname
+ test_ilname
+ test_L_lname
+ test_L_ilname
+ test_daystart
+ test_daystart_twice
+ test_newerma
+ test_size_big
+ test_exec_substring
+ test_execdir
+ test_execdir_substring
+ test_execdir_pwd
+ test_comma
+ test_weird_names
+ test_flag_weird_names
+ test_follow_comma
+ test_fprint
+ test_double_dash
+ test_flag_double_dash
+ test_ignore_readdir_race
+ test_ignore_readdir_race_root
+ test_perm_222_slash
+ test_perm_644_slash
+ test_perm_symbolic_slash
+ test_perm_leading_plus_symbolic_slash
+ test_delete_root
+ test_execdir_slash
+ test_execdir_slash_pwd
+ test_regex
+ test_iregex
+ test_regex_parens
+ test_regextype_posix_basic
+ test_regextype_posix_extended
+ test_path_d
+ test_quit
+ test_quit_child
+ test_quit_depth
+ test_quit_depth_child
+ test_inum
+ test_nogroup
+ test_nouser
+ test_printf
+ test_printf_slash
+ test_printf_slashes
+ test_printf_trailing_slash
+ test_printf_trailing_slashes
+ test_printf_flags
+ test_printf_types
+ test_printf_escapes
+ test_quit_after_print
+ test_quit_before_print
+ test_printf_leak
+)
+
+bfs_tests=(
+ test_type_multi
+ test_xtype_multi
+ test_perm_symbolic_trailing_comma
+ test_perm_symbolic_double_comma
+ test_perm_symbolic_missing_action
+ test_perm_leading_plus_symbolic
+ test_perm_octal_plus
+ test_execdir_slashes
+ test_hidden
+ test_nohidden
+)
+
BSD=yes
GNU=yes
ALL=yes
@@ -145,6 +335,30 @@ for arg; do
esac
done
+declare -A run_tests
+
+for test in "${posix_tests[@]}"; do
+ run_tests["$test"]=yes
+done
+
+if [ "$BSD" ]; then
+ for test in "${bsd_tests[@]}"; do
+ run_tests["$test"]=yes
+ done
+fi
+
+if [ "$GNU" ]; then
+ for test in "${gnu_tests[@]}"; do
+ run_tests["$test"]=yes
+ done
+fi
+
+if [ "$ALL" ]; then
+ for test in "${bfs_tests[@]}"; do
+ run_tests["$test"]=yes
+ done
+fi
+
function bfs_sort() {
awk -F/ '{ print NF - 1 " " $0 }' | sort -n | cut -d' ' -f2-
}
@@ -162,372 +376,344 @@ cd "$TMP"
# Test cases
-function test_0001() {
+function test_basic() {
bfs_diff basic
}
-function test_0002() {
+function test_type_d() {
bfs_diff basic -type d
}
-function test_0003() {
+function test_type_f() {
bfs_diff basic -type f
}
-function test_0004() {
+function test_type_multi() {
+ bfs_diff links -type f,d,c
+}
+
+function test_mindepth() {
bfs_diff basic -mindepth 1
}
-function test_0005() {
+function test_maxdepth() {
bfs_diff basic -maxdepth 1
}
-function test_0006() {
+function test_depth() {
+ bfs_diff basic -depth
+}
+
+function test_depth_slash() {
+ bfs_diff basic/ -depth
+}
+
+function test_depth_mindepth_1() {
bfs_diff basic -mindepth 1 -depth
}
-function test_0007() {
+function test_depth_mindepth_2() {
bfs_diff basic -mindepth 2 -depth
}
-function test_0008() {
+function test_depth_maxdepth_1() {
bfs_diff basic -maxdepth 1 -depth
}
-function test_0009() {
+function test_depth_maxdepth_2() {
bfs_diff basic -maxdepth 2 -depth
}
-function test_0010() {
+function test_name() {
bfs_diff basic -name '*f*'
}
-function test_0011() {
+function test_name_root() {
+ bfs_diff basic/a -name a
+}
+
+function test_name_root_depth() {
+ bfs_diff basic/g -depth -name g
+}
+
+function test_name_trailing_slash() {
+ bfs_diff basic/g/ -name g
+}
+
+function test_name_slash() {
+ bfs_diff / -maxdepth 0 -name / 2>/dev/null
+}
+
+function test_name_slashes() {
+ bfs_diff /// -maxdepth 0 -name / 2>/dev/null
+}
+
+function test_path() {
bfs_diff basic -path 'basic/*f*'
}
-function test_0012() {
- [ "$GNU" ] || return 0
+function test_executable() {
bfs_diff perms -executable
}
-function test_0013() {
- [ "$GNU" ] || return 0
+function test_readable() {
bfs_diff perms -readable
}
-function test_0014() {
- [ "$GNU" ] || return 0
+function test_writable() {
bfs_diff perms -writable
}
-function test_0015() {
- [ "$GNU" ] || return 0
+function test_empty() {
bfs_diff basic -empty
}
-function test_0016() {
- [ "$GNU" ] || return 0
+function test_gid() {
bfs_diff basic -gid "$(id -g)"
}
-function test_0017() {
- [ "$GNU" ] || return 0
+function test_gid_plus() {
bfs_diff basic -gid +0
}
-function test_0018() {
- [ "$GNU" ] || return 0
+function test_gid_minus() {
bfs_diff basic -gid "-$(($(id -g) + 1))"
}
-function test_0019() {
- [ "$GNU" ] || return 0
+function test_uid() {
bfs_diff basic -uid "$(id -u)"
}
-function test_0020() {
- [ "$GNU" ] || return 0
+function test_uid_plus() {
bfs_diff basic -uid +0
}
-function test_0021() {
- [ "$GNU" ] || return 0
+function test_uid_minus() {
bfs_diff basic -uid "-$(($(id -u) + 1))"
}
-function test_0022() {
+function test_newer() {
bfs_diff times -newer times/a
}
-function test_0023() {
- [ "$GNU" ] || return 0
+function test_anewer() {
bfs_diff times -anewer times/a
}
-function test_0024() {
+function test_links() {
bfs_diff links -type f -links 2
}
-function test_0025() {
- bfs_diff links -type f -links -2
+function test_links_plus() {
+ bfs_diff links -type f -links +1
}
-function test_0026() {
- bfs_diff links -type f -links +1
+function test_links_minus() {
+ bfs_diff links -type f -links -2
}
-function test_0027() {
+function test_P() {
bfs_diff -P links/d/e/f
}
-function test_0028() {
+function test_P_slash() {
bfs_diff -P links/d/e/f/
}
-function test_0029() {
+function test_H() {
bfs_diff -H links/d/e/f
}
-function test_0030() {
+function test_H_slash() {
bfs_diff -H links/d/e/f/
}
-function test_0031() {
- bfs_diff -H times -newer times/l
+function test_H_broken() {
+ bfs_diff -H links/d/e/i
}
-function test_0032() {
- bfs_diff -H links/d/e/i
+function test_H_newer() {
+ bfs_diff -H times -newer times/l
}
-function test_0033() {
+function test_L() {
bfs_diff -L links 2>/dev/null
}
-function test_0034() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_follow() {
bfs_diff links -follow 2>/dev/null
}
-function test_0035() {
+function test_L_depth() {
bfs_diff -L links -depth 2>/dev/null
}
-function test_0036() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_samefile() {
bfs_diff links -samefile links/a
}
-function test_0037() {
- [ "$GNU" ] || return 0
+function test_xtype_l() {
bfs_diff links -xtype l
}
-function test_0038() {
- [ "$GNU" ] || return 0
+function test_xtype_f() {
bfs_diff links -xtype f
}
-function test_0039() {
- [ "$GNU" ] || return 0
+function test_L_xtype_l() {
bfs_diff -L links -xtype l 2>/dev/null
}
-function test_0040() {
- [ "$GNU" ] || return 0
+function test_L_xtype_f() {
bfs_diff -L links -xtype f 2>/dev/null
}
-function test_0041() {
- bfs_diff basic/a -name a
-}
-
-function test_0042() {
- bfs_diff basic/g/ -name g
-}
-
-function test_0043() {
- [ "$BSD" -o "$GNU" ] || return 0
- bfs_diff / -maxdepth 0 -name / 2>/dev/null
-}
-
-function test_0044() {
- [ "$BSD" -o "$GNU" ] || return 0
- bfs_diff /// -maxdepth 0 -name / 2>/dev/null
+function test_xtype_multi() {
+ bfs_diff links -xtype f,d,c
}
-function test_0045() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_iname() {
bfs_diff basic -iname '*F*'
}
-function test_0046() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_ipath() {
bfs_diff basic -ipath 'basic/*F*'
}
-function test_0047() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_lname() {
bfs_diff links -lname '[aq]'
}
-function test_0048() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_ilname() {
bfs_diff links -ilname '[AQ]'
}
-function test_0049() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_L_lname() {
bfs_diff -L links -lname '[aq]' 2>/dev/null
}
-function test_0050() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_L_ilname() {
bfs_diff -L links -ilname '[AQ]' 2>/dev/null
}
-function test_0051() {
- bfs_diff -L basic -user "$(id -un)"
+function test_user_name() {
+ bfs_diff basic -user "$(id -un)"
}
-function test_0052() {
- bfs_diff -L basic -user "$(id -u)"
+function test_user_id() {
+ bfs_diff basic -user "$(id -u)"
}
-function test_0053() {
- bfs_diff -L basic -group "$(id -gn)"
+function test_group_name() {
+ bfs_diff basic -group "$(id -gn)"
}
-function test_0054() {
- bfs_diff -L basic -group "$(id -g)"
+function test_group_id() {
+ bfs_diff basic -group "$(id -g)"
}
-function test_0055() {
- [ "$GNU" ] || return 0
+function test_daystart() {
bfs_diff basic -daystart -mtime 0
}
-function test_0056() {
- [ "$GNU" ] || return 0
+function test_daystart_twice() {
bfs_diff basic -daystart -daystart -mtime 0
}
-function test_0057() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_newerma() {
bfs_diff times -newerma times/a
}
-function test_0058() {
+function test_size() {
bfs_diff basic -type f -size 0
}
-function test_0059() {
+function test_size_plus() {
bfs_diff basic -type f -size +0
}
-function test_0060() {
+function test_size_bytes() {
bfs_diff basic -type f -size +0c
}
-function test_0061() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_size_big() {
bfs_diff basic -size 9223372036854775807
}
-function test_0062() {
+function test_exec() {
bfs_diff basic -exec echo '{}' ';'
}
-function test_0063() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_exec_substring() {
bfs_diff basic -exec echo '-{}-' ';'
}
-function test_0064() {
- [ "$BSD" -o "$GNU" ] || return 0
-
- local TMP_REAL="$(cd "$TMP" && pwd)"
- local OFFSET="$((${#TMP_REAL} + 2))"
- bfs_diff basic -execdir bash -c "pwd | cut -b$OFFSET-" ';'
-}
-
-function test_0065() {
- [ "$GNU" ] || return 0
+function test_execdir() {
bfs_diff basic -execdir echo '{}' ';'
}
-function test_0066() {
- [ "$GNU" ] || return 0
+function test_execdir_substring() {
bfs_diff basic -execdir echo '-{}-' ';'
}
-function test_0067() {
+function test_execdir_pwd() {
+ local TMP_REAL="$(cd "$TMP" && pwd)"
+ local OFFSET="$((${#TMP_REAL} + 2))"
+ bfs_diff basic -execdir bash -c "pwd | cut -b$OFFSET-" ';'
+}
+
+function test_parens() {
bfs_diff basic \( -name '*f*' \)
}
-function test_0068() {
- [ "$GNU" ] || return 0
+function test_comma() {
bfs_diff basic -name '*f*' -print , -print
}
-function test_0069() {
- [ "$GNU" ] || return 0
+function test_weird_names() {
cd weirdnames
bfs_diff '-' '(-' '!-' ',' ')' './(' './!' \( \! -print , -print \)
}
-function test_0070() {
- [ "$GNU" ] || return 0
+function test_flag_weird_names() {
cd weirdnames
bfs_diff -L '-' '(-' '!-' ',' ')' './(' './!' \( \! -print , -print \)
}
-function test_0071() {
+function test_flag_comma() {
+ # , is a filename until a non-flag is seen
cd weirdnames
bfs_diff -L ',' -print
}
-function test_0072() {
- [ "$GNU" ] || return 0
+function test_follow_comma() {
+ # , is an operator after a non-flag is seen
cd weirdnames
bfs_diff -follow ',' -print
}
-function test_0073() {
- [ "$GNU" ] || return 0
+function test_fprint() {
if [ "$UPDATE" ]; then
- $BFS basic -fprint "$TESTS/test_0073.out"
- sort -o "$TESTS/test_0073.out" "$TESTS/test_0073.out"
+ $BFS basic -fprint "$TESTS/test_fprint.out"
+ sort -o "$TESTS/test_fprint.out" "$TESTS/test_fprint.out"
else
- $BFS basic -fprint scratch/test_0073.out
- sort -o scratch/test_0073.out scratch/test_0073.out
- diff -u scratch/test_0073.out "$TESTS/test_0073.out"
+ $BFS basic -fprint scratch/test_fprint.out
+ sort -o scratch/test_fprint.out scratch/test_fprint.out
+ diff -u scratch/test_fprint.out "$TESTS/test_fprint.out"
fi
}
-function test_0074() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_double_dash() {
cd basic
bfs_diff -- . -type f
}
-function test_0075() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_flag_double_dash() {
cd basic
bfs_diff -L -- . -type f
}
-function test_0076() {
- [ "$GNU" ] || return 0
-
- # Make sure -ignore_readdir_race doesn't suppress ENOENT at the root
- ! $BFS basic/nonexistent -ignore_readdir_race 2>/dev/null
-}
-
-function test_0077() {
- [ "$GNU" ] || return 0
-
+function test_ignore_readdir_race() {
rm -rf scratch/*
touch scratch/{foo,bar}
@@ -535,364 +721,299 @@ function test_0077() {
$BFS scratch -mindepth 1 -ignore_readdir_race -links 1 -exec "$TESTS/remove-sibling.sh" '{}' ';'
}
-function test_0078() {
+function test_ignore_readdir_race_root() {
+ # Make sure -ignore_readdir_race doesn't suppress ENOENT at the root
+ ! $BFS basic/nonexistent -ignore_readdir_race 2>/dev/null
+}
+
+function test_perm_222() {
bfs_diff perms -perm 222
}
-function test_0079() {
+function test_perm_222_minus() {
bfs_diff perms -perm -222
}
-function test_0080() {
- [ "$GNU" ] || return 0
+function test_perm_222_slash() {
bfs_diff perms -perm /222
}
-function test_0081() {
+function test_perm_644() {
bfs_diff perms -perm 644
}
-function test_0082() {
+function test_perm_644_minus() {
bfs_diff perms -perm -644
}
-function test_0083() {
- [ "$GNU" ] || return 0
+function test_perm_644_slash() {
bfs_diff perms -perm /644
}
-function test_0084() {
+function test_perm_symbolic() {
bfs_diff perms -perm a+r,u=wX,g+wX-w
}
-function test_0085() {
+function test_perm_symbolic_minus() {
bfs_diff perms -perm -a+r,u=wX,g+wX-w
}
-function test_0086() {
- [ "$GNU" ] || return 0
+function test_perm_symbolic_slash() {
bfs_diff perms -perm /a+r,u=wX,g+wX-w
}
-function test_0087() {
- [ "$ALL" ] || return 0
+function test_perm_symbolic_trailing_comma() {
! $BFS perms -perm a+r, 2>/dev/null
}
-function test_0088() {
- [ "$ALL" ] || return 0
+function test_perm_symbolic_double_comma() {
! $BFS perms -perm a+r,,u+w 2>/dev/null
}
-function test_0089() {
- [ "$ALL" ] || return 0
+function test_perm_symbolic_missing_action() {
! $BFS perms -perm a 2>/dev/null
}
-function test_0090() {
- bfs_diff perms -perm -+rwx
+function test_perm_leading_plus_symbolic() {
+ bfs_diff perms -perm +rwx
}
-function test_0091() {
- [ "$GNU" ] || return 0
- bfs_diff perms -perm /+rwx
+function test_perm_leading_plus_symbolic_minus() {
+ bfs_diff perms -perm -+rwx
}
-function test_0092() {
- [ "$ALL" ] || return 0
- bfs_diff perms -perm +rwx
+function test_perm_leading_plus_symbolic_slash() {
+ bfs_diff perms -perm /+rwx
}
-function test_0093() {
- [ "$ALL" ] || return 0
+function test_perm_octal_plus() {
! $BFS perms -perm +777 2>/dev/null
}
-function test_0094() {
- [ "$BSD" ] || return 0
+function test_ok_stdin() {
# -ok should *not* close stdin
# See https://savannah.gnu.org/bugs/?24561
yes | bfs_diff basic -ok bash -c "printf '%s? ' {} && head -n1" \; 2>/dev/null
}
-function test_0095() {
- [ "$BSD" ] || return 0
+function test_okdir_stdin() {
# -okdir should *not* close stdin
yes | bfs_diff basic -okdir bash -c "printf '%s? ' {} && head -n1" \; 2>/dev/null
}
-function test_0096() {
- bfs_diff basic/ -depth
-}
-
-function test_0097() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_delete_root() {
# Don't try to delete '.'
(cd scratch && $BFS . -delete)
}
-function test_0098() {
- [ "$BSD" -o "$GNU" ] || return 0
- bfs_diff / -maxdepth 0 -execdir pwd ';'
-}
-
-function test_0099() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_execdir_slash() {
# Don't prepend ./ for absolute paths in -execdir
bfs_diff / -maxdepth 0 -execdir echo '{}' ';'
}
-function test_0100() {
- [ "$ALL" ] || return 0
+function test_execdir_slash_pwd() {
+ bfs_diff / -maxdepth 0 -execdir pwd ';'
+}
+
+function test_execdir_slashes() {
bfs_diff /// -maxdepth 0 -execdir echo '{}' ';'
}
-function test_0101() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_regex() {
bfs_diff basic -regex 'basic/./.'
}
-function test_0102() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_iregex() {
bfs_diff basic -iregex 'basic/[A-Z]/[a-z]'
}
-function test_0103() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_regex_parens() {
cd weirdnames
bfs_diff . -regex '\./\((\)'
}
-function test_0104() {
- [ "$BSD" ] || return 0
+function test_E() {
cd weirdnames
bfs_diff -E . -regex '\./(\()'
}
-function test_0105() {
- [ "$GNU" ] || return 0
+function test_regextype_posix_basic() {
cd weirdnames
bfs_diff -regextype posix-basic -regex '\./\((\)'
}
-function test_0106() {
- [ "$GNU" ] || return 0
+function test_regextype_posix_extended() {
cd weirdnames
bfs_diff -regextype posix-extended -regex '\./(\()'
}
-function test_0107() {
- [ "$BSD" ] || return 0
+function test_d_path() {
bfs_diff -d basic
}
-function test_0108() {
- [ "$GNU" ] || return 0
- bfs_diff basic -d 2>/dev/null
+function test_path_d() {
+ bfs_diff basic -d
}
-function test_0109() {
- [ "$BSD" ] || return 0
+function test_f() {
cd weirdnames
bfs_diff -f '-' -f '('
}
-function test_0110() {
- [ "$ALL" ] || return 0
+function test_hidden() {
bfs_diff weirdnames -hidden
}
-function test_0111() {
- [ "$ALL" ] || return 0
+function test_nohidden() {
bfs_diff weirdnames -nohidden
}
-function test_0112() {
- [ "$BSD" ] || return 0
+function test_depth_n() {
bfs_diff basic -depth 2
}
-function test_0113() {
- [ "$BSD" ] || return 0
+function test_depth_n_plus() {
bfs_diff basic -depth +2
}
-function test_0114() {
- [ "$BSD" ] || return 0
+function test_depth_n_minus() {
bfs_diff basic -depth -2
}
-function test_0115() {
- [ "$BSD" ] || return 0
+function test_depth_depth_n() {
bfs_diff basic -depth -depth 2
}
-function test_0116() {
- [ "$BSD" ] || return 0
+function test_depth_depth_n_plus() {
bfs_diff basic -depth -depth +2
}
-function test_0117() {
- [ "$BSD" ] || return 0
+function test_depth_depth_n_minus() {
bfs_diff basic -depth -depth -2
}
-function test_0118() {
- [ "$BSD" ] || return 0
+function test_gid_name() {
bfs_diff basic -gid "$(id -gn)"
}
-function test_0119() {
- [ "$BSD" ] || return 0
+function test_uid_name() {
bfs_diff basic -uid "$(id -un)"
}
-function test_0120() {
- [ "$BSD" ] || return 0
+function test_mnewer() {
bfs_diff times -mnewer times/a
}
-function test_0121() {
- [ "$BSD" ] || return 0
+function test_H_mnewer() {
bfs_diff -H times -mnewer times/l
}
-function test_0122() {
- [ "$BSD" ] || return 0
+function test_size_T() {
bfs_diff basic -type f -size 1T
}
-function test_0123() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_quit() {
bfs_diff basic/g -print -name g -quit
}
-function test_0124() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_quit_child() {
bfs_diff basic/g -print -name h -quit
}
-function test_0125() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_quit_depth() {
bfs_diff basic/g -depth -print -name g -quit
}
-function test_0126() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_quit_depth_child() {
bfs_diff basic/g -depth -print -name h -quit
}
-function test_0127() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_quit_after_print() {
+ bfs_diff basic basic -print -quit
+}
+
+function test_quit_before_print() {
+ bfs_diff basic basic -quit -print
+}
+function test_inum() {
local inode="$(ls -id basic/k/foo/bar | cut -f1 -d' ')"
bfs_diff basic -inum "$inode"
}
-function test_0128() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_nogroup() {
bfs_diff basic -nogroup
}
-function test_0129() {
- [ "$BSD" -o "$GNU" ] || return 0
+function test_nouser() {
bfs_diff basic -nouser
}
-function test_0130() {
- [ "$GNU" ] || return 0
+function test_printf() {
bfs_diff basic -printf '%%p(%p) %%d(%d) %%f(%f) %%h(%h) %%H(%H) %%P(%P) %%m(%m) %%M(%M) %%y(%y)\n'
}
-function test_0131() {
- [ "$GNU" ] || return 0
+function test_printf_slash() {
bfs_diff / -maxdepth 0 -printf '(%h)/(%f)\n'
}
-function test_0132() {
- [ "$GNU" ] || return 0
+function test_printf_slashes() {
bfs_diff /// -maxdepth 0 -printf '(%h)/(%f)\n'
}
-function test_0133() {
- [ "$GNU" ] || return 0
+function test_printf_trailing_slash() {
bfs_diff basic/ -printf '(%h)/(%f)\n'
}
-function test_0134() {
- [ "$GNU" ] || return 0
+function test_printf_trailing_slashes() {
bfs_diff basic/// -printf '(%h)/(%f)\n'
}
-function test_0135() {
- [ "$GNU" ] || return 0
+function test_printf_flags() {
bfs_diff basic -printf '|%- 10.10p| %+03d %#4m\n'
}
-function test_0136() {
- [ "$GNU" ] || return 0
+function test_printf_types() {
bfs_diff links -printf '(%p) (%l) %y %Y\n'
}
-function test_0137() {
- [ "$GNU" ] || return 0
+function test_printf_escapes() {
bfs_diff basic -maxdepth 0 -printf '\18\118\1118\11118\n\cfoo'
}
-function test_0138() {
- bfs_diff basic/g -depth -name g
-}
-
-function test_0139() {
- [ "$BSD" -o "$GNU" ] || return 0
- bfs_diff basic basic -print -quit
-}
-
-function test_0140() {
- [ "$BSD" -o "$GNU" ] || return 0
- bfs_diff basic basic -quit -print
-}
-
-function test_0141() {
+function test_printf_leak() {
# Memory leak regression test
- [ "$GNU" ] || return 0
bfs_diff basic -maxdepth 0 -printf '%p'
}
-function test_0142() {
- [ "$ALL" ] || return 0
- bfs_diff links -type f,d,c
-}
-
-function test_0143() {
- [ "$ALL" ] || return 0
- bfs_diff links -xtype f,d,c
-}
-
result=0
-for i in {1..143}; do
- test="test_$(printf '%04d' $i)"
-
+for test in "${!run_tests[@]}"; do
if [ -t 1 ]; then
- printf '\r%s' "$test"
+ printf '\r\033[J%s' "$test"
+ else
+ echo "$test"
fi
("$test" "$dir")
status=$?
if [ $status -ne 0 ]; then
- if [ -t 1 ]; then
- printf '\r%s failed!\n' "$test"
- else
- printf '%s failed!\n' "$test"
- fi
+ echo "$test failed!"
result=$status
fi
done
+if [ $result -eq 0 ]; then
+ status=passed
+else
+ status=failed
+fi
+
if [ -t 1 ]; then
- printf '\n'
+ printf '\r\033[Jtests %s\n' "$status"
+else
+ echo "tests $status"
fi
exit $result
diff --git a/tests/test_0103.out b/tests/test_E.out
index 0f0971e..0f0971e 100644
--- a/tests/test_0103.out
+++ b/tests/test_E.out
diff --git a/tests/test_0027.out b/tests/test_H.out
index a4beda4..a4beda4 100644
--- a/tests/test_0027.out
+++ b/tests/test_H.out
diff --git a/tests/test_0032.out b/tests/test_H_broken.out
index e5e13fc..e5e13fc 100644
--- a/tests/test_0032.out
+++ b/tests/test_H_broken.out
diff --git a/tests/test_0022.out b/tests/test_H_mnewer.out
index 7f6c0dd..7f6c0dd 100644
--- a/tests/test_0022.out
+++ b/tests/test_H_mnewer.out
diff --git a/tests/test_0023.out b/tests/test_H_newer.out
index 7f6c0dd..7f6c0dd 100644
--- a/tests/test_0023.out
+++ b/tests/test_H_newer.out
diff --git a/tests/test_0028.out b/tests/test_H_slash.out
index 0a4fc77..0a4fc77 100644
--- a/tests/test_0028.out
+++ b/tests/test_H_slash.out
diff --git a/tests/test_0033.out b/tests/test_L.out
index 36087e8..36087e8 100644
--- a/tests/test_0033.out
+++ b/tests/test_L.out
diff --git a/tests/test_0034.out b/tests/test_L_depth.out
index 36087e8..36087e8 100644
--- a/tests/test_0034.out
+++ b/tests/test_L_depth.out
diff --git a/tests/test_0049.out b/tests/test_L_ilname.out
index b7e42dd..b7e42dd 100644
--- a/tests/test_0049.out
+++ b/tests/test_L_ilname.out
diff --git a/tests/test_0050.out b/tests/test_L_lname.out
index b7e42dd..b7e42dd 100644
--- a/tests/test_0050.out
+++ b/tests/test_L_lname.out
diff --git a/tests/test_0024.out b/tests/test_L_xtype_f.out
index 892c879..892c879 100644
--- a/tests/test_0024.out
+++ b/tests/test_L_xtype_f.out
diff --git a/tests/test_0039.out b/tests/test_L_xtype_l.out
index 1052fc0..1052fc0 100644
--- a/tests/test_0039.out
+++ b/tests/test_L_xtype_l.out
diff --git a/tests/test_0029.out b/tests/test_P.out
index a4beda4..a4beda4 100644
--- a/tests/test_0029.out
+++ b/tests/test_P.out
diff --git a/tests/test_0030.out b/tests/test_P_slash.out
index 0a4fc77..0a4fc77 100644
--- a/tests/test_0030.out
+++ b/tests/test_P_slash.out
diff --git a/tests/test_0031.out b/tests/test_anewer.out
index 7f6c0dd..7f6c0dd 100644
--- a/tests/test_0031.out
+++ b/tests/test_anewer.out
diff --git a/tests/test_0001.out b/tests/test_basic.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0001.out
+++ b/tests/test_basic.out
diff --git a/tests/test_0068.out b/tests/test_comma.out
index 56b2bde..56b2bde 100644
--- a/tests/test_0068.out
+++ b/tests/test_comma.out
diff --git a/tests/test_0016.out b/tests/test_d_path.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0016.out
+++ b/tests/test_d_path.out
diff --git a/tests/test_0017.out b/tests/test_daystart.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0017.out
+++ b/tests/test_daystart.out
diff --git a/tests/test_0018.out b/tests/test_daystart_twice.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0018.out
+++ b/tests/test_daystart_twice.out
diff --git a/tests/test_0019.out b/tests/test_depth.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0019.out
+++ b/tests/test_depth.out
diff --git a/tests/test_0112.out b/tests/test_depth_depth_n.out
index 3bfc1d3..3bfc1d3 100644
--- a/tests/test_0112.out
+++ b/tests/test_depth_depth_n.out
diff --git a/tests/test_0005.out b/tests/test_depth_depth_n_minus.out
index 7575ae4..7575ae4 100644
--- a/tests/test_0005.out
+++ b/tests/test_depth_depth_n_minus.out
diff --git a/tests/test_0113.out b/tests/test_depth_depth_n_plus.out
index 847995d..847995d 100644
--- a/tests/test_0113.out
+++ b/tests/test_depth_depth_n_plus.out
diff --git a/tests/test_0008.out b/tests/test_depth_maxdepth_1.out
index 7575ae4..7575ae4 100644
--- a/tests/test_0008.out
+++ b/tests/test_depth_maxdepth_1.out
diff --git a/tests/test_0009.out b/tests/test_depth_maxdepth_2.out
index b79fef1..b79fef1 100644
--- a/tests/test_0009.out
+++ b/tests/test_depth_maxdepth_2.out
diff --git a/tests/test_0004.out b/tests/test_depth_mindepth_1.out
index 1f00c58..1f00c58 100644
--- a/tests/test_0004.out
+++ b/tests/test_depth_mindepth_1.out
diff --git a/tests/test_0007.out b/tests/test_depth_mindepth_2.out
index 4198bf9..4198bf9 100644
--- a/tests/test_0007.out
+++ b/tests/test_depth_mindepth_2.out
diff --git a/tests/test_0115.out b/tests/test_depth_n.out
index 3bfc1d3..3bfc1d3 100644
--- a/tests/test_0115.out
+++ b/tests/test_depth_n.out
diff --git a/tests/test_0114.out b/tests/test_depth_n_minus.out
index 7575ae4..7575ae4 100644
--- a/tests/test_0114.out
+++ b/tests/test_depth_n_minus.out
diff --git a/tests/test_0116.out b/tests/test_depth_n_plus.out
index 847995d..847995d 100644
--- a/tests/test_0116.out
+++ b/tests/test_depth_n_plus.out
diff --git a/tests/test_0096.out b/tests/test_depth_slash.out
index 7ce7a82..7ce7a82 100644
--- a/tests/test_0096.out
+++ b/tests/test_depth_slash.out
diff --git a/tests/test_0074.out b/tests/test_double_dash.out
index 774cc7c..774cc7c 100644
--- a/tests/test_0074.out
+++ b/tests/test_double_dash.out
diff --git a/tests/test_0015.out b/tests/test_empty.out
index 81bdb0a..81bdb0a 100644
--- a/tests/test_0015.out
+++ b/tests/test_empty.out
diff --git a/tests/test_0020.out b/tests/test_exec.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0020.out
+++ b/tests/test_exec.out
diff --git a/tests/test_0063.out b/tests/test_exec_substring.out
index 1c58fb2..1c58fb2 100644
--- a/tests/test_0063.out
+++ b/tests/test_exec_substring.out
diff --git a/tests/test_0065.out b/tests/test_execdir.out
index 62b31f6..62b31f6 100644
--- a/tests/test_0065.out
+++ b/tests/test_execdir.out
diff --git a/tests/test_0064.out b/tests/test_execdir_pwd.out
index e66db9a..e66db9a 100644
--- a/tests/test_0064.out
+++ b/tests/test_execdir_pwd.out
diff --git a/tests/test_0043.out b/tests/test_execdir_slash.out
index b498fd4..b498fd4 100644
--- a/tests/test_0043.out
+++ b/tests/test_execdir_slash.out
diff --git a/tests/test_0098.out b/tests/test_execdir_slash_pwd.out
index b498fd4..b498fd4 100644
--- a/tests/test_0098.out
+++ b/tests/test_execdir_slash_pwd.out
diff --git a/tests/test_0044.out b/tests/test_execdir_slashes.out
index 187b81f..187b81f 100644
--- a/tests/test_0044.out
+++ b/tests/test_execdir_slashes.out
diff --git a/tests/test_0066.out b/tests/test_execdir_substring.out
index f7a9ac0..f7a9ac0 100644
--- a/tests/test_0066.out
+++ b/tests/test_execdir_substring.out
diff --git a/tests/test_0012.out b/tests/test_executable.out
index 49c1b21..49c1b21 100644
--- a/tests/test_0012.out
+++ b/tests/test_executable.out
diff --git a/tests/test_0109.out b/tests/test_f.out
index 2998538..2998538 100644
--- a/tests/test_0109.out
+++ b/tests/test_f.out
diff --git a/tests/test_0071.out b/tests/test_flag_comma.out
index 3574388..3574388 100644
--- a/tests/test_0071.out
+++ b/tests/test_flag_comma.out
diff --git a/tests/test_0075.out b/tests/test_flag_double_dash.out
index 774cc7c..774cc7c 100644
--- a/tests/test_0075.out
+++ b/tests/test_flag_double_dash.out
diff --git a/tests/test_0069.out b/tests/test_flag_weird_names.out
index 73d0ff3..73d0ff3 100644
--- a/tests/test_0069.out
+++ b/tests/test_flag_weird_names.out
diff --git a/tests/test_0035.out b/tests/test_follow.out
index 36087e8..36087e8 100644
--- a/tests/test_0035.out
+++ b/tests/test_follow.out
diff --git a/tests/test_0072.out b/tests/test_follow_comma.out
index a4d5860..a4d5860 100644
--- a/tests/test_0072.out
+++ b/tests/test_follow_comma.out
diff --git a/tests/test_0073.out b/tests/test_fprint.out
index a7ccfe4..a7ccfe4 100644
--- a/tests/test_0073.out
+++ b/tests/test_fprint.out
diff --git a/tests/test_0021.out b/tests/test_gid.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0021.out
+++ b/tests/test_gid.out
diff --git a/tests/test_0051.out b/tests/test_gid_minus.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0051.out
+++ b/tests/test_gid_minus.out
diff --git a/tests/test_0052.out b/tests/test_gid_name.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0052.out
+++ b/tests/test_gid_name.out
diff --git a/tests/test_0053.out b/tests/test_gid_plus.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0053.out
+++ b/tests/test_gid_plus.out
diff --git a/tests/test_0054.out b/tests/test_group_id.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0054.out
+++ b/tests/test_group_id.out
diff --git a/tests/test_0055.out b/tests/test_group_name.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0055.out
+++ b/tests/test_group_name.out
diff --git a/tests/test_0110.out b/tests/test_hidden.out
index e65ede9..e65ede9 100644
--- a/tests/test_0110.out
+++ b/tests/test_hidden.out
diff --git a/tests/test_0047.out b/tests/test_ilname.out
index 45cc127..45cc127 100644
--- a/tests/test_0047.out
+++ b/tests/test_ilname.out
diff --git a/tests/test_0010.out b/tests/test_iname.out
index a9e5d42..a9e5d42 100644
--- a/tests/test_0010.out
+++ b/tests/test_iname.out
diff --git a/tests/test_0127.out b/tests/test_inum.out
index ebcaf79..ebcaf79 100644
--- a/tests/test_0127.out
+++ b/tests/test_inum.out
diff --git a/tests/test_0011.out b/tests/test_ipath.out
index 0d36df9..0d36df9 100644
--- a/tests/test_0011.out
+++ b/tests/test_ipath.out
diff --git a/tests/test_0101.out b/tests/test_iregex.out
index cfc113b..cfc113b 100644
--- a/tests/test_0101.out
+++ b/tests/test_iregex.out
diff --git a/tests/test_0026.out b/tests/test_links.out
index 892c879..892c879 100644
--- a/tests/test_0026.out
+++ b/tests/test_links.out
diff --git a/tests/test_0025.out b/tests/test_links_minus.out
index e69de29..e69de29 100644
--- a/tests/test_0025.out
+++ b/tests/test_links_minus.out
diff --git a/tests/test_0036.out b/tests/test_links_plus.out
index 892c879..892c879 100644
--- a/tests/test_0036.out
+++ b/tests/test_links_plus.out
diff --git a/tests/test_0048.out b/tests/test_lname.out
index 45cc127..45cc127 100644
--- a/tests/test_0048.out
+++ b/tests/test_lname.out
diff --git a/tests/test_0117.out b/tests/test_maxdepth.out
index 7575ae4..7575ae4 100644
--- a/tests/test_0117.out
+++ b/tests/test_maxdepth.out
diff --git a/tests/test_0006.out b/tests/test_mindepth.out
index 1f00c58..1f00c58 100644
--- a/tests/test_0006.out
+++ b/tests/test_mindepth.out
diff --git a/tests/test_0057.out b/tests/test_mnewer.out
index 7f6c0dd..7f6c0dd 100644
--- a/tests/test_0057.out
+++ b/tests/test_mnewer.out
diff --git a/tests/test_0045.out b/tests/test_name.out
index a9e5d42..a9e5d42 100644
--- a/tests/test_0045.out
+++ b/tests/test_name.out
diff --git a/tests/test_0041.out b/tests/test_name_root.out
index 511198f..511198f 100644
--- a/tests/test_0041.out
+++ b/tests/test_name_root.out
diff --git a/tests/test_0123.out b/tests/test_name_root_depth.out
index cf4d5a9..cf4d5a9 100644
--- a/tests/test_0123.out
+++ b/tests/test_name_root_depth.out
diff --git a/tests/test_0099.out b/tests/test_name_slash.out
index b498fd4..b498fd4 100644
--- a/tests/test_0099.out
+++ b/tests/test_name_slash.out
diff --git a/tests/test_0100.out b/tests/test_name_slashes.out
index 187b81f..187b81f 100644
--- a/tests/test_0100.out
+++ b/tests/test_name_slashes.out
diff --git a/tests/test_0042.out b/tests/test_name_trailing_slash.out
index daff2f5..daff2f5 100644
--- a/tests/test_0042.out
+++ b/tests/test_name_trailing_slash.out
diff --git a/tests/test_0120.out b/tests/test_newer.out
index 7f6c0dd..7f6c0dd 100644
--- a/tests/test_0120.out
+++ b/tests/test_newer.out
diff --git a/tests/test_0121.out b/tests/test_newerma.out
index 7f6c0dd..7f6c0dd 100644
--- a/tests/test_0121.out
+++ b/tests/test_newerma.out
diff --git a/tests/test_0061.out b/tests/test_nogroup.out
index e69de29..e69de29 100644
--- a/tests/test_0061.out
+++ b/tests/test_nogroup.out
diff --git a/tests/test_0111.out b/tests/test_nohidden.out
index e505d02..e505d02 100644
--- a/tests/test_0111.out
+++ b/tests/test_nohidden.out
diff --git a/tests/test_0084.out b/tests/test_nouser.out
index e69de29..e69de29 100644
--- a/tests/test_0084.out
+++ b/tests/test_nouser.out
diff --git a/tests/test_0094.out b/tests/test_ok_stdin.out
index 30b57fd..30b57fd 100644
--- a/tests/test_0094.out
+++ b/tests/test_ok_stdin.out
diff --git a/tests/test_0095.out b/tests/test_okdir_stdin.out
index ef2a68b..ef2a68b 100644
--- a/tests/test_0095.out
+++ b/tests/test_okdir_stdin.out
diff --git a/tests/test_0067.out b/tests/test_parens.out
index a9e5d42..a9e5d42 100644
--- a/tests/test_0067.out
+++ b/tests/test_parens.out
diff --git a/tests/test_0046.out b/tests/test_path.out
index 0d36df9..0d36df9 100644
--- a/tests/test_0046.out
+++ b/tests/test_path.out
diff --git a/tests/test_0056.out b/tests/test_path_d.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0056.out
+++ b/tests/test_path_d.out
diff --git a/tests/test_0078.out b/tests/test_perm_222.out
index 1690e43..1690e43 100644
--- a/tests/test_0078.out
+++ b/tests/test_perm_222.out
diff --git a/tests/test_0079.out b/tests/test_perm_222_minus.out
index 1690e43..1690e43 100644
--- a/tests/test_0079.out
+++ b/tests/test_perm_222_minus.out
diff --git a/tests/test_0014.out b/tests/test_perm_222_slash.out
index 9a5b95a..9a5b95a 100644
--- a/tests/test_0014.out
+++ b/tests/test_perm_222_slash.out
diff --git a/tests/test_0081.out b/tests/test_perm_644.out
index 4e64e49..4e64e49 100644
--- a/tests/test_0081.out
+++ b/tests/test_perm_644.out
diff --git a/tests/test_0082.out b/tests/test_perm_644_minus.out
index 2e2576b..2e2576b 100644
--- a/tests/test_0082.out
+++ b/tests/test_perm_644_minus.out
diff --git a/tests/test_0083.out b/tests/test_perm_644_slash.out
index 7e5ae98..7e5ae98 100644
--- a/tests/test_0083.out
+++ b/tests/test_perm_644_slash.out
diff --git a/tests/test_0090.out b/tests/test_perm_leading_plus_symbolic.out
index e69de29..e69de29 100644
--- a/tests/test_0090.out
+++ b/tests/test_perm_leading_plus_symbolic.out
diff --git a/tests/test_0092.out b/tests/test_perm_leading_plus_symbolic_minus.out
index e69de29..e69de29 100644
--- a/tests/test_0092.out
+++ b/tests/test_perm_leading_plus_symbolic_minus.out
diff --git a/tests/test_0086.out b/tests/test_perm_leading_plus_symbolic_slash.out
index 7e5ae98..7e5ae98 100644
--- a/tests/test_0086.out
+++ b/tests/test_perm_leading_plus_symbolic_slash.out
diff --git a/tests/test_0128.out b/tests/test_perm_symbolic.out
index e69de29..e69de29 100644
--- a/tests/test_0128.out
+++ b/tests/test_perm_symbolic.out
diff --git a/tests/test_0085.out b/tests/test_perm_symbolic_minus.out
index 2e2576b..2e2576b 100644
--- a/tests/test_0085.out
+++ b/tests/test_perm_symbolic_minus.out
diff --git a/tests/test_0091.out b/tests/test_perm_symbolic_slash.out
index 7e5ae98..7e5ae98 100644
--- a/tests/test_0091.out
+++ b/tests/test_perm_symbolic_slash.out
diff --git a/tests/test_0130.out b/tests/test_printf.out
index 801ddbb..801ddbb 100644
--- a/tests/test_0130.out
+++ b/tests/test_printf.out
diff --git a/tests/test_0137.out b/tests/test_printf_escapes.out
index 20ea120..20ea120 100644
--- a/tests/test_0137.out
+++ b/tests/test_printf_escapes.out
diff --git a/tests/test_0135.out b/tests/test_printf_flags.out
index 1a92b6e..1a92b6e 100644
--- a/tests/test_0135.out
+++ b/tests/test_printf_flags.out
diff --git a/tests/test_0139.out b/tests/test_printf_leak.out
index 15a13db..15a13db 100644
--- a/tests/test_0139.out
+++ b/tests/test_printf_leak.out
diff --git a/tests/test_0131.out b/tests/test_printf_slash.out
index 5571971..5571971 100644
--- a/tests/test_0131.out
+++ b/tests/test_printf_slash.out
diff --git a/tests/test_0132.out b/tests/test_printf_slashes.out
index 60710e5..60710e5 100644
--- a/tests/test_0132.out
+++ b/tests/test_printf_slashes.out
diff --git a/tests/test_0133.out b/tests/test_printf_trailing_slash.out
index 0aa4ffc..0aa4ffc 100644
--- a/tests/test_0133.out
+++ b/tests/test_printf_trailing_slash.out
diff --git a/tests/test_0134.out b/tests/test_printf_trailing_slashes.out
index cbb54a8..cbb54a8 100644
--- a/tests/test_0134.out
+++ b/tests/test_printf_trailing_slashes.out
diff --git a/tests/test_0136.out b/tests/test_printf_types.out
index 94fa833..94fa833 100644
--- a/tests/test_0136.out
+++ b/tests/test_printf_types.out
diff --git a/tests/test_0138.out b/tests/test_quit.out
index cf4d5a9..cf4d5a9 100644
--- a/tests/test_0138.out
+++ b/tests/test_quit.out
diff --git a/tests/test_0141.out b/tests/test_quit_after_print.out
index 15a13db..15a13db 100644
--- a/tests/test_0141.out
+++ b/tests/test_quit_after_print.out
diff --git a/tests/test_0129.out b/tests/test_quit_before_print.out
index e69de29..e69de29 100644
--- a/tests/test_0129.out
+++ b/tests/test_quit_before_print.out
diff --git a/tests/test_0124.out b/tests/test_quit_child.out
index fb683c7..fb683c7 100644
--- a/tests/test_0124.out
+++ b/tests/test_quit_child.out
diff --git a/tests/test_0125.out b/tests/test_quit_depth.out
index fb683c7..fb683c7 100644
--- a/tests/test_0125.out
+++ b/tests/test_quit_depth.out
diff --git a/tests/test_0126.out b/tests/test_quit_depth_child.out
index 72b086d..72b086d 100644
--- a/tests/test_0126.out
+++ b/tests/test_quit_depth_child.out
diff --git a/tests/test_0013.out b/tests/test_readable.out
index 386feba..386feba 100644
--- a/tests/test_0013.out
+++ b/tests/test_readable.out
diff --git a/tests/test_0102.out b/tests/test_regex.out
index cfc113b..cfc113b 100644
--- a/tests/test_0102.out
+++ b/tests/test_regex.out
diff --git a/tests/test_0104.out b/tests/test_regex_parens.out
index 0f0971e..0f0971e 100644
--- a/tests/test_0104.out
+++ b/tests/test_regex_parens.out
diff --git a/tests/test_0105.out b/tests/test_regextype_posix_basic.out
index 0f0971e..0f0971e 100644
--- a/tests/test_0105.out
+++ b/tests/test_regextype_posix_basic.out
diff --git a/tests/test_0106.out b/tests/test_regextype_posix_extended.out
index 0f0971e..0f0971e 100644
--- a/tests/test_0106.out
+++ b/tests/test_regextype_posix_extended.out
diff --git a/tests/test_0040.out b/tests/test_samefile.out
index 892c879..892c879 100644
--- a/tests/test_0040.out
+++ b/tests/test_samefile.out
diff --git a/tests/test_0058.out b/tests/test_size.out
index eeabbd7..eeabbd7 100644
--- a/tests/test_0058.out
+++ b/tests/test_size.out
diff --git a/tests/test_0059.out b/tests/test_size_T.out
index 279f3f1..279f3f1 100644
--- a/tests/test_0059.out
+++ b/tests/test_size_T.out
diff --git a/tests/test_0140.out b/tests/test_size_big.out
index e69de29..e69de29 100644
--- a/tests/test_0140.out
+++ b/tests/test_size_big.out
diff --git a/tests/test_0060.out b/tests/test_size_bytes.out
index 279f3f1..279f3f1 100644
--- a/tests/test_0060.out
+++ b/tests/test_size_bytes.out
diff --git a/tests/test_0122.out b/tests/test_size_plus.out
index 279f3f1..279f3f1 100644
--- a/tests/test_0122.out
+++ b/tests/test_size_plus.out
diff --git a/tests/test_0002.out b/tests/test_type_d.out
index 1e72fd9..1e72fd9 100644
--- a/tests/test_0002.out
+++ b/tests/test_type_d.out
diff --git a/tests/test_0003.out b/tests/test_type_f.out
index 6218a0c..6218a0c 100644
--- a/tests/test_0003.out
+++ b/tests/test_type_f.out
diff --git a/tests/test_0142.out b/tests/test_type_multi.out
index 1f94970..1f94970 100644
--- a/tests/test_0142.out
+++ b/tests/test_type_multi.out
diff --git a/tests/test_0062.out b/tests/test_uid.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0062.out
+++ b/tests/test_uid.out
diff --git a/tests/test_0107.out b/tests/test_uid_minus.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0107.out
+++ b/tests/test_uid_minus.out
diff --git a/tests/test_0108.out b/tests/test_uid_name.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0108.out
+++ b/tests/test_uid_name.out
diff --git a/tests/test_0118.out b/tests/test_uid_plus.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0118.out
+++ b/tests/test_uid_plus.out
diff --git a/tests/test_0119.out b/tests/test_user_id.out
index bb3cd8d..bb3cd8d 100644
--- a/tests/test_0119.out
+++ b/tests/test_user_id.out
diff --git a/tests/test_user_name.out b/tests/test_user_name.out
new file mode 100644
index 0000000..bb3cd8d
--- /dev/null
+++ b/tests/test_user_name.out
@@ -0,0 +1,19 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/e
+basic/g
+basic/i
+basic/j
+basic/k
+basic/l
+basic/c/d
+basic/e/f
+basic/g/h
+basic/j/foo
+basic/k/foo
+basic/l/foo
+basic/k/foo/bar
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/test_0070.out b/tests/test_weird_names.out
index 73d0ff3..73d0ff3 100644
--- a/tests/test_0070.out
+++ b/tests/test_weird_names.out
diff --git a/tests/test_0080.out b/tests/test_writable.out
index 9a5b95a..9a5b95a 100644
--- a/tests/test_0080.out
+++ b/tests/test_writable.out
diff --git a/tests/test_0038.out b/tests/test_xtype_f.out
index 2a65132..2a65132 100644
--- a/tests/test_0038.out
+++ b/tests/test_xtype_f.out
diff --git a/tests/test_0037.out b/tests/test_xtype_l.out
index e5e13fc..e5e13fc 100644
--- a/tests/test_0037.out
+++ b/tests/test_xtype_l.out
diff --git a/tests/test_0143.out b/tests/test_xtype_multi.out
index 8849bb9..8849bb9 100644
--- a/tests/test_0143.out
+++ b/tests/test_xtype_multi.out