module spec.tf
The std/spec
module contains libraries useful for creating test suites.
library util
Utilities used internally.
permutations?
(list xs, list ys) -> boolean
Returns true
if xs
and ys
are both non-nil and contain the same items. Item order is not relevant.
Returns false
otherwise.
> util.permutations?([1,2,3], [2,3,1])
true
> util.permutations?([1,2], [1,3])
false
> util.permutations?(nil, nil)
false
library assertions
The library contains functions useful for defining assertions.
expect_error
(function x, function f) -> boolean
A function that helps asserting facts about thrown errors.
If f
is nil
, to.be_true()
is used implicitly.
It calls x()
, expects it to throw, and expects the thrown value to satisfy matcher function f
.
Returns true
if x()
throws and the thrown value satisfies matcher function f
, throws otherwise.
> assert.expect_error(() -> 1//0, to.have_code("DIVISION_BY_ZERO"))
true
# x() does not throw
> assert.expect_error(() -> nil, to.be_nil())
ERROR:
...
# thown value is does not satisfy matcher
> assert.expect_error(() -> throw "foo", to.be("bar"))
ERROR:
...
expect
(x, function f) -> boolean
If f
is nil
, to.be_true()
is used implicitly.
Returns true
if x
satisfies matcher function f
, throws otherwise.
> assert.expect(true, to.be_true())
true
> assert.expect(false, to.be_true())
ERROR:
...
assert
Alias for expect that might be more readable in cases where the matcher is omitted and to.be_true()
is used implicitly.
> assert.assert(1.0 == 1)
true
> assert.assert(1.0 === 1)
ERROR:
...
library nodes
Functions that help construct spec nodes.
before
(dict effect, string name, any context) -> dict
Returns a before
spec node with the given attributes.
after
(dict effect, string name, any context) -> dict
Returns an after
spec node with the given attributes.
describe
(string name, list spec, any context, any tags) -> dict
Returns a describe
spec node with the given attributes.
If tags
is a list, it is used directly.
If tags
is a dict, keys containing values casting to boolean true
are used.
it
(string name, function spec, any context, any tags) -> dict
Returns an it
spec node with the given attributes.
If tags
is a list, it is used directly.
If tags
is a dict, keys containing values casting to boolean true
are used.
subject
(any data, function transform, dict effect, any context) -> dict
Returns a subject spec node with the given attributes.
Specify non-nil transform
to create a subject_transform
node.
Specify non-nil effect
to create a subject_effect
node.
If neither transform
, nor effect
are specified, a regular subject
node is created.
library to
The to
library contains matcher functions useful in conjunction with the expect function.
have_code
(expected) -> (err) -> boolean
Matcher function that is satisfied if the given err
is a dict with the expected value at key :code
.
> assert.expect_error(() -> 1//0, to.have_code("FOO"))
ERROR:
...
equal
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
is equal to expected
using the ==
comparison operator.
> assert.expect(1, to.equal(1.0))
true
> assert.expect(1, to.equal(2.0))
ERROR:
...
not_equal
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
is not equal to expected
using the !=
comparison operator.
> assert.expect(1, to.not_equal(2.0))
true
> assert.expect(1, to.not_equal(1.0))
ERROR:
...
be
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
is equal to expected
using the ===
comparison operator.
> assert.expect(1, to.be(1))
true
> assert.expect(1, to.be(1.0))
ERROR:
...
not_be
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
is not equal to expected
using the !==
comparison operator.
> assert.expect(1, to.not_be(1.0))
true
> assert.expect(1, to.not_be(1))
ERROR:
...
match_regex
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
is a string and matches the regular expression expected
in its entirety.
> assert.expect("12345", to.match_regex('\d+'))
true
> assert.expect("-12345", to.match_regex('\d+'))
ERROR:
...
be_like
Alias for match_regex
be_greater_than
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
and expected
are both numeric and x
> expected
holds true.
> assert.expect(10, to.be_greater_than(5))
true
> assert.expect(10, to.be_greater_than(20))
ERROR:
...
be_less_than
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
and expected
are both numeric and x
< expected
holds true.
> assert.expect(10, to.be_less_than(20))
true
> assert.expect(10, to.be_less_than(5))
ERROR:
...
be_between
(
expected_low,
expected_high,
boolean low_inclusive=true,
boolean high_inclusive=true
) -> (x) -> boolean
Matcher function that is satisfied if x
, expected_low
and expected_high
are all numeric, and depending on
inclusion options the corresponding condition holds:
low_inclusive | high_inclusive | condition |
---|---|---|
true |
true |
expected_low <= x <= expected_high |
true |
false |
expected_low <= x < expected_high |
false |
true |
expected_low < x <= expected_high |
false |
false |
expected_low < x < expected_high |
> assert.expect(10, to.be_between(0, 20))
true
> assert.expect(10, to.be_between(10, 20))
true
> assert.expect(10, to.be_between(10, 20, low_inclusive: false))
ERROR:
...
> assert.expect(5, to.be_between(10, 20))
ERROR:
...
be_close_to
(double expected, double precision=1e-15) -> (x) -> boolean
Matcher function that is satisfied if x
is numeric and within precision
distance of expected
.
> assert.expect(3.1415, to.be_close_to(math.pi, 0.001))
true
> assert.expect(3.1415, to.be_close_to(math.pi, 0.0000001))
ERROR:
...
be_permutation_of
(list expected) -> (x) -> boolean
Matcher function that is satisfied if x
is a non-nil list containing the same items as expected
. Order does not matter.
> assert.expect([1,2,3], to.be_permutation_of([2,3,1]))
true
> assert.expect([1,2,3], to.be_permutation_of([2,3,2]))
ERROR:
...
be_superset_of
(dict expected) -> (x) -> boolean
Matcher function that is satisfied if x
is a non-nil dict that has all keys and associated values of expected
.
Additional keys may be present in x
.
> assert.expect({:a 1, :b 2}, to.be_superset_of({:a 1, :b 2}))
true
> assert.expect({:a 1, :b 2}, to.be_superset_of({:a 1}))
true
> assert.expect({:a 1, :b 2}, to.be_superset_of({:a 2}))
ERROR:
...
be_subset_of
(dict expected) -> (x) -> boolean
Matcher function that is satisfied if x
is a non-nil dict whose keys and associated values all appear in expected
.
expected
may have keys and values that are not in x
.
> assert.expect({:a 1, :b 2}, to.be_subset_of({:a 1, :b 2}))
true
> assert.expect({:a 1}, to.be_subset_of({:a 1, :b 2}))
true
> assert.expect({:a 1}, to.be_subset_of({:a 2, :b 2}))
ERROR:
...
be_one_of
(list expected) -> (x) -> boolean
Matcher function that is satisfied if x
is one of the values in expected
.
> assert.expect(2, to.be_one_of([1,2,3]))
true
> assert.expect(2, to.be_one_of([0,1]))
ERROR:
...
contain
(expected) -> (x) -> boolean
Matcher function that is satisfied if x
is a list or dict containing the value expected
.
> assert.expect([1,2,3], to.contain(2))
true
> assert.expect({:a 1, :b 2, :c 3}, to.contain(2))
true
> assert.expect([], to.contain(2))
ERROR:
...
contain_all
(list expected) -> (x) -> boolean
Matcher function that is satisfied if x
is a list or dict containing all values in expected
.
> assert.expect([1,2,3], to.contain_all([1,3]))
true
> assert.expect({:a 1, :b 2, :c 3}, to.contain_all([1,2,3]))
true
> assert.expect([], to.contain_all([]))
true
> assert.expect({:a 1, :b 2, :c 3}, to.contain_all([1,4]))
ERROR:
...
be_nil
() -> (x) -> boolean
Matcher function that is satisfied if x
is nil
.
> assert.expect(nil, to.be_nil())
true
> assert.expect(0, to.be_nil())
ERROR
...
not_be_nil
() -> (x) -> boolean
Matcher function that is satisfied if x
is not nil
.
> assert.expect(0, to.not_be_nil())
true
> assert.expect(nil, to.not_be_nil())
ERROR
...
be_true
() -> (x) -> boolean
Matcher function that is satisfied if x
is boolean true
.
> assert.expect(true, to.be_true())
true
> assert.expect(1, to.be_true())
ERROR
...
be_false
() -> (x) -> boolean
Matcher function that is satisfied if x
is boolean false
.
> assert.expect(false, to.be_false())
true
> assert.expect(nil, to.be_false())
ERROR
...
be_NaN
() -> (x) -> boolean
Matcher function that is satisfied if x
is NaN
.
> assert.expect(NaN, to.be_NaN())
true
> assert.expect("foo", to.be_NaN())
ERROR
...
be_function
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type function
.
> assert.expect(() -> nil, to.be_function())
true
> assert.expect("foo", to.be_function())
ERROR
...
be_numeric
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type long
, double
, or decimal
.
> assert.expect(1, to.be_numeric())
true
> assert.expect(Infinity, to.be_numeric())
true
> assert.expect("foo", to.be_numeric())
ERROR
...
be_long
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type long
.
> assert.expect(1, to.be_long())
true
> assert.expect(1.0, to.be_long())
ERROR
...
be_double
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type double
.
> assert.expect(1.0, to.be_double())
true
> assert.expect(1, to.be_double())
ERROR
...
be_decimal
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type decimal
.
> assert.expect(1.0d, to.be_decimal())
true
> assert.expect(1, to.be_decimal())
ERROR
...
be_string
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type string
.
> assert.expect("foo", to.be_string())
true
> assert.expect(1, to.be_string())
ERROR
...
be_binary
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type binary
.
> assert.expect(0b00, to.be_binary())
true
> assert.expect(1, to.be_binary())
ERROR
...
be_boolean
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type boolean
.
> assert.expect(true, to.be_boolean())
true
> assert.expect(1, to.be_boolean())
ERROR
...
be_dict
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type dict
.
> assert.expect({:a 1}, to.be_dict())
true
> assert.expect(1, to.be_dict())
ERROR
...
be_list
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type list
.
> assert.expect([1,2,3], to.be_list())
true
> assert.expect(1, to.be_list())
ERROR
...
be_datetime
() -> (x) -> boolean
Matcher function that is satisfied if x
is of type datetime
.
> assert.expect(2019-08-16T, to.be_datetime())
true
> assert.expect(1, to.be_datetime())
ERROR
...