package net.thucydides.core.pages.jquery;
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import net.thucydides.core.ThucydidesSystemProperty;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.util.EnvironmentVariables;
import net.thucydides.core.webdriver.javascript.JavascriptExecutorFacade;
import org.openqa.selenium.WebDriver;
import java.net.URL;
import static net.thucydides.core.webdriver.javascript.JavascriptSupport.javascriptIsSupportedIn;
public class JQueryEnabledPage {
private final WebDriver driver;
private final EnvironmentVariables environmentVariables;
protected JQueryEnabledPage(WebDriver driver) {
this(driver, Injectors.getInjector().getProvider(EnvironmentVariables.class).get() );
}
protected JQueryEnabledPage(WebDriver driver, EnvironmentVariables environmentVariables) {
this.driver = driver;
this.environmentVariables = environmentVariables;
}
public static JQueryEnabledPage withDriver(final WebDriver driver) {
return new JQueryEnabledPage(driver);
}
public boolean isJQueryIntegrationEnabled(){
boolean jqueryIntegrationEnabled =
Boolean.valueOf(ThucydidesSystemProperty.THUCYDIDES_JQUERY_INTEGRATION
.from(environmentVariables,"true"));
return jqueryIntegrationEnabled;
}
public boolean isJQueryAvailable() {
boolean jqueryIntegrationEnabled = isJQueryIntegrationEnabled();
if (jqueryIntegrationEnabled && javascriptIsSupportedIn(driver)) {
JavascriptExecutorFacade js = new JavascriptExecutorFacade(driver);
Boolean result = (Boolean) js.executeScript("return (typeof jQuery === 'function')");
return ((result != null) && (result));
}
return false;
}
public void injectJQuery() {
executeScriptFrom("jquery/jquery.min.js");
executeScriptFrom("jquery/jquery.focus.test-fix.js");
}
protected void executeScriptFrom(String scriptSource) {
if (javascriptIsSupportedIn(driver)) {
String script = getFileAsString(scriptSource);
JavascriptExecutorFacade js = new JavascriptExecutorFacade(driver);
js.executeScript(script);
}
}
private String getFileAsString(final String resourcePath) {
String content = "";
try {
URL fileUrl = getClass().getClassLoader().getResource(resourcePath);
content = Resources.toString(fileUrl, Charsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e);
}
return content;
}
public void injectJQueryPlugins() {
if (environmentVariables.getPropertyAsBoolean(ThucydidesSystemProperty.THUCYDIDES_ACTIVATE_HIGHLIGHTING.getPropertyName(), false)) {
executeScriptFrom("jquery/jquery-thucydides-plugin.js");
}
}
public void injectJavaScriptUtils(){
executeScriptFrom("javascript/cycle.js");
}
}