001: package com.xoetrope.carousel.testpilot;
002:
003: import net.xoetrope.swing.XButton;
004: import net.xoetrope.swing.XTable;
005: import net.xoetrope.xui.XPage;
006: import net.xoetrope.xui.XProjectManager;
007: import net.xoetrope.xui.data.XBaseModel;
008: import net.xoetrope.xui.data.XModel;
009: import netscape.javascript.JSObject;
010:
011: /**
012: * Support for ???
013: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
014: * the GNU Public License (GPL), please see license.txt for more details. If
015: * you make commercial use of this software you must purchase a commercial
016: * license from Xoetrope.</p>
017: * <p> $Revision: 1.2 $</p>
018: */
019: public class Runner extends XPage implements Runnable {
020: XTable table;
021: XButton btnStart, btnBack; //, btnPause, btnStop, btnSave, btnBack;
022: XModel evtModel;
023: Thread runnerThread;
024: private int cmdDelay = 0;
025: private int currentCommand = 0;
026: // FireThread fire;
027:
028: private int passCount = 0, failCount = 0;
029:
030: public void pageCreated() {
031: table = (XTable) this .findComponent("table");
032: table.setStyle("TableData");
033: table.setHeaderStyle("TableHeading");
034: table.setSelectedStyle("TableSelection");
035: table.setInteractiveTable(true);
036: btnStart = (XButton) findComponent("btnStart");
037: evtModel = (XModel) project.getModel().get("events/items");
038: XBaseModel delayModel = (XBaseModel) project.getModel().get(
039: "settings/cmd_delay");
040: table.setModel(evtModel);
041: try {
042: cmdDelay = Integer.parseInt((String) delayModel.get());
043: } catch (NumberFormatException ex) {
044: }
045: }
046:
047: public void startScript() {
048: if (wasMouseClicked()) {
049: currentCommand = 1;
050: passCount = failCount = 0;
051: runnerThread = new Thread(this );
052: runnerThread.run();
053: }
054: }
055:
056: public void run() {
057: JSObject js = JSObject.getWindow(UnitApplet.getApplet());
058: js.eval("scriptStarted();");
059: doRun();
060: }
061:
062: public void resumeScript() {
063: runnerThread = new Thread(this );
064: runnerThread.run();
065: }
066:
067: public void doRun() {
068: JSObject js = JSObject.getWindow(UnitApplet.getApplet());
069: for (currentCommand = currentCommand; currentCommand < evtModel
070: .getNumChildren(); currentCommand++) {
071: table.setSelectedRow(currentCommand - 1);
072: table.repaint();
073: XBaseModel event = (XBaseModel) evtModel
074: .get(currentCommand);
075: String eventName = getAttrib(event,
076: ScriptConverter.EVENT_NODE);
077: String control = getAttrib(event,
078: ScriptConverter.CONTROL_NODE);
079: String value = getAttrib(event, ScriptConverter.VALUE_NODE);
080: String cmd = getAttrib(event, ScriptConverter.COMMAND_NODE);
081: String hash = getAttrib(event, ScriptConverter.HASH_NODE);
082: String tag = getAttrib(event, ScriptConverter.TAG_NODE);
083: String frame = getAttrib(event, ScriptConverter.FRAME_NODE);
084: if (cmd.compareTo("pause") == 0) {
085: try {
086: runnerThread.sleep(Long.parseLong(value));
087: } catch (Exception ex) {
088: ex.printStackTrace();
089: }
090: } else if (cmd.compareTo("assert") == 0) {
091: Object args[] = new Object[2];
092: args[0] = control;
093: args[1] = frame;
094: String ret = js.call("getControlValue", args)
095: .toString();
096: if (ret.compareTo(value) == 0) {
097: passCount++;
098: } else {
099: failCount++;
100: }
101: } else if (cmd.compareTo("info") == 0) {
102: if (eventName.compareTo("unload") == 0) {
103: Object args[] = new Object[0];
104: String ret = "false";
105: currentCommand++;
106: ret = js.call("waitForReload", args).toString();
107: try {
108: runnerThread = null;//.destroy();
109: } catch (Exception ex3) {
110: ex3.printStackTrace();
111: }
112: } else if (eventName.compareTo("confirm") == 0) {
113: }
114: } else {
115: String res = "fireCommand( '" + eventName + "', '"
116: + control + "', '" + value + "', '" + cmd
117: + "', '" + hash.trim() + "', '" + tag + "', '"
118: + frame + "' );";
119: js.eval(res);
120: }
121: }
122: pageMgr.showPage("tpresults");
123: Results results = (Results) pageMgr.getPage("tpresults");
124: results.setPassCount(passCount);
125: results.setFailCount(failCount);
126: }
127:
128: public boolean getConfirmResult() {
129: String eventName = "", control = "";
130: int counter = currentCommand;
131: while (eventName.compareTo("confirm") != 0) {
132: XBaseModel event = (XBaseModel) evtModel.get(counter);
133: eventName = getAttrib(event, ScriptConverter.EVENT_NODE);
134: control = getAttrib(event, ScriptConverter.CONTROL_NODE);
135: counter--;
136: }
137: currentCommand++;
138: doRun();
139: return control.compareTo("-1") == 0 ? true : false;
140: }
141:
142: private String getAttrib(XBaseModel model, int index) {
143: XBaseModel ret = (XBaseModel) model.get(index);
144: if (ret == null)
145: return null;
146:
147: Object retStr = ret.get();
148: if (retStr == null)
149: return null;
150: else
151: return retStr.toString();
152: }
153:
154: public void goBack() {
155: if (wasMouseClicked())
156: pageMgr.showPrevious();
157: }
158: }
159: //class FireThread extends Thread {
160: //
161: // JSObject js;
162: // String eventName, control, value, cmd, hash, tag, frame;
163: //
164: //
165: // public FireThread( JSObject jsobject, String eventName, String control, String value, String cmd, String hash, String tag, String frame )
166: // {
167: // js = jsobject;
168: // this.eventName = eventName;
169: // this.control = control;
170: // this.value = value;
171: // this.cmd = cmd;
172: // this.hash = hash;
173: // this.tag = tag;
174: // this.frame = frame;
175: // }
176: //
177: // public void run() {
178: // String res = "fireCommand( '" + eventName + "', '" + control + "', '" +
179: // value + "', '" + cmd + "', '" + hash.trim() + "', '" + tag + "', '" +
180: // frame + "' );";
181: // js.eval(res);
182: // }
|