org.sakuli.datamodel.TestCase.java Source code

Java tutorial

Introduction

Here is the source code for org.sakuli.datamodel.TestCase.java

Source

/*
 * Sakuli - Testing and Monitoring-Tool for Websites and common UIs.
 *
 * Copyright 2013 - 2015 the original author or authors.
 *
 * 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.sakuli.datamodel;

import org.sakuli.datamodel.properties.SakuliProperties;
import org.sakuli.datamodel.state.TestCaseState;
import org.sakuli.exceptions.SakuliException;
import org.springframework.util.CollectionUtils;

import java.nio.file.Path;
import java.util.*;

import static org.apache.commons.lang.StringUtils.isNotBlank;
import static org.apache.commons.lang.StringUtils.trimToEmpty;

/**
 * @author tschneck Date: 17.06.13
 */
public class TestCase extends AbstractTestDataEntity<SakuliException, TestCaseState> {

    /**
     * {@link #id} and {@link # startUrl} will be set with the method {@link org.sakuli.starter.SahiConnector#init()}
     */
    private String startUrl;
    /**
     * will be set with the method {@link org.sakuli.actions.TestCaseAction#saveResult(String, String, String,
     * String, String)}
     */
    private String lastURL;
    private List<TestCaseStep> steps;

    private Path tcFile;

    /**
     * Creates a TestCase
     *
     * @param name       descriptive name of the test case
     * @param testCaseId id for this test_case
     */
    public TestCase(String name, String testCaseId) {
        this.name = name;
        this.id = testCaseId;
        /**
         * needed to be set to -1, so the function {@link org.sakuli.actions.TestCaseAction#addTestCaseStep(String, String, String, String, int)}
         * can check if the method {@link org.sakuli.actions.TestCaseAction#initTestCaseWarningAndCritical(String, int, int)}
         * have been called at the beginning of this test case.
         */
        warningTime = -1;
        criticalTime = -1;
        this.state = TestCaseState.INIT;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void refreshState() {
        if (exception != null) {
            state = TestCaseState.ERRORS;
            return;
        }
        boolean stepWarning = false;
        if (steps != null) {
            for (TestCaseStep step : steps) {
                step.refreshState();
                switch (step.getState()) {
                case WARNING:
                    stepWarning = true;
                    break;
                case ERRORS:
                    state = TestCaseState.ERRORS;
                    return;
                }
            }
        }
        TestCaseState newState;
        if (criticalTime > 0 && getDuration() > criticalTime) {
            newState = TestCaseState.CRITICAL;
        } else if (warningTime > 0 && getDuration() > warningTime) {
            newState = TestCaseState.WARNING;
        } else if (stepWarning) {
            newState = TestCaseState.WARNING_IN_STEP;
        } else {
            newState = TestCaseState.OK;
        }
        if (state == null || newState.getErrorCode() > state.getErrorCode()) {
            state = newState;
        }
    }

    @Override
    public String getResultString() {
        String stout = "\n\t======== test case \"" + getId() + "\" ended with " + getState() + " ================="
                + "\n\ttest case id: " + this.getId() + super.getResultString().replace("\n", "\n\t")
                + "\n\tstart URL: " + this.getStartUrl() + "\n\tlast URL: " + this.getLastURL();

        //steps
        for (TestCaseStep step : getStepsAsSortedSet()) {
            stout += step.getResultString();
        }
        return stout;
    }

    /**
     * Getter and Setter**
     */

    public String getStartUrl() {
        return startUrl;
    }

    public void setStartUrl(String startUrl) {
        this.startUrl = startUrl;
    }

    public String getLastURL() {
        return lastURL;
    }

    public void setLastURL(String lastURL) {
        this.lastURL = lastURL;
    }

    public List<TestCaseStep> getSteps() {
        return steps == null ? new ArrayList<>() : steps;
    }

    public void setSteps(List<TestCaseStep> steps) {
        this.steps = steps;
    }

    public void addStep(TestCaseStep step) {
        if (steps == null) {
            steps = new ArrayList<>();
        }
        if (!steps.contains(step)) {
            steps.add(step);
        }
        Collections.sort(steps);
    }

    @Override
    public String toString() {
        return "TestCase{" + super.toString() + ", id='" + id + '\'' + ", startUrl='" + startUrl + '\''
                + ", lastURL='" + lastURL + '\'' + ", steps=" + steps + ", tcFile=" + tcFile + "} ";
    }

    public String getActionValueString() {
        return "id=" + getId() + ", name=" + getName();
    }

    public Path getTcFile() {
        return tcFile;
    }

    public void setTcFile(Path tcFile) {
        this.tcFile = tcFile;
    }

    /**
     * @return all {@link TestCaseStep}s as {@link SortedSet} or a empty set if no test case steps are specified.
     */
    public SortedSet<TestCaseStep> getStepsAsSortedSet() {
        if (!CollectionUtils.isEmpty(steps)) {
            return new TreeSet<>(steps);
        }
        return new TreeSet<>();
    }

    @Override
    public String getExceptionMessages(boolean flatFormatted) {
        StringBuilder caseErrorMessage = new StringBuilder(trimToEmpty(super.getExceptionMessages(flatFormatted)));
        for (TestCaseStep step : getStepsAsSortedSet()) {
            final String stepErrorMessage = step.getExceptionMessages(flatFormatted);

            if (isNotBlank(stepErrorMessage)) {
                if (flatFormatted && caseErrorMessage.length() > 0) {
                    caseErrorMessage.append(" - ");
                }
                if (!flatFormatted) {
                    caseErrorMessage.append("\n\t");
                }
                caseErrorMessage.append("STEP \"").append(step.getId()).append("\": ").append(stepErrorMessage);
            }
        }
        return caseErrorMessage.toString();
    }
}