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.view;
32
33 import palmed.edit.util.Coordinate;
34 import palmed.util.EasyMockTestCase;
35
36 /***
37 * Viewport test case.
38 *
39 * @author Mathieu Champlon
40 * @version $Revision$ $Date$
41 */
42 public class ViewportTest extends EasyMockTestCase
43 {
44 /***
45 * Tested object.
46 */
47 private Viewport content;
48 /***
49 * Mock objects
50 */
51 private IContent mockContent;
52 private IView mockView;
53 private IScrollView mockScrollView;
54
55 protected void setUp()
56 {
57 mockContent = (IContent)createMock( IContent.class );
58 mockView = (IView)createMock( IView.class );
59 mockScrollView = (IScrollView)createMock( IScrollView.class );
60 content = new Viewport( mockContent );
61 content.register( mockView );
62 content.register( mockScrollView );
63 content.update( 12, 10 );
64 content.resize( 5, 6 );
65 }
66
67 public void testCursorPositionUnchangedWhenNotScrolled()
68 {
69 final Coordinate position = new Coordinate( 2, 2 );
70 mockView.update( position );
71 replay();
72 content.update( position );
73 }
74
75 public void testScrollInsideView()
76 {
77 mockView.update( new Coordinate( -3, -2 ) );
78 mockView.update( 12, 10 );
79 mockScrollView.scrolled( new Coordinate( 3, 2 ) );
80 replay();
81 content.scroll( 3, 2 );
82 }
83
84 public void testScrollUpperLeftOutsideViewIsTruncated()
85 {
86 mockView.update( new Coordinate( 0, 0 ) );
87 mockView.update( 12, 10 );
88 mockScrollView.scrolled( new Coordinate( 0, 0 ) );
89 replay();
90 content.scroll( -3, -2 );
91 }
92
93 public void testScrollLowerRightOutsideViewIsTruncated()
94 {
95 mockView.update( new Coordinate( -7, -4 ) );
96 mockView.update( 12, 10 );
97 mockScrollView.scrolled( new Coordinate( 7, 4 ) );
98 replay();
99 content.scroll( 15, 15 );
100 }
101
102 public void testSetCursorOutsideViewAndTypeKeyMovesViewToShowCursor()
103 {
104 content.update( new Coordinate( 7, 7 ) );
105 reset();
106 final int keyCode = 12;
107 mockContent.type( keyCode );
108 mockView.update( new Coordinate( 5, 5 ) );
109 mockView.update( 12, 10 );
110 mockScrollView.scrolled( new Coordinate( 2, 2 ) );
111 replay();
112 content.type( keyCode );
113 }
114
115 public void testMoveViewAwayFromCursorAndTypeKeyMovesViewToShowCursor()
116 {
117 content.scroll( 7, 8 );
118 reset();
119 final int keyCode = 12;
120 mockContent.type( keyCode );
121 mockView.update( new Coordinate( 0, 0 ) );
122 mockView.update( 12, 10 );
123 mockScrollView.scrolled( new Coordinate( 0, 0 ) );
124 replay();
125 content.type( keyCode );
126 }
127 }