1*64c71966SSteve Yin /************************************************************** 2*64c71966SSteve Yin * 3*64c71966SSteve Yin * Licensed to the Apache Software Foundation (ASF) under one 4*64c71966SSteve Yin * or more contributor license agreements. See the NOTICE file 5*64c71966SSteve Yin * distributed with this work for additional information 6*64c71966SSteve Yin * regarding copyright ownership. The ASF licenses this file 7*64c71966SSteve Yin * to you under the Apache License, Version 2.0 (the 8*64c71966SSteve Yin * "License"); you may not use this file except in compliance 9*64c71966SSteve Yin * with the License. You may obtain a copy of the License at 10*64c71966SSteve Yin * 11*64c71966SSteve Yin * http://www.apache.org/licenses/LICENSE-2.0 12*64c71966SSteve Yin * 13*64c71966SSteve Yin * Unless required by applicable law or agreed to in writing, 14*64c71966SSteve Yin * software distributed under the License is distributed on an 15*64c71966SSteve Yin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*64c71966SSteve Yin * KIND, either express or implied. See the License for the 17*64c71966SSteve Yin * specific language governing permissions and limitations 18*64c71966SSteve Yin * under the License. 19*64c71966SSteve Yin * 20*64c71966SSteve Yin *************************************************************/ 21*64c71966SSteve Yin 22*64c71966SSteve Yin /** 23*64c71966SSteve Yin * 24*64c71966SSteve Yin */ 25*64c71966SSteve Yin package bvt.gui; 26*64c71966SSteve Yin 27*64c71966SSteve Yin import static org.openoffice.test.common.Testspace.*; 28*64c71966SSteve Yin import static testlib.gui.AppTool.*; 29*64c71966SSteve Yin import static testlib.gui.UIMap.*; 30*64c71966SSteve Yin 31*64c71966SSteve Yin import java.io.*; 32*64c71966SSteve Yin import java.util.ArrayList; 33*64c71966SSteve Yin import java.util.Arrays; 34*64c71966SSteve Yin import java.util.List; 35*64c71966SSteve Yin import java.util.ListIterator; 36*64c71966SSteve Yin import java.util.concurrent.TimeoutException; 37*64c71966SSteve Yin import java.io.File; 38*64c71966SSteve Yin import java.io.FileNotFoundException; 39*64c71966SSteve Yin import java.io.IOException; 40*64c71966SSteve Yin import java.io.Reader; 41*64c71966SSteve Yin import java.io.InputStreamReader; 42*64c71966SSteve Yin import java.lang.RuntimeException; 43*64c71966SSteve Yin 44*64c71966SSteve Yin import org.junit.After; 45*64c71966SSteve Yin import org.junit.AfterClass; 46*64c71966SSteve Yin import org.junit.Before; 47*64c71966SSteve Yin import org.junit.BeforeClass; 48*64c71966SSteve Yin import org.junit.Rule; 49*64c71966SSteve Yin import org.junit.Test; 50*64c71966SSteve Yin import org.openoffice.test.common.Condition; 51*64c71966SSteve Yin import org.openoffice.test.common.DataSheet; 52*64c71966SSteve Yin import org.openoffice.test.common.FileUtil; 53*64c71966SSteve Yin import org.openoffice.test.common.Logger; 54*64c71966SSteve Yin import org.openoffice.test.common.Testspace; 55*64c71966SSteve Yin import org.openoffice.test.vcl.widgets.VclDialog; 56*64c71966SSteve Yin 57*64c71966SSteve Yin /** 58*64c71966SSteve Yin * 59*64c71966SSteve Yin */ 60*64c71966SSteve Yin class TestType { 61*64c71966SSteve Yin 62*64c71966SSteve Yin public TestType(boolean doc, boolean spread, boolean slide) { 63*64c71966SSteve Yin documentT = doc; 64*64c71966SSteve Yin spreadsheetT = spread; 65*64c71966SSteve Yin slideT = slide; 66*64c71966SSteve Yin } 67*64c71966SSteve Yin 68*64c71966SSteve Yin public boolean documentT; 69*64c71966SSteve Yin public boolean spreadsheetT; 70*64c71966SSteve Yin public boolean slideT; 71*64c71966SSteve Yin }; 72*64c71966SSteve Yin 73*64c71966SSteve Yin class ContinuePoint { 74*64c71966SSteve Yin public String path; 75*64c71966SSteve Yin public int i; 76*64c71966SSteve Yin 77*64c71966SSteve Yin ContinuePoint() { 78*64c71966SSteve Yin path = ""; 79*64c71966SSteve Yin i = 0; 80*64c71966SSteve Yin } 81*64c71966SSteve Yin } 82*64c71966SSteve Yin 83*64c71966SSteve Yin public class FileExport { 84*64c71966SSteve Yin // for example 85*64c71966SSteve Yin // the path is "D:\\aoo\\utaoo\\testspace\\ooxmlsamples" 86*64c71966SSteve Yin String samplespath = "";// a dir 87*64c71966SSteve Yin String outpath = ""; // a dir 88*64c71966SSteve Yin static double timeout = 100; 89*64c71966SSteve Yin static double interval = 0.1; 90*64c71966SSteve Yin double sleeptime = 1; 91*64c71966SSteve Yin boolean bContinue = false;// if failed,next execute from the continue point 92*64c71966SSteve Yin TestType atest = new TestType(true, true, true);// doc,spreadsheet,slide 93*64c71966SSteve Yin ContinuePoint thepoint = null; 94*64c71966SSteve Yin BufferedWriter fwContinue = null; 95*64c71966SSteve Yin String testedlogfile = ""; 96*64c71966SSteve Yin 97*64c71966SSteve Yin private static DataSheet result; 98*64c71966SSteve Yin private String scenario = null; 99*64c71966SSteve Yin private File sourceFile = null; 100*64c71966SSteve Yin 101*64c71966SSteve Yin public static final VclDialog passwdDlg = dialog(""); 102*64c71966SSteve Yin 103*64c71966SSteve Yin public List<String> recursionfiles(File path, List<String> resultFileName) { 104*64c71966SSteve Yin File[] files = path.listFiles(); 105*64c71966SSteve Yin if (files == null) 106*64c71966SSteve Yin return resultFileName; 107*64c71966SSteve Yin for (File f : files) { 108*64c71966SSteve Yin if (f.isDirectory()) {// a path 109*64c71966SSteve Yin if (!f.isHidden() && !f.getName().startsWith(".")) { 110*64c71966SSteve Yin sampledirs.add(f.getPath()); 111*64c71966SSteve Yin recursionfiles(f, resultFileName); 112*64c71966SSteve Yin } 113*64c71966SSteve Yin } else {// a file 114*64c71966SSteve Yin if (!f.isHidden() && !f.getName().startsWith(".")) { 115*64c71966SSteve Yin String apath = f.getPath(); 116*64c71966SSteve Yin 117*64c71966SSteve Yin int sepIndex = apath.indexOf("\\"); 118*64c71966SSteve Yin String userpath = apath.substring(sepIndex); 119*64c71966SSteve Yin String newpath = outpath + userpath; 120*64c71966SSteve Yin 121*64c71966SSteve Yin File file = new File(newpath); 122*64c71966SSteve Yin File parent = file.getParentFile(); 123*64c71966SSteve Yin if (parent != null && !parent.exists()) { 124*64c71966SSteve Yin parent.mkdirs(); 125*64c71966SSteve Yin } 126*64c71966SSteve Yin resultFileName.add(f.getPath()); 127*64c71966SSteve Yin } 128*64c71966SSteve Yin } 129*64c71966SSteve Yin } 130*64c71966SSteve Yin return resultFileName; 131*64c71966SSteve Yin } 132*64c71966SSteve Yin 133*64c71966SSteve Yin private String getrealoutpath(String p) { 134*64c71966SSteve Yin String apath = p; 135*64c71966SSteve Yin 136*64c71966SSteve Yin int sepIndex = apath.indexOf("\\"); 137*64c71966SSteve Yin int sepIndexLast = apath.lastIndexOf("\\"); 138*64c71966SSteve Yin String userpath = apath.substring(sepIndex, sepIndexLast); 139*64c71966SSteve Yin String newpath = outpath + userpath; 140*64c71966SSteve Yin File tempFolderFile = new File(newpath); 141*64c71966SSteve Yin if (!tempFolderFile.exists()) { 142*64c71966SSteve Yin tempFolderFile.mkdirs(); 143*64c71966SSteve Yin } 144*64c71966SSteve Yin return newpath; 145*64c71966SSteve Yin } 146*64c71966SSteve Yin 147*64c71966SSteve Yin private List<String> samplelist = null; 148*64c71966SSteve Yin private List<String> sampledirs = null; 149*64c71966SSteve Yin 150*64c71966SSteve Yin @Rule 151*64c71966SSteve Yin public Logger log = Logger.getLogger(this); 152*64c71966SSteve Yin 153*64c71966SSteve Yin @BeforeClass 154*64c71966SSteve Yin public static void beforeClass() { 155*64c71966SSteve Yin app.clean(); 156*64c71966SSteve Yin } 157*64c71966SSteve Yin 158*64c71966SSteve Yin @AfterClass 159*64c71966SSteve Yin public static void afterClass() { 160*64c71966SSteve Yin app.stop(); 161*64c71966SSteve Yin } 162*64c71966SSteve Yin 163*64c71966SSteve Yin @Before 164*64c71966SSteve Yin public void before() { 165*64c71966SSteve Yin 166*64c71966SSteve Yin } 167*64c71966SSteve Yin 168*64c71966SSteve Yin @After 169*64c71966SSteve Yin public void after() throws Exception { 170*64c71966SSteve Yin app.stop(); 171*64c71966SSteve Yin } 172*64c71966SSteve Yin 173*64c71966SSteve Yin void getcontinuepoint() { 174*64c71966SSteve Yin 175*64c71966SSteve Yin if (bContinue == false) { 176*64c71966SSteve Yin thepoint.path = ""; 177*64c71966SSteve Yin thepoint.i = 0; 178*64c71966SSteve Yin return; 179*64c71966SSteve Yin } 180*64c71966SSteve Yin File ftestedlog = new File(testedlogfile); 181*64c71966SSteve Yin Reader reader = null; 182*64c71966SSteve Yin try { 183*64c71966SSteve Yin reader = new InputStreamReader(new FileInputStream(ftestedlog)); 184*64c71966SSteve Yin } catch (FileNotFoundException e1) { 185*64c71966SSteve Yin // TODO Auto-generated catch block 186*64c71966SSteve Yin e1.printStackTrace(); 187*64c71966SSteve Yin } 188*64c71966SSteve Yin 189*64c71966SSteve Yin BufferedReader br = new BufferedReader(reader); 190*64c71966SSteve Yin 191*64c71966SSteve Yin String line = null; 192*64c71966SSteve Yin int countline = 0; 193*64c71966SSteve Yin int m = 0; 194*64c71966SSteve Yin try { 195*64c71966SSteve Yin if ((line = br.readLine()) != null) { 196*64c71966SSteve Yin if (countline == 0) { 197*64c71966SSteve Yin thepoint.path = line; 198*64c71966SSteve Yin } else { 199*64c71966SSteve Yin 200*64c71966SSteve Yin m = Integer.parseInt(line); 201*64c71966SSteve Yin if (m > 0) 202*64c71966SSteve Yin thepoint.i = m; 203*64c71966SSteve Yin } 204*64c71966SSteve Yin } 205*64c71966SSteve Yin } catch (NumberFormatException e1) { 206*64c71966SSteve Yin // TODO Auto-generated catch block 207*64c71966SSteve Yin e1.printStackTrace(); 208*64c71966SSteve Yin } catch (IOException e1) { 209*64c71966SSteve Yin // TODO Auto-generated catch block 210*64c71966SSteve Yin e1.printStackTrace(); 211*64c71966SSteve Yin } 212*64c71966SSteve Yin } 213*64c71966SSteve Yin 214*64c71966SSteve Yin /** 215*64c71966SSteve Yin * Test Open/SaveAs ooxml file by Aoo 216*64c71966SSteve Yin * 217*64c71966SSteve Yin * @throws Exception 218*64c71966SSteve Yin */ 219*64c71966SSteve Yin @Test 220*64c71966SSteve Yin public void testSaveAs() throws Exception { 221*64c71966SSteve Yin samplelist = new ArrayList<String>(); 222*64c71966SSteve Yin sampledirs = new ArrayList<String>(); 223*64c71966SSteve Yin thepoint = new ContinuePoint(); 224*64c71966SSteve Yin File spacepath = Testspace.getFile("output");// ..\\testspace\\output 225*64c71966SSteve Yin String absspath = spacepath.getAbsolutePath(); 226*64c71966SSteve Yin int n = absspath.indexOf("testgui"); 227*64c71966SSteve Yin String abspre = absspath.substring(0, n); 228*64c71966SSteve Yin 229*64c71966SSteve Yin result = new DataSheet(getFile("outputlog/" 230*64c71966SSteve Yin + FileExport.class.getName() + ".xml")); 231*64c71966SSteve Yin result.addRow("data", "File Path", "File Size", "Scenario", 232*64c71966SSteve Yin "Exported File Path", "Exported File Size", "Result", "Error"); 233*64c71966SSteve Yin 234*64c71966SSteve Yin testedlogfile = abspre + "testgui\\cases_tested.txt"; 235*64c71966SSteve Yin samplespath = "samples"; 236*64c71966SSteve Yin 237*64c71966SSteve Yin if (outpath.length() == 0) { 238*64c71966SSteve Yin File workspacepath = Testspace.getFile("output");// ..\\testspace\\output 239*64c71966SSteve Yin outpath = workspacepath.getAbsolutePath(); 240*64c71966SSteve Yin 241*64c71966SSteve Yin // outpath = "D:\\AOOautomation\\Docs sample files\\out"; 242*64c71966SSteve Yin } 243*64c71966SSteve Yin 244*64c71966SSteve Yin if (bContinue) 245*64c71966SSteve Yin getcontinuepoint(); 246*64c71966SSteve Yin 247*64c71966SSteve Yin File samplesDir = Testspace.getFile(samplespath); 248*64c71966SSteve Yin recursionfiles(samplesDir, samplelist); 249*64c71966SSteve Yin ListIterator<String> it = sampledirs.listIterator(); 250*64c71966SSteve Yin 251*64c71966SSteve Yin boolean bstartfromthis = false; 252*64c71966SSteve Yin while (it.hasNext()) { 253*64c71966SSteve Yin 254*64c71966SSteve Yin String str = (String) it.next(); 255*64c71966SSteve Yin if (!bContinue) { 256*64c71966SSteve Yin File afiledir = new File(str); 257*64c71966SSteve Yin dotest(afiledir); 258*64c71966SSteve Yin } else { 259*64c71966SSteve Yin File file = new File(thepoint.path); 260*64c71966SSteve Yin File parent = file.getParentFile(); 261*64c71966SSteve Yin if (parent != null) { 262*64c71966SSteve Yin String pathbegin = parent.getAbsolutePath(); 263*64c71966SSteve Yin if (pathbegin.equalsIgnoreCase(str)) { 264*64c71966SSteve Yin bstartfromthis = true; 265*64c71966SSteve Yin 266*64c71966SSteve Yin } 267*64c71966SSteve Yin } 268*64c71966SSteve Yin if (bstartfromthis == true) { 269*64c71966SSteve Yin File afiledir = new File(str); 270*64c71966SSteve Yin dotest(afiledir); 271*64c71966SSteve Yin } 272*64c71966SSteve Yin } 273*64c71966SSteve Yin } 274*64c71966SSteve Yin } 275*64c71966SSteve Yin 276*64c71966SSteve Yin public void dotest(File samplesDir) throws Exception { 277*64c71966SSteve Yin FilenameFilter testFilter = new FilenameFilter() { 278*64c71966SSteve Yin public boolean accept(File file, String name) { 279*64c71966SSteve Yin if (name.endsWith(".doc") || name.endsWith(".docx") 280*64c71966SSteve Yin || name.endsWith(".dot") || name.endsWith(".xls") 281*64c71966SSteve Yin || name.endsWith(".xlsx") || name.endsWith(".ods") 282*64c71966SSteve Yin || name.endsWith(".ppt") || name.endsWith(".pptx") 283*64c71966SSteve Yin || name.endsWith(".odp")) { 284*64c71966SSteve Yin // filters files 285*64c71966SSteve Yin return true; 286*64c71966SSteve Yin } else { 287*64c71966SSteve Yin return false; 288*64c71966SSteve Yin } 289*64c71966SSteve Yin } 290*64c71966SSteve Yin }; 291*64c71966SSteve Yin File[] files = samplesDir.listFiles(testFilter); 292*64c71966SSteve Yin Arrays.sort(files); 293*64c71966SSteve Yin int nfiles = files.length; 294*64c71966SSteve Yin if (nfiles == 0) 295*64c71966SSteve Yin return; 296*64c71966SSteve Yin 297*64c71966SSteve Yin int i = thepoint.i; 298*64c71966SSteve Yin for (; i < nfiles; i++) { 299*64c71966SSteve Yin File afile = files[i]; 300*64c71966SSteve Yin String path = afile.getAbsolutePath(); 301*64c71966SSteve Yin 302*64c71966SSteve Yin String extName = FileUtil.getFileExtName(path).toLowerCase(); 303*64c71966SSteve Yin boolean bShouldTest = false; 304*64c71966SSteve Yin if (extName.equals("doc") || extName.equals("docx") 305*64c71966SSteve Yin || extName.equals("odt")) { 306*64c71966SSteve Yin bShouldTest = true; 307*64c71966SSteve Yin if (atest.documentT == false) 308*64c71966SSteve Yin continue; 309*64c71966SSteve Yin } 310*64c71966SSteve Yin if (extName.equals("ppt") || extName.equals("pptx") 311*64c71966SSteve Yin || extName.equals("odp")) { 312*64c71966SSteve Yin bShouldTest = true; 313*64c71966SSteve Yin if (atest.slideT == false) 314*64c71966SSteve Yin continue; 315*64c71966SSteve Yin } 316*64c71966SSteve Yin if (extName.equals("xls") || extName.equals("xlsx") 317*64c71966SSteve Yin || extName.equals("ods")) { 318*64c71966SSteve Yin bShouldTest = true; 319*64c71966SSteve Yin if (atest.spreadsheetT == false) 320*64c71966SSteve Yin continue; 321*64c71966SSteve Yin } 322*64c71966SSteve Yin if (!bShouldTest) 323*64c71966SSteve Yin continue; 324*64c71966SSteve Yin String exportname = "aoo_" + afile.getName(); 325*64c71966SSteve Yin 326*64c71966SSteve Yin sourceFile = new File(path); 327*64c71966SSteve Yin 328*64c71966SSteve Yin app.stop(); 329*64c71966SSteve Yin app.start(); 330*64c71966SSteve Yin 331*64c71966SSteve Yin if(!Open(path)){ 332*64c71966SSteve Yin continue; 333*64c71966SSteve Yin } 334*64c71966SSteve Yin 335*64c71966SSteve Yin String newpath = getrealoutpath(path); 336*64c71966SSteve Yin 337*64c71966SSteve Yin // do testing 338*64c71966SSteve Yin if (!savetosameformat(exportname, newpath)) { 339*64c71966SSteve Yin continue; 340*64c71966SSteve Yin } 341*64c71966SSteve Yin 342*64c71966SSteve Yin if(!Open(path)) { 343*64c71966SSteve Yin continue; 344*64c71966SSteve Yin 345*64c71966SSteve Yin } 346*64c71966SSteve Yin if (!savetodiffformat(exportname, newpath)) { 347*64c71966SSteve Yin continue; 348*64c71966SSteve Yin } 349*64c71966SSteve Yin 350*64c71966SSteve Yin if(!Open(path)) { 351*64c71966SSteve Yin continue; 352*64c71966SSteve Yin 353*64c71966SSteve Yin } 354*64c71966SSteve Yin 355*64c71966SSteve Yin if (!savetopdfformat(exportname, newpath)) { 356*64c71966SSteve Yin continue; 357*64c71966SSteve Yin } 358*64c71966SSteve Yin } 359*64c71966SSteve Yin } 360*64c71966SSteve Yin 361*64c71966SSteve Yin private boolean Open(String path) throws Exception { 362*64c71966SSteve Yin try { 363*64c71966SSteve Yin open(path); 364*64c71966SSteve Yin if (!app.exists()) 365*64c71966SSteve Yin throw new RuntimeException(); 366*64c71966SSteve Yin HandleBlockers(false); 367*64c71966SSteve Yin if(statusBar.exists(timeout)) 368*64c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 369*64c71966SSteve Yin else 370*64c71966SSteve Yin throw new TimeoutException("time out"); 371*64c71966SSteve Yin HandleBlockers(false); 372*64c71966SSteve Yin if (!app.exists()) 373*64c71966SSteve Yin throw new RuntimeException(); 374*64c71966SSteve Yin return true; 375*64c71966SSteve Yin } catch (Exception e) { 376*64c71966SSteve Yin try { 377*64c71966SSteve Yin String reason = e.getMessage(); 378*64c71966SSteve Yin if (reason == null || reason.isEmpty()) 379*64c71966SSteve Yin reason = "Opening"; 380*64c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 381*64c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", reason); 382*64c71966SSteve Yin } catch (IOException e1) { 383*64c71966SSteve Yin // TODO Auto-generated catch block 384*64c71966SSteve Yin e1.printStackTrace(); 385*64c71966SSteve Yin } 386*64c71966SSteve Yin return false; 387*64c71966SSteve Yin } 388*64c71966SSteve Yin } 389*64c71966SSteve Yin 390*64c71966SSteve Yin private boolean savetosameformat(String file, String outpath) { 391*64c71966SSteve Yin try { 392*64c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 393*64c71966SSteve Yin 394*64c71966SSteve Yin String extName = FileUtil.getFileExtName(file).toLowerCase(); 395*64c71966SSteve Yin 396*64c71966SSteve Yin boolean formatchanged = false; 397*64c71966SSteve Yin if (extName.equals("docx")) { 398*64c71966SSteve Yin extName = "doc"; 399*64c71966SSteve Yin formatchanged = true; 400*64c71966SSteve Yin } else if (extName.equals("pptx")) { 401*64c71966SSteve Yin extName = "ppt"; 402*64c71966SSteve Yin formatchanged = true; 403*64c71966SSteve Yin } else if (extName.equals("xlsx")) { 404*64c71966SSteve Yin extName = "xls"; 405*64c71966SSteve Yin formatchanged = true; 406*64c71966SSteve Yin } 407*64c71966SSteve Yin 408*64c71966SSteve Yin scenario = FileUtil.getFileExtName(file).toLowerCase() + " to " + extName; 409*64c71966SSteve Yin 410*64c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 411*64c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 412*64c71966SSteve Yin String newfile = pre + extName; 413*64c71966SSteve Yin 414*64c71966SSteve Yin String saveTo = reportDir + "\\" + file; 415*64c71966SSteve Yin if (formatchanged) 416*64c71966SSteve Yin saveTo = reportDir + "\\" + newfile; 417*64c71966SSteve Yin // Save the text document 418*64c71966SSteve Yin deleteFile(saveTo); 419*64c71966SSteve Yin SaveAs(saveTo); 420*64c71966SSteve Yin Close(); 421*64c71966SSteve Yin if(!Open(saveTo)) 422*64c71966SSteve Yin return false; 423*64c71966SSteve Yin 424*64c71966SSteve Yin String exception = ""; 425*64c71966SSteve Yin String resultflag = ""; 426*64c71966SSteve Yin try { 427*64c71966SSteve Yin Close(); 428*64c71966SSteve Yin resultflag = "Pass"; 429*64c71966SSteve Yin } catch (Exception e) { 430*64c71966SSteve Yin exception = e.getMessage(); 431*64c71966SSteve Yin resultflag = "Fail"; 432*64c71966SSteve Yin } 433*64c71966SSteve Yin 434*64c71966SSteve Yin File targetFile = new File(saveTo); 435*64c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 436*64c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 437*64c71966SSteve Yin resultflag, exception); 438*64c71966SSteve Yin 439*64c71966SSteve Yin return true; 440*64c71966SSteve Yin } catch (Exception e) { 441*64c71966SSteve Yin try { 442*64c71966SSteve Yin String exception = e.getMessage(); 443*64c71966SSteve Yin if (exception == null || exception.isEmpty()) 444*64c71966SSteve Yin exception = "Saving to the same format"; 445*64c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 446*64c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", exception); 447*64c71966SSteve Yin } catch (IOException e1) { 448*64c71966SSteve Yin // TODO Auto-generated catch block 449*64c71966SSteve Yin e1.printStackTrace(); 450*64c71966SSteve Yin } 451*64c71966SSteve Yin 452*64c71966SSteve Yin return false; 453*64c71966SSteve Yin } 454*64c71966SSteve Yin } 455*64c71966SSteve Yin 456*64c71966SSteve Yin private boolean savetodiffformat(String file, String outpath) { 457*64c71966SSteve Yin try { 458*64c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 459*64c71966SSteve Yin 460*64c71966SSteve Yin String extName = FileUtil.getFileExtName(file).toLowerCase(); 461*64c71966SSteve Yin 462*64c71966SSteve Yin String targetExtName = null; 463*64c71966SSteve Yin 464*64c71966SSteve Yin if (extName.equals("doc") || extName.equals("docx")) 465*64c71966SSteve Yin targetExtName = "odt"; 466*64c71966SSteve Yin else if (extName.equals("ppt") || extName.equals("pptx")) 467*64c71966SSteve Yin targetExtName = "odp"; 468*64c71966SSteve Yin else if (extName.equals("xls") || extName.equals("xlsx")) 469*64c71966SSteve Yin targetExtName = "ods"; 470*64c71966SSteve Yin else if (extName.equals("odt")) 471*64c71966SSteve Yin targetExtName = "doc"; 472*64c71966SSteve Yin else if (extName.equals("odp")) 473*64c71966SSteve Yin targetExtName = "ppt"; 474*64c71966SSteve Yin else if (extName.equals("ods")) 475*64c71966SSteve Yin targetExtName = "xls"; 476*64c71966SSteve Yin 477*64c71966SSteve Yin scenario = extName + " to " + targetExtName; 478*64c71966SSteve Yin 479*64c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 480*64c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 481*64c71966SSteve Yin String saveTo = reportDir + "\\" + pre + targetExtName; 482*64c71966SSteve Yin deleteFile(saveTo); 483*64c71966SSteve Yin // long base = System.currentTimeMillis(); 484*64c71966SSteve Yin SaveAs(saveTo); 485*64c71966SSteve Yin Close(); 486*64c71966SSteve Yin if(!Open(saveTo)) 487*64c71966SSteve Yin return false; 488*64c71966SSteve Yin 489*64c71966SSteve Yin String exception = ""; 490*64c71966SSteve Yin String resultflag = ""; 491*64c71966SSteve Yin try { 492*64c71966SSteve Yin Close(); 493*64c71966SSteve Yin resultflag = "Pass"; 494*64c71966SSteve Yin } catch (Exception e) { 495*64c71966SSteve Yin exception = e.getMessage(); 496*64c71966SSteve Yin resultflag = "Fail"; 497*64c71966SSteve Yin } 498*64c71966SSteve Yin 499*64c71966SSteve Yin File targetFile = new File(saveTo); 500*64c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 501*64c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 502*64c71966SSteve Yin resultflag, exception); 503*64c71966SSteve Yin 504*64c71966SSteve Yin return true; 505*64c71966SSteve Yin } catch (Exception e) { 506*64c71966SSteve Yin try { 507*64c71966SSteve Yin String exception = e.getMessage(); 508*64c71966SSteve Yin if (exception == null || exception.isEmpty()) 509*64c71966SSteve Yin exception = "Saving to a different format"; 510*64c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 511*64c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", exception); 512*64c71966SSteve Yin } catch (IOException e1) { 513*64c71966SSteve Yin // TODO Auto-generated catch block 514*64c71966SSteve Yin e1.printStackTrace(); 515*64c71966SSteve Yin } 516*64c71966SSteve Yin 517*64c71966SSteve Yin return false; 518*64c71966SSteve Yin } 519*64c71966SSteve Yin 520*64c71966SSteve Yin } 521*64c71966SSteve Yin 522*64c71966SSteve Yin private void Close() throws Exception { 523*64c71966SSteve Yin close(); 524*64c71966SSteve Yin HandleBlockers(false); 525*64c71966SSteve Yin } 526*64c71966SSteve Yin 527*64c71966SSteve Yin public static void HandleBlockers(final boolean Positive) throws Exception { 528*64c71966SSteve Yin new Condition() { 529*64c71966SSteve Yin @Override 530*64c71966SSteve Yin public boolean value() { 531*64c71966SSteve Yin while (activeMsgBox.exists()) { 532*64c71966SSteve Yin 533*64c71966SSteve Yin String context = activeMsgBox.getMessage(); 534*64c71966SSteve Yin if (context.toLowerCase().indexOf("has been modified") >= 0 535*64c71966SSteve Yin && context.toLowerCase().indexOf( 536*64c71966SSteve Yin "do you want to save your changes") >= 0) 537*64c71966SSteve Yin throw new RuntimeException("A wrong dirty flag"); 538*64c71966SSteve Yin if (context.toLowerCase().indexOf("read-error") >= 0) 539*64c71966SSteve Yin throw new RuntimeException("Read Error"); 540*64c71966SSteve Yin if (context.toLowerCase().indexOf("does not exist") >= 0) 541*64c71966SSteve Yin throw new RuntimeException("File not exist"); 542*64c71966SSteve Yin 543*64c71966SSteve Yin try { 544*64c71966SSteve Yin if (Positive) 545*64c71966SSteve Yin activeMsgBox.ok(); 546*64c71966SSteve Yin else 547*64c71966SSteve Yin activeMsgBox.no(); 548*64c71966SSteve Yin } catch (Exception e) { 549*64c71966SSteve Yin try { 550*64c71966SSteve Yin if (Positive) 551*64c71966SSteve Yin activeMsgBox.yes(); 552*64c71966SSteve Yin else 553*64c71966SSteve Yin activeMsgBox.no(); 554*64c71966SSteve Yin } catch (Exception e1) { 555*64c71966SSteve Yin try { 556*64c71966SSteve Yin activeMsgBox.doDefault(); 557*64c71966SSteve Yin } catch (Exception e2) { 558*64c71966SSteve Yin try { 559*64c71966SSteve Yin activeMsgBox.ok(); 560*64c71966SSteve Yin } catch (Exception e3) { 561*64c71966SSteve Yin activeMsgBox.yes(); 562*64c71966SSteve Yin } 563*64c71966SSteve Yin } 564*64c71966SSteve Yin } 565*64c71966SSteve Yin } 566*64c71966SSteve Yin } 567*64c71966SSteve Yin if (passwdDlg.exists()) { 568*64c71966SSteve Yin String caption = passwdDlg.getCaption(); 569*64c71966SSteve Yin if (caption.toLowerCase().indexOf( 570*64c71966SSteve Yin "enter password to open file") >= 0) 571*64c71966SSteve Yin throw new RuntimeException("A password protected file"); 572*64c71966SSteve Yin if (caption.toLowerCase().indexOf("properties") >= 0) 573*64c71966SSteve Yin throw new RuntimeException("An unsupported format"); 574*64c71966SSteve Yin if (SupportedFormats(caption)) 575*64c71966SSteve Yin throw new RuntimeException("An unreadable file"); 576*64c71966SSteve Yin } 577*64c71966SSteve Yin return true; 578*64c71966SSteve Yin } 579*64c71966SSteve Yin 580*64c71966SSteve Yin }.test(timeout, interval); 581*64c71966SSteve Yin } 582*64c71966SSteve Yin 583*64c71966SSteve Yin private static boolean SupportedFormats(String filename) { 584*64c71966SSteve Yin if (filename.endsWith(".doc") || filename.endsWith(".docx") 585*64c71966SSteve Yin || filename.endsWith(".dot") || filename.endsWith(".xls") 586*64c71966SSteve Yin || filename.endsWith(".xlsx") || filename.endsWith(".ods") 587*64c71966SSteve Yin || filename.endsWith(".ppt") || filename.endsWith(".pptx") 588*64c71966SSteve Yin || filename.endsWith(".odp")) { 589*64c71966SSteve Yin return true; 590*64c71966SSteve Yin } else { 591*64c71966SSteve Yin return false; 592*64c71966SSteve Yin } 593*64c71966SSteve Yin } 594*64c71966SSteve Yin 595*64c71966SSteve Yin private void SaveAs(String newfile) throws Exception { 596*64c71966SSteve Yin saveAs(newfile); 597*64c71966SSteve Yin HandleBlockers(true); 598*64c71966SSteve Yin if(statusBar.exists(timeout)) 599*64c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 600*64c71966SSteve Yin else 601*64c71966SSteve Yin throw new TimeoutException("time out"); 602*64c71966SSteve Yin } 603*64c71966SSteve Yin 604*64c71966SSteve Yin private boolean savetopdfformat(String file, String outpath) { 605*64c71966SSteve Yin try { 606*64c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 607*64c71966SSteve Yin String extName = "pdf"; 608*64c71966SSteve Yin 609*64c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 610*64c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 611*64c71966SSteve Yin String newfile = pre + extName; 612*64c71966SSteve Yin 613*64c71966SSteve Yin scenario = FileUtil.getFileExtName(file).toLowerCase() + " to pdf"; 614*64c71966SSteve Yin 615*64c71966SSteve Yin String saveTo = reportDir + "\\" + newfile; 616*64c71966SSteve Yin // Save the text document 617*64c71966SSteve Yin app.dispatch(".uno:ExportToPDF"); 618*64c71966SSteve Yin pdfGeneralPage.ok(); 619*64c71966SSteve Yin 620*64c71966SSteve Yin submitSaveDlg(saveTo); 621*64c71966SSteve Yin HandleBlockers(true); 622*64c71966SSteve Yin 623*64c71966SSteve Yin if(statusBar.exists(timeout)) 624*64c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 625*64c71966SSteve Yin else 626*64c71966SSteve Yin throw new TimeoutException("time out"); 627*64c71966SSteve Yin 628*64c71966SSteve Yin String outcome = "Pass"; 629*64c71966SSteve Yin try { 630*64c71966SSteve Yin Close(); 631*64c71966SSteve Yin } catch (Exception e) { 632*64c71966SSteve Yin if (!e.getMessage().matches("A wrong dirty flag")) 633*64c71966SSteve Yin outcome = e.getMessage(); 634*64c71966SSteve Yin else 635*64c71966SSteve Yin throw e; 636*64c71966SSteve Yin } 637*64c71966SSteve Yin 638*64c71966SSteve Yin 639*64c71966SSteve Yin File targetFile = new File(saveTo); 640*64c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 641*64c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 642*64c71966SSteve Yin outcome); 643*64c71966SSteve Yin 644*64c71966SSteve Yin return true; 645*64c71966SSteve Yin } catch (Exception e) { 646*64c71966SSteve Yin try { 647*64c71966SSteve Yin String reason = e.getMessage(); 648*64c71966SSteve Yin if (reason == null || reason.isEmpty()) 649*64c71966SSteve Yin reason = "Exporting to pdf format"; 650*64c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 651*64c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", reason); 652*64c71966SSteve Yin } catch (IOException e1) { 653*64c71966SSteve Yin // TODO Auto-generated catch block 654*64c71966SSteve Yin e1.printStackTrace(); 655*64c71966SSteve Yin } 656*64c71966SSteve Yin 657*64c71966SSteve Yin return false; 658*64c71966SSteve Yin } 659*64c71966SSteve Yin } 660*64c71966SSteve Yin 661*64c71966SSteve Yin } 662