/*
* Copyright 2016 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.terasology.rendering.dag;
import com.google.common.collect.Lists;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class RenderTaskListGeneratorTest {
@Test
public void testSimpleReducePersistingStateChanges() {
RenderTaskListGenerator renderTaskListGenerator = new RenderTaskListGenerator();
List<Node> orderedNodes = Lists.newArrayList();
orderedNodes.add(initialiseNode(new AlphaNode()));
orderedNodes.add(initialiseNode(new BravoNode()));
orderedNodes.add(initialiseNode(new CharlieNode()));
List<RenderPipelineTask> taskList = renderTaskListGenerator.generateFrom(orderedNodes);
assertEquals("----- AlphaNode", taskList.get(0).toString().trim()); // Strictly speaking we don't need
assertEquals("SetNameTask: foo", taskList.get(1).toString().trim()); // trimming MarkerTask.toString(),
assertEquals("AlphaNode: process()", taskList.get(2).toString().trim()); // resulting in "----- <NodeName>"
assertEquals("----- BravoNode", taskList.get(3).toString().trim()); // We just do it to avoid attracting
assertEquals("BravoNode: process()", taskList.get(4).toString().trim()); // too much attention to it.
assertEquals("----- CharlieNode", taskList.get(5).toString().trim());
assertEquals("CharlieNode: process()", taskList.get(6).toString().trim());
assertEquals("SetNameTask: bar", taskList.get(7).toString().trim());
}
@Test
public void testReducePersistingStateChanges() {
RenderTaskListGenerator renderTaskListGenerator = new RenderTaskListGenerator();
List<Node> orderedNodes = Lists.newArrayList();
orderedNodes.add(initialiseNode(new AlphaNode()));
orderedNodes.add(initialiseNode(new BravoNode()));
orderedNodes.add(initialiseNode(new CharlieNode()));
orderedNodes.add(initialiseNode(new DeltaNode()));
List<RenderPipelineTask> taskList = renderTaskListGenerator.generateFrom(orderedNodes);
assertEquals("----- AlphaNode", taskList.get(0).toString().trim());
assertEquals("SetNameTask: foo", taskList.get(1).toString().trim());
assertEquals("AlphaNode: process()", taskList.get(2).toString().trim());
assertEquals("----- BravoNode", taskList.get(3).toString().trim());
assertEquals("BravoNode: process()", taskList.get(4).toString().trim());
assertEquals("----- CharlieNode", taskList.get(5).toString().trim());
assertEquals("CharlieNode: process()", taskList.get(6).toString().trim());
assertEquals("----- DeltaNode", taskList.get(7).toString().trim());
assertEquals("SetNameTask: delta", taskList.get(8).toString().trim());
assertEquals("DeltaNode: process()", taskList.get(9).toString().trim());
assertEquals("SetNameTask: bar", taskList.get(10).toString().trim());
}
@Test
public void testReducePersistingStateChangesEcho() {
RenderTaskListGenerator renderTaskListGenerator = new RenderTaskListGenerator();
List<Node> orderedNodes = Lists.newArrayList();
orderedNodes.add(initialiseNode(new AlphaNode()));
orderedNodes.add(initialiseNode(new BravoNode()));
orderedNodes.add(initialiseNode(new EchoNode()));
orderedNodes.add(initialiseNode(new CharlieNode()));
orderedNodes.add(initialiseNode(new DeltaNode()));
List<RenderPipelineTask> taskList = renderTaskListGenerator.generateFrom(orderedNodes);
assertEquals("----- AlphaNode", taskList.get(0).toString().trim());
assertEquals("SetNameTask: foo", taskList.get(1).toString().trim());
assertEquals("AlphaNode: process()", taskList.get(2).toString().trim());
assertEquals("----- BravoNode", taskList.get(3).toString().trim());
assertEquals("BravoNode: process()", taskList.get(4).toString().trim());
assertEquals("SetNameTask: bar", taskList.get(5).toString().trim());
assertEquals("----- EchoNode", taskList.get(6).toString().trim());
assertEquals("EchoNode: process()", taskList.get(7).toString().trim());
assertEquals("----- CharlieNode", taskList.get(8).toString().trim());
assertEquals("SetNameTask: foo", taskList.get(9).toString().trim());
assertEquals("CharlieNode: process()", taskList.get(10).toString().trim());
assertEquals("----- DeltaNode", taskList.get(11).toString().trim());
assertEquals("SetNameTask: delta", taskList.get(12).toString().trim());
assertEquals("DeltaNode: process()", taskList.get(13).toString().trim());
}
private Node initialiseNode(Node node) {
node.initialise();
return node;
}
@SuppressWarnings("static-access") // actual node classes are not meant to be static
private class AlphaNode extends AbstractNode {
@Override
public void initialise() {
addDesiredStateChange(new SetName("foo"));
}
@Override
public void process() {
}
}
@SuppressWarnings("static-access") // actual node classes are not meant to be static
private class BravoNode extends AbstractNode {
@Override
public void initialise() {
addDesiredStateChange(new SetName("foo"));
}
@Override
public void process() {
}
}
@SuppressWarnings("static-access") // actual node classes are not meant to be static
private class CharlieNode extends AbstractNode {
@Override
public void initialise() {
addDesiredStateChange(new SetName("foo"));
}
@Override
public void process() {
}
}
@SuppressWarnings("static-access") // actual node classes are not meant to be static
private class DeltaNode extends AbstractNode {
@Override
public void initialise() {
addDesiredStateChange(new SetName("delta"));
}
@Override
public void process() {
}
}
@SuppressWarnings("static-access") // actual node classes are not meant to be static
private class EchoNode extends AbstractNode {
@Override
public void initialise() {
}
@Override
public void process() {
}
}
// TODO: Add new tests with varying state changes
}