package com.eas.application; import io.github.bonigarcia.wdm.ChromeDriverManager; import java.util.concurrent.TimeUnit; import org.junit.AfterClass; import static org.junit.Assert.*; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.WebDriverWait; /** * * @author mg */ public class BrowserTests { private static final int SCRIPT_TIMEOUT = 60; private static RemoteWebDriver browser; @BeforeClass public static void init() { String url = System.getProperty(ServletContainerTest.SERVLET_CONTAINER_URL); if (url == null) { throw new IllegalStateException(ServletContainerTest.NO_SERVLET_CONTAINER_URL_MSG); } else { url += "/tests-start.html"; } String user = System.getProperty(ServletContainerTest.SERVLET_CONTAINER_USER); if (user == null) { throw new IllegalStateException(ServletContainerTest.NO_SERVLET_CONTAINER_USER); } String passwd = System.getProperty(ServletContainerTest.SERVLET_CONTAINER_PASSWORD); if (passwd == null) { throw new IllegalStateException(ServletContainerTest.NO_SERVLET_CONTAINER_PASSWORD); } ChromeDriverManager.getInstance().setup(); browser = new ChromeDriver(); browser.manage().timeouts().setScriptTimeout(SCRIPT_TIMEOUT, TimeUnit.SECONDS); browser.get(url); browser.findElement(By.id("name")).sendKeys(user); browser.findElement(By.id("password")).sendKeys(passwd); browser.findElement(By.id("login")).submit(); WebDriverWait wait = new WebDriverWait(browser, SCRIPT_TIMEOUT); wait.until((WebDriver driver) -> { Object requireType = browser.executeScript("return typeof require"); return "function".equals(requireType); }); Object platypusJsLoaded = browser.executeAsyncScript("" + "var complete = arguments[arguments.length - 1];\n" + "require(['facade', 'logger'], function(F, Logger){\n" + " var global = window;\n" + " F.cacheBust(true);\n" + " F.export(global);\n" + " complete();\n" + "}, function(aError){\n" + " complete('' + aError);\n" + "})"); assertNull(platypusJsLoaded); } @AfterClass public static void tearDown() { browser.close(); browser.quit(); } private static void perform(String aTestName) { Object requireError = browser.executeAsyncScript("" + "var complete = arguments[arguments.length - 1];\n" + "require(['" + aTestName + "'], function(aRequired){\n" + "window['"+aTestName+"'] = aRequired;\n" // Hack for AMD modules. Since our tests are global modules, we need to make required module global + " complete();\n" + "},\n" + "function(aError){\n" + " complete('' + aError);\n" + "})"); assertNull("" + requireError, requireError); Object testError = browser.executeAsyncScript("" + "var complete = arguments[arguments.length - 1];\n" + "var testInstance = new window['" + aTestName + "']();\n" + "testInstance.execute(function(){\n" + " complete();" + "},\n" + "function(aError){\n" + " complete('' + aError);" + "});"); assertNull("" + testError, testError); } @Test public void select_stateless_test() { perform("select_stateless_test"); } @Test public void easHRValidatorTest() { perform("EasHRValidatorTest"); } @Test public void append_test() { perform("append_test"); } @Test public void ambigous_changes_semi_writable() { perform("ambigous_changes_semi_writable"); } @Test public void ambigous_changes() { perform("ambigous_changes"); } @Test public void extra_fields_insert_update() { perform("extra_fields_insert_update"); } @Test public void modelModyfiedTestClient() { perform("ModelModyfiedTestClient"); } @Test public void sqlUpdateTestClient() { perform("SqlUpdateTestClient"); } @Test public void sqlExecuteUpdateTestClient() { perform("SqlExecuteUpdateTestClient"); } @Test public void sqlUpdateTest() { perform("SqlUpdateTest"); } @Test public void sqlEnqueueUpdateTest() { perform("SqlEnqueueUpdateTest"); } @Test public void dependenciesTest() { perform("DependenciesTest"); } @Test public void parallelRequireTest() { perform("ParallelRequireTest"); } @Test public void createEntityTestClient() { perform("CreateEntityTestClient"); } @Test public void loadEntityTestClient() { perform("LoadEntityTestClient"); } @Test public void modelAPI() { perform("ModelAPI"); } @Test public void multiSourceTest() { perform("MultiSourceTest"); } @Test public void multiSourceWithErrorTest() { perform("MultiSourceWithErrorTest"); } @Test public void orm_Relations_Test() { perform("ORM_Relations_Test"); } @Test public void orm_properties_names_calc() { perform("ORM_properties_names_calc"); } @Test public void testReportClient() { perform("TestReportClient"); } @Test public void iconLoadTest() { perform("IconLoadTest"); } @Test public void resourceLoadTest() { perform("ResourceLoadTest"); } @Test public void storedProcedureTestClient() { perform("StoredProcedureTestClient"); } @Test public void secureServerModulesClient() { perform("SecureServerModulesClient"); } @Test public void secureDataSourcesTest() { perform("SecureDataSourcesTest"); } @Test public void syncServerModulesTest() { perform("SyncServerModulesTest"); } @Test public void asyncServerModulesTest() { perform("AsyncServerModulesTest"); } @Test public void accounterClient() { perform("AccounterClient"); } @Test public void principalTestClient() { perform("PrincipalTestClient"); } @Test public void invokeLaterDelayedClient() { perform("InvokeLaterDelayedClient"); } @Test public void invokeLaterDelayedTest() { perform("InvokeLaterDelayedTest"); } @Test public void errorsTestClient() { perform("ErrorsTestClient"); } @Test public void AMDSelfTest() { perform("AMDSelfTest"); } @Test public void LPCCallbacksTest() { perform("LPCCallbacksTest"); } @Test public void loadWidgetsWithoutWindow() { perform("load-widgets-without-window"); } }