Author: steve_y
Date: Mon Jun 30 05:33:55 2014
New Revision: 1606622

URL: http://svn.apache.org/r1606622
Log:
A file conversion test case, which includes some operations of ODF, MS OOXML, 
MS binary loading/saving, and PDF format exporting.

Added:
    openoffice/trunk/test/testgui/source/bvt/gui/FileExport.java

Added: openoffice/trunk/test/testgui/source/bvt/gui/FileExport.java
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/test/testgui/source/bvt/gui/FileExport.java?rev=1606622&view=auto
==============================================================================
--- openoffice/trunk/test/testgui/source/bvt/gui/FileExport.java (added)
+++ openoffice/trunk/test/testgui/source/bvt/gui/FileExport.java Mon Jun 30 
05:33:55 2014
@@ -0,0 +1,661 @@
+/**************************************************************
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ *************************************************************/
+
+/**
+ * 
+ */
+package bvt.gui;
+
+import static org.openoffice.test.common.Testspace.*;
+import static testlib.gui.AppTool.*;
+import static testlib.gui.UIMap.*;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.concurrent.TimeoutException;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.InputStreamReader;
+import java.lang.RuntimeException;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openoffice.test.common.Condition;
+import org.openoffice.test.common.DataSheet;
+import org.openoffice.test.common.FileUtil;
+import org.openoffice.test.common.Logger;
+import org.openoffice.test.common.Testspace;
+import org.openoffice.test.vcl.widgets.VclDialog;
+
+/**
+ * 
+ */
+class TestType {
+
+       public TestType(boolean doc, boolean spread, boolean slide) {
+               documentT = doc;
+               spreadsheetT = spread;
+               slideT = slide;
+       }
+
+       public boolean documentT;
+       public boolean spreadsheetT;
+       public boolean slideT;
+};
+
+class ContinuePoint {
+       public String path;
+       public int i;
+
+       ContinuePoint() {
+               path = "";
+               i = 0;
+       }
+}
+
+public class FileExport {
+       // for example
+       // the path is "D:\\aoo\\utaoo\\testspace\\ooxmlsamples"
+       String samplespath = "";// a dir
+       String outpath = ""; // a dir
+       static double timeout = 100;
+       static double interval = 0.1;
+       double sleeptime = 1;
+       boolean bContinue = false;// if failed,next execute from the continue 
point
+       TestType atest = new TestType(true, true, true);// doc,spreadsheet,slide
+       ContinuePoint thepoint = null;
+       BufferedWriter fwContinue = null;
+       String testedlogfile = "";
+
+       private static DataSheet result;
+       private String scenario = null;
+       private File sourceFile = null;
+
+       public static final VclDialog passwdDlg = dialog("");
+
+       public List<String> recursionfiles(File path, List<String> 
resultFileName) {
+               File[] files = path.listFiles();
+               if (files == null)
+                       return resultFileName;
+               for (File f : files) {
+                       if (f.isDirectory()) {// a path
+                               if (!f.isHidden() && 
!f.getName().startsWith(".")) {
+                                       sampledirs.add(f.getPath());
+                                       recursionfiles(f, resultFileName);
+                               }
+                       } else {// a file
+                               if (!f.isHidden() && 
!f.getName().startsWith(".")) {
+                                       String apath = f.getPath();
+
+                                       int sepIndex = apath.indexOf("\\");
+                                       String userpath = 
apath.substring(sepIndex);
+                                       String newpath = outpath + userpath;
+
+                                       File file = new File(newpath);
+                                       File parent = file.getParentFile();
+                                       if (parent != null && !parent.exists()) 
{
+                                               parent.mkdirs();
+                                       }
+                                       resultFileName.add(f.getPath());
+                               }
+                       }
+               }
+               return resultFileName;
+       }
+
+       private String getrealoutpath(String p) {
+               String apath = p;
+
+               int sepIndex = apath.indexOf("\\");
+               int sepIndexLast = apath.lastIndexOf("\\");
+               String userpath = apath.substring(sepIndex, sepIndexLast);
+               String newpath = outpath + userpath;
+               File tempFolderFile = new File(newpath);
+               if (!tempFolderFile.exists()) {
+                       tempFolderFile.mkdirs();
+               }
+               return newpath;
+       }
+
+       private List<String> samplelist = null;
+       private List<String> sampledirs = null;
+
+       @Rule
+       public Logger log = Logger.getLogger(this);
+
+       @BeforeClass
+       public static void beforeClass() {
+               app.clean();
+       }
+
+       @AfterClass
+       public static void afterClass() {
+               app.stop();
+       }
+
+       @Before
+       public void before() {
+
+       }
+
+       @After
+       public void after() throws Exception {
+               app.stop();
+       }
+
+       void getcontinuepoint() {
+
+               if (bContinue == false) {
+                       thepoint.path = "";
+                       thepoint.i = 0;
+                       return;
+               }
+               File ftestedlog = new File(testedlogfile);
+               Reader reader = null;
+               try {
+                       reader = new InputStreamReader(new 
FileInputStream(ftestedlog));
+               } catch (FileNotFoundException e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               }
+
+               BufferedReader br = new BufferedReader(reader);
+
+               String line = null;
+               int countline = 0;
+               int m = 0;
+               try {
+                       if ((line = br.readLine()) != null) {
+                               if (countline == 0) {
+                                       thepoint.path = line;
+                               } else {
+
+                                       m = Integer.parseInt(line);
+                                       if (m > 0)
+                                               thepoint.i = m;
+                               }
+                       }
+               } catch (NumberFormatException e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               } catch (IOException e1) {
+                       // TODO Auto-generated catch block
+                       e1.printStackTrace();
+               }
+       }
+
+       /**
+        * Test Open/SaveAs ooxml file by Aoo
+        * 
+        * @throws Exception
+        */
+       @Test
+       public void testSaveAs() throws Exception {
+               samplelist = new ArrayList<String>();
+               sampledirs = new ArrayList<String>();
+               thepoint = new ContinuePoint();
+               File spacepath = Testspace.getFile("output");// 
..\\testspace\\output
+               String absspath = spacepath.getAbsolutePath();
+               int n = absspath.indexOf("testgui");
+               String abspre = absspath.substring(0, n);
+
+               result = new DataSheet(getFile("outputlog/"
+                               + FileExport.class.getName() + ".xml"));
+               result.addRow("data", "File Path", "File Size", "Scenario",
+                               "Exported File Path", "Exported File Size", 
"Result", "Error");
+
+               testedlogfile = abspre + "testgui\\cases_tested.txt";
+               samplespath = "samples";
+               
+               if (outpath.length() == 0) {
+                       File workspacepath = Testspace.getFile("output");// 
..\\testspace\\output
+                       outpath = workspacepath.getAbsolutePath();
+
+                       // outpath = "D:\\AOOautomation\\Docs sample 
files\\out";
+               }
+
+               if (bContinue)
+                       getcontinuepoint();
+
+               File samplesDir = Testspace.getFile(samplespath);
+               recursionfiles(samplesDir, samplelist);
+               ListIterator<String> it = sampledirs.listIterator();
+
+               boolean bstartfromthis = false;
+               while (it.hasNext()) {
+
+                       String str = (String) it.next();
+                       if (!bContinue) {
+                               File afiledir = new File(str);
+                               dotest(afiledir);
+                       } else {
+                               File file = new File(thepoint.path);
+                               File parent = file.getParentFile();
+                               if (parent != null) {
+                                       String pathbegin = 
parent.getAbsolutePath();
+                                       if (pathbegin.equalsIgnoreCase(str)) {
+                                               bstartfromthis = true;
+
+                                       }
+                               }
+                               if (bstartfromthis == true) {
+                                       File afiledir = new File(str);
+                                       dotest(afiledir);
+                               }
+                       }
+               }
+       }
+
+       public void dotest(File samplesDir) throws Exception {
+               FilenameFilter testFilter = new FilenameFilter() {
+                       public boolean accept(File file, String name) {
+                               if (name.endsWith(".doc") || 
name.endsWith(".docx")
+                                               || name.endsWith(".dot") || 
name.endsWith(".xls")
+                                               || name.endsWith(".xlsx") || 
name.endsWith(".ods")
+                                               || name.endsWith(".ppt") || 
name.endsWith(".pptx")
+                                               || name.endsWith(".odp")) {
+                                       // filters files
+                                       return true;
+                               } else {
+                                       return false;
+                               }
+                       }
+               };
+               File[] files = samplesDir.listFiles(testFilter);
+               Arrays.sort(files);
+               int nfiles = files.length;
+               if (nfiles == 0)
+                       return;
+
+               int i = thepoint.i;
+               for (; i < nfiles; i++) {
+                       File afile = files[i];
+                       String path = afile.getAbsolutePath();
+
+                       String extName = 
FileUtil.getFileExtName(path).toLowerCase();
+                       boolean bShouldTest = false;
+                       if (extName.equals("doc") || extName.equals("docx")
+                                       || extName.equals("odt")) {
+                               bShouldTest = true;
+                               if (atest.documentT == false)
+                                       continue;
+                       }
+                       if (extName.equals("ppt") || extName.equals("pptx")
+                                       || extName.equals("odp")) {
+                               bShouldTest = true;
+                               if (atest.slideT == false)
+                                       continue;
+                       }
+                       if (extName.equals("xls") || extName.equals("xlsx")
+                                       || extName.equals("ods")) {
+                               bShouldTest = true;
+                               if (atest.spreadsheetT == false)
+                                       continue;
+                       }
+                       if (!bShouldTest)
+                               continue;
+                       String exportname = "aoo_" + afile.getName();
+
+                       sourceFile = new File(path);
+
+                       app.stop();
+                       app.start();
+
+                       if(!Open(path)){
+                               continue;
+                       }
+
+                       String newpath = getrealoutpath(path);
+
+                       // do testing
+                       if (!savetosameformat(exportname, newpath)) {
+                               continue;
+                       }
+
+                       if(!Open(path)) {
+                               continue;
+
+                       }
+                       if (!savetodiffformat(exportname, newpath)) {
+                               continue;
+                       }
+
+                       if(!Open(path)) {
+                               continue;
+
+                       }
+
+                       if (!savetopdfformat(exportname, newpath)) {
+                               continue;
+                       }                       
+               }
+       }
+
+       private boolean Open(String path) throws Exception {
+               try {
+                       open(path);
+                       if (!app.exists())
+                               throw new RuntimeException();
+                       HandleBlockers(false);
+                       if(statusBar.exists(timeout))
+                               statusBar.waitForEnabled(timeout, interval);
+                       else
+                               throw new TimeoutException("time out");
+                       HandleBlockers(false);
+                       if (!app.exists())
+                               throw new RuntimeException();
+                       return true;
+               } catch (Exception e) {
+                       try {
+                               String reason = e.getMessage();
+                               if (reason == null || reason.isEmpty())
+                                       reason = "Opening";
+                               result.addRow("data", 
sourceFile.getCanonicalPath(),
+                                               sourceFile.length(), scenario, 
"", "", "Fail", reason);
+                       } catch (IOException e1) {
+                               // TODO Auto-generated catch block
+                               e1.printStackTrace();
+                       }
+                       return false;
+               }
+       }
+
+       private boolean savetosameformat(String file, String outpath) {
+               try {
+                       File reportDir = Testspace.getFile(outpath);
+
+                       String extName = 
FileUtil.getFileExtName(file).toLowerCase();
+
+                       boolean formatchanged = false;
+                       if (extName.equals("docx")) {
+                               extName = "doc";
+                               formatchanged = true;
+                       } else if (extName.equals("pptx")) {
+                               extName = "ppt";
+                               formatchanged = true;
+                       } else if (extName.equals("xlsx")) {
+                               extName = "xls";
+                               formatchanged = true;
+                       }
+                       
+                       scenario = FileUtil.getFileExtName(file).toLowerCase() 
+ " to " + extName;
+
+                       int dotIndex = file.lastIndexOf(".");
+                       String pre = file.substring(0, dotIndex + 1);
+                       String newfile = pre + extName;
+
+                       String saveTo = reportDir + "\\" + file;
+                       if (formatchanged)
+                               saveTo = reportDir + "\\" + newfile;
+                       // Save the text document
+                       deleteFile(saveTo);
+                       SaveAs(saveTo);
+                       Close();
+                       if(!Open(saveTo))
+                               return false;
+
+                       String exception = "";
+                       String resultflag = "";
+                       try {
+                               Close();
+                               resultflag = "Pass";
+                       } catch (Exception e) {
+                               exception = e.getMessage();
+                               resultflag = "Fail";
+                       }
+
+                       File targetFile = new File(saveTo);
+                       result.addRow("data", sourceFile.getCanonicalPath(),
+                                       sourceFile.length(), scenario, saveTo, 
targetFile.length(),
+                                       resultflag, exception);
+
+                       return true;
+               } catch (Exception e) {
+                       try {
+                               String exception = e.getMessage();
+                               if (exception == null || exception.isEmpty())
+                                       exception = "Saving to the same format";
+                               result.addRow("data", 
sourceFile.getCanonicalPath(),
+                                               sourceFile.length(), scenario, 
"", "", "Fail", exception);
+                       } catch (IOException e1) {
+                               // TODO Auto-generated catch block
+                               e1.printStackTrace();
+                       }
+
+                       return false;
+               }
+       }
+
+       private boolean savetodiffformat(String file, String outpath) {
+               try {
+                       File reportDir = Testspace.getFile(outpath);
+
+                       String extName = 
FileUtil.getFileExtName(file).toLowerCase();
+
+                       String targetExtName = null;
+
+                       if (extName.equals("doc") || extName.equals("docx"))
+                               targetExtName = "odt";
+                       else if (extName.equals("ppt") || 
extName.equals("pptx"))
+                               targetExtName = "odp";
+                       else if (extName.equals("xls") || 
extName.equals("xlsx"))
+                               targetExtName = "ods";
+                       else if (extName.equals("odt"))
+                               targetExtName = "doc";
+                       else if (extName.equals("odp"))
+                               targetExtName = "ppt";
+                       else if (extName.equals("ods"))
+                               targetExtName = "xls";
+                       
+                       scenario = extName + " to " + targetExtName;
+                       
+                       int dotIndex = file.lastIndexOf(".");
+                       String pre = file.substring(0, dotIndex + 1);
+                       String saveTo = reportDir + "\\" + pre + targetExtName;
+                       deleteFile(saveTo);
+                       // long base = System.currentTimeMillis();
+                       SaveAs(saveTo);
+                       Close();
+                       if(!Open(saveTo))
+                               return false;
+
+                       String exception = "";
+                       String resultflag = "";
+                       try {
+                               Close();
+                               resultflag = "Pass";
+                       } catch (Exception e) {
+                               exception = e.getMessage();
+                               resultflag = "Fail";
+                       }
+
+                       File targetFile = new File(saveTo);
+                       result.addRow("data", sourceFile.getCanonicalPath(),
+                                       sourceFile.length(), scenario, saveTo, 
targetFile.length(),
+                                       resultflag, exception);
+
+                       return true;
+               } catch (Exception e) {
+                       try {
+                               String exception = e.getMessage();
+                               if (exception == null || exception.isEmpty())
+                                       exception = "Saving to a different 
format";
+                               result.addRow("data", 
sourceFile.getCanonicalPath(),
+                                               sourceFile.length(), scenario, 
"", "", "Fail", exception);
+                       } catch (IOException e1) {
+                               // TODO Auto-generated catch block
+                               e1.printStackTrace();
+                       }
+
+                       return false;
+               }
+
+       }
+
+       private void Close() throws Exception {
+               close();
+               HandleBlockers(false);
+       }
+
+       public static void HandleBlockers(final boolean Positive) throws 
Exception {
+               new Condition() {
+                       @Override
+                       public boolean value() {
+                               while (activeMsgBox.exists()) {
+
+                                       String context = 
activeMsgBox.getMessage();
+                                       if (context.toLowerCase().indexOf("has 
been modified") >= 0
+                                                       && 
context.toLowerCase().indexOf(
+                                                                       "do you 
want to save your changes") >= 0)
+                                               throw new RuntimeException("A 
wrong dirty flag");
+                                       if 
(context.toLowerCase().indexOf("read-error") >= 0)
+                                               throw new 
RuntimeException("Read Error");
+                                       if (context.toLowerCase().indexOf("does 
not exist") >= 0)
+                                               throw new 
RuntimeException("File not exist");
+
+                                       try {
+                                               if (Positive)
+                                                       activeMsgBox.ok();
+                                               else
+                                                       activeMsgBox.no();
+                                       } catch (Exception e) {
+                                               try {
+                                                       if (Positive)
+                                                               
activeMsgBox.yes();
+                                                       else
+                                                               
activeMsgBox.no();
+                                               } catch (Exception e1) {
+                                                       try {
+                                                               
activeMsgBox.doDefault();
+                                                       } catch (Exception e2) {
+                                                               try {
+                                                                       
activeMsgBox.ok();
+                                                               } catch 
(Exception e3) {
+                                                                       
activeMsgBox.yes();
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                               if (passwdDlg.exists()) {
+                                       String caption = passwdDlg.getCaption();
+                                       if (caption.toLowerCase().indexOf(
+                                                       "enter password to open 
file") >= 0)
+                                               throw new RuntimeException("A 
password protected file");
+                                       if 
(caption.toLowerCase().indexOf("properties") >= 0)
+                                               throw new RuntimeException("An 
unsupported format");
+                                       if (SupportedFormats(caption))
+                                               throw new RuntimeException("An 
unreadable file");
+                               }
+                               return true;
+                       }
+               
+               }.test(timeout, interval);
+       }
+
+       private static boolean SupportedFormats(String filename) {
+               if (filename.endsWith(".doc") || filename.endsWith(".docx")
+                               || filename.endsWith(".dot") || 
filename.endsWith(".xls")
+                               || filename.endsWith(".xlsx") || 
filename.endsWith(".ods")
+                               || filename.endsWith(".ppt") || 
filename.endsWith(".pptx")
+                               || filename.endsWith(".odp")) {
+                       return true;
+               } else {
+                       return false;
+               }
+       }
+
+       private void SaveAs(String newfile) throws Exception {
+               saveAs(newfile);
+               HandleBlockers(true);
+               if(statusBar.exists(timeout))
+                       statusBar.waitForEnabled(timeout, interval);
+               else
+                       throw new TimeoutException("time out");
+       }
+
+       private boolean savetopdfformat(String file, String outpath) {
+               try {
+                       File reportDir = Testspace.getFile(outpath);
+                       String extName = "pdf";
+
+                       int dotIndex = file.lastIndexOf(".");
+                       String pre = file.substring(0, dotIndex + 1);
+                       String newfile = pre + extName;
+
+                       scenario = FileUtil.getFileExtName(file).toLowerCase() 
+ " to pdf";
+                       
+                       String saveTo = reportDir + "\\" + newfile;
+                       // Save the text document
+                       app.dispatch(".uno:ExportToPDF");
+                       pdfGeneralPage.ok();
+
+                       submitSaveDlg(saveTo);
+                       HandleBlockers(true);
+                       
+                       if(statusBar.exists(timeout))
+                               statusBar.waitForEnabled(timeout, interval);
+                       else
+                               throw new TimeoutException("time out");
+
+                       String outcome = "Pass";
+                       try {
+                               Close();
+                       } catch (Exception e) {
+                               if (!e.getMessage().matches("A wrong dirty 
flag"))
+                                       outcome = e.getMessage();
+                               else
+                                       throw e;
+                       }
+
+                       
+                       File targetFile = new File(saveTo);
+                       result.addRow("data", sourceFile.getCanonicalPath(),
+                                       sourceFile.length(), scenario, saveTo, 
targetFile.length(),
+                                       outcome);
+
+                       return true;
+               } catch (Exception e) {
+                       try {
+                               String reason = e.getMessage();
+                               if (reason == null || reason.isEmpty())
+                                       reason = "Exporting to pdf format";
+                               result.addRow("data", 
sourceFile.getCanonicalPath(),
+                                               sourceFile.length(), scenario, 
"", "", "Fail", reason);
+                       } catch (IOException e1) {
+                               // TODO Auto-generated catch block
+                               e1.printStackTrace();
+                       }
+
+                       return false;
+               }
+       }
+
+}


Reply via email to