package com.thoughtworks.gauge.execution.parameters;
import static com.thoughtworks.gauge.execution.ParameterTestHelpers.aParameter;
import static com.thoughtworks.gauge.test.Matchers.asList;
import static com.thoughtworks.gauge.test.Matchers.containsOnly;
import static com.thoughtworks.gauge.test.TestHelpers.array;
import static com.thoughtworks.gauge.test.TestValues.ANY_TYPE;
import static com.thoughtworks.gauge.test.TestValues.SPECIFIC_VALUE;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import com.thoughtworks.gauge.execution.parameters.parsers.base.ParameterParser;
import gauge.messages.Spec.Parameter;
@RunWith(MockitoJUnitRunner.class)
public class ParametersExtractorTest {
private static final Object[] EMPTY = array();
private static final Class<?>[] NO_PARAMETER_TYPES = array();
private static final List<Parameter> NO_PARAMETERS = emptyList();
private static final Object ANOTHER_SPECIFIC_VALUE = new Object();
@InjectMocks
private ParametersExtractor parametersExtractor;
@Mock
private ParameterParser parameterParser;
@Test
public void whenExtractNoParametersThenNoParametersReturned() throws Exception {
assertThat(parametersExtractor.extract(NO_PARAMETERS, NO_PARAMETER_TYPES), is(EMPTY));
}
@Test
public void whenExtractNullThenNoParametersReturned() throws Exception {
assertThat(parametersExtractor.extract(null, NO_PARAMETER_TYPES), is(EMPTY));
}
@Test
@SuppressWarnings("unchecked")
public void whenExtractAParameterThenTheParameterIsParsed() throws Exception {
parametersExtractor.extract(asList(aParameter()), array(ANY_TYPE));
verify(parameterParser).parse(ANY_TYPE, aParameter());
}
@Test
@SuppressWarnings("unchecked")
public void whenExtractAParameterThenTheParsedParameterIsReturned() throws Exception {
when(parameterParser.parse(ANY_TYPE, aParameter())).thenReturn(SPECIFIC_VALUE);
assertThat(parametersExtractor.extract(singletonList(aParameter()), array(ANY_TYPE)),
asList(containsOnly(sameInstance(SPECIFIC_VALUE))));
}
@Test
@SuppressWarnings("unchecked")
public void whenExtractMultipleParametersThenTheParsedParametersAreReturned() throws Exception {
when(parameterParser.parse(ANY_TYPE, aParameter())).thenReturn(SPECIFIC_VALUE, ANOTHER_SPECIFIC_VALUE);
assertThat(parametersExtractor.extract(asList(aParameter(), aParameter()), array(ANY_TYPE, ANY_TYPE)),
asList(containsOnly(sameInstance(SPECIFIC_VALUE), sameInstance(ANOTHER_SPECIFIC_VALUE))));
}
}