forked from bonsai/harakit
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
e028844825
|
|||
|
f022121436
|
|||
|
e278307daf
|
|||
|
4ad9e0da92
|
|||
|
0113cf793d
|
|||
|
1aa2b596d0
|
|||
|
c6f30c4195
|
|||
|
3398fc372c
|
|||
|
28f2d44e2f
|
|||
|
aefa87d9e5
|
|||
|
057f5571d6
|
|||
|
e7021e127c
|
|||
|
417d7ca405
|
|||
|
f7a74dc430
|
|||
|
cabe08bca4
|
@@ -97,9 +97,10 @@ their editor or terminal.
|
|||||||
|
|
||||||
For usage text and help messages, do not implement a -h option. Instead, print
|
For usage text and help messages, do not implement a -h option. Instead, print
|
||||||
usage information when any erroneous option is specified. Follow the NetBSD
|
usage information when any erroneous option is specified. Follow the NetBSD
|
||||||
style guide for the usage text’s output format [1].
|
style guide for the usage text’s output format [0].
|
||||||
|
|
||||||
[1] <http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/share/misc/style>
|
If committing a new utility, please include tests and documentation (see
|
||||||
|
tests/ and docs/) for the new tool.
|
||||||
|
|
||||||
If committing a new source file, format the commit message following these
|
If committing a new source file, format the commit message following these
|
||||||
guidelines:
|
guidelines:
|
||||||
@@ -128,6 +129,7 @@ $ git commit -m 'tool(1): fix #42 & add feature x'
|
|||||||
|
|
||||||
Commit messages should be written in the present tense.
|
Commit messages should be written in the present tense.
|
||||||
|
|
||||||
|
[0] <http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/share/misc/style>
|
||||||
--
|
--
|
||||||
This work © 2023–2024 by Emma Tebibyte is licensed under CC BY-SA 4.0. To view a
|
This work © 2023–2024 by Emma Tebibyte is licensed under CC BY-SA 4.0. To view a
|
||||||
copy of this license, visit <http://creativecommons.org/licenses/by-sa/4.0/>
|
copy of this license, visit <http://creativecommons.org/licenses/by-sa/4.0/>
|
||||||
|
|||||||
5
Makefile
5
Makefile
@@ -14,6 +14,7 @@
|
|||||||
PREFIX=/usr/local
|
PREFIX=/usr/local
|
||||||
|
|
||||||
CC=cc
|
CC=cc
|
||||||
|
MAKE=make
|
||||||
RUSTC=rustc
|
RUSTC=rustc
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
@@ -39,8 +40,8 @@ install: dist
|
|||||||
cp -r dist/* $(PREFIX)/
|
cp -r dist/* $(PREFIX)/
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: build
|
test: all
|
||||||
tests/posix-compat.sh
|
tests/test.sh
|
||||||
$(RUSTC) --test src/getopt-rs/lib.rs -o build/test/getopt
|
$(RUSTC) --test src/getopt-rs/lib.rs -o build/test/getopt
|
||||||
|
|
||||||
build/o/libsysexits.rlib: build
|
build/o/libsysexits.rlib: build
|
||||||
|
|||||||
27
tests/bonsai/dj.sh
Executable file
27
tests/bonsai/dj.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
! dj -h
|
||||||
|
|
||||||
|
# This test is theoretically Linux-dependent; write(2) should return -1 on
|
||||||
|
# error.
|
||||||
|
# Right now dj(1) interprets the return value of write(2) as the amount of
|
||||||
|
# bytes written. This can decrement the stored quantity of bytes written,
|
||||||
|
# which is an int, so doesn't underflow but goes negative. dj(1) tries to
|
||||||
|
# again to write(2) if an error occurs in which no bytes are written, so in
|
||||||
|
# total two write(2)s are attempted and so the written byte quantity is -2.
|
||||||
|
# This is a bug and will change, but for now is at least documented.
|
||||||
|
dj -Hi /dev/zero -o /dev/full \
|
||||||
|
| xargs -I out "$BIN/strcmp" '1+0 > 0+0; 1024 > -2' out
|
||||||
|
|
||||||
|
# Read nothing from /dev/null, write nothing to /dev/null.
|
||||||
|
dj -Hi /dev/null -o /dev/null \
|
||||||
|
| xargs -I out "$BIN/strcmp" '0+0 > 0+0; 0 > 0' out
|
||||||
13
tests/bonsai/false.sh
Executable file
13
tests/bonsai/false.sh
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
! false
|
||||||
|
! false -h
|
||||||
21
tests/bonsai/fop.sh
Executable file
21
tests/bonsai/fop.sh
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
! fop -h
|
||||||
|
|
||||||
|
"$BIN/strcmp" "$(printf 'test0␞test1␞test2\n' | fop 1 sed 's/1/4/g')" \
|
||||||
|
'test0␞test4␞test2'
|
||||||
|
|
||||||
|
"$BIN/strcmp" "$(printf 'test0 test1 test2\n' | fop -d' ' 2 sed 's/2/4/g')" \
|
||||||
|
'test0 test1 test4'
|
||||||
|
|
||||||
|
! printf 'test\n' | fop 1 cat
|
||||||
|
! printf 'test\n' | fop 'test' cat
|
||||||
|
! printf 'test\n' | fop -d'test' cat
|
||||||
26
tests/bonsai/hru.sh
Executable file
26
tests/bonsai/hru.sh
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
alias strcmp="$BIN/strcmp"
|
||||||
|
alias rpn="$BIN/rpn"
|
||||||
|
|
||||||
|
strcmp "$(printf '1234\n' | hru)" '1.2 kB'
|
||||||
|
strcmp "$(printf '0\n' | hru)" '0 B'
|
||||||
|
|
||||||
|
# doesn’t currently work but would be useful for testing for regressions
|
||||||
|
#n=1
|
||||||
|
#while "$BIN/true"; do
|
||||||
|
# n="$(rpn "$n" 10 ×)"
|
||||||
|
#
|
||||||
|
# printf '%s\n' "$n" | hru || break
|
||||||
|
#done
|
||||||
|
#printf 'integer limit: ~%s\n' "$(rpn "$n" 10 ÷)"
|
||||||
|
|
||||||
|
! printf '%s\n' '-1' | hru
|
||||||
25
tests/bonsai/intcmp.sh
Executable file
25
tests/bonsai/intcmp.sh
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
intcmp -e 3 3 3
|
||||||
|
intcmp -g 3 2 1
|
||||||
|
intcmp -l 1 2 3
|
||||||
|
intcmp -ge 3 3 1
|
||||||
|
intcmp -le 1 3 3
|
||||||
|
intcmp -gl 1 2 3
|
||||||
|
intcmp -egl 3 1 1 2
|
||||||
|
! intcmp -e 1 2 3
|
||||||
|
! intcmp -g 1 3 3
|
||||||
|
! intcmp -l 3 3 1
|
||||||
|
! intcmp -ge 1 2 3
|
||||||
|
! intcmp -le 3 2 1
|
||||||
|
! intcmp -gl 3 3 3
|
||||||
|
! intcmp -egl foo
|
||||||
19
tests/bonsai/mm.sh
Executable file
19
tests/bonsai/mm.sh
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
exec 3>&1
|
||||||
|
|
||||||
|
! mm -h
|
||||||
|
|
||||||
|
# mm(1) will error if positional arguments are given without -i or -o
|
||||||
|
! mm argument
|
||||||
|
|
||||||
|
# check if stderr is empty upon specifying -e
|
||||||
|
! "$BIN/strcmp" "$(printf 'test\n' | mm -i - -e 2>&1 1>&3)" ''
|
||||||
16
tests/bonsai/strcmp.sh
Executable file
16
tests/bonsai/strcmp.sh
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
strcmp equals equals
|
||||||
|
! strcmp inequals equals
|
||||||
|
strcmp - -
|
||||||
|
strcmp -h
|
||||||
|
! strcmp nocmp
|
||||||
5
tests/bonsai/test_env
Normal file
5
tests/bonsai/test_env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
alias "$UTIL=$BIN/$UTIL"
|
||||||
13
tests/bonsai/true.sh
Executable file
13
tests/bonsai/true.sh
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
true
|
||||||
|
true -h
|
||||||
22
tests/posix/bin/cat
Executable file
22
tests/posix/bin/cat
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
# Strictly POSIX-compliant cat(1) implementation. See cat(1p)
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
-u) args="$(printf '%s %s\n' "$args" "$arg")" ;;
|
||||||
|
*) args="$(printf -- '%s -i %s\n' "$args" "$arg")" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# See IEEE Std 1003.1-2017 3.282
|
||||||
|
# https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_282
|
||||||
|
IFS=' '
|
||||||
|
|
||||||
|
mm $args
|
||||||
12
tests/posix/bin/false
Executable file
12
tests/posix/bin/false
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
# Strictly POSIX-compliant false(1) implementation. See false(1p)
|
||||||
|
|
||||||
|
false "$@"
|
||||||
11
tests/posix/bin/true
Executable file
11
tests/posix/bin/true
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
# Strictly POSIX-compliant true(1) implementation. See true(1p)
|
||||||
|
true "$@"
|
||||||
@@ -9,16 +9,30 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
export BIN=build/bin
|
||||||
|
|
||||||
if ! ls Makefile >/dev/null 2>&1
|
if ! ls Makefile >/dev/null 2>&1
|
||||||
then
|
then
|
||||||
printf '%s: Run this script in the root of the project.\n' "$0" 1>&2
|
printf '%s: Run this script in the root of the project.\n' "$0" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf "Starting POSIX compatibility testing.\n"
|
printf "Starting Bonsai testing.\n\n"
|
||||||
|
|
||||||
for utility in tests/posix/*; do
|
for script in tests/bonsai/*.sh; do
|
||||||
printf '%s: %s: Testing utility.\n' "$0" "$utility"
|
export UTIL="$(printf '%s\n' "$script" \
|
||||||
|
| sed -e 's/\.sh//g' -e 's;tests\/bonsai\/;;g')"
|
||||||
|
|
||||||
|
printf '%s: %s: Testing utility.\n' "$0" "$UTIL"
|
||||||
|
"$script"
|
||||||
|
printf '\n'
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "Starting POSIX compatibility testing.\n\n"
|
||||||
|
|
||||||
|
for test in tests/posix/*.sh; do
|
||||||
|
export PATH="$BIN:$PATH"
|
||||||
|
printf '%s: %s: Testing utility.\n' "$0" "$test"
|
||||||
"$utility"
|
"$utility"
|
||||||
printf '\n'
|
printf '\n'
|
||||||
done
|
done
|
||||||
Reference in New Issue
Block a user