KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > java_code_folding > JavaFoldsNavigationTest


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package java_code_folding;
21
22 import java.awt.event.KeyEvent JavaDoc;
23 import java.io.File JavaDoc;
24 import java.io.FileOutputStream JavaDoc;
25 import java.io.IOException JavaDoc;
26 import java.io.OutputStream JavaDoc;
27 import java.io.PrintStream JavaDoc;
28 import java.util.Hashtable JavaDoc;
29 import javax.swing.KeyStroke JavaDoc;
30 import javax.swing.text.AbstractDocument JavaDoc;
31 import javax.swing.text.JTextComponent JavaDoc;
32 import org.netbeans.jellytools.Bundle;
33 import org.netbeans.jellytools.EditorOperator;
34 import org.netbeans.jellytools.EditorWindowOperator;
35 import lib.EditorTestCase;
36 import code_folding.CodeFoldingTest;
37 import org.netbeans.api.editor.fold.Fold;
38 import org.netbeans.api.editor.fold.FoldHierarchy;
39 import org.netbeans.jemmy.operators.JEditorPaneOperator;
40 import org.netbeans.jemmy.operators.JTextComponentOperator;
41
42 /**
43  * Test behavior of navigation through java code folds.
44  *
45  * Test covers following actions:
46  * caret-forward [RIGHT]
47  * caret-backward [LEFT]
48  * caret-down [DOWN]
49  * caret-up [UP]
50  * selection-forward [SHIFT-RIGHT]
51  * selection-backward [SHIFT-LEFT]
52  * selection-down [SHIFT-DOWN]
53  * selection-up [SHIFT-UP]
54  * caret-begin-line [HOME]
55  * caret-end-line [END]
56  * selection-begin-line [SHIFT-HOME]
57  * selection-end-line [SHIFT-END]
58  *
59  * Actions:
60  * caret-next-word [CTRL-RIGHT]
61  * caret-previous-word [CTRL-LEFT]
62  * selection-next-word [CTRL-SHIFT-RIGHT]
63  * selection-previous-word [CTRL-SHIFT-LEFT]
64  * should be added to testcase after issue #47454 will be fixed
65  *
66  * @author Martin Roskanin
67  */

68   public class JavaFoldsNavigationTest extends JavaCodeFoldingTest {
69
70     private JEditorPaneOperator txtOper;
71     private EditorOperator editor;
72      
73     /** Creates a new instance of Main */
74     public JavaFoldsNavigationTest(String JavaDoc testMethodName) {
75         super(testMethodName);
76     }
77     
78     private ValueResolver getResolver(final JEditorPaneOperator txtOper, final int etalon){
79         ValueResolver resolver = new ValueResolver(){
80             public Object JavaDoc getValue(){
81                 int newCaretPos = txtOper.getCaretPosition();
82                 return (newCaretPos == etalon) ? Boolean.TRUE : Boolean.FALSE;
83             }
84         };
85         
86         return resolver;
87     }
88     
89     private void checkActionByKeyStroke(int key, int mod, int caretPosToSet, int etalon, boolean checkSelection){
90         if (caretPosToSet == -1){
91             caretPosToSet = txtOper.getCaretPosition();
92         }else{
93             editor.setCaretPosition(caretPosToSet);
94             txtOper.getCaret().setMagicCaretPosition(null);
95         }
96         txtOper.pushKey(key,mod);
97         waitMaxMilisForValue(3500, getResolver(txtOper, etalon), Boolean.TRUE);
98         int newCaretOffset = txtOper.getCaretPosition();
99         if (checkSelection){
100             int selectionStart = txtOper.getSelectionStart();
101             int selectionEnd = txtOper.getSelectionEnd();
102             if (selectionStart != Math.min(caretPosToSet, etalon) ||
103                     selectionEnd != Math.max(caretPosToSet, etalon)){
104                 String JavaDoc keyString = KeyStroke.getKeyStroke(key, mod).toString();
105                 fail(keyString+": Action failed: [etalon/newCaretOffset/selectionStart/selectionEnd]: ["+etalon+"/"+
106                         newCaretOffset+"/"+selectionStart+"/"+selectionEnd+"]");
107             }
108         }else{
109             if (etalon != newCaretOffset){
110                 String JavaDoc keyString = KeyStroke.getKeyStroke(key, mod).toString();
111                 fail(keyString+": Action failed: [etalon/newCaretOffset]: ["+etalon+"/"+
112                         newCaretOffset+"]");
113             }
114         }
115     }
116     
117     public void testJavaFoldsNavigation(){
118         openDefaultProject();
119         openDefaultSampleFile();
120         try {
121             editor = getDefaultSampleEditorOperator();
122             JTextComponentOperator txtCompOper = new JTextComponentOperator(editor);
123             JTextComponent JavaDoc target = (JTextComponent JavaDoc)txtCompOper.getSource();
124             txtOper = editor.txtEditorPane();
125
126             // wait max. 6 second for code folding initialization
127
waitForFolding(target, 6000);
128
129             //01 collapse initial comment fold. [ */|]
130
// check caret left action
131
collapseFoldAtCaretPosition(editor, 4, 4); // 4,4 -caret offset 70
132

133             // check left
134
checkActionByKeyStroke(KeyEvent.VK_LEFT, 0, 70, 0, false);
135             
136             //check selectin
137
checkActionByKeyStroke(KeyEvent.VK_LEFT, KeyEvent.SHIFT_DOWN_MASK, 70, 0, true);
138             
139             // check caret right action
140
checkActionByKeyStroke(KeyEvent.VK_RIGHT, 0, 0, 70, false);
141             
142             // check caret right action, selection
143
checkActionByKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.SHIFT_DOWN_MASK, 0, 70, true);
144             
145             // check home action
146
checkActionByKeyStroke(KeyEvent.VK_HOME, 0, 70, 0, false);
147             
148             // check home action, selection
149
checkActionByKeyStroke(KeyEvent.VK_HOME, KeyEvent.SHIFT_DOWN_MASK, 70, 0, true);
150
151             // check end action
152
checkActionByKeyStroke(KeyEvent.VK_END, 0, 0, 70, false);
153             
154             // check end action, selection
155
checkActionByKeyStroke(KeyEvent.VK_END, KeyEvent.SHIFT_DOWN_MASK, 0, 70, true);
156             
157             // check up action
158
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 71, 0, false);
159             
160             // check up action, selection
161
checkActionByKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK, 71, 0, true);
162             
163             // check down action
164
checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, 0, 71, false);
165             
166             // check down action, selection
167
checkActionByKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK, 0, 71, true);
168
169             // checking end of fold
170
// check up action
171
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 78, 70, false);
172             
173             // check up action, selection
174
checkActionByKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK, 78, 70, true);
175             
176             // check down action
177
checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, 70, 78, false);
178             
179             // check down action, selection
180
checkActionByKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK, 70, 78, true);
181             
182             // check magic position
183
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 80, 70, false);
184             checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, -1, 80, false);
185             
186             
187             // ------------------------------------------------------------------------
188

