/*******************************************************************************
* Copyright (c) 2017 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.central.test.ui.reddeer;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.List;
import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerReqType;
import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement;
import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement.JBossServer;
import org.jboss.reddeer.common.logging.Logger;
import org.jboss.reddeer.common.wait.TimePeriod;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.JobIsRunning;
import org.jboss.reddeer.core.exception.CoreLayerException;
import org.jboss.reddeer.core.handler.ShellHandler;
import org.jboss.reddeer.eclipse.core.resources.Project;
import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer;
import org.jboss.reddeer.eclipse.ui.problems.Problem;
import org.jboss.reddeer.eclipse.ui.problems.ProblemsView;
import org.jboss.reddeer.eclipse.ui.problems.ProblemsView.ProblemType;
import org.jboss.reddeer.eclipse.wst.server.ui.view.Server;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServerModule;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersView;
import org.jboss.reddeer.junit.requirement.inject.InjectRequirement;
import org.jboss.reddeer.requirements.server.ServerReqState;
import org.jboss.reddeer.swt.impl.browser.InternalBrowser;
import org.jboss.reddeer.swt.impl.button.OkButton;
import org.jboss.reddeer.swt.impl.toolbar.DefaultToolItem;
import org.jboss.reddeer.workbench.impl.editor.DefaultEditor;
import org.jboss.reddeer.workbench.impl.shell.WorkbenchShell;
import org.jboss.tools.central.reddeer.api.ExamplesOperator;
import org.jboss.tools.central.reddeer.api.JavaScriptHelper;
import org.jboss.tools.central.reddeer.wizards.NewProjectExamplesWizardDialogCentral;
import org.jboss.tools.central.test.ui.reddeer.internal.ErrorsReporter;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author rhopp
*
*/
@JBossServer(type = ServerReqType.WILDFLY, state = ServerReqState.RUNNING)
public class HTML5Test {
private static DefaultEditor centralEditor;
private InternalBrowser browser;
private Logger log = new Logger(this.getClass());
private ProjectExplorer projectExplorer;
private static ErrorsReporter reporter = ErrorsReporter.getInstance();
private ExamplesOperator operator = ExamplesOperator.getInstance();
private JavaScriptHelper jsHelper = JavaScriptHelper.getInstance();
@InjectRequirement
ServerRequirement req;
@BeforeClass
public static void setupClass() {
new DefaultToolItem(new WorkbenchShell(), "JBoss Central").click();
centralEditor = new DefaultEditor("JBoss Central");
}
@Before
public void setup() {
projectExplorer = new ProjectExplorer();
projectExplorer.open();
}
@After
public void teardown() {
ShellHandler.getInstance().closeAllNonWorbenchShells();
new ProjectExplorer().deleteAllProjects(true);
new DefaultToolItem(new WorkbenchShell(), "JBoss Central").click();
// activate central editor
new DefaultEditor("JBoss Central");
}
@AfterClass
public static void teardownClass() {
reporter.generateReport();
}
@Test
public void importEAP64ExamplesTest() {
centralEditor.activate();
browser = new InternalBrowser();
jsHelper.setBrowser(browser);
jsHelper.searchFor("eap-6.4.0.GA");
// jsHelper.searchFor("Shows how to use Java EE Declarative Security to
// Control Access to EJB 3");
do {
String[] examples = jsHelper.getExamples();
log.error("List of examples: " + Arrays.toString(examples));
for (String exampleName : examples) {
log.step("Processing example: " + exampleName);
if (!(exampleName.equals("app-client") || exampleName.equals("cluster-ha-singleton")
|| exampleName.equals("ejb-asynchronous"))) {
processCurrentExample(exampleName);
}
}
jsHelper.nextPage();
} while (jsHelper.hasNext());
}
/**
* Imports current example, checks for warnings/errors, tries to deploy it
* to server and finally deletes it.
*
* @param exampleName
*/
private void processCurrentExample(String exampleName) {
boolean skip = false;
// import
try {
importExample(exampleName);
} catch (Exception e) {
skip = true;
reporter.addError(new org.jboss.tools.central.reddeer.projects.Project(exampleName, null),
"Error importing example: " + stacktraceToString(e));
}
org.jboss.tools.central.reddeer.projects.Project currentProject;
if (!skip) {
currentProject = new org.jboss.tools.central.reddeer.projects.Project(exampleName, getProjectName());
// check for errors/warning
checkErrorLog(currentProject);
// try to deploy
try {
operator.deployProject(currentProject.getProjectName(), req.getServerNameLabelText(req.getConfig()));
if (!exampleName.equals("ejb-security")) { // due to native
// window popping up
operator.checkDeployedProject(currentProject.getProjectName(),
req.getServerNameLabelText(req.getConfig()));
}
} catch (CoreLayerException cle) {
// log error
reporter.addError(currentProject, "Unable to deploy example: " + currentProject.getName() + "("
+ currentProject.getProjectName() + ")");
try {
new OkButton().click();
} catch (Exception e) {
reporter.addError(currentProject, stacktraceToString(cle));
}
}
}
// delete
ShellHandler.getInstance().closeAllNonWorbenchShells();
new ProjectExplorer().deleteAllProjects(true);
ServersView serversView = new ServersView();
serversView.open();
Server server = serversView.getServer(req.getServerNameLabelText(req.getConfig()));
List<ServerModule> modules = server.getModules();
for (ServerModule serverModule : modules) {
serverModule.remove();
}
}
private String stacktraceToString(Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
return sw.toString();
}
private void importExample(String exampleName) {
log.step("Importing example: " + exampleName);
centralEditor.activate();
jsHelper.clickExample(exampleName);
NewProjectExamplesWizardDialogCentral wizardDialog = new NewProjectExamplesWizardDialogCentral();
wizardDialog.finish(exampleName);
}
private void checkErrorLog(org.jboss.tools.central.reddeer.projects.Project p) {
new WaitWhile(new JobIsRunning(), TimePeriod.LONG);
ProblemsView pv = new ProblemsView();
pv.open();
for (Problem error : pv.getProblems(ProblemType.ERROR)) {
reporter.addError(p, error.getDescription());
}
for (Problem warning : pv.getProblems(ProblemType.WARNING)) {
reporter.addWarning(p, warning.getDescription());
}
}
private String getProjectName() {
projectExplorer.activate();
List<Project> projects = projectExplorer.getProjects();
// if (projects.size() !=1){
// StringBuilder sb = new StringBuilder();
// sb.append("There is more/less then one project imported\n");
// for (Project project : projects) {
// sb.append(project.getName()+"\n");
// }
// fail(sb.toString());
// }
return projects.get(0).getName();
}
// private void deleteProject(String exampleProjectName) {
// projectExplorer.activate();
// projectExplorer.getProject(exampleProjectName).delete(true);
// }
}