diff options
Diffstat (limited to 'starlarktest/assert.star')
-rw-r--r-- | starlarktest/assert.star | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/starlarktest/assert.star b/starlarktest/assert.star new file mode 100644 index 0000000..c6e480f --- /dev/null +++ b/starlarktest/assert.star @@ -0,0 +1,51 @@ +# Predeclared built-ins for this module: +# +# error(msg): report an error in Go's test framework without halting execution. +# This is distinct from the built-in fail function, which halts execution. +# catch(f): evaluate f() and returns its evaluation error message, if any +# matches(str, pattern): report whether str matches regular expression pattern. +# module(**kwargs): a constructor for a module. +# _freeze(x): freeze the value x and everything reachable from it. +# +# Clients may use these functions to define their own testing abstractions. + +def _eq(x, y): + if x != y: + error("%r != %r" % (x, y)) + +def _ne(x, y): + if x == y: + error("%r == %r" % (x, y)) + +def _true(cond, msg = "assertion failed"): + if not cond: + error(msg) + +def _lt(x, y): + if not (x < y): + error("%s is not less than %s" % (x, y)) + +def _contains(x, y): + if y not in x: + error("%s does not contain %s" % (x, y)) + +def _fails(f, pattern): + "assert_fails asserts that evaluation of f() fails with the specified error." + msg = catch(f) + if msg == None: + error("evaluation succeeded unexpectedly (want error matching %r)" % pattern) + elif not matches(pattern, msg): + error("regular expression (%s) did not match error (%s)" % (pattern, msg)) + +freeze = _freeze # an exported global whose value is the built-in freeze function + +assert = module( + "assert", + fail = error, + eq = _eq, + ne = _ne, + true = _true, + lt = _lt, + contains = _contains, + fails = _fails, +) |