13cb3fca6SLiu Zhe /************************************************************** 23cb3fca6SLiu Zhe * 33cb3fca6SLiu Zhe * Licensed to the Apache Software Foundation (ASF) under one 43cb3fca6SLiu Zhe * or more contributor license agreements. See the NOTICE file 53cb3fca6SLiu Zhe * distributed with this work for additional information 63cb3fca6SLiu Zhe * regarding copyright ownership. The ASF licenses this file 73cb3fca6SLiu Zhe * to you under the Apache License, Version 2.0 (the 83cb3fca6SLiu Zhe * "License"); you may not use this file except in compliance 93cb3fca6SLiu Zhe * with the License. You may obtain a copy of the License at 103cb3fca6SLiu Zhe * 113cb3fca6SLiu Zhe * http://www.apache.org/licenses/LICENSE-2.0 123cb3fca6SLiu Zhe * 133cb3fca6SLiu Zhe * Unless required by applicable law or agreed to in writing, 143cb3fca6SLiu Zhe * software distributed under the License is distributed on an 153cb3fca6SLiu Zhe * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 163cb3fca6SLiu Zhe * KIND, either express or implied. See the License for the 173cb3fca6SLiu Zhe * specific language governing permissions and limitations 183cb3fca6SLiu Zhe * under the License. 193cb3fca6SLiu Zhe * 203cb3fca6SLiu Zhe *************************************************************/ 213cb3fca6SLiu Zhe 22*3e7cc3ecSLiu Zhe package pvt.uno; 233cb3fca6SLiu Zhe 24527dbd07SLiu Zhe import static org.openoffice.test.common.Testspace.*; 25527dbd07SLiu Zhe 263cb3fca6SLiu Zhe import java.io.File; 273cb3fca6SLiu Zhe import java.io.FileOutputStream; 283cb3fca6SLiu Zhe import java.io.PrintStream; 293cb3fca6SLiu Zhe 303cb3fca6SLiu Zhe import org.junit.After; 313cb3fca6SLiu Zhe import org.junit.AfterClass; 323cb3fca6SLiu Zhe import org.junit.Before; 333cb3fca6SLiu Zhe import org.junit.BeforeClass; 343cb3fca6SLiu Zhe import org.junit.Rule; 353cb3fca6SLiu Zhe import org.junit.Test; 363cb3fca6SLiu Zhe import org.junit.runner.RunWith; 373cb3fca6SLiu Zhe import org.openoffice.test.OpenOffice; 38527dbd07SLiu Zhe import org.openoffice.test.common.FileProvider; 39527dbd07SLiu Zhe import org.openoffice.test.common.FileProvider.FileFilter; 40527dbd07SLiu Zhe import org.openoffice.test.common.FileProvider.FileRepos; 413cb3fca6SLiu Zhe import org.openoffice.test.common.FileUtil; 423cb3fca6SLiu Zhe import org.openoffice.test.common.Logger; 433cb3fca6SLiu Zhe import org.openoffice.test.common.Testspace; 443cb3fca6SLiu Zhe import org.openoffice.test.uno.UnoApp; 453cb3fca6SLiu Zhe 463cb3fca6SLiu Zhe import com.sun.star.beans.PropertyValue; 473cb3fca6SLiu Zhe import com.sun.star.document.MacroExecMode; 483cb3fca6SLiu Zhe import com.sun.star.lang.XComponent; 493cb3fca6SLiu Zhe import com.sun.star.uno.UnoRuntime; 503cb3fca6SLiu Zhe import com.sun.star.util.XCloseable; 513cb3fca6SLiu Zhe 523cb3fca6SLiu Zhe 53527dbd07SLiu Zhe @RunWith(FileProvider.class) 543cb3fca6SLiu Zhe public class Conversion { 55527dbd07SLiu Zhe 56f4092fc8SLiu Zhe @Rule 57f4092fc8SLiu Zhe public Logger log = Logger.getLogger(this); 58f4092fc8SLiu Zhe 59527dbd07SLiu Zhe @FileRepos 60527dbd07SLiu Zhe public static String repos = getDataFile("pvt_conversion").getAbsolutePath(); 613cb3fca6SLiu Zhe 62527dbd07SLiu Zhe @FileFilter 63527dbd07SLiu Zhe public static String filter = "-f .*\\.((doc)|(dot)|(odt)|(ott))$ writer_pdf_Export pdf " 64527dbd07SLiu Zhe + "-f .*\\.((xls)|(xlt)|(ods)|(ots))$ calc_pdf_Export pdf " 65527dbd07SLiu Zhe + "-f .*\\.((ppt)|(ppt)|(odp)|(otp))$ impress_pdf_Export pdf " 66527dbd07SLiu Zhe + "-f .*\\.((doc)|(dot)|(docx)|(docm)|(dotx)|(dotm))$ writer8 odt " 67527dbd07SLiu Zhe + "-f .*\\.((xls)|(xlt)|(xlsx)|(xltx)|(xlsm)|(xltm))$ calc8 ods " 68527dbd07SLiu Zhe + "-f .*\\.((ppt)|(pot)|(pptx)|(pptm)|(potm)|(potx))$ impress8 odp " 69527dbd07SLiu Zhe + "-f .*\\.((odt)|(ott))$ 'MS Word 97' doc " 70527dbd07SLiu Zhe + "-f .*\\.((ods)|(ots))$ 'MS Excel 97' xls " 71527dbd07SLiu Zhe + "-f .*\\.((odp)|(otp))$ 'MS PowerPoint 97' ppt"; 723cb3fca6SLiu Zhe 733cb3fca6SLiu Zhe private static UnoApp app = new UnoApp(); 74527dbd07SLiu Zhe 753cb3fca6SLiu Zhe private static PrintStream result; 763cb3fca6SLiu Zhe 773cb3fca6SLiu Zhe @BeforeClass 783cb3fca6SLiu Zhe public static void beforeClass() throws Exception { 793cb3fca6SLiu Zhe //Disable automation 803cb3fca6SLiu Zhe OpenOffice.getDefault().setAutomationPort(-1); 813cb3fca6SLiu Zhe OpenOffice.getDefault().addArgs("-invisible", "-conversionmode", "-headless", "-hidemenu"); 823cb3fca6SLiu Zhe 833cb3fca6SLiu Zhe File resultFile = Testspace.getFile("output/conversion.csv"); 843cb3fca6SLiu Zhe resultFile.getParentFile().mkdirs(); 853cb3fca6SLiu Zhe result = new PrintStream(new FileOutputStream(resultFile)); 863cb3fca6SLiu Zhe result.println("File,Scenario,After Close,After Save,After Load"); 873cb3fca6SLiu Zhe } 883cb3fca6SLiu Zhe 893cb3fca6SLiu Zhe @AfterClass 903cb3fca6SLiu Zhe public static void afterClass() throws Exception { 913cb3fca6SLiu Zhe result.close(); 92f4092fc8SLiu Zhe app.close(); 933cb3fca6SLiu Zhe } 943cb3fca6SLiu Zhe 95527dbd07SLiu Zhe private String sourcePath = null; 96527dbd07SLiu Zhe private String targetFilterName = null; 97527dbd07SLiu Zhe private String targetExtName = null; 98527dbd07SLiu Zhe 993cb3fca6SLiu Zhe private File sourceFile = null; 1003cb3fca6SLiu Zhe private File targetFile = null; 1013cb3fca6SLiu Zhe private String sourceFileUrl = null; 1023cb3fca6SLiu Zhe private String targetFileUrl = null; 103527dbd07SLiu Zhe 104f4092fc8SLiu Zhe private String scenario = null; 105f4092fc8SLiu Zhe private String sourceFileId = null; 1063cb3fca6SLiu Zhe private long loadTime = -1; 1073cb3fca6SLiu Zhe private long saveTime = -1; 1083cb3fca6SLiu Zhe private long closeTime = -1; 1093cb3fca6SLiu Zhe 110527dbd07SLiu Zhe public Conversion(String sourcePath, String targetFilterName, String targetExtName) { 1113cb3fca6SLiu Zhe super(); 112527dbd07SLiu Zhe this.sourcePath = sourcePath; 1133cb3fca6SLiu Zhe this.targetFilterName = targetFilterName; 114527dbd07SLiu Zhe this.targetExtName = targetExtName; 115f4092fc8SLiu Zhe } 116f4092fc8SLiu Zhe 117f4092fc8SLiu Zhe @Before 118f4092fc8SLiu Zhe public void before() throws Exception { 119527dbd07SLiu Zhe sourceFile = prepareDataFile(sourcePath); 120527dbd07SLiu Zhe sourceFileUrl = FileUtil.getUrl(this.sourceFile); 121527dbd07SLiu Zhe targetFile = getFile("classtemp/" + sourceFile.getName()+ "." + targetExtName); 122527dbd07SLiu Zhe targetFileUrl = FileUtil.getUrl(this.targetFile); 123527dbd07SLiu Zhe 124527dbd07SLiu Zhe scenario = FileUtil.getFileExtName(sourceFile.getName()).toLowerCase() + " to " + FileUtil.getFileExtName(targetFile.getName()).toLowerCase(); 125527dbd07SLiu Zhe sourceFileId = sourceFile.getAbsolutePath().replace(new File(repos).getAbsolutePath(), "").replace("\\", "/"); 126527dbd07SLiu Zhe 127f4092fc8SLiu Zhe log.info("Start [File: " + sourceFileId + "] [Size: " + (sourceFile.length() / 1024) + "KB] [Scenario: " + scenario + "]"); 128f4092fc8SLiu Zhe app.start(); 129f4092fc8SLiu Zhe } 130f4092fc8SLiu Zhe 131f4092fc8SLiu Zhe @After 132f4092fc8SLiu Zhe public void after() throws Exception{ 133f4092fc8SLiu Zhe result.println(sourceFileId + "," + scenario + "," + closeTime + "," + saveTime + "," + loadTime); 134f4092fc8SLiu Zhe log.info("Result [After Closing: " + closeTime + "] [After Saving: " + saveTime + "] [After Loading: " + loadTime + "]"); 135f4092fc8SLiu Zhe if (closeTime < 0) { 136f4092fc8SLiu Zhe app.close(); 137f4092fc8SLiu Zhe } 1383cb3fca6SLiu Zhe } 1393cb3fca6SLiu Zhe 1403cb3fca6SLiu Zhe private PropertyValue propertyValue(String name, Object value) { 1413cb3fca6SLiu Zhe PropertyValue p = new PropertyValue(); 1423cb3fca6SLiu Zhe p.Name = name; 1433cb3fca6SLiu Zhe p.Value= value; 1443cb3fca6SLiu Zhe return p; 1453cb3fca6SLiu Zhe } 1463cb3fca6SLiu Zhe 147527dbd07SLiu Zhe @Test(timeout=10 * 60000) 1483cb3fca6SLiu Zhe public void testConversion() throws Exception { 1493cb3fca6SLiu Zhe // convert 1503cb3fca6SLiu Zhe long start = System.currentTimeMillis(); 1513cb3fca6SLiu Zhe XComponent doc = app.loadDocumentFromURL(sourceFileUrl, 1523cb3fca6SLiu Zhe propertyValue("Hidden", true), 1533cb3fca6SLiu Zhe propertyValue("ReadOnly", true), 1543cb3fca6SLiu Zhe propertyValue("AsyncMode", false), 1553cb3fca6SLiu Zhe propertyValue("MacroExecutionMode", MacroExecMode.NEVER_EXECUTE)); 1563cb3fca6SLiu Zhe 1573cb3fca6SLiu Zhe loadTime = System.currentTimeMillis() - start; 1583cb3fca6SLiu Zhe app.saveDocumentToURL(doc, targetFileUrl, 1593cb3fca6SLiu Zhe propertyValue( "FilterName", targetFilterName), 1603cb3fca6SLiu Zhe propertyValue( "Overwrite", true)); 1613cb3fca6SLiu Zhe saveTime = System.currentTimeMillis() - start; 1623cb3fca6SLiu Zhe XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, doc); 1633cb3fca6SLiu Zhe xCloseable.close(true); 1643cb3fca6SLiu Zhe closeTime = System.currentTimeMillis() - start; 1653cb3fca6SLiu Zhe } 1663cb3fca6SLiu Zhe } 167