/*******************************************************************************
* 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.quickfix.injection;
import static org.junit.Assert.*;
import java.util.List;
import org.jboss.reddeer.requirements.server.ServerReqState;
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.common.wait.WaitUntil;
import org.jboss.reddeer.eclipse.ui.perspectives.JavaEEPerspective;
import org.jboss.reddeer.eclipse.ui.problems.Problem;
import org.jboss.reddeer.eclipse.ui.views.markers.QuickFixWizard;
import org.jboss.reddeer.requirements.cleanworkspace.CleanWorkspaceRequirement.CleanWorkspace;
import org.jboss.reddeer.requirements.openperspective.OpenPerspectiveRequirement.OpenPerspective;
import org.jboss.reddeer.swt.impl.shell.DefaultShell;
import org.jboss.reddeer.workbench.impl.editor.TextEditor;
import org.jboss.tools.cdi.bot.test.CDITestBase;
import org.jboss.tools.cdi.reddeer.annotation.ValidationType;
import org.jboss.tools.cdi.reddeer.cdi.ui.NewQualifierCreationWizard;
import org.jboss.tools.cdi.reddeer.cdi.ui.wizard.SpecifyBeanWizard;
import org.jboss.tools.cdi.reddeer.condition.QualifierIsFound;
import org.jboss.tools.cdi.reddeer.validators.IValidationProvider;
import org.jboss.tools.cdi.reddeer.validators.ValidationProblem;
import org.junit.After;
import org.junit.Test;
/**
* Test checks if Quick Fix provides useful operations when
* ambiguous injection points
* @author jjankovi
*
*/
public class ProblemEligibleInjectionTest extends CDITestBase {
/*
protected static IValidationProvider validationProvider;
private static final String ANIMAL = "Animal";
private static final String DOG = "Dog";
private static final String BROKEN_FARM = "BrokenFarm";
private static final String QUALIFIER = "Q1";
@After
public void waitForJobs() {
deleteAllProjects();
}
@Test
public void testMultipleBeansAddingExistingQualifier() {
beansHelper.createQualifier(QUALIFIER, getPackageName(), false,false);
createBean(ANIMAL, false);
createBean(DOG, true);
createBean(BROKEN_FARM, true);
refreshProject();
resolveMultipleBeans(validationProvider.getValidationProblem(ValidationType.MULTIPLE_BEAN_ELIGIBLE)
, DOG, QUALIFIER, QualifierOperation.ADD);
TextEditor textEditor = new TextEditor(BROKEN_FARM + ".java");
assertTrue(textEditor.getText().contains("@Inject @" + QUALIFIER));
textEditor = new TextEditor(DOG + ".java");
assertTrue(textEditor.getText().contains("@" + QUALIFIER));
}
@Test
public void testMultipleBeansAddingNonExistingQualifier() {
createBean(ANIMAL, false);
createBean(DOG, true);
createBean(BROKEN_FARM, true);
refreshProject();
resolveMultipleBeans(ValidationType.MULTIPLE_BEAN_ELIGIBLE, DOG, QUALIFIER,
QualifierOperation.ADD);
TextEditor textEditor = new TextEditor(BROKEN_FARM + ".java");
assertTrue(textEditor.getText().contains("@Inject @" + QUALIFIER));
textEditor = new TextEditor(DOG + ".java");
assertTrue(textEditor.getText().contains("@" + QUALIFIER));
}
@Test
public void testMultipleBeansRemovingExistingQualifier() {
beansHelper.createQualifier(QUALIFIER, getPackageName(), false,false);
createBean(ANIMAL, false);
createBean(DOG, true);
createBean(BROKEN_FARM, true);
refreshProject();
resolveMultipleBeans(validationProvider.getValidationProblem(ValidationType.MULTIPLE_BEAN_ELIGIBLE),
DOG, QUALIFIER, QualifierOperation.REMOVE);
TextEditor textEditor = new TextEditor(BROKEN_FARM + ".java");
assertTrue(textEditor.getText().contains("@Inject private") ||textEditor.getText().contains("@Inject private"));
textEditor = new TextEditor(DOG + ".java");
assertTrue(!textEditor.getText().contains("@" + QUALIFIER));
}
@Test
public void testNoBeanEligibleAddingExistingQualifier() {
beansHelper.createQualifier(QUALIFIER, getPackageName(), false,false);
createBean(ANIMAL, false);
createBean(DOG, true);
createBean(BROKEN_FARM, true);
refreshProject();
resolveMultipleBeans(validationProvider.getValidationProblem(ValidationType.MULTIPLE_BEAN_ELIGIBLE),
DOG, QUALIFIER, QualifierOperation.ADD);
TextEditor textEditor = new TextEditor(BROKEN_FARM + ".java");
textEditor = new TextEditor(DOG + ".java");
assertTrue(textEditor.getText().contains("@" + QUALIFIER));
}
@Test
public void testNoBeanEligibleRemovingExistingQualifier() {
beansHelper.createQualifier(QUALIFIER, getPackageName(), false,false);
createBean(ANIMAL, false);
createBean(DOG, true);
createBean(BROKEN_FARM, true);
refreshProject();
resolveMultipleBeans(validationProvider.getValidationProblem(ValidationType.MULTIPLE_BEAN_ELIGIBLE),
QualifierOperation.REMOVE);
TextEditor textEditor = new TextEditor(BROKEN_FARM + ".java");
assertTrue(textEditor.getText().contains("@Inject private") || textEditor.getText().contains("@Inject private"));
textEditor = new TextEditor(DOG + ".java");
assertFalse(textEditor.getText().contains("@" + QUALIFIER));
}
private void createBean(String name, boolean content){
beansHelper.createBean(name, getPackageName(), false, false, false, false, false,false,false, null,null);
if(content){
editResourceUtil.replaceClassContentByResource(name+".java",
readFile("resources/quickfix/injection/"+name+".java.cdi"),false);
}
}
private void resolveMultipleBeans(ValidationProblem validationProblem, String classToQualify,
String qualifier, QualifierOperation operation) {
List<Problem> p = validationHelper.findProblems(validationProblem);
assertTrue(p.size()>0);
quickFixHelper.openQuickFix(validationProblem);
QuickFixWizard quickFixWizard = new QuickFixWizard();
for (String availableFix : quickFixWizard.getAvailableFixes()) {
if (availableFix.contains(classToQualify)) {
quickFixWizard.setFix(availableFix);
quickFixWizard.setResource(quickFixWizard.getResources().get(0));
quickFixWizard.finish();
break;
}
}
SpecifyBeanWizard spBeanDialogWizard = new SpecifyBeanWizard();
if (operation == QualifierOperation.ADD) {
new WaitUntil(new SpecifyBeanWizardHasQualifier(spBeanDialogWizard, qualifier + " - " + getPackageName()),TimePeriod.getCustom(TimePeriod.NORMAL.getSeconds()*2),false);
boolean qualifFound = false;
for (String availQualifer : spBeanDialogWizard.getAvailableQualifiers()) {
if (availQualifer.equals(qualifier + " - " + getPackageName())) {
qualifFound = true;
spBeanDialogWizard.addQualifier(availQualifer);
}
}
// there was no such qualifer, it has to be created, after creation it
// has to be added to in Bean qualifiers
if (!qualifFound) {
NewQualifierCreationWizard qw = spBeanDialogWizard.createNewQualifier(qualifier, getPackageName());
qw.setName(qualifier);
qw.finish();
new DefaultShell("Specify CDI Bean for the Injection Point");
new WaitUntil(new SpecifyBeanWizardHasQualifier(spBeanDialogWizard, qualifier + " - " + getPackageName()),TimePeriod.getCustom(TimePeriod.NORMAL.getSeconds()*2),false);
for (String availQualifer : spBeanDialogWizard.getAvailableQualifiers()) {
if (availQualifer.equals(qualifier + " - " + getPackageName())) {
spBeanDialogWizard.addQualifier(availQualifer);
}
}
}
} else {
new WaitUntil(new QualifierIsFound(spBeanDialogWizard,qualifier + " - " + getPackageName()));
for (String inBeanQualifer : spBeanDialogWizard.getInBeanQualifiers()) {
if (inBeanQualifer.equals(qualifier + " - " + getPackageName())) {
spBeanDialogWizard.removeQualifier(inBeanQualifer);
}
}
}
spBeanDialogWizard.finish();
}
*/
}