1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski package svt.gui; 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski import static org.openoffice.test.common.Testspace.*; 25*b1cdbd2cSJim Jagielski import static org.openoffice.test.vcl.Tester.*; 26*b1cdbd2cSJim Jagielski import static testlib.gui.AppTool.*; 27*b1cdbd2cSJim Jagielski import static testlib.gui.UIMap.*; 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski import java.io.File; 30*b1cdbd2cSJim Jagielski import java.util.ArrayList; 31*b1cdbd2cSJim Jagielski import java.util.Collection; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import junit.framework.Assert; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski import org.junit.After; 36*b1cdbd2cSJim Jagielski import org.junit.Before; 37*b1cdbd2cSJim Jagielski import org.junit.Rule; 38*b1cdbd2cSJim Jagielski import org.junit.Test; 39*b1cdbd2cSJim Jagielski import org.junit.runner.RunWith; 40*b1cdbd2cSJim Jagielski import org.junit.runners.Parameterized; 41*b1cdbd2cSJim Jagielski import org.junit.runners.Parameterized.Parameters; 42*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Condition; 43*b1cdbd2cSJim Jagielski import org.openoffice.test.common.FileUtil; 44*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Logger; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski import testlib.gui.SDTool; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski @RunWith(Parameterized.class) 49*b1cdbd2cSJim Jagielski public class TestSample { 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski public static String repos = "samples"; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski public static String[][] params = {}; 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski @Parameters data()56*b1cdbd2cSJim Jagielski public static Collection<Object[]> data() { 57*b1cdbd2cSJim Jagielski File dir = new File(repos); 58*b1cdbd2cSJim Jagielski ArrayList<Object[]> list = new ArrayList<Object[]>(); 59*b1cdbd2cSJim Jagielski collect(dir, list); 60*b1cdbd2cSJim Jagielski return list; 61*b1cdbd2cSJim Jagielski } 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski /** 64*b1cdbd2cSJim Jagielski * @see <a href="http://www.ibm.com">Manual Case</a> 65*b1cdbd2cSJim Jagielski * @param dir 66*b1cdbd2cSJim Jagielski * @param list 67*b1cdbd2cSJim Jagielski */ collect(File dir, ArrayList<Object[]> list)68*b1cdbd2cSJim Jagielski public static void collect(File dir, ArrayList<Object[]> list) { 69*b1cdbd2cSJim Jagielski File[] files = dir.listFiles(); 70*b1cdbd2cSJim Jagielski if (files == null) 71*b1cdbd2cSJim Jagielski return; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski for (File file : files) { 74*b1cdbd2cSJim Jagielski if (file.isDirectory()) { 75*b1cdbd2cSJim Jagielski collect(file, list); 76*b1cdbd2cSJim Jagielski } else { 77*b1cdbd2cSJim Jagielski String fileName = file.getName().toLowerCase(); 78*b1cdbd2cSJim Jagielski for (String[] param : params) { 79*b1cdbd2cSJim Jagielski String filter = param[0]; 80*b1cdbd2cSJim Jagielski if (filter != null && fileName.matches(filter)) { 81*b1cdbd2cSJim Jagielski Object[] data = { file, param[1], param[2] }; 82*b1cdbd2cSJim Jagielski list.add(data); 83*b1cdbd2cSJim Jagielski System.out.println(file + param[1] + param[2]); 84*b1cdbd2cSJim Jagielski break; 85*b1cdbd2cSJim Jagielski } 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski } 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski private static final String writerFilter = ".*\\.((odt)|(ott)|(sxw)|(stw)|(doc)|(dot)|(docx)|(docm)|(dotx)|(dotm))$"; 92*b1cdbd2cSJim Jagielski private static final String calcFilter = ".*\\.((ods)|(ots)|(sxc)|(stc)|(xls)|(xlt)|(xlsx)|(xltx)|(xlsm)|(xltm))$"; 93*b1cdbd2cSJim Jagielski private static final String impressFilter = ".*\\.((odp)|(otp)|(sxi)|(sti)|(ppt)|(pot)|(pptx)|(pptm)|(potm)|(potx))$"; 94*b1cdbd2cSJim Jagielski private static final String drawFilter = ".*\\.((odg)|(otg)|(sxd)|(sxt))$"; 95*b1cdbd2cSJim Jagielski private static final String databaseFilter = ".*\\.(odb)$"; 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski @Rule 98*b1cdbd2cSJim Jagielski public Logger log = Logger.getLogger(this); 99*b1cdbd2cSJim Jagielski private File originalFile = null; 100*b1cdbd2cSJim Jagielski private String saveas = null; 101*b1cdbd2cSJim Jagielski private String editor = null; 102*b1cdbd2cSJim Jagielski private File file = null; 103*b1cdbd2cSJim Jagielski private String saveTo = null; 104*b1cdbd2cSJim Jagielski private boolean passed = false; 105*b1cdbd2cSJim Jagielski TestSample(File file, String saveas, String editor)106*b1cdbd2cSJim Jagielski public TestSample(File file, String saveas, String editor) { 107*b1cdbd2cSJim Jagielski this.originalFile = file; 108*b1cdbd2cSJim Jagielski this.saveas = saveas; 109*b1cdbd2cSJim Jagielski this.editor = editor; 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski /** 113*b1cdbd2cSJim Jagielski * @throws java.lang.Exception 114*b1cdbd2cSJim Jagielski */ 115*b1cdbd2cSJim Jagielski @Before setUp()116*b1cdbd2cSJim Jagielski public void setUp() { 117*b1cdbd2cSJim Jagielski app.start(); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski FileUtil.deleteFile(getPath("temp")); 120*b1cdbd2cSJim Jagielski File temp = new File(getPath("temp")); 121*b1cdbd2cSJim Jagielski temp.mkdirs(); 122*b1cdbd2cSJim Jagielski log.info("Load sample file from \"" + originalFile.getAbsolutePath() + "\""); 123*b1cdbd2cSJim Jagielski file = new File(temp + "/origin", "sample." + FileUtil.getFileExtName(originalFile.getName()) /* 124*b1cdbd2cSJim Jagielski * file 125*b1cdbd2cSJim Jagielski * . 126*b1cdbd2cSJim Jagielski * getName 127*b1cdbd2cSJim Jagielski * ( 128*b1cdbd2cSJim Jagielski * ) 129*b1cdbd2cSJim Jagielski */); 130*b1cdbd2cSJim Jagielski FileUtil.copyFile(originalFile, file); // We use the copy to do test 131*b1cdbd2cSJim Jagielski saveTo = getPath("temp/" + file.getName() + (saveas == null ? "" : "." + saveas)); 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski @After tearDown()135*b1cdbd2cSJim Jagielski public void tearDown() { 136*b1cdbd2cSJim Jagielski if (!passed) { 137*b1cdbd2cSJim Jagielski // Collect the failed sample files. 138*b1cdbd2cSJim Jagielski File failedDir = new File(getPath("output/TestSample.Failed")); 139*b1cdbd2cSJim Jagielski FileUtil.copyFile(originalFile, new File(failedDir, originalFile.getName())); 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski } 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski @Test test()144*b1cdbd2cSJim Jagielski public void test() { 145*b1cdbd2cSJim Jagielski if (editor == null) { 146*b1cdbd2cSJim Jagielski String name = file.getName(); 147*b1cdbd2cSJim Jagielski if (name.matches(writerFilter)) { 148*b1cdbd2cSJim Jagielski testWriter(); 149*b1cdbd2cSJim Jagielski } else if (name.matches(calcFilter)) { 150*b1cdbd2cSJim Jagielski testCalc(); 151*b1cdbd2cSJim Jagielski } else if (name.matches(impressFilter)) { 152*b1cdbd2cSJim Jagielski testImpress(); 153*b1cdbd2cSJim Jagielski } else if (name.matches(drawFilter)) { 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski } else if (name.matches(databaseFilter)) { 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski } else { 158*b1cdbd2cSJim Jagielski Assert.assertTrue("It's supported", false); 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski } else { 161*b1cdbd2cSJim Jagielski if (editor.equals("writer")) 162*b1cdbd2cSJim Jagielski testWriter(); 163*b1cdbd2cSJim Jagielski if (editor.equals("calc")) 164*b1cdbd2cSJim Jagielski testCalc(); 165*b1cdbd2cSJim Jagielski if (editor.equals("impress")) 166*b1cdbd2cSJim Jagielski testImpress(); 167*b1cdbd2cSJim Jagielski if (editor.equals("draw")) 168*b1cdbd2cSJim Jagielski testDraw(); 169*b1cdbd2cSJim Jagielski if (editor.equals("database")) 170*b1cdbd2cSJim Jagielski testDatabase(); 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski testDatabase()174*b1cdbd2cSJim Jagielski private void testDatabase() { 175*b1cdbd2cSJim Jagielski // TODO Auto-generated method stub 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski } 178*b1cdbd2cSJim Jagielski testDraw()179*b1cdbd2cSJim Jagielski private void testDraw() { 180*b1cdbd2cSJim Jagielski // TODO Auto-generated method stub 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski testWriter()184*b1cdbd2cSJim Jagielski public void testWriter() { 185*b1cdbd2cSJim Jagielski open(file.getAbsolutePath()); 186*b1cdbd2cSJim Jagielski handleBlocker(writer); 187*b1cdbd2cSJim Jagielski sleep(10); 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski // Assert.assertTrue("File Passed:" + file, 190*b1cdbd2cSJim Jagielski // writer.getCaption().contains(file.getName())); 191*b1cdbd2cSJim Jagielski saveAs(saveTo); 192*b1cdbd2cSJim Jagielski if (alienFormatDlg.exists(3)) 193*b1cdbd2cSJim Jagielski alienFormatDlg.ok(); 194*b1cdbd2cSJim Jagielski sleep(2); 195*b1cdbd2cSJim Jagielski writer.waitForEnabled(120, 2); 196*b1cdbd2cSJim Jagielski close(); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski open(saveTo); 199*b1cdbd2cSJim Jagielski handleBlocker(writer); 200*b1cdbd2cSJim Jagielski sleep(10); 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski // Assert.assertTrue("File Passed:" + file, 203*b1cdbd2cSJim Jagielski // writer.getCaption().contains(file.getName())); 204*b1cdbd2cSJim Jagielski close(); 205*b1cdbd2cSJim Jagielski passed = true; 206*b1cdbd2cSJim Jagielski } 207*b1cdbd2cSJim Jagielski testCalc()208*b1cdbd2cSJim Jagielski public void testCalc() { 209*b1cdbd2cSJim Jagielski startcenter.menuItem("File->Open...").select(); 210*b1cdbd2cSJim Jagielski submitOpenDlg(file.getAbsolutePath()); 211*b1cdbd2cSJim Jagielski handleBlocker(calc); 212*b1cdbd2cSJim Jagielski sleep(10); // Wait. Crash maybe occurs when the file is shown! 213*b1cdbd2cSJim Jagielski 214*b1cdbd2cSJim Jagielski // Assert.assertTrue("File Passed:" + file, 215*b1cdbd2cSJim Jagielski // calc.getCaption().contains(file.getName())); 216*b1cdbd2cSJim Jagielski 217*b1cdbd2cSJim Jagielski calc.menuItem("File->Save As...").select(); 218*b1cdbd2cSJim Jagielski submitSaveDlg(saveTo); 219*b1cdbd2cSJim Jagielski if (alienFormatDlg.exists(3)) 220*b1cdbd2cSJim Jagielski alienFormatDlg.ok(); 221*b1cdbd2cSJim Jagielski sleep(2); 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski new Condition() { 224*b1cdbd2cSJim Jagielski @Override 225*b1cdbd2cSJim Jagielski public boolean value() { 226*b1cdbd2cSJim Jagielski if (msgBox_AdditionalRowsNotSaved.exists()) { 227*b1cdbd2cSJim Jagielski msgBox_AdditionalRowsNotSaved.ok(); 228*b1cdbd2cSJim Jagielski } 229*b1cdbd2cSJim Jagielski return calc.isEnabled(); 230*b1cdbd2cSJim Jagielski } 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski }.waitForTrue("Time out to wait the control to be enabled!", 120, 2); 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski calc.menuItem("File->Close").select(); 235*b1cdbd2cSJim Jagielski openStartcenter(); 236*b1cdbd2cSJim Jagielski // Reopen the saved file 237*b1cdbd2cSJim Jagielski startcenter.menuItem("File->Open...").select(); 238*b1cdbd2cSJim Jagielski submitOpenDlg(saveTo); 239*b1cdbd2cSJim Jagielski handleBlocker(calc); 240*b1cdbd2cSJim Jagielski sleep(10); 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski // Assert.assertTrue("File Passed:" + file, 243*b1cdbd2cSJim Jagielski // calc.getCaption().contains(file.getName())); 244*b1cdbd2cSJim Jagielski calc.menuItem("File->Close").select(); 245*b1cdbd2cSJim Jagielski passed = true; 246*b1cdbd2cSJim Jagielski } 247*b1cdbd2cSJim Jagielski testImpress()248*b1cdbd2cSJim Jagielski public void testImpress() { 249*b1cdbd2cSJim Jagielski startcenter.menuItem("File->Open...").select(); 250*b1cdbd2cSJim Jagielski submitOpenDlg(file.getAbsolutePath()); 251*b1cdbd2cSJim Jagielski handleBlocker(impress, impressSlideSorter, impressOutline, impressHandout); 252*b1cdbd2cSJim Jagielski sleep(10); // Wait. Crash maybe occurs when the file is shown! 253*b1cdbd2cSJim Jagielski SDTool.getActiveView().menuItem("View->Normal").select(); 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski // Assert.assertTrue("File Passed:" + file, 256*b1cdbd2cSJim Jagielski // impress.getCaption().contains(file.getName())); 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski impress.menuItem("File->Save As...").select(); 259*b1cdbd2cSJim Jagielski submitSaveDlg(saveTo); 260*b1cdbd2cSJim Jagielski if (alienFormatDlg.exists(3)) 261*b1cdbd2cSJim Jagielski alienFormatDlg.ok(); 262*b1cdbd2cSJim Jagielski sleep(2); 263*b1cdbd2cSJim Jagielski impress.waitForEnabled(120, 2); 264*b1cdbd2cSJim Jagielski impress.menuItem("File->Close").select(); 265*b1cdbd2cSJim Jagielski openStartcenter(); 266*b1cdbd2cSJim Jagielski // Reopen the saved file 267*b1cdbd2cSJim Jagielski startcenter.menuItem("File->Open...").select(); 268*b1cdbd2cSJim Jagielski submitOpenDlg(saveTo); 269*b1cdbd2cSJim Jagielski handleBlocker(impress); 270*b1cdbd2cSJim Jagielski sleep(10); // Wait. 271*b1cdbd2cSJim Jagielski 272*b1cdbd2cSJim Jagielski // Assert.assertTrue("File Passed:" + file, 273*b1cdbd2cSJim Jagielski // impress.getCaption().contains(file.getName())); 274*b1cdbd2cSJim Jagielski impress.menuItem("File->Close").select(); 275*b1cdbd2cSJim Jagielski passed = true; 276*b1cdbd2cSJim Jagielski } 277*b1cdbd2cSJim Jagielski } 278