/** * */ package models; import ij.plugin.filter.PlugInFilter; import java.awt.Dimension; import junit.framework.TestCase; import de.danielsenff.imageflow.models.connection.Connection; import de.danielsenff.imageflow.models.connection.Input; import de.danielsenff.imageflow.models.connection.Output; import de.danielsenff.imageflow.models.datatype.DataTypeFactory; import de.danielsenff.imageflow.models.unit.UnitElement; /** * @author danielsenff * */ public class ConnectionTests extends TestCase { /** * Test if an correctly initialized Connection returns the right status. */ public void testConnectionStatus() { final UnitElement source = UnitFactoryExt.createBackgroundUnit(new Dimension(12,12)); final UnitElement blur = UnitFactoryExt.createGaussianBlurUnit(); final Connection connection1 = new Connection(source, 1, blur, 1); connection1.connect(); assertTrue("status check 1", (connection1.checkConnection() == Connection.Status.OK) ); assertTrue("connection conncted", connection1.isConnected()); assertEquals(source, connection1.getFromUnit()); assertEquals(blur, connection1.getToUnit()); Output output = source.getOutput(0); Input input = blur.getInput(0); assertEquals("source output parent", source, output.getParent()); for (Connection conn : output.getConnections()) { assertEquals("source output to unit", blur, conn.getToUnit()); } assertEquals("blur input parent", blur, input.getParent()); assertEquals("blur input from unit", source, input.getFromUnit()); assertEquals("check imageTitles generated on pins", output.getOutputTitle(), input.getImageTitle()); } public void testHasAllInputsMarked() { // test output-only UnitElement sourceUnit = UnitFactoryExt.createBackgroundUnit(new Dimension(12, 12)); // test input/output case UnitElement filterUnit1 = UnitFactoryExt.createAddNoiseUnit(); UnitElement filterUnit2 = UnitFactoryExt.createAddNoiseUnit(); Connection conn = new Connection(sourceUnit, 1, filterUnit1, 1); //assertion assertFalse("con has no inputs marked yet", conn.hasInputMarked()); // the source is not yet marked, so the first filter should give false // assertEquals("filter1 has no inputs marked yet", false, filterUnit1.hasAllInputsMarked()); // assertEquals("filter2 has inputs marked", false, filterUnit2.hasAllInputsMarked()); //set mark on the source, now the filter next connected should find this mark sourceUnit.setMark(1); assertTrue("filter1 has inputs marked", conn.hasInputMarked()); } public void testIsConnectedPin() { // test output-only UnitElement sourceUnit = UnitFactoryExt.createBackgroundUnit(new Dimension(12, 12)); Output sourceOutput = sourceUnit.getOutput(0); // test input/output case UnitElement filterUnit1 = UnitFactoryExt.createAddNoiseUnit(); Input filter1Input = filterUnit1.getInput(0); Output filter1Output = filterUnit1.getOutput(0); UnitElement filterUnit2 = UnitFactoryExt.createAddNoiseUnit(); Input filter2Input = filterUnit2.getInput(0); Output filter2Output = filterUnit2.getOutput(0); Connection conn = new Connection(sourceUnit, 1, filterUnit1, 1); //assertion assertTrue("Source output", conn.isConnected(sourceOutput)); assertTrue("Filter1 input", conn.isConnected(filter1Input)); assertFalse("Filter1 output", conn.isConnected(filter1Output)); assertFalse("Filter2 input", conn.isConnected(filter2Input)); assertFalse("Filter2 Output", conn.isConnected(filter2Output)); } public void testIsConnectedWithUnit() { // test output-only UnitElement sourceUnit = UnitFactoryExt.createBackgroundUnit(new Dimension(12, 12)); // test input/output case UnitElement filterUnit1 = UnitFactoryExt.createAddNoiseUnit(); UnitElement filterUnit2 = UnitFactoryExt.createAddNoiseUnit(); Connection conn = new Connection(sourceUnit, 1, filterUnit1, 1); //assertion assertTrue("Source", conn.isConnectedToUnit(sourceUnit)); assertTrue("Filter1", conn.isConnectedToUnit(filterUnit1)); assertFalse("Filter2", conn.isConnectedToUnit(filterUnit2)); } public void testCauseLoops() { } public void testAreImageDepthCompatible() { UnitElement unit1 = new UnitElement("unit1", "some syntax"); unit1.addOutput( new Output("Output", "o", DataTypeFactory.createImage(PlugInFilter.DOES_ALL), unit1, 1)); unit1.addOutput( new Output("Output", "o", DataTypeFactory.createImage(-1), unit1, 2)); UnitElement unit2 = new UnitElement("unit2", "some syntax"); unit2.addInput( new Input("input1", "i", DataTypeFactory.createImage(PlugInFilter.DOES_32), unit2, 1, true, false)); unit2.addInput( new Input("input2", "i", DataTypeFactory.createImage(PlugInFilter.DOES_16), unit2, 2, true, false)); unit2.addInput( new Input("input3", "i", DataTypeFactory.createImage(PlugInFilter.DOES_ALL), unit2, 3, true, false)); // conn1 all to 32 Connection conn1 = new Connection(unit1,1,unit2,1); assertTrue("all to 32", conn1.isCompatible()); // conn2 all to all Connection conn2 = new Connection(unit1,1,unit2,2); assertTrue("all to 16", conn2.isCompatible()); // conn3 any to 32 Connection conn3 = new Connection(unit1,2,unit2, 1); // technically compatable, but we expect something explicit and no guesses assertFalse("all to 32", conn3.isCompatible()); // conn4 all to all Connection conn4 = new Connection(unit1,1,unit2, 3); assertTrue("all to all", conn4.isCompatible()); // now test pins, which don't care //TODO hm how should this react actually? needs an input set // Connection conn5 = new Connection(unit1,3,unit2, 2); //assertTrue("-1 to 16", conn5.areImageBitDepthCompatible()); // now test pins, which don't care // doesn't do much since -1 is undefined // Connection conn6 = new Connection(unit1,3,unit2, 3); //assertTrue("-1 to ALL", conn6.areImageBitDepthCompatible()); } }