Skip to content

Commit

Permalink
Small improvements and documentation following PR #3085
Browse files Browse the repository at this point in the history
  • Loading branch information
juliette-derancourt committed Nov 14, 2022
1 parent 078661e commit 535cf61
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ repository on GitHub.

==== New Features and Improvements

* New `ArgumentsAccessor.getInvocationIndex` method to supply index of a `@ParameterizedTest` invocation.
* New `ArgumentsAccessor.getInvocationIndex()` method that supplies the index of a
`@ParameterizedTest` invocation.


[[release-notes-5.10.0-M1-junit-vintage]]
Expand Down
3 changes: 3 additions & 0 deletions documentation/src/docs/asciidoc/user-guide/writing-tests.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1769,6 +1769,9 @@ this API, you can access the provided arguments through a single argument passed
test method. In addition, type conversion is supported as discussed in
<<writing-tests-parameterized-tests-argument-conversion-implicit>>.

Besides, you can retrieve the current test invocation index with
`ArgumentsAccessor.getInvocationIndex()`.

[source,java,indent=0]
----
include::{testDir}/example/ParameterizedTestDemo.java[tags=ArgumentsAccessor_example]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,9 @@ Resolver createResolver(ParameterContext parameterContext) {
}

interface Resolver {

Object resolve(ParameterContext parameterContext, Object[] arguments, int invocationIndex);

}

static class Converter implements Resolver {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,14 @@
@API(status = INTERNAL, since = "5.2")
public class DefaultArgumentsAccessor implements ArgumentsAccessor {

private final Object[] arguments;
private final int invocationIndex;
private final Object[] arguments;

public DefaultArgumentsAccessor(int invocationIndex, Object... arguments) {
Preconditions.condition(invocationIndex >= 1, () -> "invocation index must be >= 1");
Preconditions.notNull(arguments, "Arguments array must not be null");
this.arguments = arguments;
this.invocationIndex = invocationIndex;
this.arguments = arguments;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,20 @@ void reportsExceptionForErroneousAggregator() {
message("Error aggregating arguments for parameter at index 0: something went horribly wrong"))));
}

@ParameterizedTest
@CsvSource({ //
"first", //
"second" //
})
void argumentsAccessorInvocationIndex(ArgumentsAccessor arguments) {
if ("first".equals(arguments.getString(0))) {
assertEquals(1, arguments.getInvocationIndex());
}
if ("second".equals(arguments.getString(0))) {
assertEquals(2, arguments.getInvocationIndex());
}
}

private void testPersonAggregator(Person person) {
if (person.firstName.equals("Jane")) {
assertEquals("Jane Doe", person.getFullName());
Expand All @@ -208,17 +222,6 @@ private EngineExecutionResults execute(DiscoverySelector... selectors) {
return EngineTestKit.execute("junit-jupiter", request().selectors(selectors).build());
}

@ParameterizedTest
@CsvSource({ "first", "second" })
void argumentsAccessorInvocationIndex(ArgumentsAccessor arguments) {
if ("first".equals(arguments.getString(0))) {
assertEquals(1, arguments.getInvocationIndex());
}
if ("second".equals(arguments.getString(0))) {
assertEquals(2, arguments.getInvocationIndex());
}
}

// -------------------------------------------------------------------------

public static class Person {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ class ArgumentsAccessorKotlinTests {

@Test
fun `get() with reified type and index`() {
assertEquals(1, DefaultArgumentsAccessor(0, 1).get<Int>(0))
assertEquals('A', DefaultArgumentsAccessor(0, 'A').get<Char>(0))
assertEquals(1, DefaultArgumentsAccessor(1, 1).get<Int>(0))
assertEquals('A', DefaultArgumentsAccessor(1, 'A').get<Char>(0))
}

@Test
fun `get() with reified type and index for incompatible type`() {
val exception = assertThrows<ArgumentAccessException> {
DefaultArgumentsAccessor(0, Integer.valueOf(1)).get<Char>(0)
DefaultArgumentsAccessor(1, Integer.valueOf(1)).get<Char>(0)
}

assertThat(exception).hasMessage(
Expand All @@ -38,13 +38,13 @@ class ArgumentsAccessorKotlinTests {

@Test
fun `get() with index`() {
assertEquals(1, DefaultArgumentsAccessor(0, 1).get(0))
assertEquals('A', DefaultArgumentsAccessor(0, 'A').get(0))
assertEquals(1, DefaultArgumentsAccessor(1, 1).get(0))
assertEquals('A', DefaultArgumentsAccessor(1, 'A').get(0))
}

@Test
fun `get() with index and class reference`() {
assertEquals(1, DefaultArgumentsAccessor(0, 1).get(0, Integer::class.java))
assertEquals('A', DefaultArgumentsAccessor(0, 'A').get(0, Character::class.java))
assertEquals(1, DefaultArgumentsAccessor(1, 1).get(0, Integer::class.java))
assertEquals('A', DefaultArgumentsAccessor(1, 'A').get(0, Character::class.java))
}
}

0 comments on commit 535cf61

Please sign in to comment.