summaryrefslogtreecommitdiffstats
path: root/tests/bsd
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bsd')
-rw-r--r--tests/bsd/E.out1
-rw-r--r--tests/bsd/E.sh2
-rw-r--r--tests/bsd/H_mnewer.out4
-rw-r--r--tests/bsd/H_mnewer.sh1
-rw-r--r--tests/bsd/L_acl.out2
-rw-r--r--tests/bsd/L_acl.sh9
-rw-r--r--tests/bsd/L_xattr.out3
-rw-r--r--tests/bsd/L_xattr.sh3
-rw-r--r--tests/bsd/L_xattrname.out2
-rw-r--r--tests/bsd/L_xattrname.sh11
-rw-r--r--tests/bsd/X.out19
-rw-r--r--tests/bsd/X.sh2
-rw-r--r--tests/bsd/acl.out1
-rw-r--r--tests/bsd/acl.sh9
-rw-r--r--tests/bsd/asince.out3
-rw-r--r--tests/bsd/asince.sh1
-rw-r--r--tests/bsd/d_path.out19
-rw-r--r--tests/bsd/d_path.sh1
-rw-r--r--tests/bsd/data_flow_depth.out8
-rw-r--r--tests/bsd/data_flow_depth.sh1
-rw-r--r--tests/bsd/data_flow_sparse.out19
-rw-r--r--tests/bsd/data_flow_sparse.sh1
-rw-r--r--tests/bsd/depth_depth_n.out6
-rw-r--r--tests/bsd/depth_depth_n.sh1
-rw-r--r--tests/bsd/depth_depth_n_minus.out10
-rw-r--r--tests/bsd/depth_depth_n_minus.sh1
-rw-r--r--tests/bsd/depth_depth_n_plus.out3
-rw-r--r--tests/bsd/depth_depth_n_plus.sh1
-rw-r--r--tests/bsd/depth_n.out6
-rw-r--r--tests/bsd/depth_n.sh1
-rw-r--r--tests/bsd/depth_n_minus.out10
-rw-r--r--tests/bsd/depth_n_minus.sh1
-rw-r--r--tests/bsd/depth_n_plus.out3
-rw-r--r--tests/bsd/depth_n_plus.sh1
-rw-r--r--tests/bsd/depth_overflow.out19
-rw-r--r--tests/bsd/depth_overflow.sh1
-rw-r--r--tests/bsd/exit.out1
-rw-r--r--tests/bsd/exit.sh11
-rw-r--r--tests/bsd/exit_no_implicit_print.out0
-rw-r--r--tests/bsd/exit_no_implicit_print.sh1
-rw-r--r--tests/bsd/f.out4
-rw-r--r--tests/bsd/f.sh2
-rw-r--r--tests/bsd/flags.out1
-rw-r--r--tests/bsd/flags.sh8
-rw-r--r--tests/bsd/gid_name.out19
-rw-r--r--tests/bsd/gid_name.sh1
-rw-r--r--tests/bsd/mnewer.out4
-rw-r--r--tests/bsd/mnewer.sh1
-rw-r--r--tests/bsd/msince.out3
-rw-r--r--tests/bsd/msince.sh1
-rw-r--r--tests/bsd/mtime_units.out5
-rw-r--r--tests/bsd/mtime_units.sh1
-rw-r--r--tests/bsd/okdir_stdin.out19
-rw-r--r--tests/bsd/okdir_stdin.sh2
-rw-r--r--tests/bsd/perm_000_plus.out8
-rw-r--r--tests/bsd/perm_000_plus.sh1
-rw-r--r--tests/bsd/perm_222_plus.out5
-rw-r--r--tests/bsd/perm_222_plus.sh1
-rw-r--r--tests/bsd/perm_644_plus.out7
-rw-r--r--tests/bsd/perm_644_plus.sh1
-rw-r--r--tests/bsd/printx.out23
-rw-r--r--tests/bsd/printx.sh1
-rw-r--r--tests/bsd/quit_implicit_print.out1
-rw-r--r--tests/bsd/quit_implicit_print.sh1
-rw-r--r--tests/bsd/rm.out1
-rw-r--r--tests/bsd/rm.sh6
-rw-r--r--tests/bsd/s.out12
-rw-r--r--tests/bsd/s.sh2
-rw-r--r--tests/bsd/size_T.out1
-rw-r--r--tests/bsd/size_T.sh1
-rw-r--r--tests/bsd/uid_name.out19
-rw-r--r--tests/bsd/uid_name.sh1
-rw-r--r--tests/bsd/xattr.out3
-rw-r--r--tests/bsd/xattr.sh3
-rw-r--r--tests/bsd/xattrname.out2
-rw-r--r--tests/bsd/xattrname.sh11
76 files changed, 381 insertions, 0 deletions
diff --git a/tests/bsd/E.out b/tests/bsd/E.out
new file mode 100644
index 0000000..0f0971e
--- /dev/null
+++ b/tests/bsd/E.out
@@ -0,0 +1 @@
+./(
diff --git a/tests/bsd/E.sh b/tests/bsd/E.sh
new file mode 100644
index 0000000..5d97178
--- /dev/null
+++ b/tests/bsd/E.sh
@@ -0,0 +1,2 @@
+cd weirdnames
+bfs_diff -E . -regex '\./(\()'
diff --git a/tests/bsd/H_mnewer.out b/tests/bsd/H_mnewer.out
new file mode 100644
index 0000000..7f6c0dd
--- /dev/null
+++ b/tests/bsd/H_mnewer.out
@@ -0,0 +1,4 @@
+times
+times/b
+times/c
+times/l
diff --git a/tests/bsd/H_mnewer.sh b/tests/bsd/H_mnewer.sh
new file mode 100644
index 0000000..94fe08b
--- /dev/null
+++ b/tests/bsd/H_mnewer.sh
@@ -0,0 +1 @@
+bfs_diff -H times -mnewer times/l
diff --git a/tests/bsd/L_acl.out b/tests/bsd/L_acl.out
new file mode 100644
index 0000000..1dae00a
--- /dev/null
+++ b/tests/bsd/L_acl.out
@@ -0,0 +1,2 @@
+scratch/acl
+scratch/link
diff --git a/tests/bsd/L_acl.sh b/tests/bsd/L_acl.sh
new file mode 100644
index 0000000..d8f5a7d
--- /dev/null
+++ b/tests/bsd/L_acl.sh
@@ -0,0 +1,9 @@
+rm -rf scratch/*
+
+skip_unless invoke_bfs scratch -quit -acl
+
+$TOUCH scratch/{normal,acl}
+skip_unless set_acl scratch/acl
+ln -s acl scratch/link
+
+bfs_diff -L scratch -acl
diff --git a/tests/bsd/L_xattr.out b/tests/bsd/L_xattr.out
new file mode 100644
index 0000000..12fac95
--- /dev/null
+++ b/tests/bsd/L_xattr.out
@@ -0,0 +1,3 @@
+scratch/link
+scratch/xattr
+scratch/xattr_2
diff --git a/tests/bsd/L_xattr.sh b/tests/bsd/L_xattr.sh
new file mode 100644
index 0000000..7c27e0d
--- /dev/null
+++ b/tests/bsd/L_xattr.sh
@@ -0,0 +1,3 @@
+skip_unless invoke_bfs scratch -quit -xattr
+skip_unless make_xattrs
+bfs_diff -L scratch -xattr
diff --git a/tests/bsd/L_xattrname.out b/tests/bsd/L_xattrname.out
new file mode 100644
index 0000000..4dc4836
--- /dev/null
+++ b/tests/bsd/L_xattrname.out
@@ -0,0 +1,2 @@
+scratch/link
+scratch/xattr
diff --git a/tests/bsd/L_xattrname.sh b/tests/bsd/L_xattrname.sh
new file mode 100644
index 0000000..39d6a77
--- /dev/null
+++ b/tests/bsd/L_xattrname.sh
@@ -0,0 +1,11 @@
+skip_unless invoke_bfs scratch -quit -xattr
+skip_unless make_xattrs
+
+case "$UNAME" in
+ Darwin|FreeBSD)
+ bfs_diff -L scratch -xattrname bfs_test
+ ;;
+ *)
+ bfs_diff -L scratch -xattrname security.bfs_test
+ ;;
+esac
diff --git a/tests/bsd/X.out b/tests/bsd/X.out
new file mode 100644
index 0000000..afa84f7
--- /dev/null
+++ b/tests/bsd/X.out
@@ -0,0 +1,19 @@
+weirdnames
+weirdnames/!
+weirdnames/!-
+weirdnames/!-/e
+weirdnames/!/d
+weirdnames/(
+weirdnames/(-
+weirdnames/(-/c
+weirdnames/(/b
+weirdnames/)
+weirdnames/)/g
+weirdnames/,
+weirdnames/,/f
+weirdnames/-
+weirdnames/-/a
+weirdnames/...
+weirdnames/.../h
+weirdnames/[
+weirdnames/[/k
diff --git a/tests/bsd/X.sh b/tests/bsd/X.sh
new file mode 100644
index 0000000..03d9eee
--- /dev/null
+++ b/tests/bsd/X.sh
@@ -0,0 +1,2 @@
+bfs_diff -X weirdnames
+[ $? -eq $EX_BFS ]
diff --git a/tests/bsd/acl.out b/tests/bsd/acl.out
new file mode 100644
index 0000000..ddf8446
--- /dev/null
+++ b/tests/bsd/acl.out
@@ -0,0 +1 @@
+scratch/acl
diff --git a/tests/bsd/acl.sh b/tests/bsd/acl.sh
new file mode 100644
index 0000000..5bbfccc
--- /dev/null
+++ b/tests/bsd/acl.sh
@@ -0,0 +1,9 @@
+rm -rf scratch/*
+
+skip_unless invoke_bfs scratch -quit -acl
+
+$TOUCH scratch/{normal,acl}
+skip_unless set_acl scratch/acl
+ln -s acl scratch/link
+
+bfs_diff scratch -acl
diff --git a/tests/bsd/asince.out b/tests/bsd/asince.out
new file mode 100644
index 0000000..650e550
--- /dev/null
+++ b/tests/bsd/asince.out
@@ -0,0 +1,3 @@
+times
+times/c
+times/l
diff --git a/tests/bsd/asince.sh b/tests/bsd/asince.sh
new file mode 100644
index 0000000..32d5228
--- /dev/null
+++ b/tests/bsd/asince.sh
@@ -0,0 +1 @@
+bfs_diff times -asince 1991-12-14T00:01
diff --git a/tests/bsd/d_path.out b/tests/bsd/d_path.out
new file mode 100644
index 0000000..a7ccfe4
--- /dev/null
+++ b/tests/bsd/d_path.out
@@ -0,0 +1,19 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/c/d
+basic/e
+basic/e/f
+basic/g
+basic/g/h
+basic/i
+basic/j
+basic/j/foo
+basic/k
+basic/k/foo
+basic/k/foo/bar
+basic/l
+basic/l/foo
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/bsd/d_path.sh b/tests/bsd/d_path.sh
new file mode 100644
index 0000000..010f76f
--- /dev/null
+++ b/tests/bsd/d_path.sh
@@ -0,0 +1 @@
+bfs_diff -d basic
diff --git a/tests/bsd/data_flow_depth.out b/tests/bsd/data_flow_depth.out
new file mode 100644
index 0000000..ab127ec
--- /dev/null
+++ b/tests/bsd/data_flow_depth.out
@@ -0,0 +1,8 @@
+basic/c/d
+basic/e/f
+basic/g/h
+basic/j/foo
+basic/k/foo
+basic/k/foo/bar
+basic/l/foo
+basic/l/foo/bar
diff --git a/tests/bsd/data_flow_depth.sh b/tests/bsd/data_flow_depth.sh
new file mode 100644
index 0000000..cd5d6b2
--- /dev/null
+++ b/tests/bsd/data_flow_depth.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth +1 -depth -4
diff --git a/tests/bsd/data_flow_sparse.out b/tests/bsd/data_flow_sparse.out
new file mode 100644
index 0000000..a7ccfe4
--- /dev/null
+++ b/tests/bsd/data_flow_sparse.out
@@ -0,0 +1,19 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/c/d
+basic/e
+basic/e/f
+basic/g
+basic/g/h
+basic/i
+basic/j
+basic/j/foo
+basic/k
+basic/k/foo
+basic/k/foo/bar
+basic/l
+basic/l/foo
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/bsd/data_flow_sparse.sh b/tests/bsd/data_flow_sparse.sh
new file mode 100644
index 0000000..bd7e1f7
--- /dev/null
+++ b/tests/bsd/data_flow_sparse.sh
@@ -0,0 +1 @@
+bfs_diff basic \( -sparse -not -sparse \) -o \( -sparse -o -not -sparse \)
diff --git a/tests/bsd/depth_depth_n.out b/tests/bsd/depth_depth_n.out
new file mode 100644
index 0000000..3bfc1d3
--- /dev/null
+++ b/tests/bsd/depth_depth_n.out
@@ -0,0 +1,6 @@
+basic/c/d
+basic/e/f
+basic/g/h
+basic/j/foo
+basic/k/foo
+basic/l/foo
diff --git a/tests/bsd/depth_depth_n.sh b/tests/bsd/depth_depth_n.sh
new file mode 100644
index 0000000..5989b3c
--- /dev/null
+++ b/tests/bsd/depth_depth_n.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth -depth 2
diff --git a/tests/bsd/depth_depth_n_minus.out b/tests/bsd/depth_depth_n_minus.out
new file mode 100644
index 0000000..7575ae4
--- /dev/null
+++ b/tests/bsd/depth_depth_n_minus.out
@@ -0,0 +1,10 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/e
+basic/g
+basic/i
+basic/j
+basic/k
+basic/l
diff --git a/tests/bsd/depth_depth_n_minus.sh b/tests/bsd/depth_depth_n_minus.sh
new file mode 100644
index 0000000..1d8ac79
--- /dev/null
+++ b/tests/bsd/depth_depth_n_minus.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth -depth -2
diff --git a/tests/bsd/depth_depth_n_plus.out b/tests/bsd/depth_depth_n_plus.out
new file mode 100644
index 0000000..847995d
--- /dev/null
+++ b/tests/bsd/depth_depth_n_plus.out
@@ -0,0 +1,3 @@
+basic/k/foo/bar
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/bsd/depth_depth_n_plus.sh b/tests/bsd/depth_depth_n_plus.sh
new file mode 100644
index 0000000..64e392b
--- /dev/null
+++ b/tests/bsd/depth_depth_n_plus.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth -depth +2
diff --git a/tests/bsd/depth_n.out b/tests/bsd/depth_n.out
new file mode 100644
index 0000000..3bfc1d3
--- /dev/null
+++ b/tests/bsd/depth_n.out
@@ -0,0 +1,6 @@
+basic/c/d
+basic/e/f
+basic/g/h
+basic/j/foo
+basic/k/foo
+basic/l/foo
diff --git a/tests/bsd/depth_n.sh b/tests/bsd/depth_n.sh
new file mode 100644
index 0000000..4852952
--- /dev/null
+++ b/tests/bsd/depth_n.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth 2
diff --git a/tests/bsd/depth_n_minus.out b/tests/bsd/depth_n_minus.out
new file mode 100644
index 0000000..7575ae4
--- /dev/null
+++ b/tests/bsd/depth_n_minus.out
@@ -0,0 +1,10 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/e
+basic/g
+basic/i
+basic/j
+basic/k
+basic/l
diff --git a/tests/bsd/depth_n_minus.sh b/tests/bsd/depth_n_minus.sh
new file mode 100644
index 0000000..192bf8a
--- /dev/null
+++ b/tests/bsd/depth_n_minus.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth -2
diff --git a/tests/bsd/depth_n_plus.out b/tests/bsd/depth_n_plus.out
new file mode 100644
index 0000000..847995d
--- /dev/null
+++ b/tests/bsd/depth_n_plus.out
@@ -0,0 +1,3 @@
+basic/k/foo/bar
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/bsd/depth_n_plus.sh b/tests/bsd/depth_n_plus.sh
new file mode 100644
index 0000000..858e1c4
--- /dev/null
+++ b/tests/bsd/depth_n_plus.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth +2
diff --git a/tests/bsd/depth_overflow.out b/tests/bsd/depth_overflow.out
new file mode 100644
index 0000000..a7ccfe4
--- /dev/null
+++ b/tests/bsd/depth_overflow.out
@@ -0,0 +1,19 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/c/d
+basic/e
+basic/e/f
+basic/g
+basic/g/h
+basic/i
+basic/j
+basic/j/foo
+basic/k
+basic/k/foo
+basic/k/foo/bar
+basic/l
+basic/l/foo
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/bsd/depth_overflow.sh b/tests/bsd/depth_overflow.sh
new file mode 100644
index 0000000..4685d03
--- /dev/null
+++ b/tests/bsd/depth_overflow.sh
@@ -0,0 +1 @@
+bfs_diff basic -depth -4294967296
diff --git a/tests/bsd/exit.out b/tests/bsd/exit.out
new file mode 100644
index 0000000..cf4d5a9
--- /dev/null
+++ b/tests/bsd/exit.out
@@ -0,0 +1 @@
+basic/g
diff --git a/tests/bsd/exit.sh b/tests/bsd/exit.sh
new file mode 100644
index 0000000..524a75f
--- /dev/null
+++ b/tests/bsd/exit.sh
@@ -0,0 +1,11 @@
+invoke_bfs basic -name foo -exit 42
+if [ $? -ne 42 ]; then
+ return 1
+fi
+
+invoke_bfs basic -name qux -exit 42
+if [ $? -ne 0 ]; then
+ return 1
+fi
+
+bfs_diff basic/g -print -name g -exit
diff --git a/tests/bsd/exit_no_implicit_print.out b/tests/bsd/exit_no_implicit_print.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/bsd/exit_no_implicit_print.out
diff --git a/tests/bsd/exit_no_implicit_print.sh b/tests/bsd/exit_no_implicit_print.sh
new file mode 100644
index 0000000..c48b43c
--- /dev/null
+++ b/tests/bsd/exit_no_implicit_print.sh
@@ -0,0 +1 @@
+bfs_diff basic -not -name foo -o -exit
diff --git a/tests/bsd/f.out b/tests/bsd/f.out
new file mode 100644
index 0000000..77eac77
--- /dev/null
+++ b/tests/bsd/f.out
@@ -0,0 +1,4 @@
+(
+(/b
+-
+-/a
diff --git a/tests/bsd/f.sh b/tests/bsd/f.sh
new file mode 100644
index 0000000..42d2dfd
--- /dev/null
+++ b/tests/bsd/f.sh
@@ -0,0 +1,2 @@
+cd weirdnames
+bfs_diff -f '-' -f '('
diff --git a/tests/bsd/flags.out b/tests/bsd/flags.out
new file mode 100644
index 0000000..11998ed
--- /dev/null
+++ b/tests/bsd/flags.out
@@ -0,0 +1 @@
+scratch/bar
diff --git a/tests/bsd/flags.sh b/tests/bsd/flags.sh
new file mode 100644
index 0000000..99d0fdb
--- /dev/null
+++ b/tests/bsd/flags.sh
@@ -0,0 +1,8 @@
+skip_unless invoke_bfs scratch -quit -flags offline
+
+rm -rf scratch/*
+
+$TOUCH scratch/{foo,bar}
+skip_unless chflags offline scratch/bar
+
+bfs_diff scratch -flags -offline,nohidden
diff --git a/tests/bsd/gid_name.out b/tests/bsd/gid_name.out
new file mode 100644
index 0000000..a7ccfe4
--- /dev/null
+++ b/tests/bsd/gid_name.out
@@ -0,0 +1,19 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/c/d
+basic/e
+basic/e/f
+basic/g
+basic/g/h
+basic/i
+basic/j
+basic/j/foo
+basic/k
+basic/k/foo
+basic/k/foo/bar
+basic/l
+basic/l/foo
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/bsd/gid_name.sh b/tests/bsd/gid_name.sh
new file mode 100644
index 0000000..c7e0e71
--- /dev/null
+++ b/tests/bsd/gid_name.sh
@@ -0,0 +1 @@
+bfs_diff basic -gid "$(id -gn)"
diff --git a/tests/bsd/mnewer.out b/tests/bsd/mnewer.out
new file mode 100644
index 0000000..7f6c0dd
--- /dev/null
+++ b/tests/bsd/mnewer.out
@@ -0,0 +1,4 @@
+times
+times/b
+times/c
+times/l
diff --git a/tests/bsd/mnewer.sh b/tests/bsd/mnewer.sh
new file mode 100644
index 0000000..5d9f1a7
--- /dev/null
+++ b/tests/bsd/mnewer.sh
@@ -0,0 +1 @@
+bfs_diff times -mnewer times/a
diff --git a/tests/bsd/msince.out b/tests/bsd/msince.out
new file mode 100644
index 0000000..650e550
--- /dev/null
+++ b/tests/bsd/msince.out
@@ -0,0 +1,3 @@
+times
+times/c
+times/l
diff --git a/tests/bsd/msince.sh b/tests/bsd/msince.sh
new file mode 100644
index 0000000..ec22f02
--- /dev/null
+++ b/tests/bsd/msince.sh
@@ -0,0 +1 @@
+bfs_diff times -msince 1991-12-14T00:01
diff --git a/tests/bsd/mtime_units.out b/tests/bsd/mtime_units.out
new file mode 100644
index 0000000..f7f63b0
--- /dev/null
+++ b/tests/bsd/mtime_units.out
@@ -0,0 +1,5 @@
+times
+times/a
+times/b
+times/c
+times/l
diff --git a/tests/bsd/mtime_units.sh b/tests/bsd/mtime_units.sh
new file mode 100644
index 0000000..a1e587e
--- /dev/null
+++ b/tests/bsd/mtime_units.sh
@@ -0,0 +1 @@
+bfs_diff times -mtime +500w400d300h200m100s
diff --git a/tests/bsd/okdir_stdin.out b/tests/bsd/okdir_stdin.out
new file mode 100644
index 0000000..ef2a68b
--- /dev/null
+++ b/tests/bsd/okdir_stdin.out
@@ -0,0 +1,19 @@
+./a? y
+./b? y
+./bar? y
+./bar? y
+./basic? y
+./baz? y
+./c? y
+./d? y
+./e? y
+./f? y
+./foo? y
+./foo? y
+./foo? y
+./g? y
+./h? y
+./i? y
+./j? y
+./k? y
+./l? y
diff --git a/tests/bsd/okdir_stdin.sh b/tests/bsd/okdir_stdin.sh
new file mode 100644
index 0000000..7908ac0
--- /dev/null
+++ b/tests/bsd/okdir_stdin.sh
@@ -0,0 +1,2 @@
+# -okdir should *not* close stdin
+yes | bfs_diff basic -okdir bash -c 'printf "%s? " "$1" && head -n1' bash {} \;
diff --git a/tests/bsd/perm_000_plus.out b/tests/bsd/perm_000_plus.out
new file mode 100644
index 0000000..d7494b8
--- /dev/null
+++ b/tests/bsd/perm_000_plus.out
@@ -0,0 +1,8 @@
+perms
+perms/0
+perms/r
+perms/rw
+perms/rwx
+perms/rx
+perms/w
+perms/wx
diff --git a/tests/bsd/perm_000_plus.sh b/tests/bsd/perm_000_plus.sh
new file mode 100644
index 0000000..9ab3146
--- /dev/null
+++ b/tests/bsd/perm_000_plus.sh
@@ -0,0 +1 @@
+bfs_diff perms -perm +000
diff --git a/tests/bsd/perm_222_plus.out b/tests/bsd/perm_222_plus.out
new file mode 100644
index 0000000..9a5b95a
--- /dev/null
+++ b/tests/bsd/perm_222_plus.out
@@ -0,0 +1,5 @@
+perms
+perms/rw
+perms/rwx
+perms/w
+perms/wx
diff --git a/tests/bsd/perm_222_plus.sh b/tests/bsd/perm_222_plus.sh
new file mode 100644
index 0000000..ac3c4eb
--- /dev/null
+++ b/tests/bsd/perm_222_plus.sh
@@ -0,0 +1 @@
+bfs_diff perms -perm +222
diff --git a/tests/bsd/perm_644_plus.out b/tests/bsd/perm_644_plus.out
new file mode 100644
index 0000000..7e5ae98
--- /dev/null
+++ b/tests/bsd/perm_644_plus.out
@@ -0,0 +1,7 @@
+perms
+perms/r
+perms/rw
+perms/rwx
+perms/rx
+perms/w
+perms/wx
diff --git a/tests/bsd/perm_644_plus.sh b/tests/bsd/perm_644_plus.sh
new file mode 100644
index 0000000..b3f5bc6
--- /dev/null
+++ b/tests/bsd/perm_644_plus.sh
@@ -0,0 +1 @@
+bfs_diff perms -perm +644
diff --git a/tests/bsd/printx.out b/tests/bsd/printx.out
new file mode 100644
index 0000000..04bf9a9
--- /dev/null
+++ b/tests/bsd/printx.out
@@ -0,0 +1,23 @@
+weirdnames
+weirdnames/!
+weirdnames/!-
+weirdnames/!-/e
+weirdnames/!/d
+weirdnames/(
+weirdnames/(-
+weirdnames/(-/c
+weirdnames/(/b
+weirdnames/)
+weirdnames/)/g
+weirdnames/,
+weirdnames/,/f
+weirdnames/-
+weirdnames/-/a
+weirdnames/...
+weirdnames/.../h
+weirdnames/[
+weirdnames/[/k
+weirdnames/\
+weirdnames/\ /j
+weirdnames/\\
+weirdnames/\\/i
diff --git a/tests/bsd/printx.sh b/tests/bsd/printx.sh
new file mode 100644
index 0000000..cb24aab
--- /dev/null
+++ b/tests/bsd/printx.sh
@@ -0,0 +1 @@
+bfs_diff weirdnames -printx
diff --git a/tests/bsd/quit_implicit_print.out b/tests/bsd/quit_implicit_print.out
new file mode 100644
index 0000000..15a13db
--- /dev/null
+++ b/tests/bsd/quit_implicit_print.out
@@ -0,0 +1 @@
+basic
diff --git a/tests/bsd/quit_implicit_print.sh b/tests/bsd/quit_implicit_print.sh
new file mode 100644
index 0000000..ea8fd5d
--- /dev/null
+++ b/tests/bsd/quit_implicit_print.sh
@@ -0,0 +1 @@
+bfs_diff basic -name basic -o -quit
diff --git a/tests/bsd/rm.out b/tests/bsd/rm.out
new file mode 100644
index 0000000..fb188b9
--- /dev/null
+++ b/tests/bsd/rm.out
@@ -0,0 +1 @@
+scratch
diff --git a/tests/bsd/rm.sh b/tests/bsd/rm.sh
new file mode 100644
index 0000000..2e8b613
--- /dev/null
+++ b/tests/bsd/rm.sh
@@ -0,0 +1,6 @@
+rm -rf scratch/*
+touchp scratch/foo/bar/baz
+
+(cd scratch && invoke_bfs . -rm)
+
+bfs_diff scratch
diff --git a/tests/bsd/s.out b/tests/bsd/s.out
new file mode 100644
index 0000000..6b790c2
--- /dev/null
+++ b/tests/bsd/s.out
@@ -0,0 +1,12 @@
+weirdnames
+weirdnames/
+weirdnames/!
+weirdnames/!-
+weirdnames/(
+weirdnames/(-
+weirdnames/)
+weirdnames/,
+weirdnames/-
+weirdnames/...
+weirdnames/[
+weirdnames/\
diff --git a/tests/bsd/s.sh b/tests/bsd/s.sh
new file mode 100644
index 0000000..52f8eb3
--- /dev/null
+++ b/tests/bsd/s.sh
@@ -0,0 +1,2 @@
+invoke_bfs -s weirdnames -maxdepth 1 >"$OUT"
+diff_output
diff --git a/tests/bsd/size_T.out b/tests/bsd/size_T.out
new file mode 100644
index 0000000..279f3f1
--- /dev/null
+++ b/tests/bsd/size_T.out
@@ -0,0 +1 @@
+basic/l/foo/bar/baz
diff --git a/tests/bsd/size_T.sh b/tests/bsd/size_T.sh
new file mode 100644
index 0000000..1023a10
--- /dev/null
+++ b/tests/bsd/size_T.sh
@@ -0,0 +1 @@
+bfs_diff basic -type f -size 1T
diff --git a/tests/bsd/uid_name.out b/tests/bsd/uid_name.out
new file mode 100644
index 0000000..a7ccfe4
--- /dev/null
+++ b/tests/bsd/uid_name.out
@@ -0,0 +1,19 @@
+basic
+basic/a
+basic/b
+basic/c
+basic/c/d
+basic/e
+basic/e/f
+basic/g
+basic/g/h
+basic/i
+basic/j
+basic/j/foo
+basic/k
+basic/k/foo
+basic/k/foo/bar
+basic/l
+basic/l/foo
+basic/l/foo/bar
+basic/l/foo/bar/baz
diff --git a/tests/bsd/uid_name.sh b/tests/bsd/uid_name.sh
new file mode 100644
index 0000000..7d3ba82
--- /dev/null
+++ b/tests/bsd/uid_name.sh
@@ -0,0 +1 @@
+bfs_diff basic -uid "$(id -un)"
diff --git a/tests/bsd/xattr.out b/tests/bsd/xattr.out
new file mode 100644
index 0000000..109e7c9
--- /dev/null
+++ b/tests/bsd/xattr.out
@@ -0,0 +1,3 @@
+scratch/xattr
+scratch/xattr_2
+scratch/xattr_link
diff --git a/tests/bsd/xattr.sh b/tests/bsd/xattr.sh
new file mode 100644
index 0000000..727c220
--- /dev/null
+++ b/tests/bsd/xattr.sh
@@ -0,0 +1,3 @@
+skip_unless invoke_bfs scratch -quit -xattr
+skip_unless make_xattrs
+bfs_diff scratch -xattr
diff --git a/tests/bsd/xattrname.out b/tests/bsd/xattrname.out
new file mode 100644
index 0000000..0285ac1
--- /dev/null
+++ b/tests/bsd/xattrname.out
@@ -0,0 +1,2 @@
+scratch/xattr
+scratch/xattr_link
diff --git a/tests/bsd/xattrname.sh b/tests/bsd/xattrname.sh
new file mode 100644
index 0000000..6a0fe7e
--- /dev/null
+++ b/tests/bsd/xattrname.sh
@@ -0,0 +1,11 @@
+skip_unless invoke_bfs scratch -quit -xattr
+skip_unless make_xattrs
+
+case "$UNAME" in
+ Darwin|FreeBSD)
+ bfs_diff scratch -xattrname bfs_test
+ ;;
+ *)
+ bfs_diff scratch -xattrname security.bfs_test
+ ;;
+esac