/*******************************************************************************
* Copyright (c) 2010 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
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.bot.test;
import static org.junit.Assert.fail;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Logger;
import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement;
import org.jboss.reddeer.common.wait.AbstractWait;
import org.jboss.reddeer.common.wait.TimePeriod;
import org.jboss.reddeer.common.wait.WaitUntil;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.JobIsRunning;
import org.jboss.reddeer.core.condition.ShellWithTextIsActive;
import org.jboss.reddeer.core.lookup.ShellLookup;
import org.jboss.reddeer.eclipse.core.resources.Project;
import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer;
import org.jboss.reddeer.workbench.handler.EditorHandler;
import org.jboss.reddeer.workbench.impl.shell.WorkbenchShell;
import org.jboss.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog;
import org.jboss.reddeer.eclipse.jst.servlet.ui.WebProjectFirstPage;
import org.jboss.reddeer.junit.requirement.inject.InjectRequirement;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.tools.cdi.reddeer.cdi.ui.CDIProjectWizard;
import org.jboss.tools.cdi.reddeer.uiutils.BeansHelper;
import org.jboss.tools.cdi.reddeer.uiutils.BeansXMLHelper;
import org.jboss.tools.cdi.reddeer.uiutils.EditorResourceHelper;
import org.jboss.tools.cdi.reddeer.uiutils.OpenOnHelper;
import org.jboss.tools.cdi.reddeer.uiutils.ProjectHelper;
import org.jboss.tools.cdi.reddeer.uiutils.ValidationHelper;
import org.jboss.tools.common.reddeer.preferences.SourceLookupPreferencePage;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
public class CDITestBase{
protected static String PROJECT_NAME = "CDIProject";
protected static final String PACKAGE_NAME = "cdi";
protected static final Logger LOGGER = Logger.getLogger(CDITestBase.class.getName());
protected static final BeansXMLHelper beansXMLHelper = new BeansXMLHelper();
protected static final BeansHelper beansHelper = new BeansHelper();
protected static final EditorResourceHelper editResourceUtil = new EditorResourceHelper();
protected static final ValidationHelper validationHelper = new ValidationHelper();
protected static final OpenOnHelper openOnHelper = new OpenOnHelper();
protected static final ProjectHelper projectHelper = new ProjectHelper();
@InjectRequirement
private ServerRequirement sr;
@BeforeClass
public static void maximizeWorkbench(){
new WorkbenchShell().maximize();
}
@Before
public void prepareWorkspace() {
if (!projectHelper.projectExists(PROJECT_NAME)) {
CDIProjectWizard cw = new CDIProjectWizard();
cw.open();
WebProjectFirstPage fp = new WebProjectFirstPage();
fp.setProjectName(PROJECT_NAME);
fp.setTargetRuntime(sr.getRuntimeNameLabelText(sr.getConfig()));
cw.finish();
new WaitUntil(new JobIsRunning(),TimePeriod.NORMAL, false);
new WaitWhile(new JobIsRunning(),TimePeriod.LONG);
}
}
@After
public void waitForJobs() {
new WaitWhile(new JobIsRunning(), TimePeriod.LONG);
}
@AfterClass
public static void cleanUp(){
new WaitWhile(new JobIsRunning());
EditorHandler.getInstance().closeAll(false);
ProjectExplorer pe = new ProjectExplorer();
pe.open();
for(Project p: pe.getProjects()){
try{
org.jboss.reddeer.direct.project.Project.delete(p.getName(), true, true);
} catch (RuntimeException ex) {
AbstractWait.sleep(TimePeriod.NORMAL);
org.jboss.reddeer.direct.project.Project.delete(p.getName(), true, true);
}
}
}
protected void deleteAllProjects(){
new WaitWhile(new JobIsRunning());
EditorHandler.getInstance().closeAll(false);
ProjectExplorer pe = new ProjectExplorer();
pe.open();
for(Project p: pe.getProjects()){
try{
org.jboss.reddeer.direct.project.Project.delete(p.getName(), true, true);
} catch (Exception ex) {
AbstractWait.sleep(TimePeriod.NORMAL);
if(!p.getTreeItem().isDisposed()){
org.jboss.reddeer.direct.project.Project.delete(p.getName(), true, true);
}
}
}
}
protected static String readFile(String path) {
Scanner s = null;
try {
s = new Scanner(new FileInputStream(path));
} catch (FileNotFoundException e) {
fail("unable to find file "+path);
}
Scanner s1 = s.useDelimiter("\\A");
String file = s.next();
s.close();
s1.close();
return file;
}
protected String getProjectName() {
return PROJECT_NAME;
}
protected String getPackageName() {
return PACKAGE_NAME;
}
protected static void disableSourceLookup() {
// wait for some shell to get activated
ShellLookup.getInstance().getActiveShell();
String originalShellText = new DefaultShell().getText();
WorkbenchPreferenceDialog preferenceDialog = new WorkbenchPreferenceDialog();
preferenceDialog.open();
SourceLookupPreferencePage sourceLookupPreferencePage = new SourceLookupPreferencePage();
preferenceDialog.select(sourceLookupPreferencePage);
sourceLookupPreferencePage.setSourceAttachment(
SourceLookupPreferencePage.SourceAttachmentEnum.NEVER);
preferenceDialog.ok();
new WaitUntil(new ShellWithTextIsActive(originalShellText));
}
public void refreshProject(){
ProjectExplorer pe = new ProjectExplorer();
pe.open();
pe.getProject(getProjectName()).refresh();
}
}