/*******************************************************************************
* Copyright (c) 2016 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.jsf.ui.test.utils;
import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.jboss.reddeer.core.lookup.WidgetLookup;
import org.jboss.reddeer.core.matcher.WithStyleMatcher;
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.ui.views.log.LogMessage;
import org.jboss.reddeer.eclipse.ui.views.log.LogView;
import org.jboss.reddeer.swt.impl.button.CheckBox;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.tools.jsf.reddeer.ui.JSFNewProjectFirstPage;
import org.jboss.tools.jsf.reddeer.ui.JSFNewProjectSecondPage;
import org.jboss.tools.jsf.reddeer.ui.JSFNewProjectWizard;
public class JSFTestUtils {
public static void checkProblemsView() {
// problems view should be empty
ProblemsView problemsView = new ProblemsView();
problemsView.open();
List<Problem> problems = problemsView.getProblems(ProblemType.ERROR);
assertEquals(0, problems.size());
}
public static void checkErrorLog() {
// error log should be empty
LogView logView = new LogView();
logView.open();
List<LogMessage> errorMessages = logView.getErrorMessages();
if (errorMessages.size() > 0) {
errorMessages = errorMessages.stream().filter(JSFTestUtils::filterIgnoredLogMessages)
.collect(Collectors.toList());
}
assertEquals("Error log contains errors: \n" + errorsToString(logView.getErrorMessages()), 0,
errorMessages.size());
logView.deleteLog();
}
public static void createJSFProject(String projectName, String jsfEnvironment, String template) {
createJSFProject(projectName, jsfEnvironment, template, false);
}
public static void createJSFProject(String projectName, String jsfEnvironment, String template,
boolean autodeploy) {
JSFNewProjectWizard jsfNewProjectWizard = new JSFNewProjectWizard();
jsfNewProjectWizard.open();
// first page
JSFNewProjectFirstPage jsfNewProjectFirstPage = new JSFNewProjectFirstPage();
jsfNewProjectFirstPage.setProjectName(projectName);
jsfNewProjectFirstPage.setJSFEnvironment(jsfEnvironment);
jsfNewProjectFirstPage.setProjectTemplate(template);
// second page
jsfNewProjectWizard.next();
JSFNewProjectSecondPage jsfNewProjectSecondPage = new JSFNewProjectSecondPage();
// toggle automatic deployment
getCheckboxes().forEach(checkBox -> checkBox.toggle(autodeploy));
jsfNewProjectWizard.finish();
}
private static String errorsToString(List<LogMessage> errorMessages) {
StringBuilder sb = new StringBuilder();
for (LogMessage logMessage : errorMessages) {
sb.append(logMessage.toString());
sb.append("\n");
}
return sb.toString();
}
private static List<CheckBox> getCheckboxes() {
List<Button> activeWidgets = WidgetLookup.getInstance().activeWidgets(new DefaultShell(), Button.class,
new WithStyleMatcher(SWT.CHECK));
return activeWidgets.stream().map(MyCheckBox::new).collect(Collectors.toList());
}
private static class MyCheckBox extends CheckBox {
public MyCheckBox(Button b) {
this.swtWidget = b;
}
}
private static boolean filterIgnoredLogMessages(LogMessage logMessage) {
if (logMessage.getMessage().startsWith("Unable to retrieve a list of remote deployment scanners")) {
return false;
} else if (logMessage.getPlugin().equals("org.eclipse.equinox.p2.publisher.eclipse")) {
return false;
} else {
return true;
}
}
}