/******************************************************************************* * 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 static org.junit.Assert.fail; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.ui.IViewReference; 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.handler.ShellHandler; import org.jboss.reddeer.core.lookup.WorkbenchPartLookup; import org.jboss.reddeer.core.util.Display; import org.jboss.reddeer.eclipse.core.resources.Project; import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer; import org.jboss.reddeer.eclipse.m2e.core.ui.preferences.MavenSettingsPreferencePage; import org.jboss.reddeer.eclipse.ui.console.ConsoleView; 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.junit.internal.runner.ParameterizedRequirementsRunnerFactory; import org.jboss.reddeer.swt.impl.browser.InternalBrowser; 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.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog; 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.CentralBrowserIsLoading; import org.jboss.tools.central.test.ui.reddeer.internal.ErrorsReporter; import org.jboss.tools.common.reddeer.utils.StackTraceUtils; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import org.junit.runners.Parameterized.UseParametersRunnerFactory; /** * * @author rhopp * @contributor jkopriva@redhat.com * */ @UseParametersRunnerFactory(ParameterizedRequirementsRunnerFactory.class) public class HTML5Parameterized { private static final String CENTRAL_LABEL = "Red Hat Central"; private static final String SEARCH_STRING = "eap-7.0.0.GA"; private static final String MAVEN_SETTINGS_PATH = System.getProperty("maven.config.file"); private static DefaultEditor centralEditor; private static InternalBrowser browser; private static ErrorsReporter reporter = ErrorsReporter.getInstance(); private static JavaScriptHelper jsHelper = JavaScriptHelper.getInstance(); private static Logger log = new Logger(HTML5Parameterized.class); private ProjectExplorer projectExplorer; @Parameters(name = "{0}") public static Collection<CentralProject> data() { closeWelcomeScreen(); List<CentralProject> resultList = new ArrayList<CentralProject>(); new DefaultToolItem(new WorkbenchShell(), CENTRAL_LABEL).click(); centralEditor = new DefaultEditor(CENTRAL_LABEL); centralEditor.activate(); browser = new InternalBrowser(); jsHelper.setBrowser(browser); new WaitWhile(new CentralBrowserIsLoading(), TimePeriod.LONG); jsHelper.searchFor(SEARCH_STRING); do { String[] examples = jsHelper.getExamples(); for (String exampleName : examples) { resultList.add(new CentralProject(exampleName, jsHelper.getDescriptionForExample(exampleName))); } jsHelper.nextPage(); } while (jsHelper.hasNext()); return resultList; } private static void closeWelcomeScreen() { log.debug("Trying to close Welcome Screen"); for (IViewReference viewReference : WorkbenchPartLookup.getInstance().findAllViewReferences()) { if (viewReference.getPartName().equals("Welcome")) { final IViewReference iViewReference = viewReference; Display.syncExec(new Runnable() { @Override public void run() { iViewReference.getPage().hideView(iViewReference); } }); log.debug("Welcome Screen closed"); break; } } } @BeforeClass public static void setupClass() { closeWelcomeScreen(); String mvnConfigFileName = new File(MAVEN_SETTINGS_PATH).getAbsolutePath(); WorkbenchPreferenceDialog preferenceDialog = new WorkbenchPreferenceDialog(); preferenceDialog.open(); MavenSettingsPreferencePage prefPage = new MavenSettingsPreferencePage(); preferenceDialog.select(prefPage); prefPage.setUserSettingsLocation(mvnConfigFileName); preferenceDialog.ok(); } @Before public void setup() { projectExplorer = new ProjectExplorer(); projectExplorer.open(); } @After public void teardown() { ShellHandler.getInstance().closeAllNonWorbenchShells(); new ProjectExplorer().deleteAllProjects(true); ConsoleView consoleView = new ConsoleView(); consoleView.open(); consoleView.clearConsole(); new DefaultToolItem(new WorkbenchShell(), CENTRAL_LABEL).click(); // activate central editor new DefaultEditor(CENTRAL_LABEL); } @AfterClass public static void teardownClass() { reporter.generateReport(); } @Parameter public CentralProject project; @Test public void testProject() { log.error("Processing example: " + project.getName()); log.error("\twith description: " + project.getDescription()); processExample(project.getName(), project.getDescription()); } /** * Imports current example, checks for warnings/errors, tries to deploy it * to server and finally deletes it. * * @param exampleName */ private void processExample(String exampleName, String description) { boolean skip = false; jsHelper.searchFor(description); String[] examples = jsHelper.getExamples(); if (examples.length > 1) { fail("Muj fail! :-D"); } // import try { importExample(exampleName); } catch (Exception e) { skip = true; fail("Error importing example: " + StackTraceUtils.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); } // delete ShellHandler.getInstance().closeAllNonWorbenchShells(); new ProjectExplorer().deleteAllProjects(true); } 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(); StringBuilder sb = new StringBuilder("Errors after project example import\n"); boolean errorsArePresent = false; for (Problem error : pv.getProblems(ProblemType.ERROR)) { sb.append(error.getDescription() + "\n"); errorsArePresent = true; } for (Problem warning : pv.getProblems(ProblemType.WARNING)) { reporter.addWarning(p, warning.getDescription()); } if (errorsArePresent) { fail(sb.toString()); } } private String getProjectName() { projectExplorer.activate(); List<Project> projects = projectExplorer.getProjects(); return projects.get(0).getName(); } }