001: /*
002: * Copyright 2005 jWic group (http://www.jwic.de)
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: *
016: * de.jwic.test.ControlTestCase
017: * Created on 11.09.2005
018: * $Id: ControlTestCase.java,v 1.2 2006/09/14 20:26:44 lordsam Exp $
019: */
020: package de.jwic.test;
021:
022: import java.util.Locale;
023:
024: import junit.framework.TestCase;
025: import de.jwic.base.ApplicationSetupBean;
026: import de.jwic.base.Control;
027: import de.jwic.base.IActionController;
028: import de.jwic.base.IControlContainer;
029: import de.jwic.base.JWicRuntime;
030: import de.jwic.base.Page;
031: import de.jwic.base.SessionContext;
032: import de.jwic.base.ValueChangedQueue;
033:
034: /**
035: * Tool class that is usefull to test controls. The control's test-class must
036: * be created in the createControl(..) method. The test methods can then
037: * access the control using the protected 'control' field. The control can
038: * be modified like this:
039: *
040: * MyControl myControl = (MyControl)control;
041: * updateField("field1", "value");
042: * updateField("text", "abc");
043: * updateDone();
044: * sendAction(control, "click", "1");
045: *
046: * assertEquals(myControl.getText(), "abc");
047: *
048: * @author Florian Lippisch
049: */
050: public abstract class ControlTestCase extends TestCase {
051:
052: protected SessionContext sc = null;
053: protected IActionController ac = null;
054: protected ValueChangedQueue queue = null;
055:
056: protected Control control = null;
057:
058: /**
059: * Must return the class that should be tested.
060: * @return
061: */
062: public abstract Control createControl(IControlContainer container);
063:
064: /*
065: * (non-Javadoc)
066: * @see junit.framework.TestCase#setUp()
067: */
068: protected void setUp() throws Exception {
069: super .setUp();
070:
071: ApplicationSetupBean appSetup = new ApplicationSetupBean();
072: appSetup.setName("test");
073: appSetup.setRootControlName("root");
074: appSetup.setRootControlClassName(Page.class.getName());
075:
076: JWicRuntime rt = TestJWicRuntimeProvider.getJWicRuntime();
077:
078: sc = rt.createSessionContext(appSetup, new Locale("en", "EN"),
079: null);
080: control = createControl((Page) sc.getTopControl());
081: ac = sc.getActionController();
082: }
083:
084: /* (non-Javadoc)
085: * @see junit.framework.TestCase#tearDown()
086: */
087: protected void tearDown() throws Exception {
088: super .tearDown();
089: sc.destroy(); // destroy the session.
090: }
091:
092: /**
093: * Simulate the update of a field. You must call updateDone() after all fields of
094: * the controls have been set to invoke pending listeners.
095: * @param control
096: * @param fieldName
097: * @param value
098: */
099: protected void updateField(String fieldName, String value) {
100: updateField(control, fieldName, value);
101: }
102:
103: /**
104: * Simulate the update of a field. You must call updateDone() after all fields of
105: * the controls have been set to invoke pending listeners.
106: * @param control
107: * @param fieldName
108: * @param value
109: */
110: protected void updateField(Control control, String fieldName,
111: String value) {
112: updateField(control, fieldName, new String[] { value });
113: }
114:
115: /**
116: * Simulate the update of a field. You must call updateDone() after all fields of
117: * the controls have been set to invoke pending listeners.
118: * @param control
119: * @param fieldName
120: * @param value
121: */
122: protected void updateField(Control control, String fieldName,
123: String value[]) {
124:
125: if (queue == null) {
126: queue = new ValueChangedQueue();
127: }
128: ac.handleField(sc, queue, "fld_" + control.getControlID() + "."
129: + fieldName, value);
130:
131: }
132:
133: /**
134: * Processes the updateQueue and invokes pending valueChanged listeners.
135: *
136: */
137: protected void updateDone() {
138: if (queue != null) {
139: queue.processQueue();
140: queue = null;
141: }
142: }
143:
144: /**
145: * Simulates a fireAction on the specified control.
146: * @param control
147: * @param action
148: * @param param
149: */
150: protected void sendAction(Control control, String action,
151: String param) {
152: if (queue != null) {
153: throw new IllegalStateException(
154: "A queue is still open! Must call updateDone() first");
155: }
156: ac.handleAction(sc, control.getControlID(), action, param);
157: }
158: }
|