/* * © Copyright IBM Corp. 2013 * * 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 com.ibm.sbt.automation.core.test; import java.io.File; import java.io.FileInputStream; import java.util.HashMap; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import com.ibm.commons.runtime.util.ParameterProcessor; import com.ibm.javascript.units.AbstractRhinoTest; import com.ibm.sbt.automation.core.environment.TestEnvironment; import com.ibm.sbt.automation.core.environment.TestEnvironmentFactory; import com.ibm.sbt.automation.core.test.BaseTest.AuthType; import com.ibm.sbt.automation.core.test.pageobjects.JavaScriptPreviewPage; import com.ibm.sbt.automation.core.test.pageobjects.ResultPage; import com.ibm.sbt.playground.assets.jssnippets.JSSnippet; import com.ibm.sbt.security.authentication.AuthenticationException; public class FlexibleTest { TestDelegate delegate = System.getProperty("testMode") == null ? new SeleniumDelegate() : new EmbeddedDelegate(); @Before public void setupDelegate() { delegate.setupDelegate(); } @After public void teardownDelegate() { delegate.teardownDelegate(); } protected void setAuthType(AuthType autoDetect) { delegate.setAuthType(autoDetect); } protected JavaScriptPreviewPage executeSnippet(String snippetId) { // TODO Auto-generated method stub return delegate.executeSnippet(snippetId); } public TestEnvironment getEnvironment() { // TODO Auto-generated method stub return delegate.getEnvironment(); } protected void addSnippetParam(String string, String communityUuid) { delegate.addSnippetParam(string, communityUuid); } } class EmbeddedDelegate extends AbstractRhinoTest implements TestDelegate { public void loadProperties(){ if (properties.isEmpty()) { try { properties.load(new FileInputStream(new File( "config/test.properties"))); } catch (Exception e) { } } } private HashMap<String, String> params = new HashMap<String, String>(); @Override public void setAuthType(AuthType autoDetect) { // unused } @Override public JavaScriptPreviewPage executeSnippet(String snippetName) { File f = new File(System.getProperty("user.dir")+"/../com.ibm.sbt.sample.web/src/main/webapp/samples/js"); if (!f.exists()) throw new RuntimeException("File Not Found: " + f.getAbsolutePath()); BaseFileLister.jsRootPath = f.getAbsolutePath(); JSSnippet snippet = (JSSnippet) BaseFileLister .getJsSnippet(snippetName); if (snippet == null) { throw new IllegalArgumentException("Snippet "+snippetName+ " not found at " + BaseFileLister.jsRootPath); } if (snippet.getHtml()!= null) { String html = snippet.getHtml().replaceAll("'","\'").replaceAll("\n", "\\\\n").replaceAll("\r", ""); String script = " "+ "var __bdy = document.getElementsByTagName('body')[0]; \n" + "__bdy.innerHTML = '';\n" + "__bdy.innerHTML = '"+html+"';\n" + " if (!document.getElementById('json')){\n" + "var __testcontent = document.createElement('div'); __testcontent.id= 'json';\n" + "__bdy.appendChild(__testcontent);\n" + "};\n" ; super.executeScript(script, "injecting_html"); } try { checkSnippet(snippet); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } return new JavaScriptPreviewPage(new ResultPage() { @Override public void setWebDriver(WebDriver webDriver) { // TODO Auto-generated method stub } @Override public WebElement getWebElement() { // TODO Auto-generated method stub return null; } @Override public WebDriver getWebDriver() { // TODO Auto-generated method stub return null; } @Override public String getText() { return dumpText(); } }) { @Override protected String getElementTextContent(String divId) { return dumpText(divId); } }; } private void checkSnippet(JSSnippet snippet) throws Exception { if (snippet != null) { String script = snippet.getJs(); String parameterized = ParameterProcessor.process(script,params); if (script != null) { executeScript(parameterized, "test"); } } } @Override protected String getPrefixFolder() { File project = new File(System.getProperty("user.dir"),"../../../../sdk/"); File sbt = new File(project, "com.ibm.sbt.web"); sbt = new File(sbt, "src"); sbt = new File(sbt, "main"); sbt = new File(sbt, "webapp"); sbt = new File(sbt, "js"); sbt = new File(sbt, "sdk"); return sbt.getAbsolutePath(); } @Override protected String getFrameworkFolder() { File project = new File(System.getProperty("user.dir"),"../../../../sdk/"); File sbt = new File(project, "com.ibm.sbt.core.test"); return sbt.getAbsolutePath(); } @Override protected String getTestFolder() { String currentDir = System.getProperty("user.dir"); return currentDir; } public void execJsTest(String script) throws Exception { executeScript(script, "test"); waitForAllPromisesToReturn(); } @Override public void teardownDelegate() { super.tearDownJavaSide(); } @Override public void setupDelegate() { try { super.setup(); } catch (Exception e) { throw new RuntimeException(e); } //Assert.assertTrue(EndpointFactory.getEndpoint("connections") instanceof MockEndpoint); } @Override public TestEnvironment getEnvironment() { // TODO Auto-generated method stub return TestEnvironmentFactory.getEnvironment(); } @Override public void addSnippetParam(String parameter, String value) { this.params.put(parameter, value); } } class SeleniumDelegate extends BaseApiTest implements TestDelegate { @Override public void teardownDelegate() { super.destroyContext(); } @Override public void setupDelegate() { try { super.setupTest(); } catch (AuthenticationException e) { throw new RuntimeException(e); } } @Override public TestEnvironment getEnvironment() { return environment; } } interface TestDelegate { void setAuthType(AuthType autoDetect); void addSnippetParam(String parameter, String value); void teardownDelegate(); void setupDelegate(); JavaScriptPreviewPage executeSnippet(String snippetId); TestEnvironment getEnvironment(); }