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

org.sitoolkit.tester.domain.test.TestStep Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2013 Monocrea Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.sitoolkit.tester.domain.test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 *
 * @author yuichi.kuwahara
 */
@Component
@Scope("prototype")
public class TestStep {

    @Resource
    ELSupport el;
    /**
     * ステップNo
     */
    private String no;
    /**
     * 項目名
     */
    private String itemName;
    /**
     * 操作
     */
    private Operation operation;
    /**
     * 操作名
     */
    private String operationName;
    /**
     * 操作対象の項目を特定するロケーター
     */
    @Resource
    private Locator locator;
    /**
     * スクリーンショットを撮るタイミング
     */
    private String screenshotTiming;
    /**
     * テストデータの形式
     */
    private String dataType;
    /**
     * 操作対象の項目に適用するテストデータ
     */
    private Map testData = new HashMap<>();
    private String currentCaseNo;

    /**
     * ダイアログのスクリーンショットを取得するケース番号
     */
    private Set dialogScreenshotCaseNoSet = new HashSet();

    /**
     * ブレークポイント
     */
    private String breakPoint;

    /**
     * 指定のテストデータを使用し、テスト操作を実行する。
     *
     * @see Operation#execute(org.sitoolkit.tester.TestScript)
     */
    public void execute() {
        getOperation().execute(this);
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    /**
     * 操作名を取得します。
     * @return 操作名
     */
    public String getOperationName() {
        return operationName;
    }

    /**
     * 操作名を設定します。
     * @param operationName 操作名
     */
    public void setOperationName(String operationName) {
        this.operationName = operationName;
    }

    /**
     * ロケーターを取得します。
     *
     * @return ロケーター ブランクの場合は項目名
     */
    public Locator getLocator() {
        return locator;
    }
    /**
     * ロケーターを設定します。
     *
     * @param locator ロケーター
     */
    public void setLocator(Locator locator) {
        this.locator = locator;
    }
    /**
     * テストデータの中から実行中ケースで使用する値を取得します。
     *
     * @return 実行中ケースで使用する値
     */
    public String getValue() {
        String value = getTestData().get(getCurrentCaseNo());
        return el.evaludate(value);
    }

    public String[] getValues() {
        return StringUtils.isBlank(getValue()) ? new String[0] : getValue().split("(:|;)");
    }

    public boolean getDialogValue() {
        String v = getValue().toLowerCase();
        return "true".equalsIgnoreCase(v) || "ok".equalsIgnoreCase(v) || "y".equalsIgnoreCase(v);
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public Operation getOperation() {
        return operation;
    }

    public void setOperation(Operation operation) {
        this.operation = operation;
    }

    public Map getTestData() {
        return testData;
    }

    public void setTestData(Map testData) {
        this.testData = testData;
    }

    public void setTestData(String caseNo, String testData) {
        this.testData.put(caseNo, testData);
    }

    public String getScreenshotTiming() {
        return screenshotTiming;
    }

    public void setScreenshotTiming(String screenshotTiming) {
        this.screenshotTiming = screenshotTiming;
    }

    /**
     * 操作実行前にスクリーンショットが必要な場合にtrueを返します。
     *
     * @return 操作実行前にスクリーンショットが必要な場合にtrue
     */
    public boolean beforeScreenshot() {
        return StringUtils.contains(getScreenshotTiming(), "前");
    }

    /**
     * 操作実行後にスクリーンショットが必要な場合にtrueを返します。
     *
     * @return 操作実行後にスクリーンショットが必要な場合にtrue
     */
    public boolean afterScreenshot() {
        return StringUtils.contains(getScreenshotTiming(), "後");
    }

    /**
     * 現在のケースでダイアログのスクリーンショットが必要な場合にtrueを返します。
     * @return 現在のケースでダイアログのスクリーンショットが必要な場合にtrue
     */
    public boolean dialogScreenshot() {
        return dialogScreenshotCaseNoSet.contains(getCurrentCaseNo());
    }

    public String getDataType() {
        return dataType;
    }

    public void setDataType(String dataType) {
        this.dataType = StringUtils.lowerCase(dataType);
    }

    /**
     * 実行中ケースでは当該操作を行わないことを表します。
     * テスト値が空の場合にtrueとなります。
     *
     * @return
     */
    public boolean isSkip() {
        return StringUtils.isBlank(getValue());
    }

    public String getCurrentCaseNo() {
        return currentCaseNo;
    }

    public void setCurrentCaseNo(String currentCaseNo) {
        this.currentCaseNo = currentCaseNo;
    }

    public void addDialogScreenshotCaseNo(String caseNo) {
        dialogScreenshotCaseNoSet.add(caseNo);
    }

    public String getBreakPoint() {
        return breakPoint;
    }

    public void setBreakPoint(String breakPoint) {
        this.breakPoint = breakPoint;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy