aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/junitparams/ParamsConverterTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/junitparams/ParamsConverterTest.java')
-rw-r--r--src/test/java/junitparams/ParamsConverterTest.java168
1 files changed, 168 insertions, 0 deletions
diff --git a/src/test/java/junitparams/ParamsConverterTest.java b/src/test/java/junitparams/ParamsConverterTest.java
new file mode 100644
index 0000000..0bdd5a1
--- /dev/null
+++ b/src/test/java/junitparams/ParamsConverterTest.java
@@ -0,0 +1,168 @@
+package junitparams;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import junitparams.converters.ConversionFailedException;
+import junitparams.converters.ConvertParam;
+import junitparams.converters.Converter;
+import junitparams.converters.Param;
+import junitparams.converters.ParamConverter;
+
+import static org.assertj.core.api.Assertions.*;
+
+@RunWith(JUnitParamsRunner.class)
+public class ParamsConverterTest {
+
+ @Test
+ @Parameters({"01.12.2012"})
+ public void convertSingleParam(
+ @ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date) {
+ Calendar calendar = createCalendarWithDate(date);
+ assertCalendarDate(calendar);
+ }
+
+ @Test
+ @Parameters({"01.12.2012,A"})
+ public void convertMultipleParams(
+ @ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date,
+ @ConvertParam(LetterToNumberConverter.class) int num) {
+ Calendar calendar = createCalendarWithDate(date);
+ assertCalendarDate(calendar);
+ assertThat(num).isEqualTo(1);
+ }
+
+ @Test
+ @Parameters(method = "params")
+ public void convertParamsFromMethod(
+ @ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date) {
+ Calendar calendar = createCalendarWithDate(date);
+ assertCalendarDate(calendar);
+ }
+
+ @Test
+ @Parameters({"01.12.2012"})
+ public void convertParamsUsingParamAnnotation(@Param(converter = SimpleDateConverter.class) Date date) {
+ Calendar calendar = createCalendarWithDate(date);
+ assertCalendarDate(calendar);
+ }
+
+ @Test
+ @Parameters({"01.12.2012"})
+ public void convertParamsUsingCustomParamAnnotation(@DateParam Date date) {
+ Calendar calendar = createCalendarWithDate(date);
+ assertCalendarDate(calendar);
+ }
+
+ @Test
+ @Parameters(method = "params")
+ public void convertParamsFromMethodUsingCustomParamAnnotation(@DateParam Date date) {
+ Calendar calendar = createCalendarWithDate(date);
+ assertCalendarDate(calendar);
+ }
+
+ private List<String> params() {
+ return Arrays.asList("01.12.2012");
+ }
+
+ @Test
+ @Parameters({"2012-12-01"})
+ public void convertParamsUsingCustomParamAnnotationOverridingAttributes(@DateParam(format = "yyyy-MM-dd") Date date) {
+ Calendar calendar = createCalendarWithDate(date);
+ assertCalendarDate(calendar);
+ }
+
+ @Test
+ @Parameters({"2012-12-01"})
+ public void passesParametersWithOtherAnnotations(@Other String parameter) {
+ assertThat(parameter)
+ .isExactlyInstanceOf(String.class)
+ .isEqualTo("2012-12-01");
+ }
+
+ private void assertCalendarDate(Calendar calendar) {
+ assertThat(calendar.get(Calendar.YEAR)).isEqualTo(2012);
+ assertThat(calendar.get(Calendar.MONTH)).isEqualTo(11);
+ assertThat(calendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(1);
+ }
+
+ private Calendar createCalendarWithDate(Date date) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ return calendar;
+ }
+
+ public static class LetterToNumberConverter implements ParamConverter<Integer> {
+ public Integer convert(Object param, String options) {
+ return param.toString().charAt(0) - 64;
+ }
+ }
+
+ public static class StringToDateConverter implements ParamConverter<Date> {
+ public Date convert(Object param, String options) {
+ try {
+ return new SimpleDateFormat(options).parse(param.toString());
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.PARAMETER)
+ @Param(converter = FormattedDateConverter.class)
+ public @interface DateParam {
+
+ String format() default "dd.MM.yyyy";
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.PARAMETER)
+ public @interface Other {
+ }
+
+ public static class FormattedDateConverter implements Converter<DateParam, Date> {
+
+ private String format;
+
+ @Override
+ public void initialize(DateParam annotation) {
+ this.format = annotation.format();
+ }
+
+ @Override
+ public Date convert(Object param) throws ConversionFailedException {
+ try {
+ return new SimpleDateFormat(format).parse(param.toString());
+ } catch (ParseException e) {
+ throw new ConversionFailedException("failed");
+ }
+ }
+ }
+
+ public static class SimpleDateConverter implements Converter<Param, Date> {
+ @Override
+ public void initialize(Param annotation) {
+ }
+
+ @Override
+ public Date convert(Object param) throws ConversionFailedException {
+ try {
+ return new SimpleDateFormat("dd.MM.yyyy").parse(param.toString());
+ } catch (ParseException e) {
+ throw new ConversionFailedException("failed");
+ }
+ }
+ }
+}