## 1.18

- Made some internal JUnit4 methods of `TestParameterInjector` public:

  - `computeTestMethods()`
  - `methodBlock()`
  - `methodInvoker()`

  These allow any client to combine `TestParameterInjector` with another JUnit4
  runner by manually creating a `TestParameterInjector` instance and calling
  these methods from the combined JUnit4 runner.

## 1.17

- Added support for parsing `java.time.Duration` from a string. Example:

```
@Test
public void myTest(@TestParameter({"1d", "2h20min", "10.5ms"}) Duration duration){...}
```

## 1.16

- Deprecated [`TestParameter.TestParameterValuesProvider`](
  https://google.github.io/TestParameterInjector/docs/latest/com/google/testing/junit/testparameterinjector/TestParameter.TestParameterValuesProvider.html)
  in favor of its newer version [`TestParameterValuesProvider`](
  https://google.github.io/TestParameterInjector/docs/latest/com/google/testing/junit/testparameterinjector/TestParameterValuesProvider.html).
- Added support for repeated annotations to [`TestParameterValuesProvider.Context`](
  https://google.github.io/TestParameterInjector/docs/latest/com/google/testing/junit/testparameterinjector/TestParameterValuesProvider.Context.html)
- Converting incorrectly YAML-parsed booleans back to their enum values when possible
- Support enum aliases (defined as static fields on the enum), and in particular
  Protocol Buffer enum aliases
- When generating test names for enum values, the enum name is used instead of
  its `toString()` method.

## 1.15

- Add context aware version of [`TestParameterValuesProvider`](
  https://google.github.io/TestParameterInjector/docs/latest/com/google/testing/junit/testparameterinjector/TestParameterValuesProvider.html).
  It is the same as the old [`TestParameter.TestParameterValuesProvider`](
  https://google.github.io/TestParameterInjector/docs/latest/com/google/testing/junit/testparameterinjector/TestParameter.TestParameterValuesProvider.html),
  except that `provideValues()` was changed to `provideValues(Context)` where
  [`Context`](
  https://google.github.io/TestParameterInjector/docs/latest/com/google/testing/junit/testparameterinjector/TestParameterValuesProvider.Context.html)
  contains the test class and the other annotations. This allows for more generic
  providers that take into account custom annotations with extra data, or the
  implementation of abstract methods on a base test class.

  Example usage:

```java
import com.google.testing.junit.testparameterinjector.TestParameterValuesProvider;

private static final class MyProvider extends TestParameterValuesProvider {
  @Override
  public List<?> provideValues(Context context) throws Exception {
    var testInstance = context.testClass().getDeclaredConstructor().newInstance();
    var fooList = ((MyBaseTestClass) testInstance).getFooList();
    // ...

    // OR

    var fooList = context.getOtherAnnotation(MyCustomAnnotation.class).fooList();
    // ...
  }
}
```

- Fixed some theoretical non-determinism that could arise from Java reflection
  methods

## 1.14

- Fixed multiple constructors error when this library is used with Powermock.
  See https://github.com/google/TestParameterInjector/issues/40.

## 1.13

- Add support for setting a custom name for a `@TestParameter` value given via a provider: 

```java
private static final class FruitProvider implements TestParameterValuesProvider {
  @Override
  public List<?> provideValues() {
    return ImmutableList.of(
        value(new Apple()).withName("apple"),
        value(new Banana()).withName("banana"));
  }
}
```

- Add support for `BigInteger` and `UnsignedLong`
- JUnit4: Fix for interrupted test cases causing random failures with thread
  reuse (porting [the earlier fix in
  JUnit4](https://github.com/junit-team/junit4/issues/1365)) 

## 1.12

- Tweak to the test name generation: Show the parameter name if its value is potentially
  ambiguous (e.g. null, "" or "123").
- Made `TestParametersValues.name()` optional. If missing, a name will be generated.

## 1.11

- Replaced deprecated call to org.yaml.snakeyaml.constructor.SafeConstructor

## 1.10

- Removed dependency on `protobuf-javalite` (see
  [issue #24](https://github.com/google/TestParameterInjector/issues/24))

## 1.9

- Bugfix: Support explicit ordering by the JUnit4 `@Rule`. For example: `@Rule(ordering=3)`.
- Potential test name change: Test names are no longer dependent on the locale of the machine
  running it (e.g. doubles with integer values are always formatted with a trailing `.0`)

## 1.8

- Add support for JUnit5 (Jupiter)

## 1.7

- Remove `TestParameterInjector` support for `org.junit.runners.Parameterized`,
  which was undocumented and thus unlikely to be used.

## 1.6

- Bugfixes
- Better documentation

## 1.5

- `@TestParameters` can now also be used as a repeated annotation:

```java
// Newly added and recommended for new code
@Test
@TestParameters("{age: 17, expectIsAdult: false}")
@TestParameters("{age: 22, expectIsAdult: true}")
public void withRepeatedAnnotation(int age, boolean expectIsAdult){...}

// The old way of using @TestParameters is still supported
@Test
@TestParameters({
    "{age: 17, expectIsAdult: false}",
    "{age: 22, expectIsAdult: true}",
})
public void withSingleAnnotation(int age, boolean expectIsAdult){...}
```

- `@TestParameters` supports setting a custom test name:

```java
@Test
@TestParameters(customName = "teenager", value = "{age: 17, expectIsAdult: false}")
@TestParameters(customName = "young adult", value = "{age: 22, expectIsAdult: true}")
public void personIsAdult(int age, boolean expectIsAdult){...}
```

- Test names with very long parameter strings are abbreviated differentily: In
  some cases, more characters are allowed.

## 1.4

- Bugfix: Run test methods declared in a base class (instead of throwing an
  exception)
- Test names with very long parameter strings are now abbreviated with a snippet
  of the shortened parameter
- Duplicate test names are given a suffix for deduplication
- Replaced dependency on `protobuf-java` by a dependency on `protobuf-javalite`

## 1.3

- Treat 'null' as a magic string that results in a null value

## 1.2

- Don't use the parameter name if it's not explicitly provided by the compiler
- Add support for older Android SDK versions by removing the dependency on
  `j.l.r.Parameter`. The minimum Android SDK version is now 24.

## 1.1

- Add support for `ByteString` and `byte[]`
