package org.magenta; import static org.assertj.core.api.Assertions.assertThat; import static org.magenta.testing.MagentaAssertions.assertThat; import java.util.Arrays; import java.util.Random; import java.util.Set; import org.junit.Test; import org.magenta.core.GenericDataSet; import org.magenta.random.FluentRandom; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.base.Predicate; public class DataDomainManagerNewDataSetFromCompositionTest extends FixtureFactoryTestSupport{ @Test public void testConstructorAndGetter(){ //setup fixtures SimpleDataSpecification specification = SimpleDataSpecification.create(); FluentRandom randomizer = FluentRandom.get(new Random()); String expectedName = "DataDomainSingleNodeTest"; //exercise sut Fixture<SimpleDataSpecification> domain = FixtureFactory.newRoot(expectedName, specification, randomizer); //verify outcome assertThat(domain).hasName(expectedName) .hasSpecification(specification) .hasRandomizer(randomizer); //the rest should be null or empty assertThat(domain.getParent()).isNull(); assertThat(domain.datasets()).isEmpty(); assertThat(domain.datasetKeys()).isEmpty(); assertThat(domain.strategies()).isEmpty(); assertThat(domain.strategyKeys()).isEmpty(); } /** * A {@link Fixture} must throw a {@link DataSetNotFoundException} if the requested dataset is not found. */ @Test(expected = DataSetNotFoundException.class) public void testThrowNotFoundException(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); DataSet<String> colors = domain.newDataSet(String.class).composedOf("red","blue","green"); //exercise sut //should throw exception has there are no dataset of type integer domain.dataset(Integer.class); } @Test public void testNewDataSet(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); DataKey<String> colorKey = DataKey.makeDefault(String.class); //exercise sut DataSet<String> colors = domain.newDataSet(String.class).composedOf("red","blue","green"); DataSet<String> sameColors = domain.dataset(String.class); DataSet<String> stillSameColors = domain.dataset(colorKey); Set<DataKey<?>> actualKeys = domain.datasetKeys(); Iterable<DataSet<?>> actualDataSets = domain.datasets(); //verify outcome assertThat(colors).isNotNull().isEqualTo(sameColors).isEqualTo(stillSameColors); assertThat(colors.list()).containsExactly("red","blue","green"); assertThat(actualKeys).containsOnly(colorKey); assertThat(actualDataSets).containsOnly(colors); } @Test public void testNewDataSet_ComposedOf_varargs(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); //exercise sut DataSet<String> colors = domain.newDataSet(String.class).composedOf("red","blue","green"); DataSet<Integer> primes = domain.newDataSet(Integer.class).composedOf(2,3,5,7,11); //verify outcome assertThat(domain).theDataSet(String.class) .isNotNull() .containsExactly("red", "blue", "green") .isEqualTo(colors); assertThat(domain) .theDataSet(Integer.class) .isNotNull() .containsExactly(2, 3, 5, 7, 11) .isEqualTo(primes); } @Test public void testNewDataSet_ComposedOf_iterable(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); //exercise sut DataSet<String> colors = domain.newDataSet(String.class).composedOf(Arrays.asList("red","blue","green")); DataSet<Integer> primes = domain.newDataSet(Integer.class).composedOf(Arrays.asList(2,3,5,7,11)); //verify outcome //verify outcome assertThat(domain).theDataSet(String.class) .isNotNull() .containsExactly("red", "blue", "green") .isEqualTo(colors); assertThat(domain) .theDataSet(Integer.class) .isNotNull() .containsExactly(2, 3, 5, 7, 11) .isEqualTo(primes); } @Test public void testNewDataSet_ComposedOf_dataset(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); DataSet<String> expectedColors = new GenericDataSet<>(Arrays.asList("red","blue","green"), String.class, domain.getRandomizer()); //exercise sut DataSet<String> colors = domain.newDataSet(String.class).composedOf(expectedColors); //verify outcome assertThat(domain).theDataSet(String.class) .isNotNull() .isEqualTo(expectedColors) .isEqualTo(colors); } @Test public void testNewDataSet_ComposedOf_override(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); //exercise sut DataSet<String> colors = domain.newDataSet(String.class).composedOf("red","blue","green"); DataSet<String> overridedColors = domain.newDataSet(String.class).composedOf("cyan","yellow","magenta"); //verify outcome assertThat(domain).theDataSet(String.class) .isNotNull() .isNotEqualTo(colors) .containsExactly("cyan","yellow","magenta") .isEqualTo(overridedColors); } @Test public void testNewDataSet_ComposedOf_transform(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); //exercise sut DataSet<String> numberInString = domain.newDataSet(String.class) .transformed(Functions.toStringFunction()) .composedOf(1, 2, 3); //verify outcome assertThat(domain).theDataSet(String.class) .isNotNull() .isEqualTo(numberInString) .containsExactly("1","2","3"); } @Test public void testNewDataSet_ComposedOf_filter(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); Predicate<Integer> isPositive = new Predicate<Integer>(){ @Override public boolean apply(Integer input) { return input.intValue()>=0; } }; //exercise sut DataSet<Integer> positiveNumbers = domain.newDataSet(Integer.class) .filtered(isPositive) .composedOf(-3,-2,-1,0,1, 2, 3); //verify outcome assertThat(domain).theDataSet(Integer.class) .isNotNull() .isEqualTo(positiveNumbers) .containsExactly(0,1, 2, 3); } @Test public void testNewDataSet_ComposedOf_filter_and_transform(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); Predicate<Integer> isPositive = new Predicate<Integer>(){ @Override public boolean apply(Integer input) { return input.intValue()>=0; } }; //shh shh Function<Integer,String> integerToString=(Function)Functions.toStringFunction(); //exercise sut DataSet<String> positiveNumbers = domain.newDataSet(String.class) .transformed(integerToString) .filtered(isPositive) .composedOf(-3,-2,-1,0,1, 2, 3); //verify outcome assertThat(domain).theDataSet(String.class) .isNotNull() .isEqualTo(positiveNumbers) .containsExactly("0","1", "2", "3"); } @Test public void testNewDataSet_ComposedOf_transform_chain(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); Function<Integer,Integer> multiplyByTwo = new Function<Integer,Integer>(){ @Override public Integer apply(Integer input) { return input.intValue()*2; } }; //exercise sut DataSet<String> doubleNumbers = domain.newDataSet(String.class) .transformed(Functions.toStringFunction()) .transformed(multiplyByTwo) .composedOf(1, 2, 3); //verify outcome assertThat(domain).theDataSet(String.class) .isNotNull() .isEqualTo(doubleNumbers) .containsExactly("2","4","6"); } @Test public void testRemove(){ //setup fixtures FixtureFactory<SimpleDataSpecification> domain = createAnonymousFixtureFactory(); DataSet<String> colors = domain.newDataSet(String.class).composedOf("red","blue","green"); //exercise sut DataSet<String> actual = domain.remove(String.class); //verify outcome assertThat(domain).doesNotContainDatasetFor(String.class); assertThat(actual).isEqualTo(colors); } }