package org.smoothbuild.lang.function.def;
import static java.util.Arrays.asList;
import static org.smoothbuild.lang.function.base.Parameter.optionalParameter;
import static org.smoothbuild.lang.function.base.Parameter.requiredParameter;
import static org.smoothbuild.lang.type.Types.BLOB;
import static org.smoothbuild.lang.type.Types.BLOB_ARRAY;
import static org.smoothbuild.lang.type.Types.FILE;
import static org.smoothbuild.lang.type.Types.FILE_ARRAY;
import static org.smoothbuild.lang.type.Types.NIL;
import static org.smoothbuild.lang.type.Types.STRING;
import static org.smoothbuild.lang.type.Types.STRING_ARRAY;
import static org.testory.Testory.given;
import static org.testory.Testory.thenReturned;
import static org.testory.Testory.thenThrown;
import static org.testory.Testory.when;
import static org.testory.common.Matchers.same;
import org.junit.Test;
import org.smoothbuild.lang.function.base.Parameter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
public class ParametersPoolTest {
Parameter parameter;
ParametersPool parametersPool;
// take(Param)
@Test
public void existing_param_can_be_taken_from_pool() {
given(parameter = optionalParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool).take(parameter);
thenReturned(same(parameter));
}
@Test
public void taking_unknown_param_throws_exception() {
given(parametersPool = new ParametersPool(ImmutableList.of()));
when(parametersPool).take(optionalParameter(STRING, "unknownName"));
thenThrown(IllegalArgumentException.class);
}
@Test
public void param_cannot_be_taken_twice_from_pool() {
given(parameter = optionalParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
given(parametersPool).take(parameter);
when(parametersPool).take(parameter);
thenThrown(IllegalArgumentException.class);
}
// take(String)
@Test
public void existing_param_can_be_taken_from_pool_by_name() {
given(parameter = optionalParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool).take(parameter.name());
thenReturned(same(parameter));
}
@Test
public void taking_unknown_param_by_name_throws_exception() {
given(parametersPool = new ParametersPool(ImmutableList.of()));
when(parametersPool).take("unknownName");
thenThrown(IllegalArgumentException.class);
}
@Test
public void param_cannot_be_taken_by_name_twice() {
given(parameter = optionalParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
given(parametersPool).take(parameter.name());
when(parametersPool).take(parameter.name());
thenThrown(IllegalArgumentException.class);
}
// assignableFrom()
@Test
public void optional_string_param_is_available_in_optional_set_of_string_pool() throws Exception {
given(parameter = optionalParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(STRING)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_string_param_is_available_in_required_set_of_string_pool() throws Exception {
given(parameter = requiredParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(STRING)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_blob_param_is_available_in_optional_set_of_blob_pool() throws Exception {
given(parameter = optionalParameter(BLOB, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(BLOB)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_blob_param_is_available_in_required_set_of_blob_pool() throws Exception {
given(parameter = requiredParameter(BLOB, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(BLOB)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_blob_param_is_available_in_optional_set_of_file_pool() throws Exception {
given(parameter = optionalParameter(BLOB, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_blob_param_is_available_in_required_set_of_file_pool() throws Exception {
given(parameter = requiredParameter(BLOB, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_file_param_is_available_in_optional_set_of_file_pool() throws Exception {
given(parameter = optionalParameter(FILE, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_file_param_is_available_in_required_set_of_file_pool() throws Exception {
given(parameter = requiredParameter(FILE, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_string_array_param_is_available_in_optional_set_of_string_array_pool()
throws Exception {
given(parameter = optionalParameter(STRING_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(STRING_ARRAY)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_string_array_param_is_available_in_required_set_of_string_array_pool()
throws Exception {
given(parameter = requiredParameter(STRING_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(STRING_ARRAY)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_blob_array_param_is_available_in_optional_set_of_blob_array_pool()
throws Exception {
given(parameter = optionalParameter(BLOB_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(BLOB_ARRAY)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_blob_array_param_is_available_in_required_set_of_blob_array_pool()
throws Exception {
given(parameter = requiredParameter(BLOB_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(BLOB_ARRAY)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_blob_array_param_is_available_in_optional_set_of_file_array_pool()
throws Exception {
given(parameter = optionalParameter(BLOB_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE_ARRAY)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_blob_array_param_is_available_in_required_set_of_file_array_pool()
throws Exception {
given(parameter = requiredParameter(BLOB_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE_ARRAY)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_file_array_param_is_available_in_optional_set_of_file_array_pool()
throws Exception {
given(parameter = optionalParameter(FILE_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE_ARRAY)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_file_array_param_is_available_in_required_set_of_file_array_pool()
throws Exception {
given(parameter = requiredParameter(FILE_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(FILE_ARRAY)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_string_array_param_is_available_in_optional_set_of_nil_pool()
throws Exception {
given(parameter = optionalParameter(STRING_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(NIL)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_string_array_param_is_available_in_required_set_of_nil_pool()
throws Exception {
given(parameter = requiredParameter(STRING_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(NIL)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_blob_array_param_is_available_in_optional_set_of_nil_pool()
throws Exception {
given(parameter = optionalParameter(BLOB_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(NIL)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_blob_array_param_is_available_in_required_set_of_nil_pool()
throws Exception {
given(parameter = requiredParameter(BLOB_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(NIL)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void optional_file_array_param_is_available_in_optional_set_of_nil_pool()
throws Exception {
given(parameter = optionalParameter(FILE_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(NIL)).optionalParameters();
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void required_file_array_param_is_available_in_required_set_of_nil_pool()
throws Exception {
given(parameter = requiredParameter(FILE_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.assignableFrom(NIL)).requiredParameters();
thenReturned(ImmutableSet.of(parameter));
}
// allRequired()
@Test
public void available_required_params_contains_required_string_param() throws Exception {
given(parameter = requiredParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allRequired());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void available_required_params_contains_required_blob_param() throws Exception {
given(parameter = requiredParameter(BLOB, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allRequired());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void available_required_params_contains_required_file_param() throws Exception {
given(parameter = requiredParameter(FILE, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allRequired());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void available_required_params_contains_required_string_array_param() throws Exception {
given(parameter = requiredParameter(STRING_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allRequired());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void available_required_params_does_not_contain_taken_param() throws Exception {
given(parameter = requiredParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
given(parametersPool.take(parameter));
when(parametersPool.allRequired());
thenReturned(ImmutableSet.<Parameter> of());
}
// allOptional()
@Test
public void all_optional_params_contains_optional_string_param() throws Exception {
given(parameter = optionalParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allOptional());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void all_optional_params_contains_required_blob_param() throws Exception {
given(parameter = optionalParameter(BLOB, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allOptional());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void all_optional_params_contains_required_file_param() throws Exception {
given(parameter = optionalParameter(FILE, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allOptional());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void all_optional_params_contains_required_string_array_param() throws Exception {
given(parameter = optionalParameter(STRING_ARRAY, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
when(parametersPool.allOptional());
thenReturned(ImmutableSet.of(parameter));
}
@Test
public void all_optional_params_does_not_contain_taken_param() throws Exception {
given(parameter = optionalParameter(STRING, "NAME"));
given(parametersPool = new ParametersPool(asList(parameter)));
given(parametersPool.take(parameter));
when(parametersPool.allOptional());
thenReturned(ImmutableSet.<Parameter> of());
}
}