xref: /aosp_15_r20/external/junit-params/src/test/java/junitparams/ParamsConverterTest.java (revision b2c653efad15baf736c94ef04454e05088f2cbb7)
1*b2c653efSSorin Basca package junitparams;
2*b2c653efSSorin Basca 
3*b2c653efSSorin Basca import java.lang.annotation.ElementType;
4*b2c653efSSorin Basca import java.lang.annotation.Retention;
5*b2c653efSSorin Basca import java.lang.annotation.RetentionPolicy;
6*b2c653efSSorin Basca import java.lang.annotation.Target;
7*b2c653efSSorin Basca import java.text.ParseException;
8*b2c653efSSorin Basca import java.text.SimpleDateFormat;
9*b2c653efSSorin Basca import java.util.Arrays;
10*b2c653efSSorin Basca import java.util.Calendar;
11*b2c653efSSorin Basca import java.util.Date;
12*b2c653efSSorin Basca import java.util.List;
13*b2c653efSSorin Basca 
14*b2c653efSSorin Basca import org.junit.Test;
15*b2c653efSSorin Basca import org.junit.runner.RunWith;
16*b2c653efSSorin Basca 
17*b2c653efSSorin Basca import junitparams.converters.ConversionFailedException;
18*b2c653efSSorin Basca import junitparams.converters.ConvertParam;
19*b2c653efSSorin Basca import junitparams.converters.Converter;
20*b2c653efSSorin Basca import junitparams.converters.Param;
21*b2c653efSSorin Basca import junitparams.converters.ParamConverter;
22*b2c653efSSorin Basca 
23*b2c653efSSorin Basca import static org.assertj.core.api.Assertions.*;
24*b2c653efSSorin Basca 
25*b2c653efSSorin Basca @RunWith(JUnitParamsRunner.class)
26*b2c653efSSorin Basca public class ParamsConverterTest {
27*b2c653efSSorin Basca 
28*b2c653efSSorin Basca     @Test
29*b2c653efSSorin Basca     @Parameters({"01.12.2012"})
convertSingleParam( @onvertParamvalue = StringToDateConverter.class, options = "dd.MM.yyyy") Date date)30*b2c653efSSorin Basca     public void convertSingleParam(
31*b2c653efSSorin Basca             @ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date) {
32*b2c653efSSorin Basca         Calendar calendar = createCalendarWithDate(date);
33*b2c653efSSorin Basca         assertCalendarDate(calendar);
34*b2c653efSSorin Basca     }
35*b2c653efSSorin Basca 
36*b2c653efSSorin Basca     @Test
37*b2c653efSSorin Basca     @Parameters({"01.12.2012,A"})
convertMultipleParams( @onvertParamvalue = StringToDateConverter.class, options = "dd.MM.yyyy") Date date, @ConvertParam(LetterToNumberConverter.class) int num)38*b2c653efSSorin Basca     public void convertMultipleParams(
39*b2c653efSSorin Basca             @ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date,
40*b2c653efSSorin Basca             @ConvertParam(LetterToNumberConverter.class) int num) {
41*b2c653efSSorin Basca         Calendar calendar = createCalendarWithDate(date);
42*b2c653efSSorin Basca         assertCalendarDate(calendar);
43*b2c653efSSorin Basca         assertThat(num).isEqualTo(1);
44*b2c653efSSorin Basca     }
45*b2c653efSSorin Basca 
46*b2c653efSSorin Basca     @Test
47*b2c653efSSorin Basca     @Parameters(method = "params")
convertParamsFromMethod( @onvertParamvalue = StringToDateConverter.class, options = "dd.MM.yyyy") Date date)48*b2c653efSSorin Basca     public void convertParamsFromMethod(
49*b2c653efSSorin Basca             @ConvertParam(value = StringToDateConverter.class, options = "dd.MM.yyyy") Date date) {
50*b2c653efSSorin Basca         Calendar calendar = createCalendarWithDate(date);
51*b2c653efSSorin Basca         assertCalendarDate(calendar);
52*b2c653efSSorin Basca     }
53*b2c653efSSorin Basca 
54*b2c653efSSorin Basca     @Test
55*b2c653efSSorin Basca     @Parameters({"01.12.2012"})
convertParamsUsingParamAnnotation(@aramconverter = SimpleDateConverter.class) Date date)56*b2c653efSSorin Basca     public void convertParamsUsingParamAnnotation(@Param(converter = SimpleDateConverter.class) Date date) {
57*b2c653efSSorin Basca         Calendar calendar = createCalendarWithDate(date);
58*b2c653efSSorin Basca         assertCalendarDate(calendar);
59*b2c653efSSorin Basca     }
60*b2c653efSSorin Basca 
61*b2c653efSSorin Basca     @Test
62*b2c653efSSorin Basca     @Parameters({"01.12.2012"})
convertParamsUsingCustomParamAnnotation(@ateParam Date date)63*b2c653efSSorin Basca     public void convertParamsUsingCustomParamAnnotation(@DateParam Date date) {
64*b2c653efSSorin Basca         Calendar calendar = createCalendarWithDate(date);
65*b2c653efSSorin Basca         assertCalendarDate(calendar);
66*b2c653efSSorin Basca     }
67*b2c653efSSorin Basca 
68*b2c653efSSorin Basca     @Test
69*b2c653efSSorin Basca     @Parameters(method = "params")
convertParamsFromMethodUsingCustomParamAnnotation(@ateParam Date date)70*b2c653efSSorin Basca     public void convertParamsFromMethodUsingCustomParamAnnotation(@DateParam Date date) {
71*b2c653efSSorin Basca         Calendar calendar = createCalendarWithDate(date);
72*b2c653efSSorin Basca         assertCalendarDate(calendar);
73*b2c653efSSorin Basca     }
74*b2c653efSSorin Basca 
params()75*b2c653efSSorin Basca     private List<String> params() {
76*b2c653efSSorin Basca         return Arrays.asList("01.12.2012");
77*b2c653efSSorin Basca     }
78*b2c653efSSorin Basca 
79*b2c653efSSorin Basca     @Test
80*b2c653efSSorin Basca     @Parameters({"2012-12-01"})
convertParamsUsingCustomParamAnnotationOverridingAttributes(@ateParamformat = "yyyy-MM-dd") Date date)81*b2c653efSSorin Basca     public void convertParamsUsingCustomParamAnnotationOverridingAttributes(@DateParam(format = "yyyy-MM-dd") Date date) {
82*b2c653efSSorin Basca         Calendar calendar = createCalendarWithDate(date);
83*b2c653efSSorin Basca         assertCalendarDate(calendar);
84*b2c653efSSorin Basca     }
85*b2c653efSSorin Basca 
86*b2c653efSSorin Basca     @Test
87*b2c653efSSorin Basca     @Parameters({"2012-12-01"})
passesParametersWithOtherAnnotations(@ther String parameter)88*b2c653efSSorin Basca     public void passesParametersWithOtherAnnotations(@Other String parameter) {
89*b2c653efSSorin Basca         assertThat(parameter)
90*b2c653efSSorin Basca                 .isExactlyInstanceOf(String.class)
91*b2c653efSSorin Basca                 .isEqualTo("2012-12-01");
92*b2c653efSSorin Basca     }
93*b2c653efSSorin Basca 
assertCalendarDate(Calendar calendar)94*b2c653efSSorin Basca     private void assertCalendarDate(Calendar calendar) {
95*b2c653efSSorin Basca         assertThat(calendar.get(Calendar.YEAR)).isEqualTo(2012);
96*b2c653efSSorin Basca         assertThat(calendar.get(Calendar.MONTH)).isEqualTo(11);
97*b2c653efSSorin Basca         assertThat(calendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(1);
98*b2c653efSSorin Basca     }
99*b2c653efSSorin Basca 
createCalendarWithDate(Date date)100*b2c653efSSorin Basca     private Calendar createCalendarWithDate(Date date) {
101*b2c653efSSorin Basca         Calendar calendar = Calendar.getInstance();
102*b2c653efSSorin Basca         calendar.setTime(date);
103*b2c653efSSorin Basca         return calendar;
104*b2c653efSSorin Basca     }
105*b2c653efSSorin Basca 
106*b2c653efSSorin Basca     public static class LetterToNumberConverter implements ParamConverter<Integer> {
convert(Object param, String options)107*b2c653efSSorin Basca         public Integer convert(Object param, String options) {
108*b2c653efSSorin Basca             return param.toString().charAt(0) - 64;
109*b2c653efSSorin Basca         }
110*b2c653efSSorin Basca     }
111*b2c653efSSorin Basca 
112*b2c653efSSorin Basca     public static class StringToDateConverter implements ParamConverter<Date> {
convert(Object param, String options)113*b2c653efSSorin Basca         public Date convert(Object param, String options) {
114*b2c653efSSorin Basca             try {
115*b2c653efSSorin Basca                 return new SimpleDateFormat(options).parse(param.toString());
116*b2c653efSSorin Basca             } catch (ParseException e) {
117*b2c653efSSorin Basca                 throw new RuntimeException(e);
118*b2c653efSSorin Basca             }
119*b2c653efSSorin Basca         }
120*b2c653efSSorin Basca     }
121*b2c653efSSorin Basca 
122*b2c653efSSorin Basca     @Retention(RetentionPolicy.RUNTIME)
123*b2c653efSSorin Basca     @Target(ElementType.PARAMETER)
124*b2c653efSSorin Basca     @Param(converter = FormattedDateConverter.class)
125*b2c653efSSorin Basca     public @interface DateParam {
126*b2c653efSSorin Basca 
format()127*b2c653efSSorin Basca         String format() default "dd.MM.yyyy";
128*b2c653efSSorin Basca     }
129*b2c653efSSorin Basca 
130*b2c653efSSorin Basca     @Retention(RetentionPolicy.RUNTIME)
131*b2c653efSSorin Basca     @Target(ElementType.PARAMETER)
132*b2c653efSSorin Basca     public @interface Other {
133*b2c653efSSorin Basca     }
134*b2c653efSSorin Basca 
135*b2c653efSSorin Basca     public static class FormattedDateConverter implements Converter<DateParam, Date> {
136*b2c653efSSorin Basca 
137*b2c653efSSorin Basca         private String format;
138*b2c653efSSorin Basca 
139*b2c653efSSorin Basca         @Override
initialize(DateParam annotation)140*b2c653efSSorin Basca         public void initialize(DateParam annotation) {
141*b2c653efSSorin Basca             this.format = annotation.format();
142*b2c653efSSorin Basca         }
143*b2c653efSSorin Basca 
144*b2c653efSSorin Basca         @Override
convert(Object param)145*b2c653efSSorin Basca         public Date convert(Object param) throws ConversionFailedException {
146*b2c653efSSorin Basca             try {
147*b2c653efSSorin Basca                 return new SimpleDateFormat(format).parse(param.toString());
148*b2c653efSSorin Basca             } catch (ParseException e) {
149*b2c653efSSorin Basca                 throw new ConversionFailedException("failed");
150*b2c653efSSorin Basca             }
151*b2c653efSSorin Basca         }
152*b2c653efSSorin Basca     }
153*b2c653efSSorin Basca 
154*b2c653efSSorin Basca     public static class SimpleDateConverter implements Converter<Param, Date> {
155*b2c653efSSorin Basca         @Override
initialize(Param annotation)156*b2c653efSSorin Basca         public void initialize(Param annotation) {
157*b2c653efSSorin Basca         }
158*b2c653efSSorin Basca 
159*b2c653efSSorin Basca         @Override
convert(Object param)160*b2c653efSSorin Basca         public Date convert(Object param) throws ConversionFailedException {
161*b2c653efSSorin Basca             try {
162*b2c653efSSorin Basca                 return new SimpleDateFormat("dd.MM.yyyy").parse(param.toString());
163*b2c653efSSorin Basca             } catch (ParseException e) {
164*b2c653efSSorin Basca                 throw new ConversionFailedException("failed");
165*b2c653efSSorin Basca             }
166*b2c653efSSorin Basca         }
167*b2c653efSSorin Basca     }
168*b2c653efSSorin Basca }
169