xref: /aosp_15_r20/external/junit-params/RELEASES.md (revision b2c653efad15baf736c94ef04454e05088f2cbb7)
1*b2c653efSSorin Basca## JUnitParams 1.0.5 release. Release date : ?
2*b2c653efSSorin Basca
3*b2c653efSSorin Basca### Deprecated $ method
4*b2c653efSSorin BascaUtility method `$` was deprecated. It was causing too much problems and we decided not to support it any more. If you wish to keep using it, implement it in your own codebase.
5*b2c653efSSorin Basca
6*b2c653efSSorin Basca### Automatic class name to class object conversion
7*b2c653efSSorin Basca
8*b2c653efSSorin Basca```java
9*b2c653efSSorin Basca
10*b2c653efSSorin Basca    @Test
11*b2c653efSSorin Basca    @Parameters({"java.lang.Object", "java.lang.String"})
12*b2c653efSSorin Basca    public void passClassAsString(Class<?> clazz) {
13*b2c653efSSorin Basca        assertThat(clazz).isIn(java.lang.Object.class, java.lang.String.class);
14*b2c653efSSorin Basca    }
15*b2c653efSSorin Basca```
16*b2c653efSSorin Basca
17*b2c653efSSorin BascaThanks to [adammichalik](https://github.com/adammichalik) for contribution
18*b2c653efSSorin Basca
19*b2c653efSSorin Basca### Support custom annotations for parameter conversion
20*b2c653efSSorin Basca
21*b2c653efSSorin BascaYou can create your own annotations for parameter conversion. Just annotate it with `@Param` and pass it a reference to `Converter` implementation.
22*b2c653efSSorin Basca
23*b2c653efSSorin BascaExample:
24*b2c653efSSorin Basca
25*b2c653efSSorin Basca
26*b2c653efSSorin Basca```java
27*b2c653efSSorin Basca
28*b2c653efSSorin Basca    @Retention(RetentionPolicy.RUNTIME)
29*b2c653efSSorin Basca    @Target(ElementType.PARAMETER)
30*b2c653efSSorin Basca    @Param(converter = FormattedDateConverter.class)
31*b2c653efSSorin Basca    public @interface DateParam {
32*b2c653efSSorin Basca
33*b2c653efSSorin Basca        String format() default "dd.MM.yyyy";
34*b2c653efSSorin Basca    }
35*b2c653efSSorin Basca
36*b2c653efSSorin Basca    public static class FormattedDateConverter implements Converter<DateParam, Date> {
37*b2c653efSSorin Basca
38*b2c653efSSorin Basca        private String format;
39*b2c653efSSorin Basca
40*b2c653efSSorin Basca        @Override
41*b2c653efSSorin Basca        public void initialize(DateParam annotation) {
42*b2c653efSSorin Basca            this.format = annotation.format();
43*b2c653efSSorin Basca        }
44*b2c653efSSorin Basca
45*b2c653efSSorin Basca        @Override
46*b2c653efSSorin Basca        public Date convert(Object param) throws ConversionFailedException {
47*b2c653efSSorin Basca            try {
48*b2c653efSSorin Basca                return new SimpleDateFormat(format).parse(param.toString());
49*b2c653efSSorin Basca            } catch (ParseException e) {
50*b2c653efSSorin Basca                throw new ConversionFailedException("failed");
51*b2c653efSSorin Basca            }
52*b2c653efSSorin Basca        }
53*b2c653efSSorin Basca    }
54*b2c653efSSorin Basca```
55*b2c653efSSorin Basca
56*b2c653efSSorin BascaUsage example:
57*b2c653efSSorin Basca
58*b2c653efSSorin Basca```java
59*b2c653efSSorin Basca
60*b2c653efSSorin Basca    @Test
61*b2c653efSSorin Basca    @Parameters({"2012-12-01"})
62*b2c653efSSorin Basca    public void testWithConvertedDate(@DateParam Date date) {
63*b2c653efSSorin Basca        assertThat(...);
64*b2c653efSSorin Basca    }
65*b2c653efSSorin Basca```
66*b2c653efSSorin Basca
67*b2c653efSSorin BascaThanks to [bbobcik](https://github.com/bbobcik) for inspiration
68*b2c653efSSorin Basca
69*b2c653efSSorin Basca### CustomParameters
70*b2c653efSSorin Basca
71*b2c653efSSorin BascaYou can create custom annotations for parameter providers. `@FileParameters` have been refactored to use this mechanism and should serve as a perfect usage example.
72*b2c653efSSorin Basca
73*b2c653efSSorin Basca```java
74*b2c653efSSorin Basca
75*b2c653efSSorin Basca    @Retention(RetentionPolicy.RUNTIME)
76*b2c653efSSorin Basca    @Target(ElementType.METHOD)
77*b2c653efSSorin Basca    @CustomParameters(provider = FileParametersProvider.class)
78*b2c653efSSorin Basca    public @interface FileParameters {
79*b2c653efSSorin Basca
80*b2c653efSSorin Basca        String fileLocation();
81*b2c653efSSorin Basca
82*b2c653efSSorin Basca    }
83*b2c653efSSorin Basca
84*b2c653efSSorin Basca    public class FileParametersProvider implements ParametersProvider<FileParameters> {
85*b2c653efSSorin Basca
86*b2c653efSSorin Basca        private String fileLocation;
87*b2c653efSSorin Basca
88*b2c653efSSorin Basca        @Override
89*b2c653efSSorin Basca        public void initialize(FileParameters fileParameters) {
90*b2c653efSSorin Basca            this.fileLocation = fileParameters.fileLocation();
91*b2c653efSSorin Basca        }
92*b2c653efSSorin Basca
93*b2c653efSSorin Basca        @Override
94*b2c653efSSorin Basca        public Object[] getParameters() {
95*b2c653efSSorin Basca            return paramsFromFile(fileLocation);
96*b2c653efSSorin Basca        }
97*b2c653efSSorin Basca
98*b2c653efSSorin Basca        ...
99*b2c653efSSorin Basca    }
100*b2c653efSSorin Basca
101*b2c653efSSorin Basca```
102*b2c653efSSorin Basca
103*b2c653efSSorin Basca### @CombinedParameters
104*b2c653efSSorin Basca
105*b2c653efSSorin BascaThanks to [piekarskim](https://github.com/piekarskim) The issue #1 is fixed.
106*b2c653efSSorin BascaUsing this annotation will result in creating a n-fold cartesian product of parameter values effectively testing each possible combination.
107*b2c653efSSorin BascaSince an example is worth a thousand words:
108*b2c653efSSorin Basca
109*b2c653efSSorin BascaSuch annotated test method:
110*b2c653efSSorin Basca
111*b2c653efSSorin Basca```java
112*b2c653efSSorin Basca
113*b2c653efSSorin Basca    @Test
114*b2c653efSSorin Basca    @CombinedParameters({"a,b", "1,2"})
115*b2c653efSSorin Basca    public void calledWithCartesianProduct(String character, Integer number) {
116*b2c653efSSorin Basca    ...
117*b2c653efSSorin Basca    }
118*b2c653efSSorin Basca```
119*b2c653efSSorin Basca
120*b2c653efSSorin BascaWill be called 4 times with parameters:
121*b2c653efSSorin Basca
122*b2c653efSSorin Basca```
123*b2c653efSSorin Basca a  1
124*b2c653efSSorin Basca a  2
125*b2c653efSSorin Basca b  1
126*b2c653efSSorin Basca b  2
127*b2c653efSSorin Basca```
128*b2c653efSSorin Basca
129*b2c653efSSorin Basca
130*b2c653efSSorin Basca### Bug fixes and improvements
131*b2c653efSSorin Basca
132*b2c653efSSorin BascaThanks to the rest of contributors for lots of bug fixes and improvements:
133*b2c653efSSorin Basca
134*b2c653efSSorin Basca* [jtbeckha](https://github.com/jtbeckha)
135*b2c653efSSorin Basca* [szpak](https://github.com/szpak)
136*b2c653efSSorin Basca* [mkordas](https://github.com/mkordas)
137*b2c653efSSorin Basca* [davidwiking](https://github.com/davidwiking)
138*b2c653efSSorin Basca* [bennetelli](https://github.com/bennetelli)
139*b2c653efSSorin Basca
140*b2c653efSSorin Basca
141*b2c653efSSorin Basca## JUnitParams 1.0.4 release. Release date : 2015-01-23
142*b2c653efSSorin Basca
143*b2c653efSSorin Basca### Configurable test case name
144*b2c653efSSorin BascaNew annotation `@TestCaseName` that can be used for test case name configuration:
145*b2c653efSSorin Basca
146*b2c653efSSorin Basca```java
147*b2c653efSSorin Basca  @Test
148*b2c653efSSorin Basca  @Parameters({ "1,1", "2,2" })
149*b2c653efSSorin Basca  @TestCaseName("factorial({0}) = {1}")
150*b2c653efSSorin Basca  public void custom_names_for_test_case(int argument, int result) { }
151*b2c653efSSorin Basca```
152*b2c653efSSorin Basca
153*b2c653efSSorin Bascawill produce tests with names:
154*b2c653efSSorin Basca
155*b2c653efSSorin Basca```
156*b2c653efSSorin Bascafactorial(1) = 1
157*b2c653efSSorin Bascafactorial(2) = 2
158*b2c653efSSorin Basca```
159*b2c653efSSorin Basca
160*b2c653efSSorin BascaThanks to [Menliat](https://github.com/Menliat) for contribution.
161*b2c653efSSorin Basca
162*b2c653efSSorin Basca
163*b2c653efSSorin Basca### Allow usage of enums as a data source
164*b2c653efSSorin Basca
165*b2c653efSSorin BascaParameters annotation now allows passing Enum values as parameters
166*b2c653efSSorin Basca
167*b2c653efSSorin Basca```
168*b2c653efSSorin Basca@Parameters(source = Fruit.class)
169*b2c653efSSorin Basca```
170*b2c653efSSorin Basca
171*b2c653efSSorin BascaThanks to [ukcrpb6](https://github.com/ukcrpb6) for contribution.
172*b2c653efSSorin Basca
173*b2c653efSSorin Basca
174*b2c653efSSorin Basca### Test results filtering fixed
175*b2c653efSSorin Basca
176*b2c653efSSorin BascaWhen starting a single test method from within an IDE, the tests results were not shown up properly in the results tab.
177*b2c653efSSorin BascaIts fixed now thanks to [jerzykrlk](https://github.com/jerzykrlk)
178*b2c653efSSorin Basca
179*b2c653efSSorin Basca### Bug fixes and improvements
180*b2c653efSSorin Basca
181*b2c653efSSorin BascaThanks to the rest of contributors for lots of bug fixes and improvements:
182*b2c653efSSorin Basca
183*b2c653efSSorin Basca* [wojtek-szymanski](https://github.com/wojtek-szymanski)
184*b2c653efSSorin Basca* [Jacobus2k](https://github.com/Jacobus2k)
185*b2c653efSSorin Basca* [justhalf](https://github.com/justhalf)
186*b2c653efSSorin Basca* [szpak](https://github.com/szpak)
187*b2c653efSSorin Basca* [v-dev](https://github.com/v-dev)
188