<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Console Reporter Spec</title>

    <link rel="stylesheet" href="../ext/jasmine.css" type="text/css" />

    <script type="text/javascript" src="../ext/jasmine.js"></script>
    <script type="text/javascript" src="../ext/jasmine-html.js"></script>
    <script type="text/javascript" src="../src/jasmine.tap_reporter.js"></script>
</head>
<body>
    <script type="text/javascript">
        describe("Basic Suite", function() {
            it("Should pass a basic truthiness test.", function() {
                expect(true).toEqual(true);
                expect(false).toEqual(false);
            });

            it("Should fail when it hits an inequal statement.", function() {
                expect(1+1).toEqual(3);
            });
        });

        describe("Another Suite", function() {
            it("Should pass this test as well.", function() {
                expect(0).toEqual(0);
            });
        });

        jasmine.getEnv().addReporter(new jasmine.TapReporter());
        jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
        jasmine.getEnv().execute();
    </script>
</body>
</html>
