package org.jboss.tools.maven.ui.bot.test.sourcelookup;
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerReqType;
import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement.JBossServer;
import org.jboss.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog;
import org.jboss.reddeer.eclipse.core.resources.Project;
import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer;
import org.jboss.reddeer.eclipse.jdt.ui.packageexplorer.PackageExplorer;
import org.jboss.reddeer.eclipse.ui.wizards.datatransfer.ExternalProjectImportWizardDialog;
import org.jboss.reddeer.eclipse.ui.wizards.datatransfer.WizardProjectsImportPage;
import org.jboss.reddeer.requirements.cleanworkspace.CleanWorkspaceRequirement.CleanWorkspace;
import org.jboss.reddeer.requirements.server.ServerReqState;
import org.jboss.reddeer.swt.exception.SWTLayerException;
import org.jboss.reddeer.swt.impl.button.PushButton;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.reddeer.common.wait.AbstractWait;
import org.jboss.reddeer.common.wait.TimePeriod;
import org.jboss.reddeer.workbench.handler.EditorHandler;
import org.jboss.reddeer.workbench.impl.editor.TextEditor;
import org.jboss.tools.maven.reddeer.maven.sourcelookup.ui.preferences.SourceLookupPreferencePage;
import org.jboss.tools.maven.reddeer.maven.sourcelookup.ui.preferences.SourceLookupPreferencePage.SourceAttachment;
import org.jboss.tools.maven.reddeer.preferences.MavenUserPreferencePage;
import org.jboss.tools.maven.ui.bot.test.AbstractMavenSWTBotTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@JBossServer(state=ServerReqState.PRESENT, type=ServerReqType.WILDFLY8x)
public class SourceLookupTest extends AbstractMavenSWTBotTest{
private String nonMavenProjectName = "test13848";
private String nonMavenProjectPath = "projects";
private static int TEST_NUMBER=0;
@After
public void delete(){
EditorHandler.getInstance().closeAll(false);
ProjectExplorer pe = new ProjectExplorer();
pe.open();
org.jboss.reddeer.direct.project.Project.delete("test13848", true, true);
}
//use new settings.xml because of already downloaded source jar
@Before
public void setupSettings(){
WorkbenchPreferenceDialog preferenceDialog = new WorkbenchPreferenceDialog();
preferenceDialog.open();
MavenUserPreferencePage mpreferences = new MavenUserPreferencePage();
preferenceDialog.select(mpreferences);
mpreferences.setUserSettings(new File("target/classes/settings"+TEST_NUMBER+".xml").getAbsolutePath());
mpreferences.apply();
preferenceDialog.ok();
TEST_NUMBER=1;
}
@Test
public void nonMavenProjectPropt(){
importProject(nonMavenProjectName, nonMavenProjectPath+"/"+nonMavenProjectName);
WorkbenchPreferenceDialog preferenceDialog = new WorkbenchPreferenceDialog();
preferenceDialog.open();
SourceLookupPreferencePage lookupPage = new SourceLookupPreferencePage();
preferenceDialog.select(lookupPage);
lookupPage.toggleAutomaticallyConfigureSourceAttachement(SourceAttachment.PROMPT, true);
preferenceDialog.ok();
PackageExplorer pe = new PackageExplorer();
pe.open();
pe.getProject(nonMavenProjectName).getProjectItem("Referenced Libraries","commons-lang-2.6.jar", "org.apache.commons.lang","Entities.class").open();
try{
new DefaultShell("Found source jar for 'commons-lang-2.6.jar'");
} catch (SWTLayerException ex){
fail("Source lookup didnt kick in");
}
new PushButton("Yes").click();
//wait for source download
AbstractWait.sleep(TimePeriod.NORMAL);
TextEditor ed = new TextEditor("Entities.class");
assertEquals(ed.getText().replace(" ", "").replaceAll("\\r\\n", ""), readFile("resources/classes/Entities").replace(" ", "").replace("\n", ""));
}
@Test
public void nonMavenProjectAlways(){
importProject(nonMavenProjectName, nonMavenProjectPath+"/"+nonMavenProjectName);
WorkbenchPreferenceDialog preferenceDialog = new WorkbenchPreferenceDialog();
preferenceDialog.open();
SourceLookupPreferencePage lookupPage = new SourceLookupPreferencePage();
preferenceDialog.select(lookupPage);
lookupPage.toggleAutomaticallyConfigureSourceAttachement(SourceAttachment.ALWAYS, true);
preferenceDialog.ok();
PackageExplorer pe = new PackageExplorer();
pe.open();
pe.getProject(nonMavenProjectName).getProjectItem("Referenced Libraries","commons-lang-2.6.jar", "org.apache.commons.lang","Entities.class").open();
try{
new DefaultShell("Found source jar for 'commons-lang-2.6.jar'");
} catch (SWTLayerException ex){
TextEditor ed = new TextEditor("Entities.class");
assertEquals(ed.getText().replace(" ", "").replaceAll("\\r\\n", ""), readFile("resources/classes/Entities").replace(" ", "").replace("\n", ""));
return;
}
fail("Source lookup shouldt ask if we want to download source file");
}
@Test
public void nonMavenProjectNever(){
importProject(nonMavenProjectName, nonMavenProjectPath+"/"+nonMavenProjectName);
WorkbenchPreferenceDialog preferenceDialog = new WorkbenchPreferenceDialog();
preferenceDialog.open();
SourceLookupPreferencePage lookupPage = new SourceLookupPreferencePage();
preferenceDialog.select(lookupPage);
lookupPage.toggleAutomaticallyConfigureSourceAttachement(SourceAttachment.NEVER, true);
preferenceDialog.ok();
PackageExplorer pe = new PackageExplorer();
pe.open();
pe.getProject(nonMavenProjectName).getProjectItem("Referenced Libraries","commons-lang-2.6.jar", "org.apache.commons.lang","Entities.class").open();
try{
new DefaultShell("Found source jar for 'commons-lang-2.6.jar'");
} catch (SWTLayerException ex){
TextEditor ed = new TextEditor("Entities.class");
assertNotEquals(ed.getText().replace(" ", "").replaceAll("\\r\\n", ""), readFile("resources/classes/Entities").replace(" ", "").replace("\n", ""));
return;
}
fail("Source lookup shouldt ask if we want to download source file");
}
private void importProject(String name, String path){
ExternalProjectImportWizardDialog importDialog = new ExternalProjectImportWizardDialog();
importDialog.open();
WizardProjectsImportPage importPage = new WizardProjectsImportPage();
importPage.copyProjectsIntoWorkspace(true);
try {
importPage.setRootDirectory((new File(path)).getParentFile().getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
importPage.selectProjects(name);
importDialog.finish();
}
private String readFile(String pathToFile){
BufferedReader br =null;
String toReturn = null;
try {
br = new BufferedReader(new FileReader(pathToFile));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
StringBuilder sb = new StringBuilder();
String line1 = br.readLine();
while (line1 != null) {
sb.append(line1);
line1 = br.readLine();
if(line1 != null){
sb.append('\n');
}
}
toReturn = sb.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return toReturn;
}
}