Changeset 32705
- Timestamp:
- 2018-12-17T23:33:18+13:00 (5 years ago)
- Location:
- gs3-extensions/testing/trunk/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
gs3-extensions/testing/trunk/src/build.xml
r32694 r32705 6 6 7 7 <property name="gli.home" value="${env.GSDL3SRCHOME}/gli"/> 8 9 <!-- define ext.test.folder so we can move some targets into toplevel GS3 ant build file --> 10 <property name="ext.test.folder" value="${basedir}" /> 11 12 <!-- where the reports will go --> 13 <property name="test.reports" value="${ext.test.folder}/reports" /> 8 14 9 15 <target name="build-util-jar" depends="needs-gs3-setup, needs-make-gli-jar"> 10 <mkdir dir="${ basedir}/build"/>11 <javac srcdir="${ basedir}/src"12 destdir="${ basedir}/build"16 <mkdir dir="${ext.test.folder}/build"/> 17 <javac srcdir="${ext.test.folder}/src" 18 destdir="${ext.test.folder}/build" 13 19 includeantruntime="${compile.includeantruntime}"> 14 20 <classpath> 15 <fileset dir="${ basedir}/lib/java">21 <fileset dir="${ext.test.folder}/lib/java"> 16 22 <include name="*.jar"/> 17 23 </fileset> … … 22 28 <include name="org/greenstone/gsdl3/testing/*.java"/> 23 29 </javac> 24 <jar destfile="${ basedir}/lib/java/GSTestingUtil.jar">25 <fileset dir="${ basedir}/build">30 <jar destfile="${ext.test.folder}/lib/java/GSTestingUtil.jar"> 31 <fileset dir="${ext.test.folder}/build"> 26 32 <include name="org/greenstone/gsdl3/testing/**"/> 27 33 </fileset> … … 58 64 <target name="compile-tutorials-tests" depends="needs-gs3-setup, needs-make-gli-jar"> 59 65 60 <mkdir dir="${ basedir}/build"/>66 <mkdir dir="${ext.test.folder}/build"/> 61 67 <javac 62 srcdir="${ basedir}/src"63 destdir="${ basedir}/build"68 srcdir="${ext.test.folder}/src" 69 destdir="${ext.test.folder}/build" 64 70 includeantruntime="${compile.includeantruntime}"> 65 71 <classpath> 66 <fileset dir="${ basedir}/lib/java">72 <fileset dir="${ext.test.folder}/lib/java"> 67 73 <include name="*.jar"/> 68 74 </fileset> … … 73 79 <include name="gstests/tutorials/*.java"/> 74 80 </javac> 75 <jar destfile="${ basedir}/tutorial-tests.jar">76 <fileset dir="${ basedir}/build">81 <jar destfile="${ext.test.folder}/tutorial-tests.jar"> 82 <fileset dir="${ext.test.folder}/build"> 77 83 <include name="gstests/tutorials/**"/> 78 84 </fileset> … … 84 90 85 91 <!-- https://stackoverflow.com/questions/10704324/how-to-add-to-classpath-all-classes-from-set-of-directories-in-ant --> 86 <path id="tutorials.path"> 87 <fileset dir="${basedir}/lib/java"> 92 <path id="tutorials.path"> 93 94 <!-- Includes ant-nodeps-1.8.1 from 2010 that replaces 2005's optional.jar of ant 95 for generating reports --> 96 <fileset dir="${ext.test.folder}/lib/java"> 88 97 <include name="*.jar"/> 89 98 </fileset> 90 <!--<fileset dir="${ basedir}/build">99 <!--<fileset dir="${ext.test.folder}/build"> 91 100 <include name="gstests/tutorials/**/*.class"/> 92 101 </fileset>--> 93 <files includes="${ basedir}/tutorial-tests.jar"/>102 <files includes="${ext.test.folder}/tutorial-tests.jar"/> 94 103 95 104 <!-- To run GLI, need GLI.jar and its help jars and folder: classes folder, apache.jar, jna.jar, jna-platform.jar, qfslib.jar, rsyntaxtextarea.jar --> … … 114 123 <java classname="org.junit.runner.JUnitCore" dir="${gli.home}" fork="true" maxmemory="256m" classpathref="tutorials.path"> 115 124 <!--https://stackoverflow.com/questions/38676719/selenium-using-java-the-path-to-the-driver-executable-must-be-set-by-the-webdr--> 116 <sysproperty key="webdriver.gecko.driver" path="${ basedir}/geckodriver"/>125 <sysproperty key="webdriver.gecko.driver" path="${ext.test.folder}/geckodriver"/> 117 126 <arg value="gstests.tutorials.RunGLITest"/> 118 127 <!-- TODO: for now hardcoding the GS3 URL. Toplevel build.xml can properly construct this … … 120 129 <jvmarg value="-DSERVERURL=http://127.0.0.1:8383/greenstone3/library "/> 121 130 </java> 122 123 131 132 <!-- create reports dir if it doesn't exist --> 133 <mkdir dir="${test.reports}"/> 134 <!-- 135 https://junit.org/junit4/faq.html#running_6 136 How do I use Ant to create HTML test reports? 137 --> 138 <junitreport todir="${test.reports}"> 139 <fileset dir="${test.reports}"> 140 <include name="TEST-*.xml" /> 141 </fileset> 142 <report todir="${test.reports}" /> 143 </junitreport> 124 144 </target> 145 146 <!-- TODO: check if after testing GLI we may need to ensure tomcat stopped? --> 125 147 126 148 </project> -
gs3-extensions/testing/trunk/src/src/gstests/tutorials/RunGLITest.java
r32701 r32705 13 13 - https://web.archive.org/web/20120526191520/http://alexruiz.developerblogs.com/?p=160 14 14 - https://web.archive.org/web/20130218063544/http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html 15 - https://stackoverflow.com/questions/2829364/java-difference-between-swingworker-and-swingutilities-invokelater 15 16 16 17 Got AssertJ Swing from Maven Central Repository: … … 117 118 118 119 119 // waiting 2 seconds for window, so we can see it 120 try{ 121 Thread.sleep(5000); 122 } catch(Exception e) { 123 e.printStackTrace(); 124 } 120 // waiting a few seconds for window, so we can see it 121 PAUSE(2); 125 122 126 123 … … 131 128 132 129 window = findFrame("GUIManager").using(robot()); 133 134 String gatherPaneLabel = Dictionary.get("GUI.Gather"); 135 System.err.println("@@@ Expecting label: " + gatherPaneLabel); 130 131 String gatherPaneLabel = Dictionary.get("GUI.Gather"); 132 System.err.println("@@@ Expecting label: " + gatherPaneLabel); 133 134 System.err.println("@@@ Second test: that Gather panel is selected and has right title"); 135 136 JTabbedPaneFixture tab = window.tabbedPane("GUIManager.tab_pane"); 137 138 139 tab.requireSelectedTab(Index.atIndex(1)); 140 tab.requireTitle(gatherPaneLabel, Index.atIndex(1)); 141 142 // attempt to switch to enrich pane, uses static methods of GSGUITestingUtil 143 // through static import of that class 144 switchToPane(window, DOWNLOAD_PANE); 136 145 137 System.err.println("@@@ Second test: that Gather panel is selected and has right title"); 146 // For testing, want GLI to be in librarian mode by default 147 changeUserMode(window, "librarian"); 138 148 139 JTabbedPaneFixture tab = window.tabbedPane("GUIManager.tab_pane"); 149 switchToPane(window, GATHER_PANE); 150 151 loadCollection(window, "lucene-jdbm-demo"); 140 152 141 142 tab.requireSelectedTab(Index.atIndex(1)); 143 tab.requireTitle(gatherPaneLabel, Index.atIndex(1)); 153 // wait a couple of seconds again? 154 PAUSE(2); 155 closeCollection(window); 156 157 createCollection(window, "pinky", "Pinky was here", null); 158 closeCollection(window); // collection must be closed in order to be deleted 159 deleteCollection(window, "pinky"); 160 // wait a few of seconds again? 161 PAUSE(2); 162 163 exportCollection(window, "GreenstoneMETS", "lucene-jdbm-demo"); 144 164 145 // attempt to switch to enrich pane, uses static methods of GSGUITestingUtil 146 // through static import of that class 147 switchToPane(window, DOWNLOAD_PANE); 148 149 loadCollection(window, "lucene-jdbm-demo"); 150 151 // wait a couple of seconds again? 152 try{ 153 Thread.sleep(5000); 154 } catch(Exception e) { 155 e.printStackTrace(); 156 } 165 // Reset GLI to expert mode for regular GLI use 166 changeUserMode(window, "expert"); 157 167 158 168 PAUSE(5); 169 //exitGLI(window); 170 171 switchToPane(window, GATHER_PANE); 159 172 } 160 173 … … 165 178 { 166 179 _driver.quit(); 180 167 181 } 168 182 } -
gs3-extensions/testing/trunk/src/src/org/greenstone/gsdl3/testing/GSGUITestingUtil.java
r32701 r32705 1 1 package org.greenstone.gsdl3.testing; 2 2 3 import java.io.File; 3 4 import java.util.Map; 5 import java.util.regex.*; 4 6 import java.awt.Component; 5 7 … … 7 9 import org.junit.Assert; 8 10 import org.assertj.swing.fixture.*; 11 import org.assertj.swing.timing.Timeout ; 12 9 13 10 14 // GLI imports … … 18 22 19 23 public class GSGUITestingUtil 20 { 24 { 25 public static final boolean PAUSE_ON = true; 26 27 public static final int SECOND = 1000; // 1000 ms 28 21 29 public static final String DOWNLOAD_PANE = "Download"; 22 30 public static final String GATHER_PANE = "Gather"; … … 33 41 34 42 /************************ GENERAL *******************************/ 43 public static void PAUSE() { 44 PAUSE(5); 45 } 46 public static void PAUSE(int seconds) { 47 if(!PAUSE_ON) return; // ignore calls to PAUSE 48 49 // wait a couple of seconds again? 50 try{ 51 Thread.sleep(seconds*SECOND); 52 } catch(Exception e) { 53 e.printStackTrace(); 54 } 55 } 56 57 35 58 //https://joel-costigliola.github.io/assertj/swing/api/org/assertj/swing/fixture/FrameFixture.html 36 59 public static void switchToPane(FrameFixture window, String pane) { … … 49 72 } 50 73 74 /* 75 public static void stealAnyLock(FrameFixture window) { 76 DialogFixture dialog = window.dialog("LockFileDialog"); 77 if(dialog != null) { 78 dialog.button("LockFileDialog.ok_button").click(); 79 } 80 }*/ 81 82 51 83 // e.g. pane = Enrich,view=collection; pane = Gather, view = workspace (or collection) 52 84 public static void getFolderPath(String pane, String view, String folderPath) {} … … 54 86 55 87 /**********************FILE MENU*******************************/ 56 public static void setPrefs(String tab, Map params) {} 57 // mode e.g. librarian, expert 58 public static void changeUserMode(String mode) {} 59 60 public static void deleteCollection(){} 61 public static void saveCollection(){} 62 public static void closeCollection(){} 63 public static void createCollection(String basedOn) {} 64 public static void loadCollection(FrameFixture window, String colName) { 88 public static void setPrefs(FrameFixture window, String tab, Map params) { 89 openMenuItem(window, "file", "options"); 90 91 } 92 93 /** 94 * @param toMode must be the dictionary key for Preferences mode. 95 * Choose from Preferences.Mode.Assistant, Preferences.Mode.Librarian, Preferences.Mode.Expert 96 */ 97 public static void changeUserMode(FrameFixture window, String toMode) { 98 openMenuItem(window, "file", "options"); // click MenuBar.file -> MenuBar.file_options 99 100 // switch to Mode tab 101 String paneLabel = Dictionary.get("Preferences.Mode"); 102 DialogFixture dialog = window.dialog("Preferences"); 103 JTabbedPaneFixture tab = window.tabbedPane("Preferences.tab_pane"); 104 tab.selectTab(paneLabel); // select tab by its title 105 106 String mode = "assistant"; // library assistant 107 if(toMode.contains("xpert")) { 108 mode = "expert"; 109 } else if (toMode.endsWith("ibrarian")) { 110 mode = "librarian"; 111 } 112 dialog.radioButton("Preferences."+mode+"_mode_radio_button").check(true); 113 114 // apply and close dialog 115 dialog.button("Preferences.apply_button").click(); 116 dialog.button("Preferences.ok_button").click(); 117 } 118 119 public static void exitGLI(FrameFixture window) { 120 openMenuItem(window, "file", "exit"); 121 PAUSE(5); 122 } 123 124 public static void closeCollection(FrameFixture window){ 125 // Through componennt names, clicks on MenuBar.file then MenuBar.file_close 126 openMenuItem(window, "file", "close"); 127 } 128 129 public static void deleteCollection(FrameFixture window, String collName) { 130 openMenuItem(window, "file", "delete"); 131 DialogFixture dialog = window.dialog("DeleteCollectionPrompt"); // could call window.dialg() too as there will be only one, unless GLI run in debug mode? 132 133 JListFixture collection_list = dialog.list("DeleteCollectionPrompt.list"); 134 135 Pattern collNameRegex = Pattern.compile(".*"+collName+".*"); 136 collection_list.selectItem(collNameRegex); 137 138 collection_list.requireSelection(collNameRegex); // assert it exists and is selectable. Can't select (or delete) coll if it's open 139 140 dialog.checkBox("DeleteCollectionPrompt.confirmation").check(true); // check checkbox to be sure to delete 141 dialog.button("DeleteCollectionPrompt.ok_button").click(); // delete button 142 143 // A close confirmation optionPane dialog appears - click OK in it 144 dialog.optionPane().okButton().click(); 145 146 dialog.button("DeleteCollectionPrompt.close_button").click(); // close deleteColl dialog 147 } 148 149 public static void saveCollection(FrameFixture window) { 150 openMenuItem(window, "file", "save"); // MenuBar.file -> MenuBar.file_save 151 } 152 153 public static void createCollection(FrameFixture window, 154 String collTitle, String collDescription, String baseColl) 155 { 156 openMenuItem(window, "file", "new"); 157 DialogFixture dialog = window.dialog("col"); // GLI is unable to setName() of this dialog 158 // to NewCollectioNDetailsPrompt. Not sure why. 159 160 dialog.textBox("NewCollectionDetailsPrompt.title").enterText(collTitle); // JTextField 161 if(collDescription != null && !collDescription.equals("")) { 162 // JTextArea description 163 dialog.textBox("NewCollectionDetailsPrompt.description").enterText(collDescription); 164 } 165 166 // JComboBox base_collection 167 if(baseColl != null && !baseColl.equals("")) { 168 JComboBoxFixture baseCollBox = dialog.comboBox("NewCollectionDetailsPrompt.base_collection"); 169 Pattern collNameRegex = Pattern.compile(".*"+baseColl+".*"); // comboBox should CONTAIN this string 170 baseCollBox.selectItem(collNameRegex); 171 baseCollBox.requireSelection(collNameRegex); // assert the baseColl name exists 172 } 173 dialog.button("NewCollectionDetailsPrompt.create_button").click(); 174 } 175 176 public static void loadCollection(FrameFixture window, String collName) { 65 177 openMenuItem(window, "file", "open"); 66 67 } 68 69 // only for GS2? 70 public static void exportCollection() {} 178 DialogFixture dialog = window.dialog("OpenCollectionDialog"); 179 JListFixture collection_list = dialog.list("OpenCollectionDialog.collection_list"); 180 181 // See section 4.2 of http://www.vogella.com/tutorials/JavaRegularExpressions/article.html 182 // Apparently, testing Pattern "collName" expects it to match in entirety 183 // whereas testing ".*collName.*" will test the string contains this Pattern 184 Pattern collNameRegex = Pattern.compile(".*"+collName+".*"); 185 186 /*String[] items = collection_list.contents(); 187 for(String item : items) { 188 System.err.println("@@@ ITEM: " + item); 189 }*/ 190 191 192 //JListItemFixture collItem = collection_list.item(collNameRegex); 193 //collItem.click(); 194 //collection_list.requireSelection(collNameRegex); // assert that the requested collection exists 195 //collItem.doubleClick(); 196 collection_list.selectItem(collNameRegex); 197 collection_list.requireSelection(collNameRegex); // assert that the requested collection exists 198 199 200 /*String[] selections = collection_list.selection(); 201 for(String s : selections) { 202 System.err.println("@@@ opening collection " + s); 203 }*/ 204 205 JListItemFixture selectedColl = collection_list.item(collNameRegex); 206 //collection_list.doubleClick(); // will double-click on last item regardless of what's selected 207 selectedColl.doubleClick(); 208 209 //steal any lock 210 /* 211 DialogFixture dialog = window.dialog("LockFileDialog"); 212 if(dialog != null) { 213 dialog.button("LockFileDialog.ok_button").click(); 214 } 215 */ 216 } 217 218 /** 219 * @param exportColl has to be internal GS collection name, e.g. lucene-jdbm-demo 220 * not public collection name like "Demo Collection". 221 */ 222 public static void exportCollection(FrameFixture window, String exportToFormat, String exportColl) 223 { 224 openMenuItem(window, "file", "exportas"); // Clicks MenuBar.file -> MenuBar.file_exportas 225 226 DialogFixture dialog = window.dialog("ExportAsPrompt"); 227 dialog.comboBox("ExportAsPrompt.saveas_combobox").selectItem(exportToFormat); 228 229 Pattern collNameRegex = Pattern.compile(".*"+exportColl+".*"); 230 JListFixture collection_list = dialog.list("ExportAsPrompt.list"); 231 collection_list.selectItem(collNameRegex); //JList of collections 232 collection_list.requireSelection(collNameRegex); // check it exists 233 234 dialog.button("ExportAsPrompt.ok_button").click(); // do export 235 236 // first we see a progress dialog 237 238 // Wait for subsequent export complete dialog 239 DialogFixture exportCompleteDialog = window.dialog("SimpleResultDialog", Timeout.timeout(30*SECOND)); 240 241 // non-modal dialog, so give it focus, so we can close it through its Close button 242 exportCompleteDialog.focus(); 243 244 //exportCompleteDialog.button().click(); 245 exportCompleteDialog.button("SimpleResultDialog.GLIButton."+Dictionary.get("General.Close")).click(); // it only has a single button: "Close", still want to future proof if more buttons get added by specifying the particular button 246 247 248 // Close outer dialog too - cancel doubles as close button now that export is complete 249 dialog.button("ExportAsPrompt.cancel_button").click(); 250 251 File file = new File(System.getenv("GSDLHOME") + File.separator + "tmp" + File.separator + "exported_"+exportColl+"_"+exportToFormat); 252 253 Assert.assertTrue(file.exists()); 254 Assert.assertTrue(file.isDirectory()); 255 } 71 256 72 257 /*************** DESIGN ******************************/
Note:
See TracChangeset
for help on using the changeset viewer.