/*
* Copyright 2015-2017 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.junit.jupiter.params.provider;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
/**
* @since 5.0
*/
class CsvArgumentsProviderTests {
@Test
void providesSingleArgument() {
Stream<Object[]> arguments = provideArguments(',', "foo");
assertThat(arguments).containsExactly(new String[] { "foo" });
}
@Test
void providesMultipleArguments() {
Stream<Object[]> arguments = provideArguments(',', "foo", "bar");
assertThat(arguments).containsExactly(new String[] { "foo" }, new String[] { "bar" });
}
@Test
void splitsAndTrimsArguments() {
Stream<Object[]> arguments = provideArguments('|', " foo | bar ");
assertThat(arguments).containsExactly(new String[] { "foo", "bar" });
}
@Test
void understandsQuotes() {
Stream<Object[]> arguments = provideArguments(',', "'foo, bar'");
assertThat(arguments).containsExactly(new String[] { "foo, bar" });
}
@Test
void understandsEscapeCharacters() {
Stream<Object[]> arguments = provideArguments(',', "'foo or ''bar''', baz");
assertThat(arguments).containsExactly(new String[] { "foo or 'bar'", "baz" });
}
private Stream<Object[]> provideArguments(char delimiter, String... value) {
CsvSource annotation = mock(CsvSource.class);
when(annotation.value()).thenReturn(value);
when(annotation.delimiter()).thenReturn(delimiter);
CsvArgumentsProvider provider = new CsvArgumentsProvider();
provider.accept(annotation);
return provider.provideArguments(null).map(Arguments::get);
}
}