/* * JBoss, Home of Professional Open Source * Copyright 2011, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * 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.jboss.arquillian.drone.configuration; import java.io.File; import java.lang.annotation.Annotation; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import org.jboss.arquillian.ajocado.browser.Browser; import org.jboss.arquillian.ajocado.framework.AjocadoConfiguration; import org.jboss.arquillian.drone.spi.DroneConfiguration; import org.jboss.arquillian.impl.configuration.api.ArquillianDescriptor; /** * Configuration for Arquillian Ajocado. This configuration can be fetched from * Arquillian Descriptor and overridden by System properties. * * @author <a href="kpiwko@redhat.com>Karel Piwko</a> * @see ArquillianDescriptor * @see ConfigurationMapper * */ public class ArquillianAjocadoConfiguration implements AjocadoConfiguration, DroneConfiguration<ArquillianAjocadoConfiguration> { /** * A name used to determine configuration from ArquillianDescriptor */ public static final String CONFIGURATION_NAME = "ajocado"; private URL contextRoot; private String contextPath = ""; private String browser = "*firefox"; private File resourcesDirectory = new File("target/test-classes"); private File buildDirectory = new File("target/"); private String seleniumHost = "localhost"; private int seleniumPort = 14444; private boolean seleniumMaximize = false; private boolean seleniumDebug = false; private boolean seleniumNetworkTrafficEnabled = false; private int seleniumSpeed = 0; private long seleniumTimeoutDefault = 30000; private long seleniumTimeoutGui = 5000; private long seleniumTimeoutAjax = 15000; private long seleniumTimeoutModel = 30000; /** * Creates default Arquillian Ajocado Configuration */ public ArquillianAjocadoConfiguration() { initContextRoot(); } /* * (non-Javadoc) * * @see * org.jboss.arquillian.selenium.spi.WebTestConfiguration#configure(org.jboss * .arquillian.impl.configuration.api.ArquillianDescriptor, java.lang.Class) */ public ArquillianAjocadoConfiguration configure(ArquillianDescriptor descriptor, Class<? extends Annotation> qualifier) { ConfigurationMapper.fromArquillianDescriptor(descriptor, this, qualifier); return ConfigurationMapper.fromSystemConfiguration(this, qualifier); } /* * (non-Javadoc) * * @see * org.jboss.arquillian.selenium.spi.WebTestConfiguration#getConfigurationName * () */ public String getConfigurationName() { return CONFIGURATION_NAME; } /** * @return the contextRoot */ public URL getContextRoot() { try { if (contextRoot != null && !contextRoot.toString().endsWith("/")) { contextRoot = new URL(contextRoot.toString() + "/"); } } catch (MalformedURLException e) { throw new IllegalArgumentException("Unable to convert contextRoot from configuration to URL", e); } return contextRoot; } /** * @param contextRoot the contextRoot to set */ public void setContextRoot(URL contextRoot) { this.contextRoot = contextRoot; } /** * @return the contextPath */ public URL getContextPath() { if (contextPath.startsWith("/")) { contextPath = contextPath.substring(1); } if (!contextPath.endsWith("/")) { contextPath = new StringBuilder(contextPath).append("/").toString(); } try { return new URL(getContextRoot(), contextPath); } catch (MalformedURLException e) { throw new IllegalArgumentException("Unable to convert context path from configuration to URL", e); } } /** * @param contextPath the contextPath to set */ public void setContextPath(String contextPath) { this.contextPath = contextPath; } /** * @return the browser */ public Browser getBrowser() { return new Browser(browser); } /** * @param browser the browser to set */ public void setBrowser(String browser) { this.browser = browser; } /** * @return the resourcesDirectory */ public File getResourcesDirectory() { return resourcesDirectory; } /** * @param resourcesDirectory the resourcesDirectory to set */ public void setResourcesDirectory(File resourcesDirectory) { this.resourcesDirectory = resourcesDirectory; } /** * @return the buildDirectory */ public File getBuildDirectory() { return buildDirectory; } /** * @param buildDirectory the buildDirectory to set */ public void setBuildDirectory(File buildDirectory) { this.buildDirectory = buildDirectory; } /** * @return the seleniumHost */ public String getSeleniumHost() { return seleniumHost; } /** * @param seleniumHost the seleniumHost to set */ public void setSeleniumHost(String seleniumHost) { this.seleniumHost = seleniumHost; } /** * @return the seleniumPort */ public int getSeleniumPort() { return seleniumPort; } /** * @param seleniumPort the seleniumPort to set */ public void setSeleniumPort(int seleniumPort) { this.seleniumPort = seleniumPort; } /** * @return the seleniumMaximize */ public boolean isSeleniumMaximize() { return seleniumMaximize; } /** * @param seleniumMaximize the seleniumMaximize to set */ public void setSeleniumMaximize(boolean seleniumMaximize) { this.seleniumMaximize = seleniumMaximize; } /** * @return the seleniumSpeed */ public int getSeleniumSpeed() { return seleniumSpeed; } /** * @param seleniumSpeed the seleniumSpeed to set */ public void setSeleniumSpeed(int seleniumSpeed) { this.seleniumSpeed = seleniumSpeed; } /** * @return the seleniumNetworkTrafficEnabled */ public boolean isSeleniumNetworkTrafficEnabled() { return seleniumNetworkTrafficEnabled; } /** * @param seleniumNetworkTrafficEnabled the seleniumNetworkTrafficEnabled to * set */ public void setSeleniumNetworkTrafficEnabled(boolean seleniumNetworkTrafficEnabled) { this.seleniumNetworkTrafficEnabled = seleniumNetworkTrafficEnabled; } /** * @return the seleniumTimeoutDefault */ public long getSeleniumTimeoutDefault() { return seleniumTimeoutDefault; } /** * @param seleniumTimeoutDefault the seleniumTimeoutDefault to set */ public void setSeleniumTimeoutDefault(long seleniumTimeoutDefault) { this.seleniumTimeoutDefault = seleniumTimeoutDefault; } /** * @return the seleniumTimeoutGui */ public long getSeleniumTimeoutGui() { return seleniumTimeoutGui; } /** * @param seleniumTimeoutGui the seleniumTimeoutGui to set */ public void setSeleniumTimeoutGui(long seleniumTimeoutGui) { this.seleniumTimeoutGui = seleniumTimeoutGui; } /** * @return the seleniumTimeoutAjax */ public long getSeleniumTimeoutAjax() { return seleniumTimeoutAjax; } /** * @param seleniumTimeoutAjax the seleniumTimeoutAjax to set */ public void setSeleniumTimeoutAjax(long seleniumTimeoutAjax) { this.seleniumTimeoutAjax = seleniumTimeoutAjax; } /** * @return the seleniumTimeoutModel */ public long getSeleniumTimeoutModel() { return seleniumTimeoutModel; } /** * @param seleniumTimeoutModel the seleniumTimeoutModel to set */ public void setSeleniumTimeoutModel(long seleniumTimeoutModel) { this.seleniumTimeoutModel = seleniumTimeoutModel; } /** * @param seleniumDebug the seleniumDebug to set */ public void setSeleniumDebug(boolean seleniumDebug) { this.seleniumDebug = seleniumDebug; } /** * @return the seleniumDebug */ public boolean isSeleniumDebug() { return seleniumDebug; } /* * (non-Javadoc) * * @see * org.jboss.arquillian.ajocado.framework.AjocadoConfiguration#getTimeout * (org.jboss.arquillian.ajocado.framework.AjocadoConfiguration.TimeoutType) */ public long getTimeout(TimeoutType type) { switch (type) { case DEFAULT: return seleniumTimeoutDefault; case GUI: return seleniumTimeoutGui; case AJAX: return seleniumTimeoutAjax; case MODEL: return seleniumTimeoutModel; } throw new UnsupportedOperationException("Unable to determite wait time for given timout type: " + type); } private void initContextRoot() { try { this.contextRoot = new URI("http://localhost:8080").toURL(); } catch (MalformedURLException e) { throw new IllegalStateException("Unable to set default value for contextRoot", e); } catch (URISyntaxException e) { throw new IllegalStateException("Unable to set default value for contextRoot", e); } } }