package org.smoothbuild.lang.function.base;
import static org.hamcrest.Matchers.not;
import static org.smoothbuild.lang.function.base.Parameter.optionalParameter;
import static org.smoothbuild.lang.function.base.Parameter.parameter;
import static org.smoothbuild.lang.function.base.Parameter.parametersToString;
import static org.smoothbuild.lang.function.base.Parameter.requiredParameter;
import static org.smoothbuild.lang.type.Types.BLOB;
import static org.smoothbuild.lang.type.Types.FILE_ARRAY;
import static org.smoothbuild.lang.type.Types.STRING;
import static org.testory.Testory.given;
import static org.testory.Testory.thenEqual;
import static org.testory.Testory.thenReturned;
import static org.testory.Testory.when;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.smoothbuild.lang.type.Type;
import org.smoothbuild.lang.type.Types;
import com.google.common.testing.EqualsTester;
public class ParameterTest {
private Parameter parameter;
@Test
public void optional_parameter_creates_optional_parameter() throws Exception {
given(parameter = optionalParameter(STRING, "name"));
when(parameter).isRequired();
thenReturned(false);
}
@Test
public void required_parameter_creates_required_parameter() throws Exception {
given(parameter = requiredParameter(STRING, "name"));
when(parameter).isRequired();
thenReturned(true);
}
@Test(expected = NullPointerException.class)
public void null_type_is_forbidden() {
parameter(null, "name", true);
}
@Test(expected = NullPointerException.class)
public void null_name_is_forbidden() {
parameter(STRING, null, true);
}
@Test
public void getters() {
when(parameter = parameter(STRING, "name", true));
thenEqual(parameter.type(), STRING);
thenEqual(parameter.name(), "name");
thenEqual(parameter.isRequired(), true);
}
@Test
public void params_with_different_names_have_different_name_hashes() {
when(parameter(STRING, "name1", true).nameHash());
thenReturned(not(parameter(STRING, "name2", true).nameHash()));
}
@Test
public void params_with_same_names_but_different_types_have_the_same_name_hashes() {
when(parameter(STRING, "name1", true).nameHash());
thenReturned(parameter(BLOB, "name1", true).nameHash());
}
@Test
public void equals_and_hash_code() {
EqualsTester tester = new EqualsTester();
tester.addEqualityGroup(parameter(STRING, "equal", false), parameter(STRING, "equal", false));
for (Type type : Types.allTypes()) {
tester.addEqualityGroup(parameter(type, "name", false));
tester.addEqualityGroup(parameter(type, "name", true));
tester.addEqualityGroup(parameter(type, "name2", false));
tester.addEqualityGroup(parameter(type, "name2", true));
}
tester.testEquals();
}
@Test
public void to_padded_string() {
given(parameter = parameter(STRING, "myName", false));
when(parameter.toPaddedString(10, 13));
thenReturned("String : myName ");
}
@Test
public void to_padded_string_for_short_limits() {
given(parameter = parameter(STRING, "myName", false));
when(parameter.toPaddedString(1, 1));
thenReturned("String: myName");
}
@Test
public void to_string() {
given(parameter = parameter(STRING, "name", false));
when(parameter.toString());
thenReturned("Param(String: name)");
}
@Test
public void params_to_string() {
List<Parameter> parameters = new ArrayList<>();
parameters.add(parameter(STRING, "param1", false));
parameters.add(parameter(STRING, "param2-with-very-long", false));
parameters.add(parameter(FILE_ARRAY, "param3", true));
when(parametersToString(parameters));
thenReturned("" //
+ " String: param1 \n" //
+ " String: param2-with-very-long\n" //
+ " File[]: param3 \n" //
);
}
}