1 /*** 2 * Redistribution and use in source and binary forms, with or without 3 * modification, are permitted provided that the following conditions are 4 * met : 5 * 6 * . Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * 9 * . Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * . The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 * 28 * $Id$ 29 */ 30 31 package jtge.engine.command; 32 33 import jtge.engine.command.Flow; 34 import jtge.engine.command.ICommand; 35 import jtge.engine.command.IFilter; 36 import jtge.engine.command.ISorter; 37 import jtge.engine.data.IContext; 38 import jtge.util.EasyMockTestCase; 39 import org.easymock.MockControl; 40 41 /*** 42 * Flow test. 43 * 44 * @author Mathieu Champlon 45 * @version $Revision$ $Date$ 46 */ 47 public class FlowTest extends EasyMockTestCase 48 { 49 /*** 50 * Tested object. 51 */ 52 private Flow composite; 53 /*** 54 * Mock objects. 55 */ 56 private ICommand mockCommand1, mockCommand2, mockCommand3; 57 58 protected void setUp() 59 { 60 mockCommand1 = (ICommand)createMock( ICommand.class ); 61 mockCommand2 = (ICommand)createMock( ICommand.class ); 62 mockCommand3 = (ICommand)createMock( ICommand.class ); 63 composite = new Flow(); 64 composite.add( mockCommand1 ); 65 composite.add( mockCommand2 ); 66 composite.add( mockCommand3 ); 67 } 68 69 public void testEqualsNull() 70 { 71 assertFalse( composite.equals( null ) ); 72 } 73 74 public void testEquals() 75 { 76 Flow multi1 = new Flow(); 77 Flow multi2 = new Flow(); 78 assertTrue( multi1.equals( multi2 ) ); 79 assertFalse( composite.equals( multi1 ) ); 80 multi1.add( mockCommand1 ); 81 assertFalse( composite.equals( multi1 ) ); 82 multi1.add( mockCommand2 ); 83 assertFalse( composite.equals( multi1 ) ); 84 multi1.add( mockCommand3 ); 85 assertTrue( composite.equals( multi1 ) ); 86 multi1.add( mockCommand3 ); 87 assertFalse( composite.equals( multi1 ) ); 88 } 89 90 public void testExecute() 91 { 92 IContext mockContext = (IContext)createMock( IContext.class ); 93 mockCommand1.execute( mockContext ); 94 mockCommand2.execute( mockContext ); 95 mockCommand3.execute( mockContext ); 96 replay(); 97 composite.execute( mockContext ); 98 } 99 100 public void testFilter() 101 { 102 IFilter mockFilter = (IFilter)createMock( IFilter.class ); 103 mockCommand1.filter( mockFilter ); 104 control( mockCommand1 ).setReturnValue( mockCommand1 ); 105 mockCommand2.filter( mockFilter ); 106 control( mockCommand2 ).setReturnValue( null ); 107 mockCommand3.filter( mockFilter ); 108 control( mockCommand3 ).setReturnValue( mockCommand3 ); 109 replay(); 110 Flow expectedComposite = new Flow(); 111 expectedComposite.add( mockCommand1 ); 112 expectedComposite.add( mockCommand3 ); 113 assertEquals( expectedComposite, composite.filter( mockFilter ) ); 114 } 115 116 public void testFilterOutAllCommandsReturnsNull() 117 { 118 IFilter mockFilter = (IFilter)createMock( IFilter.class ); 119 mockCommand1.filter( mockFilter ); 120 control( mockCommand1 ).setReturnValue( null ); 121 mockCommand2.filter( mockFilter ); 122 control( mockCommand2 ).setReturnValue( null ); 123 mockCommand3.filter( mockFilter ); 124 control( mockCommand3 ).setReturnValue( null ); 125 replay(); 126 assertNull( composite.filter( mockFilter ) ); 127 } 128 129 public void testSort() 130 { 131 ISorter mockSorter = (ISorter)createMock( ISorter.class ); 132 mockSorter.lessThan( mockCommand2, mockCommand1 ); 133 control( mockSorter ).setReturnValue( false, MockControl.ZERO_OR_MORE ); 134 mockSorter.lessThan( mockCommand3, mockCommand2 ); 135 control( mockSorter ).setReturnValue( true, MockControl.ZERO_OR_MORE ); 136 mockSorter.lessThan( mockCommand3, mockCommand1 ); 137 control( mockSorter ).setReturnValue( false, MockControl.ZERO_OR_MORE ); 138 replay(); 139 Flow expectedComposite = new Flow(); 140 expectedComposite.add( mockCommand1 ); 141 expectedComposite.add( mockCommand3 ); 142 expectedComposite.add( mockCommand2 ); 143 assertEquals( expectedComposite, composite.sort( mockSorter ) ); 144 } 145 }