package org.jboss.tools.cdi.reddeer.uiutils; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; import org.jboss.reddeer.common.condition.AbstractWaitCondition; import org.jboss.reddeer.common.exception.RedDeerException; import org.jboss.reddeer.common.wait.TimePeriod; import org.jboss.reddeer.common.wait.WaitUntil; import org.jboss.reddeer.core.exception.CoreLayerException; 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.markers.QuickFixPage; import org.jboss.reddeer.eclipse.ui.views.markers.QuickFixWizard; import org.jboss.tools.cdi.reddeer.validators.ValidationProblem; public class ValidationHelper { private class SpecificProblemExists extends AbstractWaitCondition { private ValidationProblem validationProblem; public SpecificProblemExists(ValidationProblem validationProblem){ this.validationProblem = validationProblem; } @Override public boolean test() { ProblemsView pw = new ProblemsView(); pw.open(); List<Problem> problems = pw.getProblems(ProblemType.ANY); List<Problem> foundProblems = new ArrayList<Problem>(); for(Problem p: problems){ try{ if(validationProblem.equals(p)){ foundProblems.add(p); } } catch (CoreLayerException l){ //do nothing, problem was probably disposed } } return !foundProblems.isEmpty(); } @Override public String description() { return "validation problem is found"; } } public List<Problem> findProblems(ValidationProblem validationProblem){ new WaitUntil(new SpecificProblemExists(validationProblem),TimePeriod.NORMAL,false); ProblemsView pw = new ProblemsView(); pw.open(); List<Problem> problems = pw.getProblems(ProblemType.ANY); List<Problem> foundProblems = new ArrayList<Problem>(); for(Problem p: problems){ try{ if(validationProblem.equals(p)){ foundProblems.add(p); } } catch (RedDeerException e) { // disposed } } return foundProblems; } public void openQuickfix(ValidationProblem validationProblem){ openQuickfix(validationProblem,0); } public void openQuickfix(ValidationProblem validationProblem, int quickfixIndex){ List<Problem> foundProblems = findProblems(validationProblem); QuickFixWizard qf = foundProblems.get(0).openQuickFix(); QuickFixPage qp = new QuickFixPage(); List<String> fixes = qp.getAvailableFixes(); String chosenFix = null; String proposedFix = validationProblem.getQuickFixes().get(quickfixIndex); if(proposedFix == null || proposedFix.isEmpty()){ fail("No quickfix is defined"); } for(String fix: fixes){ if(fix.contains(validationProblem.getQuickFixes().get(quickfixIndex))){ chosenFix = fix; break; } } if(chosenFix == null){ fail("Unable to find proper quickfix"); } qp.selectFix(chosenFix); qf.finish(); } }