xref: /trunk/test/testgui/source/bvt/gui/FileExport.java (revision 126941563920c285023d1f6559a20f4a22ed64e1)
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