aboutsummaryrefslogtreecommitdiff
path: root/starlarktest/assert.star
diff options
context:
space:
mode:
Diffstat (limited to 'starlarktest/assert.star')
-rw-r--r--starlarktest/assert.star51
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,
+)