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 palmed.edit.selection; 32 33 import palmed.edit.selection.ISelectionView; 34 import palmed.edit.selection.Selection; 35 import palmed.edit.text.IText; 36 import palmed.edit.util.Coordinate; 37 import palmed.util.EasyMockTestCase; 38 39 /*** 40 * Selection test case. 41 * 42 * @author Mathieu Champlon 43 * @version $Revision$ $Date$ 44 */ 45 public class SelectionTest extends EasyMockTestCase 46 { 47 /*** 48 * Tested object. 49 */ 50 private Selection selection; 51 /*** 52 * Mock objects. 53 */ 54 private IText mockText; 55 private ISelectionView mockView; 56 57 protected void setUp() 58 { 59 mockText = (IText)createMock( IText.class ); 60 mockView = (ISelectionView)createMock( ISelectionView.class ); 61 selection = new Selection( mockText ); 62 selection.register( mockView ); 63 } 64 65 public void testSelectionIsCreatedEmpty() 66 { 67 assertTrue( selection.isEmpty() ); 68 } 69 70 public void testStepForwardOnEmptyTextContentIsNoOp() 71 { 72 mockText.getLine( 0 ); 73 control( mockText ).setReturnValue( null ); 74 mockText.getHeight(); 75 control( mockText ).setReturnValue( 0 ); 76 replay(); 77 selection.forward(); 78 assertTrue( selection.isEmpty() ); 79 } 80 81 public void testStepBackwardOnEmptyTextContentIsNoOp() 82 { 83 replay(); 84 selection.backward(); 85 assertTrue( selection.isEmpty() ); 86 } 87 88 public void testStepForwardAndBackwardResultsInEmptySelection() 89 { 90 mockText.getLine( 0 ); 91 control( mockText ).setReturnValue( "this is my test" ); 92 mockView.update( new Coordinate( 1, 0 ) ); 93 mockView.update( new Coordinate( 0, 0 ) ); 94 replay(); 95 selection.forward(); 96 selection.backward(); 97 assertTrue( selection.isEmpty() ); 98 } 99 100 public void testStepForwardSelectsFirstCharacter() 101 { 102 mockText.getLine( 0 ); 103 control( mockText ).setReturnValue( "this is my test" ); 104 mockView.update( new Coordinate( 1, 0 ) ); 105 replay(); 106 selection.forward(); 107 assertFalse( selection.isEmpty() ); 108 } 109 110 public void testSetPositionSelectsText() 111 { 112 mockText.getHeight(); 113 control( mockText ).setReturnValue( 1 ); 114 mockText.getLine( 0 ); 115 control( mockText ).setReturnValue( "this is my test" ); 116 mockView.update( new Coordinate( 3, 0 ) ); 117 replay(); 118 selection.extend( 3, 0 ); 119 assertFalse( selection.isEmpty() ); 120 } 121 122 public void testSetPositionSelectsMultipleTextLines() 123 { 124 mockText.getHeight(); 125 control( mockText ).setReturnValue( 7 ); 126 mockText.getLine( 5 ); 127 control( mockText ).setReturnValue( "this is my test" ); 128 mockView.update( new Coordinate( 3, 5 ) ); 129 replay(); 130 selection.extend( 3, 5 ); 131 assertFalse( selection.isEmpty() ); 132 } 133 134 public void testResetEmptySelectionStaysEmpty() 135 { 136 mockView.update( new Coordinate( 0, 0 ) ); 137 replay(); 138 selection.clear(); 139 assertTrue( selection.isEmpty() ); 140 } 141 142 public void testResetMultipleTextLinesSelection() 143 { 144 mockText.getHeight(); 145 control( mockText ).setReturnValue( 7 ); 146 mockText.getLine( 5 ); 147 control( mockText ).setReturnValue( "this is my test" ); 148 mockView.update( new Coordinate( 3, 5 ) ); 149 replay(); 150 selection.extend( 3, 5 ); 151 reset(); 152 mockView.update( new Coordinate( 3, 5 ) ); 153 replay(); 154 selection.clear(); 155 assertTrue( selection.isEmpty() ); 156 } 157 158 public void testDeleteClearsSelection() 159 { 160 mockText.getHeight(); 161 control( mockText ).setReturnValue( 7 ); 162 mockText.getLine( 5 ); 163 control( mockText ).setReturnValue( "this is my test" ); 164 mockView.update( new Coordinate( 3, 5 ) ); 165 replay(); 166 selection.extend( 3, 5 ); 167 reset(); 168 mockText.remove( new Coordinate( 0, 0 ), new Coordinate( 3, 5 ) ); 169 mockView.update( new Coordinate( 0, 0 ) ); 170 replay(); 171 selection.delete(); 172 assertTrue( selection.isEmpty() ); 173 } 174 175 public void testDeleteBackwardSelectionClearsSelection() 176 { 177 mockText.getHeight(); 178 control( mockText ).setReturnValue( 7 ); 179 mockText.getLine( 5 ); 180 control( mockText ).setReturnValue( "this is my test" ); 181 mockView.update( new Coordinate( 3, 5 ) ); 182 mockView.update( new Coordinate( 3, 5 ) ); 183 replay(); 184 selection.extend( 3, 5 ); 185 selection.clear(); 186 reset(); 187 mockText.getHeight(); 188 control( mockText ).setReturnValue( 7 ); 189 mockText.getLine( 0 ); 190 control( mockText ).setReturnValue( "this is my test" ); 191 mockView.update( new Coordinate( 0, 0 ) ); 192 replay(); 193 selection.extend( 0, 0 ); 194 reset(); 195 mockText.remove( new Coordinate( 0, 0 ), new Coordinate( 3, 5 ) ); 196 mockView.update( new Coordinate( 0, 0 ) ); 197 replay(); 198 selection.delete(); 199 assertTrue( selection.isEmpty() ); 200 } 201 }