package org.smoothbuild.task.base;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.not;
import static org.smoothbuild.db.values.ValuesDb.memoryValuesDb;
import static org.testory.Testory.given;
import static org.testory.Testory.mock;
import static org.testory.Testory.thenReturned;
import static org.testory.Testory.when;
import static org.testory.Testory.willReturn;
import org.junit.Test;
import org.smoothbuild.db.values.ValuesDb;
import org.smoothbuild.lang.value.SString;
public class InputTest {
private Task depTask1;
private Task depTask2;
private Input input;
private Input input2;
private final ValuesDb valuesDb = memoryValuesDb();
private SString sstring1;
private SString sstring2;
@Test
public void input_takes_values_from_dependency_tasks() {
given(depTask1 = mock(Task.class));
given(sstring1 = valuesDb.string("abc"));
given(willReturn(new Output(sstring1)), depTask1).output();
given(input = Input.fromResults(asList(depTask1)));
when(input).values();
thenReturned(contains(sstring1));
}
@Test
public void different_inputs_have_different_hashes() throws Exception {
given(depTask1 = mock(Task.class));
given(depTask2 = mock(Task.class));
given(sstring1 = valuesDb.string("abc"));
given(sstring2 = valuesDb.string("def"));
given(willReturn(new Output(sstring1)), depTask1).output();
given(willReturn(new Output(sstring2)), depTask2).output();
given(input = Input.fromResults(asList(depTask1)));
given(input2 = Input.fromResults(asList(depTask2)));
when(input).hash();
thenReturned(not(input2.hash()));
}
@Test
public void inputs_with_same_values_but_in_different_order_have_different_hashes()
throws Exception {
given(depTask1 = mock(Task.class));
given(depTask2 = mock(Task.class));
given(sstring1 = valuesDb.string("abc"));
given(sstring2 = valuesDb.string("def"));
given(willReturn(new Output(sstring1)), depTask1).output();
given(willReturn(new Output(sstring2)), depTask2).output();
given(input = Input.fromResults(asList(depTask1, depTask2)));
given(input2 = Input.fromResults(asList(depTask2, depTask1)));
when(input).hash();
thenReturned(not(input2.hash()));
}
@Test
public void equal_inputs_have_equal_hashes() throws Exception {
given(depTask1 = mock(Task.class));
given(depTask2 = mock(Task.class));
given(sstring1 = valuesDb.string("abc"));
given(willReturn(new Output(sstring1)), depTask1).output();
given(willReturn(new Output(sstring1)), depTask2).output();
given(input = Input.fromResults(asList(depTask1)));
given(input2 = Input.fromResults(asList(depTask2)));
when(input).hash();
thenReturned(input2.hash());
}
@Test
public void input_with_no_values_has_hash_different_from_input_with_one_value() throws Exception {
given(depTask1 = mock(Task.class));
given(depTask2 = mock(Task.class));
given(sstring1 = valuesDb.string("abc"));
given(willReturn(new Output(sstring1)), depTask1).output();
given(input = Input.fromResults(asList(depTask1)));
given(input2 = Input.fromResults(asList()));
when(input).hash();
thenReturned(not(input2.hash()));
}
}