Package com.technophobia.substeps.runner.node

Source Code of com.technophobia.substeps.runner.node.StepImplementationNodeRunner

/*
*  Copyright Technophobia Ltd 2012
*
*   This file is part of Substeps.
*
*    Substeps is free software: you can redistribute it and/or modify
*    it under the terms of the GNU Lesser General Public License as published by
*    the Free Software Foundation, either version 3 of the License, or
*    (at your option) any later version.
*
*    Substeps is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU Lesser General Public License for more details.
*
*    You should have received a copy of the GNU Lesser General Public License
*    along with Substeps.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.technophobia.substeps.runner.node;

import java.lang.reflect.InvocationTargetException;

import com.technophobia.substeps.execution.node.RootNodeExecutionContext;
import com.technophobia.substeps.execution.node.StepImplementationNode;
import com.technophobia.substeps.model.Scope;
import com.technophobia.substeps.runner.ProvidesScreenshot;
import com.technophobia.substeps.runner.SubstepExecutionFailure;

public class StepImplementationNodeRunner extends AbstractNodeRunner<StepImplementationNode, Void> {

    @Override
    protected boolean execute(StepImplementationNode node, RootNodeExecutionContext context) {

        boolean success = false;

        try {

            context.getMethodExecutor().executeMethod(node.getTargetClass(), node.getTargetMethod(),
                    node.getMethodArgs());
            context.setTestsHaveRun();
            success = true;

        } catch (final InvocationTargetException e) {

            addFailure(node, context, e.getTargetException());

        } catch (final Throwable t) {

            addFailure(node, context, t);
        }

        return success;
    }

    private void addFailure(StepImplementationNode node, RootNodeExecutionContext context, Throwable t) {

        byte[] screenshotBytes = attemptScreenshot(node, context);
        context.addFailure(new SubstepExecutionFailure(t, node, screenshotBytes));
    }

    @Override
    protected Scope getScope() {

        return Scope.STEP;
    }

    @SuppressWarnings("unchecked")
    private <T> byte[] attemptScreenshot(StepImplementationNode node, RootNodeExecutionContext context) {

        return ProvidesScreenshot.class.isAssignableFrom(node.getTargetClass()) ? getScreenshot(context,
                (Class<? extends ProvidesScreenshot>) node.getTargetClass()) : null;
    }

    private <T extends ProvidesScreenshot> byte[] getScreenshot(RootNodeExecutionContext context,
            Class<T> screenshotClass) {

        T screenshotTakingInstance = context.getMethodExecutor().getImplementation(screenshotClass);
        return screenshotTakingInstance.getScreenshotBytes();
    }

}
TOP

Related Classes of com.technophobia.substeps.runner.node.StepImplementationNodeRunner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.