xref: /trunk/test/testgui/source/bvt/gui/FileExport.java (revision 9c5183b9128ae5fa95a129746e5d9e3fc803f184)
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 
57*9c5183b9Sdamjan 
58*9c5183b9Sdamjan public class FileExport {
59*9c5183b9Sdamjan     private static class TestType {
6064c71966SSteve Yin 
6164c71966SSteve Yin         public TestType(boolean doc, boolean spread, boolean slide) {
6264c71966SSteve Yin             documentT = doc;
6364c71966SSteve Yin             spreadsheetT = spread;
6464c71966SSteve Yin             slideT = slide;
6564c71966SSteve Yin         }
6664c71966SSteve Yin 
6764c71966SSteve Yin         public boolean documentT;
6864c71966SSteve Yin         public boolean spreadsheetT;
6964c71966SSteve Yin         public boolean slideT;
7064c71966SSteve Yin     };
7164c71966SSteve Yin 
72*9c5183b9Sdamjan     private static class ContinuePoint {
7364c71966SSteve Yin         public String path;
7464c71966SSteve Yin         public int i;
7564c71966SSteve Yin 
7664c71966SSteve Yin         ContinuePoint() {
7764c71966SSteve Yin             path = "";
7864c71966SSteve Yin             i = 0;
7964c71966SSteve Yin         }
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 
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 
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
15264c71966SSteve Yin     public static void beforeClass() {
15364c71966SSteve Yin         app.clean();
15464c71966SSteve Yin     }
15564c71966SSteve Yin 
15664c71966SSteve Yin     @AfterClass
15764c71966SSteve Yin     public static void afterClass() {
15864c71966SSteve Yin         app.stop();
15964c71966SSteve Yin     }
16064c71966SSteve Yin 
16164c71966SSteve Yin     @Before
16264c71966SSteve Yin     public void before() {
16364c71966SSteve Yin 
16464c71966SSteve Yin     }
16564c71966SSteve Yin 
16664c71966SSteve Yin     @After
16764c71966SSteve Yin     public void after() throws Exception {
16864c71966SSteve Yin         app.stop();
16964c71966SSteve Yin     }
17064c71966SSteve Yin 
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
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 
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 
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 
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 
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 
51964c71966SSteve Yin     private void Close() throws Exception {
52064c71966SSteve Yin         close();
52164c71966SSteve Yin         HandleBlockers(false);
52264c71966SSteve Yin     }
52364c71966SSteve Yin 
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 
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 
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 
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