test(“module without setup/teardown (default)”, function() {

expect(1);
ok(true);

});

test(“expect in test”, 3, function() {

ok(true);
ok(true);
ok(true);

});

test(“expect in test”, 1, function() {

ok(true);

});

module(“setup test”, {

setup: function() {
        ok(true);
}

});

test(“module with setup”, function() {

expect(2);
ok(true);

});

test(“module with setup, expect in test call”, 2, function() {

ok(true);

});

var state;

module(“setup/teardown test”, {

setup: function() {
        state = true;
        ok(true);
},
teardown: function() {
        ok(true);
}

});

test(“module with setup/teardown”, function() {

expect(3);
ok(true);

});

module(“setup/teardown test 2”);

test(“module without setup/teardown”, function() {

expect(1);
ok(true);

});

if (typeof setTimeout !== 'undefined') { state = 'fail';

module(“teardown and stop”, {

teardown: function() {
        equal(state, "done", "Test teardown.");
}

});

test(“teardown must be called after test ended”, function() {

expect(1);
stop();
setTimeout(function() {
        state = "done";
        start();
}, 13);

});

module(“async setup test”, {

setup: function() {
        stop();
        setTimeout(function(){
                ok(true);
                start();
        }, 500);
}

});

asyncTest(“module with async setup”, function() {

expect(2);
ok(true);
start();

});

module(“async teardown test”, {

teardown: function() {
        stop();
        setTimeout(function(){
                ok(true);
                start();
        }, 500);
}

});

asyncTest(“module with async teardown”, function() {

expect(2);
ok(true);
start();

});

module(“asyncTest”);

asyncTest(“asyncTest”, function() {

expect(2);
ok(true);
setTimeout(function() {
        state = "done";
        ok(true);
        start();
}, 13);

});

asyncTest(“asyncTest”, 2, function() {

ok(true);
setTimeout(function() {
        state = "done";
        ok(true);
        start();
}, 13);

});

test(“sync”, 2, function() {

stop();
setTimeout(function() {
        ok(true);
        start();
}, 13);
stop();
setTimeout(function() {
        ok(true);
        start();
}, 125);

}); }

module(“save scope”, {

setup: function() {
        this.foo = "bar";
},
teardown: function() {
        deepEqual(this.foo, "bar");
}

}); test(“scope check”, function() {

expect(2);
deepEqual(this.foo, "bar");

});

module(“simple testEnvironment setup”, {

foo: "bar",
bugid: "#5311" // example of meta-data

}); test(“scope check”, function() {

deepEqual(this.foo, "bar");

}); test(“modify testEnvironment”,function() {

this.foo="hamster";

}); test(“testEnvironment reset for next test”,function() {

deepEqual(this.foo, "bar");

});

module(“testEnvironment with object”, {

options:{
        recipe:"soup",
        ingredients:["hamster","onions"]
}

}); test(“scope check”, function() {

deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions"]}) ;

}); test(“modify testEnvironment”,function() {

// since we do a shallow copy, the testEnvironment can be modified
this.options.ingredients.push("carrots");

}); test(“testEnvironment reset for next test”,function() {

deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions","carrots"]}, "Is this a bug or a feature? Could do a deep copy") ;

});

module(“testEnvironment tests”);

function makeurl() {

var testEnv = QUnit.current_testEnvironment;
var url = testEnv.url || 'http://example.com/search';
var q   = testEnv.q   || 'a search test';
return url + '?q='+encodeURIComponent(q);

}

test(“makeurl working”,function() {

equal( QUnit.current_testEnvironment, this, 'The current testEnvironment is global');
equal( makeurl(), 'http://example.com/search?q=a%20search%20test', 'makeurl returns a default url if nothing specified in the testEnvironment');

});

module(“testEnvironment with makeurl settings”, {

url: 'http://google.com/',
q: 'another_search_test'

}); test(“makeurl working with settings from testEnvironment”, function() {

equal( makeurl(), 'http://google.com/?q=another_search_test', 'rather than passing arguments, we use test metadata to form the url');

}); test(“each test can extend the module testEnvironment”, {

q:'hamstersoup'

}, function() {

equal( makeurl(), 'http://google.com/?q=hamstersoup', 'url from module, q from test');

});

module(“jsDump”); test(“jsDump output”, function() {

equals( QUnit.jsDump.parse([1, 2]), "[\n  1,\n  2\n]" );
equals( QUnit.jsDump.parse({top: 5, left: 0}), "{\n  \"top\": 5,\n  \"left\": 0\n}" );
if (typeof document !== 'undefined' && document.getElementById("qunit-header")) {
        equals( QUnit.jsDump.parse(document.getElementById("qunit-header")), "<h1 id=\"qunit-header\"></h1>" );
        equals( QUnit.jsDump.parse(document.getElementsByTagName("h1")), "[\n  <h1 id=\"qunit-header\"></h1>\n]" );
}

});

module(“assertions”); test(“raises”,function() {

function CustomError( message ) {
        this.message = message;
}

CustomError.prototype.toString = function() {
        return this.message;    
};

raises(
        function() {
                throw new Error("error")
        }
);

raises(
        function() {
                throw new Error("error")
        },
        'raises with just a message, no expected'
);

raises(
        function() {
                throw new CustomError();
        },
        CustomError,
        'raised error is an instance of CustomError'
);

raises(
        function() {
                throw new CustomError("some error description");
        },
        /description/,
        "raised error message contains 'description'"
);

raises(
        function() {
                throw new CustomError("some error description");
        },
        function( err ) {
                if ( (err instanceof CustomError) && /description/.test(err) ) {
                        return true;
                }
        },
        "custom validation function"            
);

});

if (typeof document !== “undefined”) {

module(“fixture”); test(“setup”, function() {

document.getElementById("qunit-fixture").innerHTML = "foobar";

}); test(“basics”, function() {

equal( document.getElementById("qunit-fixture").innerHTML, "test markup", "automatically reset" );

});

}

module(“custom assertions”); (function() {

function mod2(value, expected, message) {
        var actual = value % 2;
        QUnit.push(actual == expected, actual, expected, message);
}
test("mod2", function() {
        mod2(2, 0, "2 % 2 == 0");
        mod2(3, 1, "3 % 2 == 1");
})

})();

(function() {

var reset = QUnit.reset;
function afterTest() {
        ok( false, "reset should not modify test status" );
}
module("reset");
test("reset runs assertions", function() {
        QUnit.reset = function() {
                afterTest();
                reset.apply( this, arguments );
        };
});
test("reset runs assertions2", function() {
        QUnit.reset = reset;
});

})();