package org.magenta.core;
import static com.google.common.base.Predicates.containsPattern;
import static com.google.common.base.Predicates.equalTo;
import static com.google.common.base.Predicates.or;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertFalse;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import org.magenta.DataSet;
import org.magenta.random.FluentRandom;
import com.google.common.base.Functions;
import com.google.common.base.Predicate;
import com.google.common.base.Suppliers;
public class GenericDataSetTest {
@Test
public void testConstructor_with_iterable(){
//setup fixtures
List<Integer> expectedData=Arrays.asList(1,3,5);
Class<Integer> expectedType=Integer.class;
FluentRandom expectedRandomizer=FluentRandom.singleton();
GenericDataSet<Integer> sut=new GenericDataSet<>(Arrays.asList(1,3,5), expectedType, expectedRandomizer);
//exercise sut
sut.toString();
sut.hashCode();
//verify outcome
assertThat(sut.isGenerated()).overridingErrorMessage("Expecting the <%s> to be not generated as it should always be the case", sut.toString()).isFalse();
assertThat(sut.list()).isEqualTo(expectedData);
assertThat(sut.getType()).isEqualTo(expectedType);
assertThat(sut.getRandomizer()).isEqualTo(expectedRandomizer);
}
@Test
public void testEmpty() {
// setup fixtures
GenericDataSet<String> sut = new GenericDataSet<>(Collections.EMPTY_LIST, String.class,FluentRandom.singleton());
// exercise sut
boolean actual = sut.isEmpty();
// verify outcome
assertThat(actual).isTrue();
}
@Test
public void testEmpty_after_filtering() {
// setup fixtures
GenericDataSet<String> sut = Fixtures.createDataSetOf("1","2","3");
// exercise sut
boolean actual = sut.filter(containsPattern("5")).isEmpty();
// verify outcome
assertThat(actual).isTrue();
}
@Test
public void testList() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
// exercise sut
List<String> actual = sut.list();
// verify outcome
assertThat(actual).containsSequence(element1, element2, element3);
}
@Test
public void testList_with_size() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
int expectedSize = 2;
// exercise sut
List<String> actual = sut.list(expectedSize);
// verify outcome
assertThat(actual).containsExactly(element1, element2);
}
@Test
public void testRandomList() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
// exercise sut
List<String> actual = sut.randomList();
// verify outcome
assertThat(actual).contains(element1, element2, element3);
}
@Test
public void testRandomList_with_size() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
int expectedSize = 2;
// exercise sut
List<String> actual = sut.randomList(expectedSize);
// verify outcome
assertThat(actual).hasSize(expectedSize);
}
@Test
public void testArray() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
// exercise sut
String[] actual = sut.array();
// verify outcome
assertThat(actual).containsSequence(element1, element2, element3);
}
@Test
public void testArray_with_size() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
int expectedSize = 2;
// exercise sut
String[] actual = sut.array(expectedSize);
// verify outcome
assertThat(actual).containsExactly(element1, element2);
}
@Test
public void testRandomArray() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
// exercise sut
String[] actual = sut.randomArray();
// verify outcome
assertThat(actual).contains(element1, element2, element3);
}
@Test
public void testRandomArray_with_size() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
int expectedSize = 2;
// exercise sut
String[] actual = sut.randomArray(expectedSize);
// verify outcome
assertThat(actual).hasSize(expectedSize);
}
@Test
public void testSet() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
// exercise sut
Set<String> actual = sut.set();
// verify outcome
assertThat(actual).contains(element1, element2, element3).hasSize(3);
}
@Test
public void testSet_with_size() {
// setup fixtures
String element1 = "an element";
String element2 = "other element";
String element3 = "yet another element";
GenericDataSet<String> sut = Fixtures.createDataSetOf(element1, element2, element3);
int expected = 1;
// exercise sut
Set<String> actual = sut.set(expected);
// verify outcome
assertThat(actual).contains(element1)
.hasSize(expected);
}
@Test
public void testAny() {
// setup fixtures
GenericDataSet<String> sut = Fixtures.createAnonymousDataSet(5);
// exercise sut
String actual = sut.any();
// verify outcome
assertThat(sut.get()).contains(actual);
}
@Test
public void testAny_with_filter() {
// setup fixtures
GenericDataSet<String> sut = Fixtures.createDataSetOf("a","b","c");
Predicate<String> filter=or(equalTo("b"),equalTo("c"));
// exercise sut
String actual = sut.any(filter);
// verify outcome
assertThat(actual).isIn("b","c");
}
@Test
public void testLink() {
// setup fixtures
GenericDataSet<String> sut = Fixtures.createAnonymousDataSet(5);
Object linkedObject = new Object();
String expected = sut.link(linkedObject);
// exercise sut
String actual = sut.link(linkedObject);
// verify outcome
assertThat(actual).isNotNull()
.isEqualTo(expected);
}
@Test
public void testReverseLink() {
// setup fixtures
GenericDataSet<String> sut = Fixtures.createAnonymousDataSet(5);
Integer linkedObject = new Integer(12);
String expected = sut.link(linkedObject);
// link another object, this should not impact the result.
sut.link(new Object());
// exercise sut
Iterable<Integer> actual = sut.reverseLink(Integer.class, expected);
// verify outcome
assertThat(actual).contains(linkedObject);
}
@SuppressWarnings("unchecked")
@Test
public void testEquals() {
// setup fixtures
DataSet<String> ds1 = Fixtures.createAnonymousDataSet(5);
DataSet<String> ds2 = new GenericDataSet<String>(Suppliers.ofInstance(ds1.list()), String.class,FluentRandom.singleton());
// exercise SUT / verify outcome
assertThat(ds1).isEqualTo(ds1);
assertThat(ds1).isEqualTo(ds2);
assertThat(ds2).isEqualTo(ds1);
assertThat(ds1.hashCode()).isEqualTo(ds2.hashCode());
// misc assertions
assertThat(ds1).isNotEqualTo(null);
assertFalse(ds1.equals(new Object()));
}
@SuppressWarnings("unchecked")
@Test
public void testNotEquals() {
// setup fixtures
DataSet<String> ds1 = Fixtures.createAnonymousDataSet(5);
DataSet<String> ds2 = new GenericDataSet<String>(Suppliers.ofInstance(ds1.list(4)), String.class,FluentRandom.singleton());
// exercise SUT / verify outcome
assertThat(ds1).isNotEqualTo(ds2);
assertThat(ds2).isNotEqualTo(ds1);
}
@Test
public void testSubSet() {
// setup fixtures
GenericDataSet<String> sut = Fixtures.createAnonymousDataSet(5);
DataSet<String> expected = new GenericDataSet<String>(Suppliers.ofInstance(sut.list(3)), String.class,FluentRandom.singleton());
// exercise SUT
DataSet<String> actual = sut.subset(3);
// verify outcome
assertThat(actual.list()).containsAll(expected.list());
assertThat(actual).isNotNull()
.isEqualTo(expected);
}
@Test
public void testFilter() {
// setup fixtures
GenericDataSet<String> sut = Fixtures.createDataSetOf("a", "abc", "c", "abcd");
// exercise sut
DataSet<String> filtered = sut.filter(containsPattern("abc"));
// verify outcome
assertThat(filtered.list()).containsExactly("abc", "abcd");
}
@Test
public void testTransform() {
// setup fixtures
GenericDataSet<Integer> sut = Fixtures.createDataSetOf(1, 2, 3, 4, 5);
// exercise sut
DataSet<String> filtered = sut.transform(Functions.toStringFunction(), String.class);
// verify outcome
assertThat(filtered.list()).containsExactly("1", "2", "3", "4", "5");
}
@Test
public void testWithout() {
// setup fixtures
GenericDataSet<Integer> sut = Fixtures.createDataSetOf(1, 2, 3, 4, 5);
// exercise sut
List<Integer> actual = sut.without(2,5).list();
// verify outcome
assertThat(actual).containsOnly(1,3,4);
}
@Test
public void testWithout_with_collection() {
// setup fixtures
GenericDataSet<Integer> sut = Fixtures.createDataSetOf(1, 2, 3, 4, 5);
// exercise sut
List<Integer> actual = sut.without(Arrays.asList(2,5)).list();
// verify outcome
assertThat(actual).containsOnly(1,3,4);
}
@Test
public void testTransformWithWithout() {
// setup fixtures
GenericDataSet<Integer> sut = Fixtures.createDataSetOf(1, 2, 3, 4, 5);
// exercise sut
List<String> actual = sut.transform(Functions.toStringFunction(), String.class).without("2","5").list();
// verify outcome
assertThat(actual).containsOnly("1","3","4");
}
}