Lines
100 %
Functions
Branches
//! Self-hosted test framework — DEFTEST / ASSERT-EQUAL / RUN-TESTS.
//! Cover the registration → execution → summary path end to end via
//! the public Compiler API.
use super::common::{compile_and_validate, compile_expect_error};
#[test]
fn deftest_alone_compiles() {
compile_and_validate("(deftest my-test (+ 1 1))");
}
fn deftest_with_multi_form_body_compiles() {
compile_and_validate(
"(deftest multi (debug \"step 1\") (assert-equal 1 1) (debug \"step 2\"))",
);
fn deftest_requires_name_symbol_errors() {
let err = compile_expect_error("(deftest \"not-a-symbol\" 42)");
assert!(
err.contains("DEFTEST") || err.contains("symbol"),
"got: {err}"
fn deftest_without_body_errors() {
let err = compile_expect_error("(deftest empty)");
assert!(err.contains("DEFTEST"), "got: {err}");
fn assert_equal_equal_returns_nil() {
compile_and_validate("(assert-equal 1 1)");
fn assert_equal_unequal_errors() {
let err = compile_expect_error("(assert-equal 1 2)");
assert!(err.contains("assertion failed"), "got: {err}");
fn assert_equal_compares_strings() {
compile_and_validate("(assert-equal \"abc\" \"abc\")");
fn assert_equal_arity_zero_errors() {
let err = compile_expect_error("(assert-equal)");
assert!(err.contains("ASSERT-EQUAL"), "got: {err}");
fn run_tests_empty_registry_reports_zero() {
compile_and_validate("(run-tests)");
fn run_tests_after_one_passing_test() {
compile_and_validate("(deftest passes (assert-equal 1 1)) (run-tests)");
fn run_tests_after_one_failing_test() {
// The failing test is caught by RUN-TESTS and counted; the
// outer compile-and-validate must still succeed.
compile_and_validate("(deftest fails (assert-equal 1 2)) (run-tests)");
fn run_tests_after_mixed_pass_and_fail() {
"(deftest a (assert-equal 1 1)) \
(deftest b (assert-equal 2 3)) \
(deftest c (assert-equal \"x\" \"x\")) \
(run-tests)",
fn run_tests_rejects_args() {
let err = compile_expect_error("(run-tests 42)");
assert!(err.contains("RUN-TESTS"), "got: {err}");