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 58*9c5183b9Sdamjan public class FileExport { 59*9c5183b9Sdamjan private static class TestType { 60*9c5183b9Sdamjan TestType(boolean doc, boolean spread, boolean slide)61*9c5183b9Sdamjan public TestType(boolean doc, boolean spread, boolean slide) { 62*9c5183b9Sdamjan documentT = doc; 63*9c5183b9Sdamjan spreadsheetT = spread; 64*9c5183b9Sdamjan slideT = slide; 65*9c5183b9Sdamjan } 6664c71966SSteve Yin 67*9c5183b9Sdamjan public boolean documentT; 68*9c5183b9Sdamjan public boolean spreadsheetT; 69*9c5183b9Sdamjan public boolean slideT; 70*9c5183b9Sdamjan }; 7164c71966SSteve Yin 72*9c5183b9Sdamjan private static class ContinuePoint { 73*9c5183b9Sdamjan public String path; 74*9c5183b9Sdamjan public int i; 7564c71966SSteve Yin ContinuePoint()76*9c5183b9Sdamjan ContinuePoint() { 77*9c5183b9Sdamjan path = ""; 78*9c5183b9Sdamjan i = 0; 79*9c5183b9Sdamjan } 8064c71966SSteve Yin } 8164c71966SSteve Yin 8264c71966SSteve Yin // for example 8364c71966SSteve Yin // the path is "D:\\aoo\\utaoo\\testspace\\ooxmlsamples" 8464c71966SSteve Yin String samplespath = "";// a dir 8564c71966SSteve Yin String outpath = ""; // a dir 8664c71966SSteve Yin static double timeout = 100; 8764c71966SSteve Yin static double interval = 0.1; 8864c71966SSteve Yin double sleeptime = 1; 8964c71966SSteve Yin boolean bContinue = false;// if failed,next execute from the continue point 9064c71966SSteve Yin TestType atest = new TestType(true, true, true);// doc,spreadsheet,slide 9164c71966SSteve Yin ContinuePoint thepoint = null; 9264c71966SSteve Yin BufferedWriter fwContinue = null; 9364c71966SSteve Yin String testedlogfile = ""; 9464c71966SSteve Yin 9564c71966SSteve Yin private static DataSheet result; 9664c71966SSteve Yin private String scenario = null; 9764c71966SSteve Yin private File sourceFile = null; 9864c71966SSteve Yin 9964c71966SSteve Yin public static final VclDialog passwdDlg = dialog(""); 10064c71966SSteve Yin recursionfiles(File path, List<String> resultFileName)10164c71966SSteve Yin public List<String> recursionfiles(File path, List<String> resultFileName) { 10264c71966SSteve Yin File[] files = path.listFiles(); 10364c71966SSteve Yin if (files == null) 10464c71966SSteve Yin return resultFileName; 10564c71966SSteve Yin for (File f : files) { 10664c71966SSteve Yin if (f.isDirectory()) {// a path 10764c71966SSteve Yin if (!f.isHidden() && !f.getName().startsWith(".")) { 10864c71966SSteve Yin sampledirs.add(f.getPath()); 10964c71966SSteve Yin recursionfiles(f, resultFileName); 11064c71966SSteve Yin } 11164c71966SSteve Yin } else {// a file 11264c71966SSteve Yin if (!f.isHidden() && !f.getName().startsWith(".")) { 11364c71966SSteve Yin String apath = f.getPath(); 11464c71966SSteve Yin 11512694156Sdamjan int sepIndex = apath.indexOf(File.separatorChar); 11664c71966SSteve Yin String userpath = apath.substring(sepIndex); 11764c71966SSteve Yin String newpath = outpath + userpath; 11864c71966SSteve Yin 11964c71966SSteve Yin File file = new File(newpath); 12064c71966SSteve Yin File parent = file.getParentFile(); 12164c71966SSteve Yin if (parent != null && !parent.exists()) { 12264c71966SSteve Yin parent.mkdirs(); 12364c71966SSteve Yin } 12464c71966SSteve Yin resultFileName.add(f.getPath()); 12564c71966SSteve Yin } 12664c71966SSteve Yin } 12764c71966SSteve Yin } 12864c71966SSteve Yin return resultFileName; 12964c71966SSteve Yin } 13064c71966SSteve Yin getrealoutpath(String p)13164c71966SSteve Yin private String getrealoutpath(String p) { 13264c71966SSteve Yin String apath = p; 13364c71966SSteve Yin 13412694156Sdamjan int sepIndex = apath.indexOf(File.separatorChar); 13512694156Sdamjan int sepIndexLast = apath.lastIndexOf(File.separatorChar); 13664c71966SSteve Yin String userpath = apath.substring(sepIndex, sepIndexLast); 13764c71966SSteve Yin String newpath = outpath + userpath; 13864c71966SSteve Yin File tempFolderFile = new File(newpath); 13964c71966SSteve Yin if (!tempFolderFile.exists()) { 14064c71966SSteve Yin tempFolderFile.mkdirs(); 14164c71966SSteve Yin } 14264c71966SSteve Yin return newpath; 14364c71966SSteve Yin } 14464c71966SSteve Yin 14564c71966SSteve Yin private List<String> samplelist = null; 14664c71966SSteve Yin private List<String> sampledirs = null; 14764c71966SSteve Yin 14864c71966SSteve Yin @Rule 14964c71966SSteve Yin public Logger log = Logger.getLogger(this); 15064c71966SSteve Yin 15164c71966SSteve Yin @BeforeClass beforeClass()15264c71966SSteve Yin public static void beforeClass() { 15364c71966SSteve Yin app.clean(); 15464c71966SSteve Yin } 15564c71966SSteve Yin 15664c71966SSteve Yin @AfterClass afterClass()15764c71966SSteve Yin public static void afterClass() { 15864c71966SSteve Yin app.stop(); 15964c71966SSteve Yin } 16064c71966SSteve Yin 16164c71966SSteve Yin @Before before()16264c71966SSteve Yin public void before() { 16364c71966SSteve Yin 16464c71966SSteve Yin } 16564c71966SSteve Yin 16664c71966SSteve Yin @After after()16764c71966SSteve Yin public void after() throws Exception { 16864c71966SSteve Yin app.stop(); 16964c71966SSteve Yin } 17064c71966SSteve Yin getcontinuepoint()17164c71966SSteve Yin void getcontinuepoint() { 17264c71966SSteve Yin 17364c71966SSteve Yin if (bContinue == false) { 17464c71966SSteve Yin thepoint.path = ""; 17564c71966SSteve Yin thepoint.i = 0; 17664c71966SSteve Yin return; 17764c71966SSteve Yin } 17864c71966SSteve Yin File ftestedlog = new File(testedlogfile); 17964c71966SSteve Yin Reader reader = null; 18064c71966SSteve Yin try { 18164c71966SSteve Yin reader = new InputStreamReader(new FileInputStream(ftestedlog)); 18264c71966SSteve Yin } catch (FileNotFoundException e1) { 18364c71966SSteve Yin // TODO Auto-generated catch block 18464c71966SSteve Yin e1.printStackTrace(); 18564c71966SSteve Yin } 18664c71966SSteve Yin 18764c71966SSteve Yin BufferedReader br = new BufferedReader(reader); 18864c71966SSteve Yin 18964c71966SSteve Yin String line = null; 19064c71966SSteve Yin int countline = 0; 19164c71966SSteve Yin int m = 0; 19264c71966SSteve Yin try { 19364c71966SSteve Yin if ((line = br.readLine()) != null) { 19464c71966SSteve Yin if (countline == 0) { 19564c71966SSteve Yin thepoint.path = line; 19664c71966SSteve Yin } else { 19764c71966SSteve Yin 19864c71966SSteve Yin m = Integer.parseInt(line); 19964c71966SSteve Yin if (m > 0) 20064c71966SSteve Yin thepoint.i = m; 20164c71966SSteve Yin } 20264c71966SSteve Yin } 20364c71966SSteve Yin } catch (NumberFormatException e1) { 20464c71966SSteve Yin // TODO Auto-generated catch block 20564c71966SSteve Yin e1.printStackTrace(); 20664c71966SSteve Yin } catch (IOException e1) { 20764c71966SSteve Yin // TODO Auto-generated catch block 20864c71966SSteve Yin e1.printStackTrace(); 20964c71966SSteve Yin } 21064c71966SSteve Yin } 21164c71966SSteve Yin 21264c71966SSteve Yin /** 21364c71966SSteve Yin * Test Open/SaveAs ooxml file by Aoo 21464c71966SSteve Yin * 21564c71966SSteve Yin * @throws Exception 21664c71966SSteve Yin */ 21764c71966SSteve Yin @Test testSaveAs()21864c71966SSteve Yin public void testSaveAs() throws Exception { 21964c71966SSteve Yin samplelist = new ArrayList<String>(); 22064c71966SSteve Yin sampledirs = new ArrayList<String>(); 22164c71966SSteve Yin thepoint = new ContinuePoint(); 22212694156Sdamjan File spacepath = new File(Testspace.getPath()); 22312694156Sdamjan File absspath = spacepath.getAbsoluteFile(); 22412694156Sdamjan String abspre = absspath.getParent(); 22564c71966SSteve Yin 22612694156Sdamjan result = new DataSheet(getFile("outputlog" + File.separatorChar 22764c71966SSteve Yin + FileExport.class.getName() + ".xml")); 22864c71966SSteve Yin result.addRow("data", "File Path", "File Size", "Scenario", 22964c71966SSteve Yin "Exported File Path", "Exported File Size", "Result", "Error"); 23064c71966SSteve Yin 23112694156Sdamjan testedlogfile = abspre + "testgui" + File.separatorChar + "cases_tested.txt"; 23264c71966SSteve Yin samplespath = "samples"; 23364c71966SSteve Yin 23464c71966SSteve Yin if (outpath.length() == 0) { 23564c71966SSteve Yin File workspacepath = Testspace.getFile("output");// ..\\testspace\\output 23664c71966SSteve Yin outpath = workspacepath.getAbsolutePath(); 23764c71966SSteve Yin 23864c71966SSteve Yin // outpath = "D:\\AOOautomation\\Docs sample files\\out"; 23964c71966SSteve Yin } 24064c71966SSteve Yin 24164c71966SSteve Yin if (bContinue) 24264c71966SSteve Yin getcontinuepoint(); 24364c71966SSteve Yin 24464c71966SSteve Yin File samplesDir = Testspace.getFile(samplespath); 24564c71966SSteve Yin recursionfiles(samplesDir, samplelist); 24664c71966SSteve Yin ListIterator<String> it = sampledirs.listIterator(); 24764c71966SSteve Yin 24864c71966SSteve Yin boolean bstartfromthis = false; 24964c71966SSteve Yin while (it.hasNext()) { 25064c71966SSteve Yin 25164c71966SSteve Yin String str = (String) it.next(); 25264c71966SSteve Yin if (!bContinue) { 25364c71966SSteve Yin File afiledir = new File(str); 25464c71966SSteve Yin dotest(afiledir); 25564c71966SSteve Yin } else { 25664c71966SSteve Yin File file = new File(thepoint.path); 25764c71966SSteve Yin File parent = file.getParentFile(); 25864c71966SSteve Yin if (parent != null) { 25964c71966SSteve Yin String pathbegin = parent.getAbsolutePath(); 26064c71966SSteve Yin if (pathbegin.equalsIgnoreCase(str)) { 26164c71966SSteve Yin bstartfromthis = true; 26264c71966SSteve Yin 26364c71966SSteve Yin } 26464c71966SSteve Yin } 26564c71966SSteve Yin if (bstartfromthis == true) { 26664c71966SSteve Yin File afiledir = new File(str); 26764c71966SSteve Yin dotest(afiledir); 26864c71966SSteve Yin } 26964c71966SSteve Yin } 27064c71966SSteve Yin } 27164c71966SSteve Yin } 27264c71966SSteve Yin dotest(File samplesDir)27364c71966SSteve Yin public void dotest(File samplesDir) throws Exception { 27464c71966SSteve Yin FilenameFilter testFilter = new FilenameFilter() { 27564c71966SSteve Yin public boolean accept(File file, String name) { 27664c71966SSteve Yin if (name.endsWith(".doc") || name.endsWith(".docx") 27764c71966SSteve Yin || name.endsWith(".dot") || name.endsWith(".xls") 27864c71966SSteve Yin || name.endsWith(".xlsx") || name.endsWith(".ods") 27964c71966SSteve Yin || name.endsWith(".ppt") || name.endsWith(".pptx") 28064c71966SSteve Yin || name.endsWith(".odp")) { 28164c71966SSteve Yin // filters files 28264c71966SSteve Yin return true; 28364c71966SSteve Yin } else { 28464c71966SSteve Yin return false; 28564c71966SSteve Yin } 28664c71966SSteve Yin } 28764c71966SSteve Yin }; 28864c71966SSteve Yin File[] files = samplesDir.listFiles(testFilter); 28964c71966SSteve Yin Arrays.sort(files); 29064c71966SSteve Yin int nfiles = files.length; 29164c71966SSteve Yin if (nfiles == 0) 29264c71966SSteve Yin return; 29364c71966SSteve Yin 29464c71966SSteve Yin int i = thepoint.i; 29564c71966SSteve Yin for (; i < nfiles; i++) { 29664c71966SSteve Yin File afile = files[i]; 29764c71966SSteve Yin String path = afile.getAbsolutePath(); 29864c71966SSteve Yin 29964c71966SSteve Yin String extName = FileUtil.getFileExtName(path).toLowerCase(); 30064c71966SSteve Yin boolean bShouldTest = false; 30164c71966SSteve Yin if (extName.equals("doc") || extName.equals("docx") 30264c71966SSteve Yin || extName.equals("odt")) { 30364c71966SSteve Yin bShouldTest = true; 30464c71966SSteve Yin if (atest.documentT == false) 30564c71966SSteve Yin continue; 30664c71966SSteve Yin } 30764c71966SSteve Yin if (extName.equals("ppt") || extName.equals("pptx") 30864c71966SSteve Yin || extName.equals("odp")) { 30964c71966SSteve Yin bShouldTest = true; 31064c71966SSteve Yin if (atest.slideT == false) 31164c71966SSteve Yin continue; 31264c71966SSteve Yin } 31364c71966SSteve Yin if (extName.equals("xls") || extName.equals("xlsx") 31464c71966SSteve Yin || extName.equals("ods")) { 31564c71966SSteve Yin bShouldTest = true; 31664c71966SSteve Yin if (atest.spreadsheetT == false) 31764c71966SSteve Yin continue; 31864c71966SSteve Yin } 31964c71966SSteve Yin if (!bShouldTest) 32064c71966SSteve Yin continue; 32164c71966SSteve Yin String exportname = "aoo_" + afile.getName(); 32264c71966SSteve Yin 32364c71966SSteve Yin sourceFile = new File(path); 32464c71966SSteve Yin 32564c71966SSteve Yin app.stop(); 32664c71966SSteve Yin app.start(); 32764c71966SSteve Yin 32864c71966SSteve Yin if(!Open(path)){ 32964c71966SSteve Yin continue; 33064c71966SSteve Yin } 33164c71966SSteve Yin 33264c71966SSteve Yin String newpath = getrealoutpath(path); 33364c71966SSteve Yin 33464c71966SSteve Yin // do testing 33564c71966SSteve Yin if (!savetosameformat(exportname, newpath)) { 33664c71966SSteve Yin continue; 33764c71966SSteve Yin } 33864c71966SSteve Yin 33964c71966SSteve Yin if(!Open(path)) { 34064c71966SSteve Yin continue; 34164c71966SSteve Yin 34264c71966SSteve Yin } 34364c71966SSteve Yin if (!savetodiffformat(exportname, newpath)) { 34464c71966SSteve Yin continue; 34564c71966SSteve Yin } 34664c71966SSteve Yin 34764c71966SSteve Yin if(!Open(path)) { 34864c71966SSteve Yin continue; 34964c71966SSteve Yin 35064c71966SSteve Yin } 35164c71966SSteve Yin 35264c71966SSteve Yin if (!savetopdfformat(exportname, newpath)) { 35364c71966SSteve Yin continue; 35464c71966SSteve Yin } 35564c71966SSteve Yin } 35664c71966SSteve Yin } 35764c71966SSteve Yin Open(String path)35864c71966SSteve Yin private boolean Open(String path) throws Exception { 35964c71966SSteve Yin try { 36064c71966SSteve Yin open(path); 36164c71966SSteve Yin if (!app.exists()) 36264c71966SSteve Yin throw new RuntimeException(); 36364c71966SSteve Yin HandleBlockers(false); 36464c71966SSteve Yin if(statusBar.exists(timeout)) 36564c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 36664c71966SSteve Yin else 36764c71966SSteve Yin throw new TimeoutException("time out"); 36864c71966SSteve Yin HandleBlockers(false); 36964c71966SSteve Yin if (!app.exists()) 37064c71966SSteve Yin throw new RuntimeException(); 37164c71966SSteve Yin return true; 37264c71966SSteve Yin } catch (Exception e) { 37364c71966SSteve Yin try { 37464c71966SSteve Yin String reason = e.getMessage(); 37564c71966SSteve Yin if (reason == null || reason.isEmpty()) 37664c71966SSteve Yin reason = "Opening"; 37764c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 37864c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", reason); 37964c71966SSteve Yin } catch (IOException e1) { 38064c71966SSteve Yin // TODO Auto-generated catch block 38164c71966SSteve Yin e1.printStackTrace(); 38264c71966SSteve Yin } 38364c71966SSteve Yin return false; 38464c71966SSteve Yin } 38564c71966SSteve Yin } 38664c71966SSteve Yin savetosameformat(String file, String outpath)38764c71966SSteve Yin private boolean savetosameformat(String file, String outpath) { 38864c71966SSteve Yin try { 38964c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 39064c71966SSteve Yin 39164c71966SSteve Yin String extName = FileUtil.getFileExtName(file).toLowerCase(); 39264c71966SSteve Yin 39364c71966SSteve Yin boolean formatchanged = false; 39464c71966SSteve Yin if (extName.equals("docx")) { 39564c71966SSteve Yin extName = "doc"; 39664c71966SSteve Yin formatchanged = true; 39764c71966SSteve Yin } else if (extName.equals("pptx")) { 39864c71966SSteve Yin extName = "ppt"; 39964c71966SSteve Yin formatchanged = true; 40064c71966SSteve Yin } else if (extName.equals("xlsx")) { 40164c71966SSteve Yin extName = "xls"; 40264c71966SSteve Yin formatchanged = true; 40364c71966SSteve Yin } 40464c71966SSteve Yin 40564c71966SSteve Yin scenario = FileUtil.getFileExtName(file).toLowerCase() + " to " + extName; 40664c71966SSteve Yin 40764c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 40864c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 40964c71966SSteve Yin String newfile = pre + extName; 41064c71966SSteve Yin 41112694156Sdamjan String saveTo = reportDir + File.separator + file; 41264c71966SSteve Yin if (formatchanged) 41312694156Sdamjan saveTo = reportDir + File.separator + newfile; 41464c71966SSteve Yin // Save the text document 41564c71966SSteve Yin deleteFile(saveTo); 41664c71966SSteve Yin SaveAs(saveTo); 41764c71966SSteve Yin Close(); 41864c71966SSteve Yin if(!Open(saveTo)) 41964c71966SSteve Yin return false; 42064c71966SSteve Yin 42164c71966SSteve Yin String exception = ""; 42264c71966SSteve Yin String resultflag = ""; 42364c71966SSteve Yin try { 42464c71966SSteve Yin Close(); 42564c71966SSteve Yin resultflag = "Pass"; 42664c71966SSteve Yin } catch (Exception e) { 42764c71966SSteve Yin exception = e.getMessage(); 42864c71966SSteve Yin resultflag = "Fail"; 42964c71966SSteve Yin } 43064c71966SSteve Yin 43164c71966SSteve Yin File targetFile = new File(saveTo); 43264c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 43364c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 43464c71966SSteve Yin resultflag, exception); 43564c71966SSteve Yin 43664c71966SSteve Yin return true; 43764c71966SSteve Yin } catch (Exception e) { 43864c71966SSteve Yin try { 43964c71966SSteve Yin String exception = e.getMessage(); 44064c71966SSteve Yin if (exception == null || exception.isEmpty()) 44164c71966SSteve Yin exception = "Saving to the same format"; 44264c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 44364c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", exception); 44464c71966SSteve Yin } catch (IOException e1) { 44564c71966SSteve Yin // TODO Auto-generated catch block 44664c71966SSteve Yin e1.printStackTrace(); 44764c71966SSteve Yin } 44864c71966SSteve Yin 44964c71966SSteve Yin return false; 45064c71966SSteve Yin } 45164c71966SSteve Yin } 45264c71966SSteve Yin savetodiffformat(String file, String outpath)45364c71966SSteve Yin private boolean savetodiffformat(String file, String outpath) { 45464c71966SSteve Yin try { 45564c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 45664c71966SSteve Yin 45764c71966SSteve Yin String extName = FileUtil.getFileExtName(file).toLowerCase(); 45864c71966SSteve Yin 45964c71966SSteve Yin String targetExtName = null; 46064c71966SSteve Yin 46164c71966SSteve Yin if (extName.equals("doc") || extName.equals("docx")) 46264c71966SSteve Yin targetExtName = "odt"; 46364c71966SSteve Yin else if (extName.equals("ppt") || extName.equals("pptx")) 46464c71966SSteve Yin targetExtName = "odp"; 46564c71966SSteve Yin else if (extName.equals("xls") || extName.equals("xlsx")) 46664c71966SSteve Yin targetExtName = "ods"; 46764c71966SSteve Yin else if (extName.equals("odt")) 46864c71966SSteve Yin targetExtName = "doc"; 46964c71966SSteve Yin else if (extName.equals("odp")) 47064c71966SSteve Yin targetExtName = "ppt"; 47164c71966SSteve Yin else if (extName.equals("ods")) 47264c71966SSteve Yin targetExtName = "xls"; 47364c71966SSteve Yin 47464c71966SSteve Yin scenario = extName + " to " + targetExtName; 47564c71966SSteve Yin 47664c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 47764c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 47812694156Sdamjan String saveTo = reportDir + File.separator + pre + targetExtName; 47964c71966SSteve Yin deleteFile(saveTo); 48064c71966SSteve Yin // long base = System.currentTimeMillis(); 48164c71966SSteve Yin SaveAs(saveTo); 48264c71966SSteve Yin Close(); 48364c71966SSteve Yin if(!Open(saveTo)) 48464c71966SSteve Yin return false; 48564c71966SSteve Yin 48664c71966SSteve Yin String exception = ""; 48764c71966SSteve Yin String resultflag = ""; 48864c71966SSteve Yin try { 48964c71966SSteve Yin Close(); 49064c71966SSteve Yin resultflag = "Pass"; 49164c71966SSteve Yin } catch (Exception e) { 49264c71966SSteve Yin exception = e.getMessage(); 49364c71966SSteve Yin resultflag = "Fail"; 49464c71966SSteve Yin } 49564c71966SSteve Yin 49664c71966SSteve Yin File targetFile = new File(saveTo); 49764c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 49864c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 49964c71966SSteve Yin resultflag, exception); 50064c71966SSteve Yin 50164c71966SSteve Yin return true; 50264c71966SSteve Yin } catch (Exception e) { 50364c71966SSteve Yin try { 50464c71966SSteve Yin String exception = e.getMessage(); 50564c71966SSteve Yin if (exception == null || exception.isEmpty()) 50664c71966SSteve Yin exception = "Saving to a different format"; 50764c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 50864c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", exception); 50964c71966SSteve Yin } catch (IOException e1) { 51064c71966SSteve Yin // TODO Auto-generated catch block 51164c71966SSteve Yin e1.printStackTrace(); 51264c71966SSteve Yin } 51364c71966SSteve Yin 51464c71966SSteve Yin return false; 51564c71966SSteve Yin } 51664c71966SSteve Yin 51764c71966SSteve Yin } 51864c71966SSteve Yin Close()51964c71966SSteve Yin private void Close() throws Exception { 52064c71966SSteve Yin close(); 52164c71966SSteve Yin HandleBlockers(false); 52264c71966SSteve Yin } 52364c71966SSteve Yin HandleBlockers(final boolean Positive)52464c71966SSteve Yin public static void HandleBlockers(final boolean Positive) throws Exception { 52564c71966SSteve Yin new Condition() { 52664c71966SSteve Yin @Override 52764c71966SSteve Yin public boolean value() { 52864c71966SSteve Yin while (activeMsgBox.exists()) { 52964c71966SSteve Yin 53064c71966SSteve Yin String context = activeMsgBox.getMessage(); 53164c71966SSteve Yin if (context.toLowerCase().indexOf("has been modified") >= 0 53264c71966SSteve Yin && context.toLowerCase().indexOf( 53364c71966SSteve Yin "do you want to save your changes") >= 0) 53464c71966SSteve Yin throw new RuntimeException("A wrong dirty flag"); 53564c71966SSteve Yin if (context.toLowerCase().indexOf("read-error") >= 0) 53664c71966SSteve Yin throw new RuntimeException("Read Error"); 53764c71966SSteve Yin if (context.toLowerCase().indexOf("does not exist") >= 0) 53864c71966SSteve Yin throw new RuntimeException("File not exist"); 53964c71966SSteve Yin 54064c71966SSteve Yin try { 54164c71966SSteve Yin if (Positive) 54264c71966SSteve Yin activeMsgBox.ok(); 54364c71966SSteve Yin else 54464c71966SSteve Yin activeMsgBox.no(); 54564c71966SSteve Yin } catch (Exception e) { 54664c71966SSteve Yin try { 54764c71966SSteve Yin if (Positive) 54864c71966SSteve Yin activeMsgBox.yes(); 54964c71966SSteve Yin else 55064c71966SSteve Yin activeMsgBox.no(); 55164c71966SSteve Yin } catch (Exception e1) { 55264c71966SSteve Yin try { 55364c71966SSteve Yin activeMsgBox.doDefault(); 55464c71966SSteve Yin } catch (Exception e2) { 55564c71966SSteve Yin try { 55664c71966SSteve Yin activeMsgBox.ok(); 55764c71966SSteve Yin } catch (Exception e3) { 55864c71966SSteve Yin activeMsgBox.yes(); 55964c71966SSteve Yin } 56064c71966SSteve Yin } 56164c71966SSteve Yin } 56264c71966SSteve Yin } 56364c71966SSteve Yin } 56464c71966SSteve Yin if (passwdDlg.exists()) { 56564c71966SSteve Yin String caption = passwdDlg.getCaption(); 56664c71966SSteve Yin if (caption.toLowerCase().indexOf( 56764c71966SSteve Yin "enter password to open file") >= 0) 56864c71966SSteve Yin throw new RuntimeException("A password protected file"); 56964c71966SSteve Yin if (caption.toLowerCase().indexOf("properties") >= 0) 57064c71966SSteve Yin throw new RuntimeException("An unsupported format"); 57164c71966SSteve Yin if (SupportedFormats(caption)) 57264c71966SSteve Yin throw new RuntimeException("An unreadable file"); 57364c71966SSteve Yin } 57464c71966SSteve Yin return true; 57564c71966SSteve Yin } 57664c71966SSteve Yin 57764c71966SSteve Yin }.test(timeout, interval); 57864c71966SSteve Yin } 57964c71966SSteve Yin SupportedFormats(String filename)58064c71966SSteve Yin private static boolean SupportedFormats(String filename) { 58164c71966SSteve Yin if (filename.endsWith(".doc") || filename.endsWith(".docx") 58264c71966SSteve Yin || filename.endsWith(".dot") || filename.endsWith(".xls") 58364c71966SSteve Yin || filename.endsWith(".xlsx") || filename.endsWith(".ods") 58464c71966SSteve Yin || filename.endsWith(".ppt") || filename.endsWith(".pptx") 58564c71966SSteve Yin || filename.endsWith(".odp")) { 58664c71966SSteve Yin return true; 58764c71966SSteve Yin } else { 58864c71966SSteve Yin return false; 58964c71966SSteve Yin } 59064c71966SSteve Yin } 59164c71966SSteve Yin SaveAs(String newfile)59264c71966SSteve Yin private void SaveAs(String newfile) throws Exception { 59364c71966SSteve Yin saveAs(newfile); 59464c71966SSteve Yin HandleBlockers(true); 59564c71966SSteve Yin if(statusBar.exists(timeout)) 59664c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 59764c71966SSteve Yin else 59864c71966SSteve Yin throw new TimeoutException("time out"); 59964c71966SSteve Yin } 60064c71966SSteve Yin savetopdfformat(String file, String outpath)60164c71966SSteve Yin private boolean savetopdfformat(String file, String outpath) { 60264c71966SSteve Yin try { 60364c71966SSteve Yin File reportDir = Testspace.getFile(outpath); 60464c71966SSteve Yin String extName = "pdf"; 60564c71966SSteve Yin 60664c71966SSteve Yin int dotIndex = file.lastIndexOf("."); 60764c71966SSteve Yin String pre = file.substring(0, dotIndex + 1); 60864c71966SSteve Yin String newfile = pre + extName; 60964c71966SSteve Yin 61064c71966SSteve Yin scenario = FileUtil.getFileExtName(file).toLowerCase() + " to pdf"; 61164c71966SSteve Yin 61212694156Sdamjan String saveTo = reportDir + File.separator + newfile; 61364c71966SSteve Yin // Save the text document 61464c71966SSteve Yin app.dispatch(".uno:ExportToPDF"); 61564c71966SSteve Yin pdfGeneralPage.ok(); 61664c71966SSteve Yin 61764c71966SSteve Yin submitSaveDlg(saveTo); 61864c71966SSteve Yin HandleBlockers(true); 61964c71966SSteve Yin 62064c71966SSteve Yin if(statusBar.exists(timeout)) 62164c71966SSteve Yin statusBar.waitForEnabled(timeout, interval); 62264c71966SSteve Yin else 62364c71966SSteve Yin throw new TimeoutException("time out"); 62464c71966SSteve Yin 62564c71966SSteve Yin String outcome = "Pass"; 62664c71966SSteve Yin try { 62764c71966SSteve Yin Close(); 62864c71966SSteve Yin } catch (Exception e) { 62964c71966SSteve Yin if (!e.getMessage().matches("A wrong dirty flag")) 63064c71966SSteve Yin outcome = e.getMessage(); 63164c71966SSteve Yin else 63264c71966SSteve Yin throw e; 63364c71966SSteve Yin } 63464c71966SSteve Yin 63564c71966SSteve Yin 63664c71966SSteve Yin File targetFile = new File(saveTo); 63764c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 63864c71966SSteve Yin sourceFile.length(), scenario, saveTo, targetFile.length(), 63964c71966SSteve Yin outcome); 64064c71966SSteve Yin 64164c71966SSteve Yin return true; 64264c71966SSteve Yin } catch (Exception e) { 64364c71966SSteve Yin try { 64464c71966SSteve Yin String reason = e.getMessage(); 64564c71966SSteve Yin if (reason == null || reason.isEmpty()) 64664c71966SSteve Yin reason = "Exporting to pdf format"; 64764c71966SSteve Yin result.addRow("data", sourceFile.getCanonicalPath(), 64864c71966SSteve Yin sourceFile.length(), scenario, "", "", "Fail", reason); 64964c71966SSteve Yin } catch (IOException e1) { 65064c71966SSteve Yin // TODO Auto-generated catch block 65164c71966SSteve Yin e1.printStackTrace(); 65264c71966SSteve Yin } 65364c71966SSteve Yin 65464c71966SSteve Yin return false; 65564c71966SSteve Yin } 65664c71966SSteve Yin } 65764c71966SSteve Yin 65864c71966SSteve Yin } 659