function afterTest() {
            if (isFunction(suite.tearDown)) {
                suite.tearDown.apply(suite, [t]);
            }
            if (isFunction(t.tearDown)) {
                t.tearDown.apply(t, [t]);
            }
            suite.log("finished test [%s]", t.name);
            updateProgressBar();
            suite.updateProgressBar();
            suite.runNextTest();
        }
Works recursively with external state (the next index)
so that we can handle async tests differently