17 Commits

Author SHA1 Message Date
Thomas Levine
db3dd1c662 typos 2016-04-04 01:22:05 +00:00
Thomas Levine
a9e0f856fb error message text 2016-04-04 01:17:58 +00:00
Thomas Levine
72f0700598 fixing timeout flag 2016-04-04 01:16:51 +00:00
Thomas Levine
a486a6f296 check timeout error message 2016-04-04 01:07:29 +00:00
Thomas Levine
a9ba8e79d3 suppress timeout errors 2016-04-04 01:04:04 +00:00
Thomas Levine
586f46600a assert that there is no timeout output 2016-04-04 01:03:05 +00:00
Thomas Levine
940cd549ab more timeout tests 2016-04-04 00:58:37 +00:00
Thomas Levine
cd7f773d58 fix debug 2016-04-04 00:42:08 +00:00
Thomas Levine
0de2c3264a version in readme 2016-04-04 00:24:54 +00:00
Thomas Levine
fc51c34019 debug messages 2016-04-01 19:52:34 +00:00
Thomas Levine
c61d31fcea docs 2016-04-01 19:43:02 +00:00
Thomas Levine
6275c28ebf update history 2016-04-01 18:25:53 +00:00
Thomas Levine
b0a7a8b07a remove out-of-date windows screenshots 2016-04-01 18:24:59 +00:00
Thomas Levine
f7ffd82893 fix name 2016-04-01 18:21:26 +00:00
Thomas Levine
a5ffad0446 Automatic commit with j 2016-04-01 18:21:01 +00:00
Thomas Levine
b402f466b5 package for nongnu 2016-04-01 18:20:00 +00:00
Thomas Levine
7a34da0906 packaging 2016-04-01 18:19:28 +00:00
11 changed files with 94 additions and 23 deletions

View File

@@ -1,7 +1,7 @@
HISTORY HISTORY
======= =======
Version 0.1.0-rc1 Version 0.1.0
--------------------- ---------------------
This release includes breaking changes. This release includes breaking changes.
@@ -72,7 +72,7 @@ might look for the dependency and then skip if it does not see the dependency.
It might look like this. It might look like this.
#!/bin/sh #!/bin/sh
if which inkscape; then if ! which inkscape; then
exit 3 # status code 3 for skip exit 3 # status code 3 for skip
fi fi
inkscape blah blah ... inkscape blah blah ...
@@ -171,10 +171,6 @@ set as an environment variable, and the latter was set with the -s flag..
Urchin now uses the -s flag for both of these settings, and it mostly ignores Urchin now uses the -s flag for both of these settings, and it mostly ignores
the exported TEST_SHELL variable. the exported TEST_SHELL variable.
Urchin also inspects the shebang line differently. Previously, Urchin would
vary the shells with which a test is run if the shebang line either was absent
or was #!/bin/sh. Now it varies the shell only if the shebang line is absent.
If you pass -n/--disable-cycling, Urchin will invoke tests ordinarily and will If you pass -n/--disable-cycling, Urchin will invoke tests ordinarily and will
only set the TEST_SHELL variable if it does not exist. If the TEST_SHELL only set the TEST_SHELL variable if it does not exist. If the TEST_SHELL
variable is absent, it will be set to /bin/sh. variable is absent, it will be set to /bin/sh.

1
packages/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.tar.gz

11
packages/nongnu.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/sh
name=urchin-$(../urchin --version)
tmp=$(mktemp -d)
mkdir $tmp/$name
cp ../urchin ../readme.md ../AUTHORS ../COPYING $tmp/$name
cd $tmp
tar czf $name.tar.gz $name
cd - > /dev/null
mv $tmp/$name.tar.gz .
rm -R $tmp

View File

@@ -51,7 +51,7 @@ Urchin is contained in a single file, so you can install it by copying it to a
directory in your `PATH`. For example, you can run the following as root. directory in your `PATH`. For example, you can run the following as root.
cd /usr/local/bin cd /usr/local/bin
wget https://raw.githubusercontent.com/tlevine/urchin/v0.0.6/urchin wget https://raw.githubusercontent.com/tlevine/urchin/v0.1.0-rc3/urchin
chmod +x urchin chmod +x urchin
Urchin can be installed with npm too. Urchin can be installed with npm too.

View File

@@ -0,0 +1,2 @@
../../urchin -T aoeu .testsuite 2>&1 | grep Bad
../../urchin -T .testsuite 2>&1 | grep Bad

View File