189             
190             // check actions on one-line fold
191
collapseFoldAtCaretPosition(editor, 25, 13); // 25,13 - caret offset 422
192

193             
194             // check left
195
checkActionByKeyStroke(KeyEvent.VK_LEFT, 0, 454, 414, false);
196             
197             //check selectin
198
checkActionByKeyStroke(KeyEvent.VK_LEFT, KeyEvent.SHIFT_DOWN_MASK, 454, 414, true);
199             
200             // check caret right action
201
checkActionByKeyStroke(KeyEvent.VK_RIGHT, 0, 414, 454, false);
202             
203             // check caret right action, selection
204
checkActionByKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.SHIFT_DOWN_MASK, 414, 454, true);
205             
206             // check home action
207
checkActionByKeyStroke(KeyEvent.VK_HOME, 0, 454, 414, false);
208             
209             // check home action, selection
210
checkActionByKeyStroke(KeyEvent.VK_HOME, KeyEvent.SHIFT_DOWN_MASK, 454, 414, true);
211
212             // check end action
213
checkActionByKeyStroke(KeyEvent.VK_END, 0, 414, 454, false);
214             
215             // check end action, selection
216
checkActionByKeyStroke(KeyEvent.VK_END, KeyEvent.SHIFT_DOWN_MASK, 414, 454, true);
217             
218             // check up action
219
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 459, 414, false);
220             
221             // check up action, selection
222
checkActionByKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK, 459, 414, true);
223             
224             // check down action
225
checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, 414, 459, false);
226             
227             // check down action, selection
228
checkActionByKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK, 414, 459, true);
229
230             // checking end of fold
231
// check up action
232
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 467, 454, false);
233             
234             // check up action, selection
235
checkActionByKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK, 467, 454, true);
236             
237             // check down action
238
checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, 454, 467, false);
239             
240             // check down action, selection
241
checkActionByKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK, 454, 467, true);
242             
243             // check magic position
244
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 469, 454, false);
245             checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, -1, 469, false);
246             
247             //----------------------------------------------------------------
248
//check multi fold on line
249

250             collapseFoldAtCaretPosition(editor, 36, 84); // 36,84 -caret offset 897
251

252             // check left
253
checkActionByKeyStroke(KeyEvent.VK_LEFT, 0, 898, 896, false);
254             
255             //check selectin
256
checkActionByKeyStroke(KeyEvent.VK_LEFT, KeyEvent.SHIFT_DOWN_MASK, 898, 896, true);
257             
258             // check caret right action
259
checkActionByKeyStroke(KeyEvent.VK_RIGHT, 0, 896, 898, false);
260             
261             // check caret right action, selection
262
checkActionByKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.SHIFT_DOWN_MASK, 896, 898, true);
263             
264             // check home action
265
checkActionByKeyStroke(KeyEvent.VK_HOME, 0, 898, 818, false);
266             
267             // check home action, selection
268
checkActionByKeyStroke(KeyEvent.VK_HOME, KeyEvent.SHIFT_DOWN_MASK, 898, 818, true);
269
270             // check end action
271
checkActionByKeyStroke(KeyEvent.VK_END, 0, 896, 926, false);
272             
273             // check end action, selection
274
checkActionByKeyStroke(KeyEvent.VK_END, KeyEvent.SHIFT_DOWN_MASK, 896, 926, true);
275             
276             // check up action
277
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 1010, 896, false);
278             
279             // check up action, selection
280
checkActionByKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK, 1010, 896, true);
281             
282             // check down action
283
checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, 896, 1009, false);
284             
285             // check down action, selection
286
checkActionByKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK, 896, 1009, true);
287
288             // checking end of fold
289
// check up action
290
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 1014, 898, false);
291             
292             // check up action, selection
293
checkActionByKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK, 1014, 898, true);
294             
295             // check down action
296
checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, 898, 1014, false);
297             
298             // check down action, selection
299
checkActionByKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK, 898, 1014, true);
300             
301             // check magic position
302
checkActionByKeyStroke(KeyEvent.VK_UP, 0, 1011, 896, false);
303             checkActionByKeyStroke(KeyEvent.VK_DOWN, 0, -1, 1011, false);
304             
305             
306         } finally{
307             closeFileWithDiscard();
308         }
309     }
310     
311 }
312
Popular Tags