164c71966SSteve Yin /************************************************************** 264c71966SSteve Yin * 364c71966SSteve Yin * Licensed to the Apache Software Foundation (ASF) under one 464c71966SSteve Yin * or more contributor license agreements. See the NOTICE file 564c71966SSteve Yin * distributed with this work for additional information 664c71966SSteve Yin * regarding copyright ownership. The ASF licenses this file 764c71966SSteve Yin * to you under the Apache License, Version 2.0 (the 864c71966SSteve Yin * "License"); you may not use this file except in compliance 964c71966SSteve Yin * with the License. You may obtain a copy of the License at 1064c71966SSteve Yin * 1164c71966SSteve Yin * http://www.apache.org/licenses/LICENSE-2.0 1264c71966SSteve Yin * 1364c71966SSteve Yin * Unless required by applicable law or agreed to in writing, 1464c71966SSteve Yin * software distributed under the License is distributed on an 1564c71966SSteve Yin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1664c71966SSteve Yin * KIND, either express or implied. See the License for the 1764c71966SSteve Yin * specific language governing permissions and limitations 1864c71966SSteve Yin * under the License. 1964c71966SSteve Yin * 2064c71966SSteve Yin *************************************************************/ 2164c71966SSteve Yin 2264c71966SSteve Yin /** 2364c71966SSteve Yin * 2464c71966SSteve Yin */ 2564c71966SSteve Yin package bvt.gui; 2664c71966SSteve Yin 2764c71966SSteve Yin import static org.openoffice.test.common.Testspace.*; 2864c71966SSteve Yin import static testlib.gui.AppTool.*; 2964c71966SSteve Yin import static testlib.gui.UIMap.*; 3064c71966SSteve Yin 3164c71966SSteve Yin import java.io.*; 3264c71966SSteve Yin import java.util.ArrayList; 3364c71966SSteve Yin import java.util.Arrays; 3464c71966SSteve Yin import java.util.List; 3564c71966SSteve Yin import java.util.ListIterator; 3664c71966SSteve Yin import java.util.concurrent.TimeoutException; 3764c71966SSteve Yin import java.io.File; 3864c71966SSteve Yin import java.io.FileNotFoundException; 3964c71966SSteve Yin import java.io.IOException; 4064c71966SSteve Yin import java.io.Reader; 4164c71966SSteve Yin import java.io.InputStreamReader; 4264c71966SSteve Yin import java.lang.RuntimeException; 4364c71966SSteve Yin 4464c71966SSteve Yin import org.junit.After; 4564c71966SSteve Yin import org.junit.AfterClass; 4664c71966SSteve Yin import org.junit.Before; 4764c71966SSteve Yin import org.junit.BeforeClass; 4864c71966SSteve Yin import org.junit.Rule; 4964c71966SSteve Yin import org.junit.Test; 5064c71966SSteve Yin import org.openoffice.test.common.Condition; 5164c71966SSteve Yin import org.openoffice.test.common.DataSheet; 5264c71966SSteve Yin import org.openoffice.test.common.FileUtil; 5364c71966SSteve Yin import org.openoffice.test.common.Logger; 5464c71966SSteve Yin import org.openoffice.test.common.Testspace; 5564c71966SSteve Yin import org.openoffice.test.vcl.widgets.VclDialog; 5664c71966SSteve Yin 5764c71966SSteve Yin /** 5864c71966SSteve Yin * 5964c71966SSteve Yin */ 6064c71966SSteve Yin class TestType { 6164c71966SSteve Yin 6264c71966SSteve Yin public TestType(boolean doc, boolean spread, boolean slide) { 6364c71966SSteve Yin documentT = doc; 6464c71966SSteve Yin spreadsheetT = spread; 6564c71966SSteve Yin slideT = slide; 6664c71966SSteve Yin } 6764c71966SSteve Yin 6864c71966SSteve Yin public boolean documentT; 6964c71966SSteve Yin public boolean spreadsheetT; 7064c71966SSteve Yin public boolean slideT; 7164c71966SSteve Yin }; 7264c71966SSteve Yin 7364c71966SSteve Yin class ContinuePoint { 7464c71966SSteve Yin public String path; 7564c71966SSteve Yin public int i; 7664c71966SSteve Yin 7764c71966SSteve Yin ContinuePoint() { 7864c71966SSteve Yin path = ""; 7964c71966SSteve Yin i = 0; 8064c71966SSteve Yin } 8164c71966SSteve Yin } 8264c71966SSteve Yin 8364c71966SSteve Yin public class FileExport { 8464c71966SSteve Yin // for example 8564c71966SSteve Yin // the path is "D:\\aoo\\utaoo\\testspace\\ooxmlsamples" 8664c71966SSteve Yin String samplespath = "";// a dir 8764c71966SSteve Yin String outpath = ""; // a dir 8864c71966SSteve Yin static double timeout = 100; 8964c71966SSteve Yin static double interval = 0.1; 9064c71966SSteve Yin double sleeptime = 1; 9164c71966SSteve Yin boolean bContinue = false;// if failed,next execute from the continue point 9264c71966SSteve Yin TestType atest = new TestType(true, true, true);// doc,spreadsheet,slide 9364c71966SSteve Yin ContinuePoint thepoint = null; 9464c71966SSteve Yin BufferedWriter fwContinue = null; 9564c71966SSteve Yin String testedlogfile = ""; 9664c71966SSteve Yin 9764c71966SSteve Yin private static DataSheet result; 9864c71966SSteve Yin private String scenario = null; 9964c71966SSteve Yin private File sourceFile = null; 10064c71966SSteve Yin 10164c71966SSteve Yin public static final VclDialog passwdDlg = dialog(""); 10264c71966SSteve Yin 10364c71966SSteve Yin public List<String> recursionfiles(File path, List<String> resultFileName) { 10464c71966SSteve Yin File[] files = path.listFiles(); 10564c71966SSteve Yin if (files == null) 10664c71966SSteve Yin return resultFileName; 10764c71966SSteve Yin for (File f : files) { 10864c71966SSteve Yin if (f.isDirectory()) {// a path 10964c71966SSteve Yin if (!f.isHidden() && !f.getName().startsWith(".")) { 11064c71966SSteve Yin sampledirs.add(f.getPath()); 11164c71966SSteve Yin recursionfiles(f, resultFileName); 11264c71966SSteve Yin } 11364c71966SSteve Yin } else {// a file 11464c71966SSteve Yin if (!f.isHidden() && !f.getName().startsWith(".")) { 11564c71966SSteve Yin String apath = f.getPath(); 11664c71966SSteve Yin 117*12694156Sdamjan int sepIndex = apath.indexOf(File.separatorChar); 11864c71966SSteve Yin String userpath = apath.substring(sepIndex); 11964c71966SSteve Yin String newpath = outpath + userpath; 12064c71966SSteve Yin 12164c71966SSteve Yin File file = new File(newpath); 12264c71966SSteve Yin File parent = file.getParentFile(); 12364c71966SSteve Yin if (parent != null && !parent.exists()) { 12464c71966SSteve Yin parent.mkdirs(); 12564c71966SSteve Yin } 12664c71966SSteve Yin resultFileName.add(f.getPath()); 12764c71966SSteve Yin } 12864c71966SSteve Yin } 12964c71966SSteve Yin } 13064c71966SSteve Yin return resultFileName; 13164c71966SSteve Yin } 13264c71966SSteve Yin 13364c71966SSteve Yin private String getrealoutpath(String p) { 13464c71966SSteve Yin String apath = p; 13564c71966SSteve Yin 136*12694156Sdamjan int sepIndex = apath.indexOf(File.separatorChar); 137*12694156Sdamjan int sepIndexLast = apath.lastIndexOf(File.separatorChar); 13864c71966SSteve Yin String userpath = apath.substring(sepIndex, sepIndexLast); 13964c71966SSteve Yin String newpath = outpath + userpath; 14064c71966SSteve Yin File tempFolderFile = new File(newpath); 14164c71966SSteve Yin if (!tempFolderFile.exists()) { 14264c71966SSteve Yin tempFolderFile.mkdirs(); 14364c71966SSteve Yin } 14464c71966SSteve Yin return newpath; 14564c71966SSteve Yin } 14664c71966SSteve Yin 14764c71966SSteve Yin private List<String> samplelist = null; 14864c71966SSteve Yin private List<String> sampledirs = null; 14964c71966SSteve Yin 15064c71966SSteve Yin @Rule 15164c71966SSteve Yin public Logger log = Logger.getLogger(this); 15264c71966SSteve Yin 15364c71966SSteve Yin @BeforeClass 15464c71966SSteve Yin public static void beforeClass() { 15564c71966SSteve Yin app.clean(); 15664c71966SSteve Yin } 15764c71966SSteve Yin 15864c71966SSteve Yin @AfterClass 15964c71966SSteve Yin public static void afterClass() { 16064c71966SSteve Yin app.stop(); 16164c71966SSteve Yin } 16264c71966SSteve Yin 16364c71966SSteve Yin @Before 16464c71966SSteve Yin public void before() { 16564c71966SSteve Yin 16664c71966SSteve Yin } 16764c71966SSteve Yin 16864c71966SSteve Yin @After 16964c71966SSteve Yin public void after() throws Exception { 17064c71966SSteve Yin app.stop(); 17164c71966SSteve Yin } 17264c71966SSteve Yin 17364c71966SSteve Yin void getcontinuepoint() { 17464c71966SSteve Yin 17564c71966SSteve Yin if (bContinue == false) { 17664c71966SSteve Yin thepoint.path = ""; 17764c71966SSteve Yin thepoint.i = 0; 17864c71966SSteve Yin return; 17964c71966SSteve Yin } 18064c71966SSteve Yin File ftestedlog = new File(testedlogfile); 18164c71966SSteve Yin Reader reader = null; 18264c71966SSteve Yin try { 18364c71966SSteve Yin reader = new InputStreamReader(new FileInputStream(ftestedlog)); 18464c71966SSteve Yin } catch (FileNotFoundException e1) { 18564c71966SSteve Yin // TODO Auto-generated catch block 18664c71966SSteve Yin e1.printStackTrace(); 18764c71966SSteve Yin } 18864c71966SSteve Yin 18964c71966SSteve Yin BufferedReader br = new BufferedReader(reader); 19064c71966SSteve Yin 19164c71966SSteve Yin String line = null; 19264c71966SSteve Yin int countline = 0; 19364c71966SSteve Yin int m = 0; 19464c71966SSteve Yin try { 19564c71966SSteve Yin if ((line = br.readLine()) != null) { 19664c71966SSteve Yin if (countline == 0) { 19764c71966SSteve Yin thepoint.path = line; 19864c71966SSteve Yin } else { 19964c71966SSteve Yin 20064c71966SSteve Yin m = Integer.parseInt(line); 20164c71966SSteve Yin if (m > 0) 20264c71966SSteve Yin thepoint.i = m; 20364c71966SSteve Yin } 20464c71966SSteve Yin } 20564c71966SSteve Yin } catch (NumberFormatException e1) { 20664c71966SSteve Yin // TODO Auto-generated catch block 20764c71966SSteve Yin e1.printStackTrace(); 20864c71966SSteve Yin } catch (IOException e1) { 20964c71966SSteve Yin // TODO Auto-generated catch block 21064c71966SSteve Yin e1.printStackTrace(); 21164c71966SSteve Yin } 21264c71966SSteve Yin } 21364c71966SSteve Yin 21464c71966SSteve Yin /** 21564c71966SSteve Yin * Test Open/SaveAs ooxml file by Aoo 21664c71966SSteve Yin * 21764c71966SSteve Yin * @throws Exception 21864c71966SSteve Yin */ 21964c71966SSteve Yin @Test 22064c71966SSteve Yin public void testSaveAs() throws Exception { 22164c71966SSteve Yin samplelist = new ArrayList<String>(); 22264c71966SSteve Yin sampledirs = new ArrayList<String>(); 22364c71966SSteve Yin thepoint = new ContinuePoint(); 224*12694156Sdamjan File spacepath = new File(Testspace.getPath()); 225*12694156Sdamjan File absspath = spacepath.getAbsoluteFile(); 226*12694156Sdamjan String abspre = absspath.getParent(); 22764c71966SSteve Yin 228*12694156Sdamjan result = new DataSheet(getFile("outputlog" + File.separatorChar 22964c71966SSteve Yin + FileExport.class.getName() + ".xml")); 23064c71966SSteve Yin result.addRow("data", "File Path", "File Size", "Scenario", 23164c71966SSteve Yin "Exported File Path", "Exported File Size", "Result", "Error"); 23264c71966SSteve Yin 233*12694156Sdamjan testedlogfile = abspre + "testgui" + File.separatorChar + "cases_tested.txt"; 23464c71966SSteve Yin samplespath = "samples"; 23564c71966SSteve Yin 23664c71966SSteve Yin if (outpath.length() == 0) { 23764c71966SSteve Yin File workspacepath = Testspace.getFile("output");// ..\\testspace\\output 23864c71966SSteve Yin outpath = workspacepath.getAbsolutePath(); 23964c71966SSteve Yin 24064c71966SSteve Yin // outpath = "D:\\AOOautomation\\Docs sample files\\out"; 24164c71966SSteve Yin } 24264c71966SSteve Yin 24364c71966SSteve Yin if (bContinue) 24464c71966SSteve Yin getcontinuepoint(); 24564c71966SSteve Yin 24664c71966SSteve Yin File samplesDir = Testspace.getFile(samplespath); 24764c71966SSteve Yin recursionfiles(samplesDir, samplelist); 24864c71966SSteve Yin ListIterator<String> it = sampledirs.listIterator(); 24964c71966SSteve Yin 25064c71966SSteve Yin boolean bstartfromthis = false; 25164c71966SSteve Yin while (it.hasNext()) { 25264c71966SSteve Yin 25364c71966SSteve Yin String str = (String) it.next(); 25464c71966SSteve Yin if (!bContinue) { 25564c71966SSteve Yin File afiledir = new File(str); 25664c71966SSteve Yin dotest(afiledir); 25764c71966SSteve Yin } else { 25864c71966SSteve Yin File file = new File(thepoint.path); 25964c71966SSteve Yin File parent = file.getParentFile(); 26064c71966SSteve Yin if (parent != null) { 26164c71966SSteve Yin String pathbegin = parent.getAbsolutePath(); 26264c71966SSteve Yin if (pathbegin.equalsIgnoreCase(str)) { 26364c71966SSteve Yin bstartfromthis = true; 26464c71966SSteve Yin 26564c71966SSteve Yin } 26664c71966SSteve Yin } 26764c71966SSteve Yin if (bstartfromthis == true) { 26864c71966SSteve Yin File afiledir = new File(str); 26964c71966SSteve Yin dotest(afiledir); 27064c71966SSteve Yin } 27164c71966SSteve Yin } 27264c71966SSteve Yin } 27364c71966SSteve Yin } 27464c71966SSteve Yin 27564c71966SSteve Yin public void dotest(File samplesDir) throws Exception { 27664c71966SSteve Yin FilenameFilter testFilter = new FilenameFilter() { 27764c71966SSteve Yin public boolean accept(File file, String name) { 27864c71966SSteve Yin if (name.endsWith(".doc") || name.endsWith(".docx") 27964c71966SSteve Yin || name.endsWith(".dot") || name.endsWith(".xls") 28064c71966SSteve Yin || name.endsWith(".xlsx") || name.endsWith(".ods") 28164c71966SSteve Yin || name.endsWith(".ppt") || name.endsWith(".pptx") 28264c71966SSteve Yin || name.endsWith(".odp")) { 28364c71966SSteve Yin // filters files 28464c71966SSteve Yin return true; 28564c71966SSteve Yin } else { 28664c71966SSteve Yin return false; 28764c71966SSteve Yin } 28864c71966SSteve Yin } 28964c71966SSteve Yin }; 29064c71966SSteve Yin File[] files = samplesDir.listFiles(testFilter); 29164c71966SSteve Yin Arrays.sort(files); 29264c71966SSteve Yin int nfiles = files.length; 29364c71966SSteve Yin if (nfiles == 0) 29464c71966SSteve Yin return; 29564c71966SSteve Yin 29664c71966SSteve Yin int i = thepoint.i; 29764c71966SSteve Yin for (; i < nfiles; i++) { 29864c71966SSteve Yin File afile = files[i]; 29964c71966SSteve Yin String path = afile.getAbsolutePath(); 30064c71966SSteve Yin 30164c71966SSteve Yin String extName = FileUtil.getFileExtName(path).toLowerCase(); 30264c71966SSteve Yin boolean bShouldTest = false; 30364c71966SSteve Yin if (extName.equals("doc") || extName.equals("docx") 30464c71966SSteve Yin || extName.equals("odt")) { 30564c71966SSteve Yin bShouldTest = true; 30664c71966SSteve Yin if (atest.documentT == false) 30764c71966SSteve Yin continue; 30864c71966SSteve Yin } 30964c71966SSteve Yin if (extName.equals("ppt") || extName.equals("pptx") 31064c71966SSteve Yin || extName.equals("odp")) { 31164c71966SSteve Yin bShouldTest = true; 31264c71966SSteve Yin if (atest.slideT == false) 31364c71966SSteve Yin continue; 31464c71966SSteve Yin } 31564c71966SSteve Yin if (extName.equals("xls") || extName.equals("xlsx") 31664c71966SSteve Yin || extName.equals("ods")) { 31764c71966SSteve Yin bShouldTest = true; 31864c71966SSteve Yin if (atest.spreadsheetT == false) 31964c71966SSteve Yin continue; 32064c71966SSteve Yin } 32164c71966SSteve Yin if (!bShouldTest) 32264c71966SSteve Yin continue; 32364c71966SSteve Yin String exportname = "aoo_" + afile.getName(); 32464c71966SSteve Yin 32564c71966SSteve Yin sourceFile = new File(path); 32664c71966SSteve Yin 32764c71966SSteve Yin app.stop(); 32864c71966SSteve Yin app.start(); 32964c71966SSteve Yin 33064c71966SSteve Yin if(!Open(path)){ 33164c71966SSteve Yin continue; 33264c71966SSteve Yin } 33364c71966SSteve Yin 33464c71966SSteve Yin String newpath = getrealoutpath(path); 33564c71966SSteve Yin 33664c71966SSteve Yin // do testing 33764c71966SSteve Yin if (!savetosameformat(exportname, newpath)) { 33864c71966SSteve Yin continue; 33964c71966SSteve Yin } 34064c71966SSteve Yin 34164c71966SSteve Yin if(!Open(path)) { 34264c71966SSteve Yin continue; 34364c71966SSteve Yin 34464c71966SSteve Yin } 34564c71966SSteve Yin if (!savetodiffformat(exportname, newpath)) { 34664c71966SSteve Yin continue; 34764c71966SSteve Yin } 34864c71966SSteve Yin 34964c71966SSteve Yin if(!Open(path)) { 35064c71966SSteve Yin continue; 35164c71966SSteve Yin 35264c71966SSteve Yin } 35364c71966SSteve Yin 35464c71966SSteve Yin if (!savetopdfformat(exportname, newpath)) { 35564c71966SSteve Yin continue; 35664c71966SSteve Yin } 35764c71966SSteve Yin } 35864c71966SSteve Yin } 35964c71966SSteve Yin 36064c71966SSteve Yin private boolean Open(String path) throws Exception { 36164c71966SSteve Yin try { 36264c71966SSteve Yin open(path); 36364c71966SSteve Yin if (!app.exists()) 36464c71966SSteve Yin throw new RuntimeException(); 36564c71966SSteve Yin HandleBlockers(false); 36664c71966SSteve Yin if(statusBar.exists(timeout)) 36764c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 36864c71966SSteve Yin else 36964c71966SSteve Yin throw new TimeoutException("time out"); 37064c71966SSteve Yin HandleBlockers(false); 37164c71966SSteve Yin if (!app.exists()) 37264c71966SSteve Yin throw new RuntimeException(); 37364c71966SSteve Yin return true; 37464c71966SSteve Yin } catch (Exception e) { 37564c71966SSteve Yin try { 37664c71966SSteve Yin String reason = e.getMessage(); 37764c71966SSteve Yin if (reason == null || reason.isEmpty()) 37864c71966SSteve Yin reason = "Opening"; 37964c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 38064c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", reason); 38164c71966SSteve Yin } catch (IOException e1) { 38264c71966SSteve Yin // TODO Auto-generated catch block 38364c71966SSteve Yin e1.printStackTrace(); 38464c71966SSteve Yin } 38564c71966SSteve Yin return false; 38664c71966SSteve Yin } 38764c71966SSteve Yin } 38864c71966SSteve Yin 38964c71966SSteve Yin private boolean savetosameformat(String file, String outpath) { 39064c71966SSteve Yin try { 39164c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 39264c71966SSteve Yin 39364c71966SSteve Yin String extName = FileUtil.getFileExtName(file).toLowerCase(); 39464c71966SSteve Yin 39564c71966SSteve Yin boolean formatchanged = false; 39664c71966SSteve Yin if (extName.equals("docx")) { 39764c71966SSteve Yin extName = "doc"; 39864c71966SSteve Yin formatchanged = true; 39964c71966SSteve Yin } else if (extName.equals("pptx")) { 40064c71966SSteve Yin extName = "ppt"; 40164c71966SSteve Yin formatchanged = true; 40264c71966SSteve Yin } else if (extName.equals("xlsx")) { 40364c71966SSteve Yin extName = "xls"; 40464c71966SSteve Yin formatchanged = true; 40564c71966SSteve Yin } 40664c71966SSteve Yin 40764c71966SSteve Yin scenario = FileUtil.getFileExtName(file).toLowerCase() + " to " + extName; 40864c71966SSteve Yin 40964c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 41064c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 41164c71966SSteve Yin String newfile = pre + extName; 41264c71966SSteve Yin 413*12694156Sdamjan String saveTo = reportDir + File.separator + file; 41464c71966SSteve Yin if (formatchanged) 415*12694156Sdamjan saveTo = reportDir + File.separator + newfile; 41664c71966SSteve Yin // Save the text document 41764c71966SSteve Yin deleteFile(saveTo); 41864c71966SSteve Yin SaveAs(saveTo); 41964c71966SSteve Yin Close(); 42064c71966SSteve Yin if(!Open(saveTo)) 42164c71966SSteve Yin return false; 42264c71966SSteve Yin 42364c71966SSteve Yin String exception = ""; 42464c71966SSteve Yin String resultflag = ""; 42564c71966SSteve Yin try { 42664c71966SSteve Yin Close(); 42764c71966SSteve Yin resultflag = "Pass"; 42864c71966SSteve Yin } catch (Exception e) { 42964c71966SSteve Yin exception = e.getMessage(); 43064c71966SSteve Yin resultflag = "Fail"; 43164c71966SSteve Yin } 43264c71966SSteve Yin 43364c71966SSteve Yin File targetFile = new File(saveTo); 43464c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 43564c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 43664c71966SSteve Yin resultflag, exception); 43764c71966SSteve Yin 43864c71966SSteve Yin return true; 43964c71966SSteve Yin } catch (Exception e) { 44064c71966SSteve Yin try { 44164c71966SSteve Yin String exception = e.getMessage(); 44264c71966SSteve Yin if (exception == null || exception.isEmpty()) 44364c71966SSteve Yin exception = "Saving to the same format"; 44464c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 44564c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", exception); 44664c71966SSteve Yin } catch (IOException e1) { 44764c71966SSteve Yin // TODO Auto-generated catch block 44864c71966SSteve Yin e1.printStackTrace(); 44964c71966SSteve Yin } 45064c71966SSteve Yin 45164c71966SSteve Yin return false; 45264c71966SSteve Yin } 45364c71966SSteve Yin } 45464c71966SSteve Yin 45564c71966SSteve Yin private boolean savetodiffformat(String file, String outpath) { 45664c71966SSteve Yin try { 45764c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 45864c71966SSteve Yin 45964c71966SSteve Yin String extName = FileUtil.getFileExtName(file).toLowerCase(); 46064c71966SSteve Yin 46164c71966SSteve Yin String targetExtName = null; 46264c71966SSteve Yin 46364c71966SSteve Yin if (extName.equals("doc") || extName.equals("docx")) 46464c71966SSteve Yin targetExtName = "odt"; 46564c71966SSteve Yin else if (extName.equals("ppt") || extName.equals("pptx")) 46664c71966SSteve Yin targetExtName = "odp"; 46764c71966SSteve Yin else if (extName.equals("xls") || extName.equals("xlsx")) 46864c71966SSteve Yin targetExtName = "ods"; 46964c71966SSteve Yin else if (extName.equals("odt")) 47064c71966SSteve Yin targetExtName = "doc"; 47164c71966SSteve Yin else if (extName.equals("odp")) 47264c71966SSteve Yin targetExtName = "ppt"; 47364c71966SSteve Yin else if (extName.equals("ods")) 47464c71966SSteve Yin targetExtName = "xls"; 47564c71966SSteve Yin 47664c71966SSteve Yin scenario = extName + " to " + targetExtName; 47764c71966SSteve Yin 47864c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 47964c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 480*12694156Sdamjan String saveTo = reportDir + File.separator + pre + targetExtName; 48164c71966SSteve Yin deleteFile(saveTo); 48264c71966SSteve Yin // long base = System.currentTimeMillis(); 48364c71966SSteve Yin SaveAs(saveTo); 48464c71966SSteve Yin Close(); 48564c71966SSteve Yin if(!Open(saveTo)) 48664c71966SSteve Yin return false; 48764c71966SSteve Yin 48864c71966SSteve Yin String exception = ""; 48964c71966SSteve Yin String resultflag = ""; 49064c71966SSteve Yin try { 49164c71966SSteve Yin Close(); 49264c71966SSteve Yin resultflag = "Pass"; 49364c71966SSteve Yin } catch (Exception e) { 49464c71966SSteve Yin exception = e.getMessage(); 49564c71966SSteve Yin resultflag = "Fail"; 49664c71966SSteve Yin } 49764c71966SSteve Yin 49864c71966SSteve Yin File targetFile = new File(saveTo); 49964c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 50064c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 50164c71966SSteve Yin resultflag, exception); 50264c71966SSteve Yin 50364c71966SSteve Yin return true; 50464c71966SSteve Yin } catch (Exception e) { 50564c71966SSteve Yin try { 50664c71966SSteve Yin String exception = e.getMessage(); 50764c71966SSteve Yin if (exception == null || exception.isEmpty()) 50864c71966SSteve Yin exception = "Saving to a different format"; 50964c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 51064c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", exception); 51164c71966SSteve Yin } catch (IOException e1) { 51264c71966SSteve Yin // TODO Auto-generated catch block 51364c71966SSteve Yin e1.printStackTrace(); 51464c71966SSteve Yin } 51564c71966SSteve Yin 51664c71966SSteve Yin return false; 51764c71966SSteve Yin } 51864c71966SSteve Yin 51964c71966SSteve Yin } 52064c71966SSteve Yin 52164c71966SSteve Yin private void Close() throws Exception { 52264c71966SSteve Yin close(); 52364c71966SSteve Yin HandleBlockers(false); 52464c71966SSteve Yin } 52564c71966SSteve Yin 52664c71966SSteve Yin public static void HandleBlockers(final boolean Positive) throws Exception { 52764c71966SSteve Yin new Condition() { 52864c71966SSteve Yin @Override 52964c71966SSteve Yin public boolean value() { 53064c71966SSteve Yin while (activeMsgBox.exists()) { 53164c71966SSteve Yin 53264c71966SSteve Yin String context = activeMsgBox.getMessage(); 53364c71966SSteve Yin if (context.toLowerCase().indexOf("has been modified") >= 0 53464c71966SSteve Yin && context.toLowerCase().indexOf( 53564c71966SSteve Yin "do you want to save your changes") >= 0) 53664c71966SSteve Yin throw new RuntimeException("A wrong dirty flag"); 53764c71966SSteve Yin if (context.toLowerCase().indexOf("read-error") >= 0) 53864c71966SSteve Yin throw new RuntimeException("Read Error"); 53964c71966SSteve Yin if (context.toLowerCase().indexOf("does not exist") >= 0) 54064c71966SSteve Yin throw new RuntimeException("File not exist"); 54164c71966SSteve Yin 54264c71966SSteve Yin try { 54364c71966SSteve Yin if (Positive) 54464c71966SSteve Yin activeMsgBox.ok(); 54564c71966SSteve Yin else 54664c71966SSteve Yin activeMsgBox.no(); 54764c71966SSteve Yin } catch (Exception e) { 54864c71966SSteve Yin try { 54964c71966SSteve Yin if (Positive) 55064c71966SSteve Yin activeMsgBox.yes(); 55164c71966SSteve Yin else 55264c71966SSteve Yin activeMsgBox.no(); 55364c71966SSteve Yin } catch (Exception e1) { 55464c71966SSteve Yin try { 55564c71966SSteve Yin activeMsgBox.doDefault(); 55664c71966SSteve Yin } catch (Exception e2) { 55764c71966SSteve Yin try { 55864c71966SSteve Yin activeMsgBox.ok(); 55964c71966SSteve Yin } catch (Exception e3) { 56064c71966SSteve Yin activeMsgBox.yes(); 56164c71966SSteve Yin } 56264c71966SSteve Yin } 56364c71966SSteve Yin } 56464c71966SSteve Yin } 56564c71966SSteve Yin } 56664c71966SSteve Yin if (passwdDlg.exists()) { 56764c71966SSteve Yin String caption = passwdDlg.getCaption(); 56864c71966SSteve Yin if (caption.toLowerCase().indexOf( 56964c71966SSteve Yin "enter password to open file") >= 0) 57064c71966SSteve Yin throw new RuntimeException("A password protected file"); 57164c71966SSteve Yin if (caption.toLowerCase().indexOf("properties") >= 0) 57264c71966SSteve Yin throw new RuntimeException("An unsupported format"); 57364c71966SSteve Yin if (SupportedFormats(caption)) 57464c71966SSteve Yin throw new RuntimeException("An unreadable file"); 57564c71966SSteve Yin } 57664c71966SSteve Yin return true; 57764c71966SSteve Yin } 57864c71966SSteve Yin 57964c71966SSteve Yin }.test(timeout, interval); 58064c71966SSteve Yin } 58164c71966SSteve Yin 58264c71966SSteve Yin private static boolean SupportedFormats(String filename) { 58364c71966SSteve Yin if (filename.endsWith(".doc") || filename.endsWith(".docx") 58464c71966SSteve Yin || filename.endsWith(".dot") || filename.endsWith(".xls") 58564c71966SSteve Yin || filename.endsWith(".xlsx") || filename.endsWith(".ods") 58664c71966SSteve Yin || filename.endsWith(".ppt") || filename.endsWith(".pptx") 58764c71966SSteve Yin || filename.endsWith(".odp")) { 58864c71966SSteve Yin return true; 58964c71966SSteve Yin } else { 59064c71966SSteve Yin return false; 59164c71966SSteve Yin } 59264c71966SSteve Yin } 59364c71966SSteve Yin 59464c71966SSteve Yin private void SaveAs(String newfile) throws Exception { 59564c71966SSteve Yin saveAs(newfile); 59664c71966SSteve Yin HandleBlockers(true); 59764c71966SSteve Yin if(statusBar.exists(timeout)) 59864c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 59964c71966SSteve Yin else 60064c71966SSteve Yin throw new TimeoutException("time out"); 60164c71966SSteve Yin } 60264c71966SSteve Yin 60364c71966SSteve Yin private boolean savetopdfformat(String file, String outpath) { 60464c71966SSteve Yin try { 60564c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 60664c71966SSteve Yin String extName = "pdf"; 60764c71966SSteve Yin 60864c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 60964c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 61064c71966SSteve Yin String newfile = pre + extName; 61164c71966SSteve Yin 61264c71966SSteve Yin scenario = FileUtil.getFileExtName(file).toLowerCase() + " to pdf"; 61364c71966SSteve Yin 614*12694156Sdamjan String saveTo = reportDir + File.separator + newfile; 61564c71966SSteve Yin // Save the text document 61664c71966SSteve Yin app.dispatch(".uno:ExportToPDF"); 61764c71966SSteve Yin pdfGeneralPage.ok(); 61864c71966SSteve Yin 61964c71966SSteve Yin submitSaveDlg(saveTo); 62064c71966SSteve Yin HandleBlockers(true); 62164c71966SSteve Yin 62264c71966SSteve Yin if(statusBar.exists(timeout)) 62364c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 62464c71966SSteve Yin else 62564c71966SSteve Yin throw new TimeoutException("time out"); 62664c71966SSteve Yin 62764c71966SSteve Yin String outcome = "Pass"; 62864c71966SSteve Yin try { 62964c71966SSteve Yin Close(); 63064c71966SSteve Yin } catch (Exception e) { 63164c71966SSteve Yin if (!e.getMessage().matches("A wrong dirty flag")) 63264c71966SSteve Yin outcome = e.getMessage(); 63364c71966SSteve Yin else 63464c71966SSteve Yin throw e; 63564c71966SSteve Yin } 63664c71966SSteve Yin 63764c71966SSteve Yin 63864c71966SSteve Yin File targetFile = new File(saveTo); 63964c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 64064c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 64164c71966SSteve Yin outcome); 64264c71966SSteve Yin 64364c71966SSteve Yin return true; 64464c71966SSteve Yin } catch (Exception e) { 64564c71966SSteve Yin try { 64664c71966SSteve Yin String reason = e.getMessage(); 64764c71966SSteve Yin if (reason == null || reason.isEmpty()) 64864c71966SSteve Yin reason = "Exporting to pdf format"; 64964c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 65064c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", reason); 65164c71966SSteve Yin } catch (IOException e1) { 65264c71966SSteve Yin // TODO Auto-generated catch block 65364c71966SSteve Yin e1.printStackTrace(); 65464c71966SSteve Yin } 65564c71966SSteve Yin 65664c71966SSteve Yin return false; 65764c71966SSteve Yin } 65864c71966SSteve Yin } 65964c71966SSteve Yin 66064c71966SSteve Yin } 661