001: // Copyright © 2002-2005 Canoo Engineering AG, Switzerland.
002: package com.canoo.webtest.steps.verify;
003:
004: import java.util.ArrayList;
005: import java.util.HashMap;
006: import java.util.List;
007: import java.util.Map;
008:
009: import com.canoo.webtest.engine.StepExecutionException;
010: import com.canoo.webtest.engine.StepFailedException;
011: import com.canoo.webtest.self.TestBlock;
012: import com.canoo.webtest.self.ThrowAssert;
013: import com.canoo.webtest.steps.Step;
014: import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
015: import com.gargoylesoftware.htmlunit.html.HtmlForm;
016: import com.gargoylesoftware.htmlunit.html.HtmlPage;
017:
018: /**
019: * @author Carsten Seibert, adapted by Dierk Koenig
020: * @author Marc Guillemot
021: */
022: public class VerifyCheckboxTest extends AbstractVerifyFormTest {
023: private class VerifyCheckboxTestStub extends VerifyCheckbox {
024: private int fListSize;
025: private boolean fShouldBeChecked;
026: private final HtmlPage page = getDummyPage("<html></html>");
027:
028: VerifyCheckboxTestStub(int size) {
029: this (size, true);
030: }
031:
032: VerifyCheckboxTestStub(int size, boolean checked) {
033: fListSize = size;
034: fShouldBeChecked = checked;
035: }
036:
037: protected HtmlForm findForm() {
038: return (HtmlForm) page.createHtmlElement("form");
039: }
040:
041: protected List findFields(HtmlForm form) {
042: List result = new ArrayList(fListSize);
043: for (int i = 0; i < fListSize; i++) {
044: result.add(getDummyNode());
045: }
046: return result;
047: }
048:
049: private HtmlCheckBoxInput getDummyNode() {
050: Map attributes = new HashMap();
051: if (fShouldBeChecked) {
052: attributes.put("checked", String
053: .valueOf(fShouldBeChecked));
054: }
055: return new HtmlCheckBoxInput(getDummyPage(), attributes);
056: }
057: }
058:
059: protected Step createStep() {
060: return new VerifyCheckbox();
061: }
062:
063: public void testNoCheckboxFound() throws Exception {
064: VerifyCheckbox step = new VerifyCheckboxTestStub(0);
065: step.setName("dummy");
066: assertThrowsExceptionOnExecute(step, StepFailedException.class);
067: }
068:
069: public void testTooManyCheckboxesFound() throws Exception {
070: VerifyCheckbox step = new VerifyCheckboxTestStub(2);
071: step.setName("dummy");
072: step.setChecked("true");
073: executeStep(step);
074: }
075:
076: public void testMultipleCheckboxesWithBadIndex() throws Exception {
077: VerifyCheckbox step = new VerifyCheckboxTestStub(2);
078: step.setName("dummy");
079: step.setFieldIndex("blah");
080: assertThrowsExceptionOnExecute(step,
081: StepExecutionException.class);
082: }
083:
084: public void testMultipleCheckboxesWithIndex() throws Exception {
085: VerifyCheckbox step = new VerifyCheckboxTestStub(2);
086: step.setName("dummy");
087: step.setChecked("true");
088: step.setFieldIndex("1");
089: executeStep(step);
090: }
091:
092: public void testNotChecked() throws Exception {
093: VerifyCheckbox step = new VerifyCheckboxTestStub(1, false);
094: step.setName("X");
095: step.setChecked("false");
096: executeStep(step);
097: // runs without exception
098: }
099:
100: public void testNotCheckedButExpected() throws Exception {
101: VerifyCheckbox step = new VerifyCheckboxTestStub(1, false);
102: step.setName("X");
103: step.setChecked("true");
104: assertThrowsExceptionOnExecute(step, StepFailedException.class);
105: }
106:
107: public void testChecked() throws Exception {
108: VerifyCheckbox step = new VerifyCheckboxTestStub(1, true);
109: step.setName("X");
110: step.setChecked("true");
111: executeStep(step);
112: // runs without exception
113: }
114:
115: public void testCheckedButNotExpected() throws Exception {
116: VerifyCheckbox step = new VerifyCheckboxTestStub(1, true);
117: step.setName("X");
118: step.setChecked("false");
119: assertThrowsExceptionOnExecute(step, StepFailedException.class);
120: }
121:
122: private void assertThrowsExceptionOnExecute(
123: final VerifyCheckbox step, Class throwable) {
124: ThrowAssert.assertThrows(throwable, new TestBlock() {
125: public void call() throws Exception {
126: executeStep(step);
127: }
128: });
129: }
130: }
|