package org.jboss.tools.ws.ui.bot.test.rest; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.hamcrest.core.Is; 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.eclipse.condition.ExactNumberOfProblemsExists; import org.jboss.reddeer.eclipse.condition.ProblemExists; 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.junit.runner.RedDeerSuite; import org.jboss.reddeer.requirements.autobuilding.AutoBuildingRequirement.AutoBuilding; import org.jboss.reddeer.requirements.server.ServerReqState; import org.jboss.reddeer.common.wait.TimePeriod; import org.jboss.reddeer.common.wait.WaitUntil; import org.jboss.tools.ws.reddeer.editor.ExtendedTextEditor; import org.jboss.tools.ws.ui.bot.test.utils.ProjectHelper; import org.junit.Test; import org.junit.runner.RunWith; /** * Testing support for custom Name-Binding annotation * * Run with J2EE7+ server * * @author Radoslav Rabara * * @see http://tools.jboss.org/documentation/whatsnew/jbosstools/4.2.0.Beta1.html#webservices * @since JBT 4.2.0.Beta1 */ @RunWith(RedDeerSuite.class) @JBossServer(state=ServerReqState.PRESENT, type=ServerReqType.WILDFLY) @AutoBuilding(value = false, cleanup = true) public class FiltersInterceptorsSupportTest extends RESTfulTestBase { @Override public void setup() { // no setup required } @Test public void requestFilterSupportTest() { filterSupportTest("filter1"); } @Test public void responseFilterSupportTest() { filterSupportTest("filter2"); } @Test public void readInterceptorSupportTest() { interceptorSupportTest("interceptor1"); } @Test public void writeInterceptorSupportTest() { interceptorSupportTest("interceptor2"); } @Test public void filterInterceptorDefinedAsInnerClassesSupportTest() { String projectName = "filterinterceptor1"; importAndCheckErrors(projectName); ProjectHelper.cleanAllProjects(); assertCountOfValidationProblemsExists(ProblemType.WARNING, projectName, null, null, 4); } private void filterSupportTest(String projectName) { importAndCheckErrors(projectName); providerValidationWarning(projectName, "Filter"); } private void interceptorSupportTest(String projectName) { importAndCheckErrors(projectName); providerValidationWarning(projectName, "Interceptor"); } private void providerValidationWarning(String projectName, String className) { ProjectHelper.cleanAllProjects(); /* wait for JAX-RS validator */ new WaitUntil(new ProblemExists(ProblemType.ANY), TimePeriod.NORMAL, false); // there should be "No JAX-RS Activator is defined for the project." warning List<Problem> warningsBefore = new ProblemsView().getProblems(ProblemType.WARNING); List<String> warningsBeforeStrings = new ArrayList<String>(); for (Problem warning: warningsBefore) { warningsBeforeStrings.add(warning.toString()); } //remove @Provider annotation openJavaFile(projectName, "org.rest.test", className + ".java"); new ExtendedTextEditor().removeLine("@Provider"); //remove unused import new ExtendedTextEditor().removeLine("import javax.ws.rs.ext.Provider;"); new ExtendedTextEditor().save(); ProjectHelper.cleanAllProjects(); /* wait for JAX-RS validator */ new WaitUntil(new ExactNumberOfProblemsExists(ProblemType.WARNING, warningsBefore.size()+1), TimePeriod.NORMAL, false); //one more warning Description "The @Provider annotation is missing on this java type." List<Problem> warningsAfter = new ProblemsView().getProblems(ProblemType.WARNING); assertThat("Expected one more warnings.\nBefore: " + Arrays.toString(warningsBeforeStrings.toArray()) + "\nAfter: " + Arrays.toString(warningsAfter.toArray()), warningsAfter.size() - warningsBefore.size(), Is.is(1)); /* there should be no error */ assertCountOfProblemsExists(ProblemType.ERROR, projectName, null, null, 0); } }