All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sitoolkit.tester.domain.test.debug.DebugCommand Maven / Gradle / Ivy

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