package org.jboss.tools.ws.ui.bot.test.rest.param;
import javax.ws.rs.PathParam;
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.jdt.ui.NewJavaClassWizardDialog;
import org.jboss.reddeer.eclipse.jdt.ui.NewJavaClassWizardPage;
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.workbench.impl.editor.TextEditor;
import org.jboss.tools.ws.ui.bot.test.rest.RESTfulTestBase;
import org.jboss.tools.ws.ui.bot.test.utils.ProjectHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
*
* Testing support for JAX-RS ParamConverterProvider
*
* Run with J2EE7+ server
*
* @author Radoslav Rabara
* @since JBT 4.2.0 Beta3
* @see https://issues.jboss.org/browse/JBIDE-16763
*/
@RunWith(RedDeerSuite.class)
@JBossServer(state=ServerReqState.PRESENT, type=ServerReqType.WILDFLY)
@AutoBuilding(value = false, cleanup = true)
public class ParamConverterSupportTest extends RESTfulTestBase {
/**
* Project contains RestService with @POST method with {@link PathParam}
* bound to class Car
*/
final String PROJECT1_NAME = "paramConverter";
@Override
public void setup() {
}
@Test
public void testParamConverterSupport() {
/* prepare project */
importWSTestProject(PROJECT1_NAME);
ProjectHelper.cleanAllProjects();
/* assert that type Car is not valid for the parameter */
assertCountOfValidationProblemsExists(ProblemType.ERROR, PROJECT1_NAME, null, null, 1);
assertCountOfValidationProblemsExists(ProblemType.ERROR, PROJECT1_NAME,
"The type 'org.rest.test.Car' is not valid for this parameter. "
+ "See JAX-RS 2.0 Specification (section 3.2) for more information. ", null, 1);
/* create class implementing ParamConverterProvider */
createParamConverter();
ProjectHelper.cleanAllProjects();
/* there is no error anymore */
assertCountOfValidationProblemsExists(ProblemType.ERROR, PROJECT1_NAME, null, null, 0);
}
private void createParamConverter() {
NewJavaClassWizardDialog newJavaClassDialog = new NewJavaClassWizardDialog();
newJavaClassDialog.open();
NewJavaClassWizardPage newJavaClassPage = new NewJavaClassWizardPage();
newJavaClassPage.setPackage("org.rest.test");
newJavaClassPage.setName("Converter");
newJavaClassDialog.finish();
TextEditor editor = new TextEditor();
editor.activate();
editor.setText(PARAM_CONVERTER_PROVIDER_CLASS_TEXT);
editor.save();
}
private final String PARAM_CONVERTER_PROVIDER_CLASS_TEXT =
"package org.rest.test;\n"
+ "import java.lang.annotation.Annotation;\n"
+ "import java.lang.reflect.Type;\n\n"
+ "import javax.ws.rs.ext.ParamConverter;\n"
+ "import javax.ws.rs.ext.Provider;\n"
+ "import javax.ws.rs.ext.ParamConverterProvider;\n\n"
+ "@Provider\n"
+ "public class Converter implements ParamConverterProvider {\n"
+ " @Override\n public <T> ParamConverter<T> getConverter(Class<T> arg0, Type arg1, Annotation[] arg2) {\n"
+ " return null;\n"
+ " }\n"
+ "}\n";
}