Skip to content

Commit

Permalink
ARQGRA-480 removed automatic activation of "takeBeforeTest" when
Browse files Browse the repository at this point in the history
"takeOnEveryAction" is activated
  • Loading branch information
MatousJobanek committed Oct 6, 2015
1 parent 4762465 commit 6c1434d
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 145 deletions.
Expand Up @@ -46,21 +46,6 @@ public boolean getTakeOnEveryAction() {
return Boolean.parseBoolean(getProperty("takeOnEveryAction", takeOnEveryAction));
}


/** By default set to false.
*
* @return true if screenshot should be taken before test, false otherwise.
* Note that if getTakeOnEveryAction is true then result of this method is always true.
*/
@Override
public boolean getTakeBeforeTest() {

if(getTakeOnEveryAction()) {
return true;
}
return super.getTakeBeforeTest();
}

@Override
public void validate() throws ScreenshooterConfigurationException {
super.validate();
Expand Down
Expand Up @@ -30,20 +30,20 @@
*/
public abstract class AbstractTakeScreenshotInterceptor implements Interceptor {

protected TakeScreenshot takeScreenshotEvent;
protected TakeScreenshot takeScreenshot;
protected TakeScreenshotAndReportService takeScreenAndReportService;
protected InterceptorRegistry interceptorRegistryService;

public AbstractTakeScreenshotInterceptor(TakeScreenshot takeScreenshotEvent,
public AbstractTakeScreenshotInterceptor(TakeScreenshot takeScreenshot,
TakeScreenshotAndReportService takeScreenAndReportService,
InterceptorRegistry interceptorRegistryService) {
this.takeScreenshotEvent = takeScreenshotEvent;
this.takeScreenshot = takeScreenshot;
this.takeScreenAndReportService = takeScreenAndReportService;
this.interceptorRegistryService = interceptorRegistryService;
}

protected void takeScreenshotAndReport() {
takeScreenAndReportService.takeScreenshotAndReport(takeScreenshotEvent);
takeScreenAndReportService.takeScreenshotAndReport(takeScreenshot);
}


Expand Down
Expand Up @@ -59,19 +59,12 @@ public String getIdentifier(ResourceType resourceType) {
sb.append(metaData.getOptionalDescription());
}
if (when != null) {
sb.append("_");
if(when == When.AFTER || when == When.FAILED) {
sb.setLength(0);
}
if(when == When.ON_EVERY_ACTION && metaData.getOptionalDescription().equals("get0")) {
sb.setLength(0);
sb.append(When.BEFORE);
} else if(when == When.BEFORE) {
sb.setLength(0);
sb.append(When.BEFORE);
if (when == When.ON_EVERY_ACTION) {
sb.append("_");
} else {
sb.append(when.toString());
sb.setLength(0);
}
sb.append(when.toString());
}
if (resourceType != null) {
sb.append(".");
Expand Down
Expand Up @@ -23,14 +23,18 @@

import org.arquillian.extension.recorder.DefaultFileNameBuilder;
import org.arquillian.extension.recorder.When;
import org.arquillian.extension.recorder.screenshooter.Screenshooter;
import org.arquillian.extension.recorder.screenshooter.ScreenshooterConfiguration;
import org.arquillian.extension.recorder.screenshooter.ScreenshotMetaData;
import org.arquillian.extension.recorder.screenshooter.api.Screenshot;
import org.arquillian.extension.recorder.screenshooter.browser.configuration.BrowserScreenshooterConfiguration;
import org.arquillian.extension.recorder.screenshooter.event.TakeScreenshot;
import org.jboss.arquillian.core.api.Instance;
import org.jboss.arquillian.core.api.annotation.Inject;
import org.jboss.arquillian.core.api.annotation.Observes;
import org.jboss.arquillian.core.spi.ServiceLoader;
import org.jboss.arquillian.test.spi.event.suite.After;
import org.jboss.arquillian.test.spi.event.suite.Before;

import static java.lang.Integer.MIN_VALUE;

Expand All @@ -49,35 +53,30 @@ public class ScreenshotTaker {
@Inject
private Instance<InterceptorRegistry> interceptorRegistry;

@Inject
private Instance<Screenshooter> screenshooter;

public void registerOnEveryActionInterceptor(@Observes Before event) {
BrowserScreenshooterConfiguration configuration = (BrowserScreenshooterConfiguration) this.configuration.get();
Screenshot annotation = event.getTestMethod().getAnnotation(Screenshot.class);

if (((annotation != null && annotation.takeOnEveryAction()))
|| ((annotation == null) && (configuration.getTakeOnEveryAction()))) {
registerInterceptor(event);
}
}

public void onTakeScreenshot(@Observes TakeScreenshot event) {
if(event.getWhen() == When.BEFORE && configuration.get().getTakeBeforeTest()) {
TakeScreenshotBeforeTestInterceptor beforeInterceptor =
new TakeScreenshotBeforeTestInterceptor(event, getTakeAndReportService(), interceptorRegistry.get());
interceptorRegistry.get().register(beforeInterceptor);

boolean willTakeScreenshot = false;

if(((event.getAnnotation() != null && event.getAnnotation().takeOnEveryAction()))
|| (event.getAnnotation() == null) && ((BrowserScreenshooterConfiguration) configuration.get()).getTakeOnEveryAction()) {
willTakeScreenshot = true;
}

if (willTakeScreenshot) {
TakeScreenshotOnEveryActionInterceptor onEveryActionInterceptor =
new TakeScreenshotOnEveryActionInterceptor(event, getTakeAndReportService(), interceptorRegistry.get());
interceptorRegistry.get().register(onEveryActionInterceptor);
}
} else {
DefaultFileNameBuilder nameBuilder = new DefaultFileNameBuilder();
String screenshotName = nameBuilder
.withMetaData(event.getMetaData())
.withStage(event.getWhen())
.withResourceIdentifier(ResourceIdentifierFactory.getResoruceIdentifier(event.getMetaData(), event.getWhen()))
.withResourceIdentifier(
ResourceIdentifierFactory.getResoruceIdentifier(event.getMetaData(), event.getWhen()))
.build();
event.setFileName(screenshotName);

getTakeAndReportService().takeScreenshotAndReport(event);
}
}

public void unregisterInterceptors(@Observes(precedence = MIN_VALUE) After event) {
Expand All @@ -88,4 +87,35 @@ public void unregisterInterceptors(@Observes(precedence = MIN_VALUE) After event
private TakeScreenshotAndReportService getTakeAndReportService() {
return serviceLoader.get().onlyOne(TakeScreenshotAndReportService.class);
}

private ScreenshotMetaData getMetaData(Before event) {
ScreenshotMetaData metaData = new ScreenshotMetaData();
metaData.setTestClass(event.getTestClass());
metaData.setTestMethod(event.getTestMethod());
metaData.setTimeStamp(System.currentTimeMillis());
metaData.setResourceType(screenshooter.get().getScreenshotType());
return metaData;
}

private String getScreenshotName(ScreenshotMetaData metaData, When when) {
DefaultFileNameBuilder nameBuilder = new DefaultFileNameBuilder();
return nameBuilder
.withMetaData(metaData)
.withStage(when)
.build();
}

private void registerInterceptor(Before event) {
ScreenshotMetaData metaData = getMetaData(event);
String screenshotName = getScreenshotName(metaData, When.ON_EVERY_ACTION);
Screenshot annotation = event.getTestMethod().getAnnotation(Screenshot.class);

TakeScreenshot takeScreenshot = new TakeScreenshot(screenshotName, metaData, When.ON_EVERY_ACTION, annotation);

TakeScreenshotOnEveryActionInterceptor onEveryActionInterceptor =
new TakeScreenshotOnEveryActionInterceptor(takeScreenshot, getTakeAndReportService(),
interceptorRegistry.get());

interceptorRegistry.get().register(onEveryActionInterceptor);
}
}
Expand Up @@ -50,23 +50,23 @@ public class TakeScreenshotAndReportService {
@Inject
private Instance<TakenResourceRegister> takenScreenshotsRegister;

public void takeScreenshotAndReport(TakeScreenshot takeScreenshotEvent) {
public void takeScreenshotAndReport(TakeScreenshot takeScreenshot) {
ScreenshotType screenshotType = screenshooter.get().getScreenshotType();

File screenshotTarget = new File(
new File(takeScreenshotEvent.getMetaData().getTestClassName(), takeScreenshotEvent.getMetaData().getTestMethodName()),
takeScreenshotEvent.getFileName());
new File(takeScreenshot.getMetaData().getTestClassName(), takeScreenshot.getMetaData().getTestMethodName()),
takeScreenshot.getFileName());

Screenshot screenshot = screenshooter.get().takeScreenshot(screenshotTarget, screenshotType);
takenScreenshotsRegister.get().addTaken(screenshot);

takeScreenshotEvent.getMetaData().setHeight(screenshot.getHeight());
takeScreenshotEvent.getMetaData().setWidth(screenshot.getWidth());
screenshot.setResourceMetaData(takeScreenshotEvent.getMetaData());
takeScreenshot.getMetaData().setHeight(screenshot.getHeight());
takeScreenshot.getMetaData().setWidth(screenshot.getWidth());
screenshot.setResourceMetaData(takeScreenshot.getMetaData());

PropertyEntry propertyEntry = new ScreenshotReportEntryBuilder()
.withWhen(takeScreenshotEvent.getWhen())
.withMetadata(takeScreenshotEvent.getMetaData())
.withWhen(takeScreenshot.getWhen())
.withMetadata(takeScreenshot.getMetaData())
.withScreenshot(screenshot)
.build();

Expand Down

This file was deleted.

Expand Up @@ -24,11 +24,11 @@
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;

import org.arquillian.extension.recorder.DefaultFileNameBuilder;
import org.arquillian.extension.recorder.When;
import org.arquillian.extension.recorder.screenshooter.event.TakeScreenshot;
import org.jboss.arquillian.graphene.proxy.Interceptor;

import org.jboss.arquillian.graphene.proxy.InvocationContext;
import org.openqa.selenium.WebDriver;

Expand All @@ -42,10 +42,10 @@ public class TakeScreenshotOnEveryActionInterceptor extends AbstractTakeScreensh

private static final List<Method> WHITE_LIST_WEB_DRIVER_METHODS = Arrays.asList(WebDriver.class.getMethods());

public TakeScreenshotOnEveryActionInterceptor(TakeScreenshot takeScreenshotEvent,
public TakeScreenshotOnEveryActionInterceptor(TakeScreenshot takeScreenshot,
TakeScreenshotAndReportService takeScreenAndReportservice,
InterceptorRegistry interceptorRegistryService) {
super(takeScreenshotEvent, takeScreenAndReportservice, interceptorRegistryService);
super(takeScreenshot, takeScreenAndReportservice, interceptorRegistryService);
}

@Override
Expand All @@ -59,15 +59,18 @@ public Object intercept(InvocationContext context) throws Throwable {

if (isInterceptedMethodAllowed(interceptedMethod)) {
When when = When.ON_EVERY_ACTION;
takeScreenshotEvent.getMetaData()
takeScreenshot.getMetaData()
.setOptionalDescription(interceptedMethod.getName() + Integer.toString(counter++));

DefaultFileNameBuilder nameBuilder = new DefaultFileNameBuilder();
String screenshotName = nameBuilder.withMetaData(takeScreenshotEvent.getMetaData()).withStage(when)
.withResourceIdentifier(
ResourceIdentifierFactory.getResoruceIdentifier(takeScreenshotEvent.getMetaData(), when)).build();
takeScreenshotEvent.setFileName(screenshotName);
takeScreenshotEvent.setWhen(screenshotName.contains("before") ? When.BEFORE : When.ON_EVERY_ACTION);
String screenshotName = nameBuilder
.withMetaData(takeScreenshot.getMetaData())
.withStage(when)
.withResourceIdentifier(
ResourceIdentifierFactory.getResoruceIdentifier(takeScreenshot.getMetaData(), when))
.build();
takeScreenshot.setFileName(screenshotName);
takeScreenshot.setWhen(When.ON_EVERY_ACTION);

takeScreenshotAndReport();
}
Expand Down

0 comments on commit 6c1434d

Please sign in to comment.