org.sitoolkit.tester.domain.test.debug.DebugCommand Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sit-wt Show documentation
Show all versions of sit-wt Show documentation
SIToolkit for Web Testing
The newest version!
package org.sitoolkit.tester.domain.test.debug;
import java.awt.Desktop;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import org.sitoolkit.tester.domain.test.Locator;
import org.sitoolkit.tester.domain.test.TestContext;
import org.sitoolkit.tester.domain.test.TestScript;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
class DebugCommand {
private static Logger LOG = LoggerFactory.getLogger(DebugCommand.class);
CommandKey key;
String body;
static Map map = new HashMap<>();
static {
for (CommandKey key : CommandKey.values()) {
if (key.key.length() > 0) {
map.put(key.key.substring(0, 1), key);
}
}
}
static final DebugCommand NA = new DebugCommand(CommandKey.NA, "");
public DebugCommand(CommandKey key, String body) {
super();
this.key = key;
this.body = body;
}
static DebugCommand readLine(String line) {
if (StringUtils.isBlank(line)) {
return NA;
}
CommandKey key = map.get(line.substring(0, 1));
if (key == null) {
return NA;
}
return new DebugCommand(key, line.substring(1).trim());
}
/**
* コマンド実行結果のテストステップインデックスを取得します。
*
* @param idx テストステップインデックス
* @param testScript テストスクリプト
* @return コマンド実行結果のテストステップインデックス
*/
int execute(final int idx, TestScript testScript, ApplicationContext appCtx) {
int ret = idx;
switch (key) {
case START:
ret = idx + 1;
break;
case BACK:
ret = idx - 1;
break;
case CURRENT:
ret = idx;
break;
case FORWARD:
ret = idx + 1;
break;
case EXEC_STEP_NO:
ret = testScript.getIndexByScriptNo(body);
break;
case SET_STEP_NO:
ret = testScript.getIndexByScriptNo(body);
break;
case LOC:
LocatorChecker check = appCtx.getBean(LocatorChecker.class);
Locator locator = Locator.build(body);
if (locator.isNa()) {
LOG.info("書式が不正です。");
} else {
check.check(locator);
}
break;
case SHOW_PARAM:
showParam(appCtx);
break;
case INPUT_PARAM:
inputParam(appCtx);
break;
case EXPORT:
try {
TestScriptGenerateTool exporter = appCtx.getBean(TestScriptGenerateTool.class);
exporter.generateFromPage();
} catch (Exception e) {
LOG.error("エクスポートの実行中に予期しないエラーが発生しました。", e);
}
break;
case OPEN_SRCIPT:
try {
Desktop.getDesktop().open(testScript.getScriptFile());
} catch (IOException e) {
LOG.error("予期しないエラーが発生しました。", e);
}
break;
case EXIT:
ret = testScript.getTestStepList().size();
break;
default:
break;
}
return ret;
}
protected void inputParam(ApplicationContext appCtx) {
TestContext testCtx = appCtx.getBean(TestContext.class);
if (StringUtils.isBlank(body)) {
LOG.info("書式が不正です。");
return;
}
body = body.trim();
String key = StringUtils.substringBefore(body, " ");
String value = StringUtils.substringAfter(body, " ");
testCtx.addParam(key, value);
LOG.info("パラメーターをストアしました。{}={}", key, value);
}
protected void showParam(ApplicationContext appCtx) {
TestContext testCtx = appCtx.getBean(TestContext.class);
if (testCtx.getParams().isEmpty()) {
LOG.info("ストアされているパラメーターはありません。");
return;
}
StringBuilder sb = new StringBuilder();
for (Entry entry : testCtx.getParams().entrySet()) {
sb.append("\n ");
sb.append(entry.getKey());
sb.append("=");
sb.append(entry.getValue());
}
LOG.info("ストアされているパラメーターを表示します。{}", sb);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy