Janet 1.39.1-e9c6678 Documentation
(Other Versions: 1.38.0 1.37.1 1.36.0 1.35.0 1.34.0 1.31.0 1.29.1 1.28.0 1.27.0 1.26.0 1.25.1 1.24.0 1.23.0 1.22.0 1.21.0 1.20.0 1.19.0 1.18.1 1.17.1 1.16.1 1.15.0 1.13.1 1.12.2 1.11.1 1.10.1 1.9.1 1.8.1 1.7.0 1.6.0 1.5.1 1.5.0 1.4.0 1.3.1 )

test

This module contains a simple test helper when you do not need a specialized library.

Examples

assert

Modified version of `assert`, with some nice error handling.

(test/assert false "How is this?")
# => ✘ How is this?
(test/assert true "OK")
# => ✔true

assert-not

Invert assert.

(test/assert-not false "OK")
# => ✔true

assert-error

Test passes if forms throw errors.

(test/assert-error "To err is natural" (error "Bad"))
# => ✔true

assert-no-error

Test passes if forms throw errors.

(test/assert-no-error "To not err is desired" (do "Good"))
# => ✔true

start-suite

Starts test suite, which counts all and passed tests.

end-suite

Ends test suite, prints summary and exits if any have failed.

All together

Example of simple test suite.

(import spork/test)

(test/start-suite 0)

(test/assert true "is always true")
(test/assert-not false "is always false")
(test/assert-error "To err is natural" (error "Bad"))
(test/assert-no-error "To not err is desired" (do "Good"))

(test/end-suite)

# =>

Test suite 0 finished in 0.000 soconds
4 of 4 tests passed.

timeit

Time code execution using os/clock, and print the result. Returns the value of the timed expression.

repl> (test/timeit (sum (seq [i :range [1 1000000]] (math/sqrt i))))
Elapsed time: 0.0718288 seconds
6.66666e+08

capture-stdout

Runs the body and captures stdout. Returns tuple with result and captured stdout in string.

(capture-stdout
  (print "Interesting output")
  true)
# => (true "Interesting output")

capture-stderr

Runs the body and captures stderr. Returns tuple with result and captured stderr in string.

(capture-stderr
  (print "Interesting output")
  true)
# => (true "Interesting output")

supress-stdout

Runs the form, but supresses its stdout.

(suppress-stdout (print "Hello world!"))
# => nil

supress-stderr

Runs the form, but supresses its stderr.

(suppress-stderr (eprint "Hello world!"))
# => nil

assert-docs

Asserts that all public bindings from the environment have docstring, when the `path` is required.

(assert-doc "/spork/test")
  suppress-stderr does not have proper doc

Reference

test/assert test/assert-docs test/assert-error test/assert-no-error test/assert-not test/capture-stderr test/capture-stdout test/end-suite test/start-suite test/suppress-stderr test/suppress-stdout test/timeit test/timeit-loop


test/assert macro source
(assert x &opt e)

Overrides the default assert with some nice error handling.

test/assert-docs function source
(assert-docs path)

Assert that all symbols have proper docstring when module on the
path is required.

test/assert-error macro source
(assert-error msg & forms)

Test passes if forms error.

test/assert-no-error macro source
(assert-no-error msg & forms)

Test passes if forms do not error.

test/assert-not macro source
(assert-not x &opt e)

Invert assert.

test/capture-stderr macro source
(capture-stderr & body)

Runs the form and captures stderr. Returns tuple with result of the form
and a string with captured stderr.

test/capture-stdout macro source
(capture-stdout & body)

Runs the form and captures stdout. Returns tuple with result of the form
and a string with captured stdout.

test/end-suite function source
(end-suite)

Ends test suite, prints summary and exits if any tests have failed.

test/start-suite function source
(start-suite &opt name)

Starts test suite.

test/suppress-stderr macro source
(suppress-stderr & body)

Suppreses stderr from the body

test/suppress-stdout macro source
(suppress-stdout & body)

Suppreses stdout from the body

test/timeit macro source
(timeit form &opt tag)

Time the execution of `form` using `os/clock` before and after,
and print the result to stdout. Returns result of executing `form`.
Uses `tag` (default "Elapsed time:") to tag the printout.

test/timeit-loop macro source
(timeit-loop head & body)

Similar to `loop`, but outputs performance statistics after completion.
Additionally defines a `:timeout` verb to iterate continuously for a given
number of seconds. If the first form of `body` is a bytes, it will be taken
as a custom tag.