@@ -1,3 +1 @@
set -e
$TEST_SHELL ../../urchin --shell sh .slow-tests
! $TEST_SHELL ../../urchin --shell sh --timeout 0.3 .slow-tests ! $TEST_SHELL ../../urchin --shell sh --timeout 0.3 .slow-tests

4
tests/Flags/--timeout output Executable file
View File

@@ -0,0 +1,4 @@
$TEST_SHELL ../../urchin --shell sh --timeout 0.3 .slow-tests 2>&1 |
grep -v -- --timeout |
grep timeout
test $? = 1

1
tests/Flags/--timeout success Executable file
View File

@@ -0,0 +1 @@
$TEST_SHELL ../../urchin --shell sh .slow-tests --timeout 1000

86
urchin
View File

@@ -152,6 +152,10 @@ recurse() {
cycle_shell="${3}" cycle_shell="${3}"
TEST_SHELL="${4}" TEST_SHELL="${4}"
if $print_debug; then
echo Entered directory "${PWD}"
fi
for ignore in setup_dir teardown_dir setup teardown; do for ignore in setup_dir teardown_dir setup teardown; do
if test "$(basename "${potential_test}")" = "${ignore}"; then if test "$(basename "${potential_test}")" = "${ignore}"; then
return return
@@ -181,7 +185,12 @@ recurse() {
run_in_series_dir=false run_in_series_dir=false
fi fi
if test -f setup_dir; then . ./setup_dir; fi if test -f setup_dir; then
if $print_debug; then
echo Sourcing "${PWD}/setup_dir"
fi
. ./setup_dir
fi
for test in *; do for test in *; do
if test "${test}" = '*' && ! test -e "${test}"; then if test "${test}" = '*' && ! test -e "${test}"; then
@@ -195,22 +204,41 @@ recurse() {
if "${run_in_series}" || "${run_in_series_dir}"; then if "${run_in_series}" || "${run_in_series_dir}"; then
if wait "${!}"; then exit_code=0; else exit_code="${?}"; fi if wait "${!}"; then exit_code=0; else exit_code="${?}"; fi
if "${exit_on_not_ok}" && test "${exit_code}" -ne 0; then if "${exit_on_not_ok}" && test "${exit_code}" -ne 0; then
if test -f teardown_dir; then . ./teardown_dir; fi if test -f teardown_dir; then
if $print_debug; then
echo Sourcing "${PWD}/teardown_dir"
fi
. ./teardown_dir
fi
return 1 return 1
fi fi
fi fi
done done
wait wait
if test -f teardown_dir; then . ./teardown_dir; fi if test -f teardown_dir; then
if $print_debug; then
echo Sourcing "${PWD}/teardown_dir"
fi
. ./teardown_dir
fi
) )
elif [ -f "${potential_test}" ]; then elif [ -f "${potential_test}" ]; then
cd -- "$(dirname -- "${potential_test}")" cd -- "$(dirname -- "${potential_test}")"
if $print_debug; then
echo Running "${potential_test}"
fi
# Determine the environment variable to define for test scripts # Determine the environment variable to define for test scripts
# that reflects the specified or implied shell to use for shell-code tests. # that reflects the specified or implied shell to use for shell-code tests.
while read the_test_shell; do while read the_test_shell; do
( (
if test -f setup; then . ./setup; fi if test -f setup; then
if $print_debug; then
echo Sourcing "${PWD}/setup"
fi
. ./setup
fi
# Run the test # Run the test
start=$(date +%s) start=$(date +%s)
@@ -237,7 +265,12 @@ recurse() {
set -e set -e
finish=$(date +%s) finish=$(date +%s)
if test -f teardown; then . ./teardown; fi if test -f teardown; then
if $print_debug; then
echo Sourcing "${PWD}/teardown"
fi
. ./teardown
fi
if [ "${exit_code}" -eq 0 ]; then if [ "${exit_code}" -eq 0 ]; then
result=ok result=ok
@@ -256,7 +289,12 @@ recurse() {
if "${run_in_series}"; then if "${run_in_series}"; then
if wait "${!}"; then exit_code=0; else exit_code="${?}"; fi if wait "${!}"; then exit_code=0; else exit_code="${?}"; fi
if "${exit_on_not_ok}" && test "${exit_code}" -ne 0; then if "${exit_on_not_ok}" && test "${exit_code}" -ne 0; then
if test -f teardown_dir; then . ./teardown_dir; fi if test -f teardown_dir; then
if $print_debug; then
echo Sourcing "${PWD}/teardown_dir"
fi
. ./teardown_dir
fi
return 1 return 1
fi fi
fi fi
@@ -450,8 +488,8 @@ The following flags affect how Urchin processes tests.
-b, --run-in-series Run tests in series. The default is to run tests -b, --run-in-series Run tests in series. The default is to run tests
in parallel where possible. in parallel where possible.
-e, --exit-on-fail Stop running if any single test fails. -e, --exit-on-fail Stop running if any single test fails.
This is useful if you are running something This can be useful if you are running something
configuration files with Urchin. other than test files with Urchin.
-T, --timeout <seconds> Kill a test if it runs for longer than the -T, --timeout <seconds> Kill a test if it runs for longer than the
specified duration. The default is no timeout. specified duration. The default is no timeout.
-f, --force Force running even if the test directory's name -f, --force Force running even if the test directory's name
@@ -464,6 +502,8 @@ effect when combined with --tap.
-p, --pretty Print results in color and with fancy symbols. -p, --pretty Print results in color and with fancy symbols.
-t, --tap Format output in Test Anything Protocol (TAP) -t, --tap Format output in Test Anything Protocol (TAP)
And these options affect how much is printed.
-q, --quiet Print nothing to stdout; -q, --quiet Print nothing to stdout;
the only output is the exit code. the only output is the exit code.
(default verbosity) Print names of failed tests and counts (default verbosity) Print names of failed tests and counts
@@ -471,14 +511,14 @@ effect when combined with --tap.
-v Print stdout from failing tests. -v Print stdout from failing tests.
-vv Print names of passed tests. -vv Print names of passed tests.
-vvv, --verbose Print stdout from all tests. -vvv, --verbose Print stdout from all tests.
-vvvv, --debug Print debugging messages (XXX not implemented) -vvvv, --debug Print debugging messages.
The remaining flags provide information about urchin. The remaining flags provide information about urchin.
-h, --help Display this help. -h, --help Display this help.
--version Display the version number. --version Display the version number.
Go to https://github.com/tlevine/urchin for documentation on writing tests. Go to https://thomaslevine.com/!/urchin/ for documentation on writing tests.
EOF EOF
} }
@@ -518,6 +558,7 @@ main() {
print_not_ok=true print_not_ok=true
print_ok_stdout=false print_ok_stdout=false
print_not_ok_stdout=false print_not_ok_stdout=false
print_debug=false
while [ "${#}" -gt 0 ] while [ "${#}" -gt 0 ]
do do
case "${1}" in case "${1}" in
@@ -544,7 +585,16 @@ main() {
;; ;;
-n|--disable-cycling) cycle_shell=false;; -n|--disable-cycling) cycle_shell=false;;
-t|--tap) tap_format=true;; -t|--tap) tap_format=true;;
-T|--timeout) shift; urchin_timeout="${1}" ;; -T|--timeout)
shift
urchin_timeout="${1}"
if ! {
echo "${urchin_timeout}" |
grep '[0-9][0-9.]*\(s\|m\|h\|d\|\)'
}; then
echo Bad timeout argument: "${urchin_timeout}" >&2
urchin_exit 1
fi ;;
-p|--pretty) print_in_color=true;; -p|--pretty) print_in_color=true;;
-q|--quiet) print_not_ok=false -q|--quiet) print_not_ok=false
@@ -555,7 +605,10 @@ main() {
-vvv|--verbose)print_not_ok_stdout=true -vvv|--verbose)print_not_ok_stdout=true
print_ok=true; print_ok=true;
print_ok_stdout=true;; print_ok_stdout=true;;
-vvvv|--debug) echo 'Not implemented' > /dev/stderr && exit 1;; -vvvv|--debug) print_not_ok_stdout=true
print_ok=true;
print_ok_stdout=true
print_debug=true;;
-h|--help) urchin_help -h|--help) urchin_help
urchin_exit 0;; urchin_exit 0;;
@@ -597,11 +650,16 @@ main() {
fi fi
fi fi
if $print_debug; then
echo Cycling with the following shells:
cat "${shell_list}"
fi
if test -n "${urchin_timeout}"; then if test -n "${urchin_timeout}"; then
# Choose the timeout command # Choose the timeout command
if timeout -t 0 true; then if timeout -t 0 true 2> /dev/null; then
TIMEOUT="timeout -t ${urchin_timeout}" TIMEOUT="timeout -t ${urchin_timeout}"
elif timeout 0 true; then elif timeout 0 true 2> /dev/null; then
TIMEOUT="timeout ${urchin_timeout}" TIMEOUT="timeout ${urchin_timeout}"
else else
echo I couldn\'t figure out how to use your version of timeout >&2 echo I couldn\'t figure out how to use your version of timeout >&2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB