error-checking-command-tests.html 7.85 KB
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<!--
Copyright 2004 ThoughtWorks, Inc

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->
<html>
  <head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JsUnit Utility Tests</title>
    <link rel="stylesheet" type="text/css" href="jsunit/css/jsUnitStyle.css">
<script language="JavaScript" type="text/javascript" src="../../jsunit/app/jsUnitCore.js"></script>
<script language="JavaScript" type="text/javascript" src="../jsmock/mock.js"></script>
<script language="JavaScript" type="text/javascript" src="../dummy-logging.js"></script>
<script language="JavaScript" type="text/javascript" src="../../core/lib/prototype.js"></script>
<script language="JavaScript" type="text/javascript" src="../../core/scripts/htmlutils.js"></script>
<script language="JavaScript" type="text/javascript" src="../../core/scripts/selenium-api.js"></script>
<script language="JavaScript" type="text/javascript" src="../../core/scripts/selenium-executionloop.js"></script>
<script language="JavaScript" type="text/javascript" src="../../core/scripts/selenium-commandhandlers.js"></script>
<script language="JavaScript" type="text/javascript" src="../../core/scripts/selenium-testrunner.js"></script>
<script language="JavaScript" type="text/javascript">
    function setUp() {
        selenium = new Selenium();
        commandFactory = new Mock();
        
        testCase = new Mock();
        testCase.expects("reset");
        
        testCase.testDocument = {
            getElementById : function() {},
            location: { href: "test.html" }
        }
        
        global = {};
        
        var metrics = {
            numCommandErrors : 0
        };
        
        htmlTestRunner = {
            markFailed : function(){}
        };
        
        currentTest = new HtmlRunnerTestLoop(testCase, metrics, commandFactory);
        currentTest.currentRow = {
            markDone : function() {}
        }
    };

    function verifyMocks() {
        commandFactory.verify();
        testCase.verify();
    }

    function testMustProvideMessageToExpectFailure() {
        try {
            selenium.assertFailureOnNext();
        }
        catch (expected) {
            return;
        }
        fail("Message is a required parameter");
    };

    function testExpectFailureSucceedsWhenSubsequentCommandFails() {
        var failingCommand = new Mock();
        failingCommand.expects("execute").returns({failed:true, failureMessage: "Expected failure message"});
        commandFactory.expects("getCommandHandler", "cmd").returns(failingCommand);

        selenium.assertFailureOnNext("Expected failure message");
        currentTest.expectedFailureJustSet = false;
        var result = currentTest.commandFactory.getCommandHandler("cmd").execute();
        currentTest._checkExpectedFailure(result);
        assertTrue(result.passed);
        verifyMocks();
    };

    function testExpectFailureFailsWhenSubsequentCommandFailsWithTheWrongMessage() {
        var failingCommand = new Mock();
        failingCommand.expects("execute").returns({failed:true, failureMessage: "foo"});
        commandFactory.expects("getCommandHandler", "cmd").returns(failingCommand);

        selenium.assertFailureOnNext("bar");
        currentTest.expectedFailureJustSet = false;
        var result = currentTest.commandFactory.getCommandHandler("cmd").execute();
        currentTest._checkExpectedFailure(result);
        assertTrue(result.failed);
        assertEquals("Expected failure message 'bar' but was 'foo'", result.failureMessage);
        verifyMocks();
    };

    function testExpectFailureFailsWhenSubsequentCommandPasses() {
        var successCommand = new Mock();
        successCommand.expects("execute").returns({passed:true});
        commandFactory.expects("getCommandHandler", "foo").returns(successCommand);

        selenium.assertFailureOnNext("expectedFailureMessage");
        currentTest.expectedFailureJustSet = false;
        var result = currentTest.commandFactory.getCommandHandler("foo").execute();
        currentTest._checkExpectedFailure(result);
        assertTrue(result.failed);
        assertEquals("Expected failure did not occur.", result.failureMessage);
        verifyMocks();
    };

    function testExpectFailureFailsWhenSubsequentCommandErrors() {
        var msg = "error message";
        selenium.assertFailureOnNext(msg);
        currentTest.expectedFailureJustSet = false;
        testCase.expects("addErrorMessage", "Expected failure, but error occurred instead", currentTest.currentRow);
        var handled = currentTest.commandError("error message");
        assertTrue(!handled);
        verifyMocks();
    };

    function testMustProvideMessageToExpectError() {
        try {
            selenium.assertErrorOnNext();
        }
        catch (expected) {
            return;
        }
        fail("Message is a required parameter");
    };

    function testExpectErrorSucceedsWhenSubsequentCommandErrors() {
        var msg = "error message";
        selenium.assertErrorOnNext(msg);
        currentTest.expectedFailureJustSet = false;
        var handled = currentTest.commandError("error message");
        assertTrue(handled);
        verifyMocks();
    };

    function testExpectErrorFailsWhenSubsequentCommandErrorsWithTheWrongMessage() {
        selenium.assertErrorOnNext("expectedError");
        currentTest.expectedFailureJustSet = false;
        testCase.expects("addErrorMessage", "Expected error message 'expectedError' but was 'actualError'", currentTest.currentRow);
        var handled = currentTest.commandError("actualError");
        assertTrue(!handled);
        verifyMocks();
    };

     function testExpectErrorFailsWhenSubsequentCommandPasses() {
        var successCommand = new Mock();
        successCommand.expects("execute").returns({passed:true});
        commandFactory.expects("getCommandHandler", "foo").returns(successCommand);

        selenium.assertErrorOnNext("Expected error message");
        currentTest.expectedFailureJustSet = false;
        var result = currentTest.commandFactory.getCommandHandler("foo").execute();
        currentTest._checkExpectedFailure(result);
        assertTrue(result.failed);
        assertEquals("Expected error did not occur.", result.failureMessage);
        verifyMocks();
    };

    function testExpectErrorFailsWhenSubsequentCommandFails() {
        var failingCommand = new Mock();
        failingCommand.expects("execute").returns({failed:true, failureMessage: "message"});
        commandFactory.expects("getCommandHandler", "cmd").returns(failingCommand);

        selenium.assertErrorOnNext("message");
        currentTest.expectedFailureJustSet = false;
        var result = currentTest.commandFactory.getCommandHandler("cmd").execute();
        currentTest._checkExpectedFailure(result);
        assertTrue(result.failed);
        
        assertEquals("Expected error, but failure occurred instead", result.failureMessage);
        verifyMocks();
    };
  </script>
  </head>

  <body>
    <p>This page contains tests for the ExpectFailureCommandFactory object. To see them, take a look at the source. To run them, load this file via JsUnit's testRunner.html</p>
  </body>
</html>