JavaScript Testing Framework

A single-file testing framework.

by nathan

JavaScript

var test = function (a) {
    var b,
        i,
        testObj = this,
        results = {
            passes : 0,
            fails : 0,
            errors : 0,
            skips : 0,
            testCases : {}
        },
        testRunner,
        empty = function () {};
    b = { // built-in functions
        setUp : empty,
        tearDown : empty
    };
    // separate out non-test case functions using b as a list of keywords
    for (i in b) {
        if (a[i] !== undefined) {
            b[i] = a[i];
            delete a[i];
        }
    }
    testRunner = {
        // Tests (and setUp/tearDown) are executed in the context of this object.
        // All the properties below are accessible to them via the `this` keyword.
        globalObject : (function () {
                            return this;
                        }).call(),
        message : function (message) {
            results[i].messages.push(message);
        },
        assert : function (condition, message) {
            results[i].assertions.push({
                "pass" : condition,
                "message" : message
            });
            results.passes = results.passes + Number(condition);
            results.fails = results.fails + Number(!condition);
        },
        assertTrue : function (condition, message) {
            if (message === undefined) {
                message = "Expected true; got " + condition + ".";
            }
            assert(condition, message);
        },
        assertFalse : function (condition, message) {
            if (message === undefined) {
                message = "Expected false; got " + condition + ".";
            }
            assert(!condition, message);
        },
        assertEqual : function (item1, item2, message) {
            if (message === undefined) {
                message = "Expected " + item2 + "; got " + item1 + ".";
            }
            assert(item1 == item2, message);
        },
        assertNotEqual : function...