/******************************************************************************* * 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.arquillian.ui.bot.test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; 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.eclipse.core.resources.Project; import org.jboss.reddeer.eclipse.jdt.ui.packageexplorer.PackageExplorer; import org.jboss.reddeer.eclipse.m2e.core.ui.wizard.MavenProjectWizardPage; 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.swt.impl.button.CheckBox; import org.jboss.reddeer.swt.impl.button.PushButton; import org.jboss.reddeer.swt.keyboard.KeyboardFactory; import org.jboss.reddeer.workbench.impl.editor.TextEditor; import org.jboss.tools.arquillian.ui.bot.reddeer.junit.ArquillianJUnitTestCaseWizard; import org.jboss.tools.arquillian.ui.bot.reddeer.junit.JUnitTestCaseWizardPage; import org.jboss.tools.arquillian.ui.bot.reddeer.maven.UpdateMavenProjectDialog; import org.jboss.tools.arquillian.ui.bot.reddeer.profile.AddArquillianProfilesDialog; import org.jboss.tools.arquillian.ui.bot.reddeer.support.AddArquillianSupportDialog; import org.jboss.tools.maven.reddeer.profiles.SelectProfilesDialog; import org.jboss.tools.maven.reddeer.wizards.MavenProjectWizard; import org.jboss.tools.maven.reddeer.wizards.MavenProjectWizardThirdPage; /** * Contains common methods for Arquillian tests. * * @author Lucia Jelinkova * */ public abstract class AbstractArquillianTestCase { protected static final String PROJECT_NAME = "arquillian-test-project"; public static final String PROFILE_NAME = "WILDFLY_REMOTE_8.X"; protected static final String PACKAGE = "org.jboss.tools.arquillian.ui.test"; protected static final String TEST_CASE = "ArquillianTest"; protected static final String SOURCE_FOLDER = PROJECT_NAME + "/src/test/java"; private static final Logger log = Logger.getLogger(AbstractArquillianTestCase.class); protected Project getProject() { PackageExplorer explorer = new PackageExplorer(); explorer.open(); Project project = explorer.getProject(PROJECT_NAME); return project; } @SuppressWarnings("rawtypes") protected void checkProblems() { log.step("Check errors in Problems view"); ProblemsView view = new ProblemsView(); view.open(); List<Problem> problems = view.getProblems(ProblemType.ERROR); assertThat("There are errors", problems, is((List) new ArrayList<Problem>())); } @org.junit.After public void after(){ deleteProject(); } private void deleteProject() { PackageExplorer explorer = new PackageExplorer(); explorer.open(); Project project = explorer.getProject(PROJECT_NAME); project.delete(true); } protected void prepareProject(){ setupProject(); addArquillianSupport(); forceMavenRepositoryUpdate(); } protected void forceMavenRepositoryUpdate() { log.step("Force Maven update snapshots/releases"); UpdateMavenProjectDialog dialog = new UpdateMavenProjectDialog(); dialog.open(getProject()); new CheckBox("Offline").toggle(false); dialog.forceUpdate(true); dialog.ok(); new WaitWhile(new JobIsRunning()); } protected void setupProject(){ log.step("Create maven project with name " + PROJECT_NAME); MavenProjectWizard wizard = new MavenProjectWizard(); wizard.open(); // Check "Create a simple project" MavenProjectWizardPage mp = new MavenProjectWizardPage(); mp.createSimpleProject(true); wizard.next(); MavenProjectWizardThirdPage thirdPage = new MavenProjectWizardThirdPage(); thirdPage.setGAV(PROJECT_NAME, PROJECT_NAME, null); wizard.finish(); forceMavenRepositoryUpdate(); } protected void addArquillianSupport() { log.step("Add Arquillian support"); Project project = getProject(); AddArquillianSupportDialog dialog = new AddArquillianSupportDialog(); dialog.open(project); dialog.ok(); } protected void addArquillianProfile(){ log.step("Add Arquillian profile"); PackageExplorer explorer = new PackageExplorer(); explorer.open(); Project project = explorer.getProject(PROJECT_NAME); AddArquillianProfilesDialog dialog = new AddArquillianProfilesDialog(); dialog.open(project); dialog.selectProfile(PROFILE_NAME); dialog.ok(); new WaitWhile(new JobIsRunning()); } protected void selectMavenProfile() { log.step("Select maven profile"); refreshProject(); SelectProfilesDialog dialog = new SelectProfilesDialog(PROJECT_NAME); dialog.open(); new WaitWhile(new JobIsRunning()); dialog.activateProfile(PROFILE_NAME); new PushButton("OK").click(); new WaitWhile(new JobIsRunning(),TimePeriod.VERY_LONG); } protected void createTestCase(){ ArquillianJUnitTestCaseWizard wizard = new ArquillianJUnitTestCaseWizard(); wizard.open(); JUnitTestCaseWizardPage page = new JUnitTestCaseWizardPage(); page.setSourceFolder(SOURCE_FOLDER); page.setPackage(PACKAGE); page.setName(TEST_CASE); wizard.finish(); } protected void changeContent() { TextEditor editor = new TextEditor(TEST_CASE + ".java"); editor.selectText("fail(\"Not yet implemented\");"); KeyboardFactory.getKeyboard().type(SWT.DEL); editor.save(); } protected void refreshProject (){ PackageExplorer explorer = new PackageExplorer(); explorer.open(); Project project = explorer.getProject(PROJECT_NAME); project.refresh(); new WaitWhile(new JobIsRunning(),TimePeriod.VERY_LONG); } }