blob: 3adab18353a323a89d7654ae636f00718becb350 [file] [log] [blame]
/*
* Copyright 2002,2004 The Apache Software Foundation.
*
* 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.
*/
package org.apache.struts.faces.sysclient;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlResetInput;
import com.gargoylesoftware.htmlunit.html.HtmlSpan;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
/**
* <p>Test case for a logon form that accepts a username and password.</p>
*
* <p><strong>FIXME</strong> - The JavaScript execution support in
* HtmlUnit 1.2.3 is not sufficient to test clicking the hyperlink
* generated by a Command Link component, so it is not tested automatically.</p>
*
* @version $Rev$ $Date$
*/
public class LogonTestCase extends AbstractTestCase {
// ------------------------------------------------------------ Constructors
/**
* <p>Construct a new instance of this test case.</p>
*
* @param name Name of the new test case
*/
public LogonTestCase(String name) {
super(name);
}
// ------------------------------------------------------ Instance Variables
// ------------------------------------------------------ Test Setup Methods
/**
* <p>Set up the instance variables required for this test case.</p>
*/
public void setUp() throws Exception {
super.setUp();
page("/logon.faces");
}
/**
* <p>Return the set of tests included in this test suite.</p>
*/
public static Test suite() {
return (new TestSuite(LogonTestCase.class));
}
/**
* <p>Tear down instance variables required by this test case.</p>
*/
public void tearDown() {
super.tearDown();
}
// ------------------------------------------------- Individual Test Methods
/**
* <p>Submit incorrect input fields and verify the correct response.</p>
*/
public void testIncorrect() throws Exception {
HtmlSpan span = null;
HtmlTextInput username = (HtmlTextInput) element("form:username");
HtmlPasswordInput password = (HtmlPasswordInput)
element("form:password");
HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
username.setValueAttribute("bb");
password.setValueAttribute("");
submit(submit);
assertEquals("logon", title());
span = (HtmlSpan) element("globalErrors");
assertNotNull(span);
assertEquals("[EH][EP] can not be less than 3 characters.[ES]" +
"[EP] is required.[ES][EF]",
span.asText());
username = (HtmlTextInput) element("form:username");
assertNotNull(username);
assertEquals("bb", username.getValueAttribute());
span = (HtmlSpan) element("form:usernameErrors");
assertNotNull(span);
// FIXME: response string should really include "Username:"
assertEquals("[EH][EP] can not be less than 3 characters.[ES][EF]",
span.asText());
password = (HtmlPasswordInput) element("form:password");
assertNotNull(password);
assertEquals("", password.getValueAttribute());
span = (HtmlSpan) element("form:passwordErrors");
assertNotNull(span);
// FIXME: response string should really include "Password:"
assertEquals("[EH][EP] is required.[ES][EF]", span.asText());
}
/**
* <p>Verify the content of a pristine page returned when executing this
* view for the first time.</p>
*/
public void testPristine() throws Exception {
HtmlSpan span = null;
HtmlElement html = page.getDocumentElement();
assertEquals("html", html.getTagName());
assertEquals("http://www.w3.org/1999/xhtml", html.getAttributeValue("xmlns"));
assertEquals("logon", title());
HtmlForm form = (HtmlForm) element("form");
assertNotNull(form);
assertEquals("", form.getAcceptAttribute());
assertEquals("", form.getAcceptCharsetAttribute());
String url = this.url.toString();
url = url.substring(0, url.length() - 1);
url = url.substring(url.lastIndexOf('/'));
String action = form.getActionAttribute();
int semicolon = action.indexOf(';');
if (semicolon >= 0) {
action = action.substring(0, semicolon);
}
assertEquals(url + "/logon.faces", action);
assertEquals("", form.getEnctypeAttribute());
assertEquals("post", form.getMethodAttribute());
assertEquals("logonForm", form.getNameAttribute());
assertEquals("", form.getOnResetAttribute());
assertEquals("", form.getOnSubmitAttribute());
assertEquals("", form.getTargetAttribute());
span = (HtmlSpan) element("form:usernamePrompt");
assertNotNull(span);
assertEquals("Username:", span.asText());
HtmlTextInput username = (HtmlTextInput) element("form:username");
assertNotNull(username);
assertEquals("", username.getLangAttribute());
assertEquals("form:username", username.getNameAttribute());
assertEquals("", username.getOnClickAttribute());
assertEquals("", username.getOnDblClickAttribute());
assertEquals("", username.getOnKeyDownAttribute());
assertEquals("", username.getOnKeyPressAttribute());
assertEquals("", username.getOnKeyUpAttribute());
assertEquals("", username.getOnMouseDownAttribute());
assertEquals("", username.getOnMouseMoveAttribute());
assertEquals("", username.getOnMouseOutAttribute());
assertEquals("", username.getOnMouseOverAttribute());
assertEquals("", username.getOnMouseUpAttribute());
assertEquals("text", username.getTypeAttribute());
assertEquals("", username.getValueAttribute());
span = (HtmlSpan) element("form:passwordPrompt");
assertNotNull(span);
assertEquals("Password:", span.asText());
HtmlPasswordInput password = (HtmlPasswordInput)
element("form:password");
assertNotNull(password);
assertEquals("", password.getLangAttribute());
assertEquals("form:password", password.getNameAttribute());
assertEquals("", password.getOnClickAttribute());
assertEquals("", password.getOnDblClickAttribute());
assertEquals("", password.getOnKeyDownAttribute());
assertEquals("", password.getOnKeyPressAttribute());
assertEquals("", password.getOnKeyUpAttribute());
assertEquals("", password.getOnMouseDownAttribute());
assertEquals("", password.getOnMouseMoveAttribute());
assertEquals("", password.getOnMouseOutAttribute());
assertEquals("", password.getOnMouseOverAttribute());
assertEquals("", password.getOnMouseUpAttribute());
assertEquals("password", password.getTypeAttribute());
assertEquals("", password.getValueAttribute());
HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
assertNotNull(submit);
assertEquals("", submit.getLangAttribute());
assertEquals("form:submit", submit.getNameAttribute());
assertEquals("", submit.getOnClickAttribute());
assertEquals("", submit.getOnDblClickAttribute());
assertEquals("", submit.getOnKeyDownAttribute());
assertEquals("", submit.getOnKeyPressAttribute());
assertEquals("", submit.getOnKeyUpAttribute());
assertEquals("", submit.getOnMouseDownAttribute());
assertEquals("", submit.getOnMouseMoveAttribute());
assertEquals("", submit.getOnMouseOutAttribute());
assertEquals("", submit.getOnMouseOverAttribute());
assertEquals("", submit.getOnMouseUpAttribute());
assertEquals("submit", submit.getTypeAttribute());
assertEquals("Logon", submit.getValueAttribute());
HtmlResetInput reset = (HtmlResetInput) element("form:reset");
assertNotNull(reset);
assertEquals("", reset.getLangAttribute());
assertEquals("form:reset", reset.getNameAttribute());
assertEquals("", reset.getOnClickAttribute());
assertEquals("", reset.getOnDblClickAttribute());
assertEquals("", reset.getOnKeyDownAttribute());
assertEquals("", reset.getOnKeyPressAttribute());
assertEquals("", reset.getOnKeyUpAttribute());
assertEquals("", reset.getOnMouseDownAttribute());
assertEquals("", reset.getOnMouseMoveAttribute());
assertEquals("", reset.getOnMouseOutAttribute());
assertEquals("", reset.getOnMouseOverAttribute());
assertEquals("", reset.getOnMouseUpAttribute());
assertEquals("reset", reset.getTypeAttribute());
assertEquals("Reset", reset.getValueAttribute());
HtmlSubmitInput cancel = (HtmlSubmitInput) element("form:cancel");
assertNotNull(cancel);
assertEquals("", cancel.getLangAttribute());
assertEquals("form:cancel", cancel.getNameAttribute());
assertEquals("", cancel.getOnClickAttribute());
assertEquals("", cancel.getOnDblClickAttribute());
assertEquals("", cancel.getOnKeyDownAttribute());
assertEquals("", cancel.getOnKeyPressAttribute());
assertEquals("", cancel.getOnKeyUpAttribute());
assertEquals("", cancel.getOnMouseDownAttribute());
assertEquals("", cancel.getOnMouseMoveAttribute());
assertEquals("", cancel.getOnMouseOutAttribute());
assertEquals("", cancel.getOnMouseOverAttribute());
assertEquals("", cancel.getOnMouseUpAttribute());
assertEquals("submit", cancel.getTypeAttribute());
assertEquals("Cancel", cancel.getValueAttribute());
HtmlAnchor anchor = (HtmlAnchor) element("form:submit2");
assertNotNull(anchor);
assertEquals("", anchor.getAccessKeyAttribute());
assertEquals("", anchor.getCharsetAttribute());
assertEquals("", anchor.getClassAttribute());
assertEquals("", anchor.getCoordsAttribute());
assertEquals("#", anchor.getHrefAttribute());
assertEquals("form:submit2", anchor.getIdAttribute());
assertEquals("", anchor.getLangAttribute());
assertEquals("", anchor.getHrefLangAttribute());
assertEquals("", anchor.getOnBlurAttribute());
assertTrue
(anchor.getOnClickAttribute().startsWith
("document.forms['form']" +
"['org_apache_struts_faces_renderer_CommandLinkRenderer']" +
".value='form:submit2';"));
assertEquals("", anchor.getOnDblClickAttribute());
assertEquals("", anchor.getOnKeyDownAttribute());
assertEquals("", anchor.getOnKeyPressAttribute());
assertEquals("", anchor.getOnKeyUpAttribute());
assertEquals("", anchor.getOnMouseDownAttribute());
assertEquals("", anchor.getOnMouseMoveAttribute());
assertEquals("", anchor.getOnMouseOutAttribute());
assertEquals("", anchor.getOnMouseOverAttribute());
assertEquals("", anchor.getOnMouseUpAttribute());
assertEquals("", anchor.getTextDirectionAttribute());
assertEquals("", anchor.getXmlLangAttribute());
assertEquals("", anchor.getOnFocusAttribute());
assertEquals("", anchor.getRelAttribute());
assertEquals("", anchor.getRevAttribute());
assertEquals("", anchor.getShapeAttribute());
assertEquals("", anchor.getStyleAttribute());
assertEquals("", anchor.getTabIndexAttribute());
assertEquals("a", anchor.getTagName());
assertEquals("", anchor.getTargetAttribute());
assertEquals("", anchor.getTitleAttribute());
assertEquals("", anchor.getTypeAttribute());
assertEquals("Logon", anchor.asText());
List list = form.getHtmlElementsByAttribute
("input", "name",
"org_apache_struts_faces_renderer_CommandLinkRenderer");
assertNotNull(list);
assertEquals(1, list.size());
HtmlHiddenInput hidden = (HtmlHiddenInput) list.get(0);
assertEquals("hidden", hidden.getTypeAttribute());
assertEquals("", hidden.getValueAttribute());
}
/**
* <p>Submit known-bad mismatch and verify the correct response.</p>
*/
public void testMismatch() throws Exception {
HtmlSpan span = null;
HtmlTextInput username = (HtmlTextInput) element("form:username");
HtmlPasswordInput password = (HtmlPasswordInput)
element("form:password");
HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
username.setValueAttribute("baduser");
password.setValueAttribute("badpass");
submit(submit);
assertEquals("logon", title());
span = (HtmlSpan) element("globalErrors");
assertNotNull(span);
assertEquals("[EH][EP]Invalid username/password combination[ES][EF]",
span.asText());
username = (HtmlTextInput) element("form:username");
assertNotNull(username);
assertEquals("baduser", username.getValueAttribute());
span = (HtmlSpan) element("form:usernameErrors");
assertNotNull(span);
assertEquals("", span.asText());
password = (HtmlPasswordInput) element("form:password");
assertNotNull(password);
assertEquals("", password.getValueAttribute());
span = (HtmlSpan) element("form:passwordErrors");
assertNotNull(span);
assertEquals("", span.asText());
}
/**
* <p>Submit known-good username and password values, and
* verify the correct response.</p>
*/
public void testSuccessful() throws Exception {
HtmlTextInput username = (HtmlTextInput) element("form:username");
HtmlPasswordInput password = (HtmlPasswordInput)
element("form:password");
HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit");
username.setValueAttribute("gooduser");
password.setValueAttribute("goodpass");
submit(submit);
assertEquals("logon1", title());
}
}