/*******************************************************************************
* 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.beans.stereotype.template;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.eclipse.condition.ProblemExists;
import org.jboss.reddeer.eclipse.ui.problems.Problem;
import org.jboss.reddeer.eclipse.ui.problems.ProblemsView.ProblemType;
import org.jboss.reddeer.junit.execution.annotation.RunIf;
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.validators.IValidationProvider;
import org.jboss.tools.cdi.reddeer.validators.ValidationProblem;
import org.junit.After;
import org.junit.Test;
/**
* Test operates on quick fixes used for validation errors of CDI Stereotype component
*
* @author Jaroslav Jankovic
*/
public class StereotypeValidationQuickFixTemplate extends CDITestBase {
public static IValidationProvider validationProvider;
protected String CDIVersion;
public IValidationProvider validationProvider() {
return validationProvider;
}
@After
public void deleteProjects(){
deleteAllProjects();
}
// https://issues.jboss.org/browse/JBIDE-7630
// cdi 1.0, not for 1.1+
@Test
public void testTargetAnnotation() {
String className = "Stereotype1";
beansHelper.createStereotype(className, getPackageName(), false, false, false, false, false);
editResourceUtil.replaceInEditor(className+".java","@Target({ TYPE, METHOD, FIELD })",
"@Target({ TYPE, FIELD })");
ValidationProblem problem = validationProvider.getValidationProblem(ValidationType.TARGET);
List<Problem> problems= validationHelper.findProblems(problem);
if(CDIVersion.equals("1.0")){
assertEquals(1,problems.size());
validationHelper.openQuickfix(problem,3);
TextEditor te =new TextEditor();
te.getText().contentEquals("@Target({TYPE, METHOD, FIELD})");
editResourceUtil.replaceInEditor(className+".java","@Target({TYPE, METHOD, FIELD})", "");
problems= validationHelper.findProblems(problem);
assertEquals(1,problems.size());
} else {
assertEquals(0,problems.size());
editResourceUtil.replaceInEditor(className+".java","@Target({ TYPE, FIELD })", "");
problems= validationHelper.findProblems(problem);
assertEquals(0,problems.size());
}
}
// https://issues.jboss.org/browse/JBIDE-7631
@Test
public void testRetentionAnnotation() {
String className = "Stereotype2";
beansHelper.createStereotype(className, getPackageName(), false, false, false, false, false);
editResourceUtil.replaceInEditor(className+".java","@Retention(RUNTIME)", "@Retention(CLASS)");
ValidationProblem problem = validationProvider.getValidationProblem(ValidationType.RETENTION);
List<Problem> problems= validationHelper.findProblems(problem);
assertEquals(1,problems.size());
validationHelper.openQuickfix(problem);
//quickFixHelper.checkQuickFix(ValidationType.RETENTION, getProjectName(), validationProvider());
editResourceUtil.replaceInEditor(className+".java","@Retention(RUNTIME)", "");
problem = validationProvider.getValidationProblem(ValidationType.NO_RETENTION);
problems= validationHelper.findProblems(problem);
assertEquals(1,problems.size());
validationHelper.openQuickfix(problem);
new WaitWhile(new ProblemExists(ProblemType.ANY));
}
// https://issues.jboss.org/browse/JBIDE-7634
@Test
public void testNamedAnnotation() {
String className = "Stereotype3";
beansHelper.createStereotype(className, getPackageName(), false, false, false, false, false);
editResourceUtil.replaceClassContentByResource(className+".java",
readFile("resources/quickfix/stereotype/StereotypeWithNamed.java.cdi"), false);
editResourceUtil.replaceInEditor(className+".java","StereotypeComponent", className);
ValidationProblem problem = validationProvider.getValidationProblem(ValidationType.NAMED);
List<Problem> problems= validationHelper.findProblems(problem);
assertEquals(1,problems.size());
validationHelper.openQuickfix(problem);
new WaitWhile(new ProblemExists(ProblemType.ANY));
}
// https://issues.jboss.org/browse/JBIDE-7640
@Test
public void testTypedAnnotation() {
String className = "Stereotype4";
beansHelper.createStereotype(className, getPackageName(), false, false, false, false, false);
editResourceUtil.replaceClassContentByResource(className+".java",
readFile("resources/quickfix/stereotype/StereotypeWithTyped.java.cdi"), false);
editResourceUtil.replaceInEditor(className+".java","StereotypeComponent", className);
ValidationProblem problem = validationProvider.getValidationProblem(ValidationType.TYPED);
List<Problem> problems= validationHelper.findProblems(problem);
assertEquals(1,problems.size());
validationHelper.openQuickfix(problem);
new WaitWhile(new ProblemExists(ProblemType.ANY));
}
}