incubator-ooo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From liu...@apache.org
Subject svn commit: r1357090 - in /incubator/ooo/trunk/main/test: testcommon/source/org/openoffice/test/common/ testcommon/source/org/openoffice/test/vcl/widgets/ testoo/ testoo/src/testcase/ testoo/src/testlib/ testoo/src/testsuite/
Date Wed, 04 Jul 2012 06:02:31 GMT
Author: liuzhe
Date: Wed Jul  4 06:02:29 2012
New Revision: 1357090

URL: http://svn.apache.org/viewvc?rev=1357090&view=rev
Log:
#119998# - Add JavaDoc to API. Add new methods into VclApp. Merge BVTFunction2 into BVTFunction.
Add two parameters to AppUtil.initApp.

Added:
    incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/StreamPump.java
Removed:
    incubator/ooo/trunk/main/test/testoo/src/testcase/BVTFunction2.java
Modified:
    incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/FileUtil.java
    incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/SystemUtil.java
    incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/vcl/widgets/VclApp.java
    incubator/ooo/trunk/main/test/testoo/build.xml
    incubator/ooo/trunk/main/test/testoo/src/testcase/BVTFunction.java
    incubator/ooo/trunk/main/test/testoo/src/testcase/SmokeTest.java
    incubator/ooo/trunk/main/test/testoo/src/testlib/AppUtil.java
    incubator/ooo/trunk/main/test/testoo/src/testlib/UIMap.java
    incubator/ooo/trunk/main/test/testoo/src/testsuite/BVT.java

Modified: incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/FileUtil.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/FileUtil.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/FileUtil.java
(original)
+++ incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/FileUtil.java
Wed Jul  4 06:02:29 2012
@@ -124,6 +124,15 @@ public class FileUtil {
 	 * @return
 	 */
 	public static Properties loadProperties(String file) {
+		return loadProperties(new File(file));
+	}
+	
+	/**
+	 * Load a properties file to Properties class
+	 * @param file the properties file
+	 * @return
+	 */
+	public static Properties loadProperties(File file) {
 		Properties properties = new Properties();
 		FileInputStream fis = null;
 		try {

Added: incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/StreamPump.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/StreamPump.java?rev=1357090&view=auto
==============================================================================
--- incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/StreamPump.java
(added)
+++ incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/StreamPump.java
Wed Jul  4 06:02:29 2012
@@ -0,0 +1,63 @@
+/**************************************************************
+ * 
+ * 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 org.openoffice.test.common;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+/**
+ * Pump data from input stream into a StringBuffer
+ *
+ */
+public class StreamPump extends Thread {
+	StringBuffer stringBuffer = null;
+	InputStream inputStream = null;
+
+	public StreamPump(StringBuffer stringBuffer, InputStream inputStream) {
+		this.stringBuffer = stringBuffer;
+		this.inputStream = inputStream;
+	}
+
+	public void run() {
+		InputStreamReader reader = null;
+		try {
+			reader = new InputStreamReader(inputStream);
+			char[] buf = new char[1024];
+			int count = 0;
+			while ((count = reader.read(buf)) != -1) {
+				// If we need collect the output
+				if (stringBuffer != null)
+					stringBuffer.append(buf, 0, count);
+			}
+		} catch (IOException e) {
+			// ignore.
+		} finally {
+			if (reader != null)
+				try {
+					reader.close();
+				} catch (IOException e) {
+					// ignore
+				}
+		}
+	}
+}
\ No newline at end of file

Modified: incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/SystemUtil.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/SystemUtil.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/SystemUtil.java
(original)
+++ incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/common/SystemUtil.java
Wed Jul  4 06:02:29 2012
@@ -31,8 +31,6 @@ import java.awt.datatransfer.Transferabl
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.io.StringReader;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -143,6 +141,21 @@ public class SystemUtil {
 		throw new RuntimeException("System Clipboard is not ready");
 	}
 
+	/**
+	 * Execute a script and waiting it for finishing
+	 * @param content
+	 * @return
+	 */
+	public static int execScript(String content) {
+		return execScript(content, false);
+	}
+	
+	/**
+	 * Execute a script. bat on Windows, bash on Linux
+	 * @param content
+	 * @param spawn
+	 * @return
+	 */
 	public static int execScript(String content, boolean spawn) {
 		File file = null;
 		try {
@@ -199,39 +212,10 @@ public class SystemUtil {
 		}
 	}
 
-	public static class StreamPump extends Thread {
-		StringBuffer stringBuffer = null;
-		InputStream inputStream = null;
-
-		public StreamPump(StringBuffer stringBuffer, InputStream inputStream) {
-			this.stringBuffer = stringBuffer;
-			this.inputStream = inputStream;
-		}
-
-		public void run() {
-			InputStreamReader reader = null;
-			try {
-				reader = new InputStreamReader(inputStream);
-				char[] buf = new char[1024];
-				int count = 0;
-				while ((count = reader.read(buf)) != -1) {
-					// If we need collect the output
-					if (stringBuffer != null)
-						stringBuffer.append(buf, 0, count);
-				}
-			} catch (IOException e) {
-				// ignore.
-			} finally {
-				if (reader != null)
-					try {
-						reader.close();
-					} catch (IOException e) {
-						// ignore
-					}
-			}
-		}
-	}
-
+	/**
+	 * Make the current thread sleep some seconds.
+	 * @param second
+	 */
 	public static void sleep(double second) {
 		try {
 			Thread.sleep((long) (second * 1000));

Modified: incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/vcl/widgets/VclApp.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/vcl/widgets/VclApp.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/vcl/widgets/VclApp.java
(original)
+++ incubator/ooo/trunk/main/test/testcommon/source/org/openoffice/test/vcl/widgets/VclApp.java
Wed Jul  4 06:02:29 2012
@@ -19,11 +19,10 @@
  * 
  *************************************************************/
 
-
-
 package org.openoffice.test.vcl.widgets;
 
-
+import java.io.File;
+import java.net.MalformedURLException;
 import java.util.Properties;
 
 import org.openoffice.test.common.FileUtil;
@@ -32,112 +31,232 @@ import org.openoffice.test.vcl.Tester;
 import org.openoffice.test.vcl.client.Constant;
 import org.openoffice.test.vcl.client.VclHook;
 
+/**
+ * This class provides a proxy to interact with OpenOffice application.
+ * 
+ */
 public class VclApp {
-	String home = null;
-	
-	public static final String CMD_KILL_WINDOWS = "taskkill /F /IM soffice.bin /IM soffice.exe";
-	
-	public static final String CMD_KILL_LINUX = "killall -9 soffice soffice.bin";
-	
-	String cmdKill = null;
-	
-	String cmdStart = null;
-	
-	String versionFile = null;
-	
-	Properties version = null;
-	
-	String port = System.getProperty("openoffice.automation.port", "12479");
+
+	private String port = System.getProperty("openoffice.automation.port", "12479");
+
+	private File userInstallation = null;
+
+	private File defaultUserInstallation = null;
 	
+	private File home = null;
+
+	private String args = null;
+
+	private boolean automationEnabled = true;
+
+	/**
+	 * Construct VclApp with the home path of OpenOffice. The home is the
+	 * directory which contains soffice.bin.
+	 * 
+	 * @param appHome
+	 */
 	public VclApp(String appHome) {
-		setHome(appHome);
-	}
+		if (appHome == null)
+			appHome = System.getProperty("openoffice.home");
+		if (appHome == null)
+			appHome = System.getenv("OPENOFFICE_HOME");
+		if (appHome == null) {
+			if (SystemUtil.isWindows()) {
+				appHome = "C:/Program Files/OpenOffice.org 3/program";
+			} else if (SystemUtil.isMac()) {
+				appHome = "/Applications/OpenOffice.org/Contents/MacOS";
+			} else {
+				appHome = "/opt/openoffice.org3/program";
+			}
+		}
 
-	public VclApp() {
-		this(null);
-	}
-	
-	public void setHome(String home) {
-		this.home = home;
-		if (home == null)
-			home = System.getProperty("openoffice.home");
-		if (home == null)
-			home = System.getenv("OPENOFFICE_HOME");
-		if (home == null) 
-			home = "unkown";
-		
-		versionFile = "versionrc";
+		home = new File(appHome);
 		
-		cmdKill = CMD_KILL_LINUX;
-		cmdStart = "cd \"" + home + "\" ; ./soffice";
+		File bootstrapFile = new File(home, "bootstraprc");
+		if (!bootstrapFile.exists())
+			bootstrapFile = new File(home, "bootstrap.ini");
+		if (!bootstrapFile.exists())
+			throw new RuntimeException("OpenOffice can not be found or it's broken.");
+
+		Properties props = FileUtil.loadProperties(bootstrapFile);
+		String defaultUserInstallationPath = props.getProperty("UserInstallation");
+		String sysUserConfig = null;
 		if (SystemUtil.isWindows()) {
-			cmdKill = CMD_KILL_WINDOWS;
-			cmdStart = "\"" + home + "\\soffice.exe\"";
-			versionFile = "version.ini";
-			
+			sysUserConfig = System.getenv("APPDATA");
 		} else if (SystemUtil.isMac()) {
-			
+			sysUserConfig = System.getProperty("user.home") + "/Library/Application Support";
 		} else {
-			
+			sysUserConfig = System.getProperty("user.home");
 		}
-		
+
+		defaultUserInstallationPath = defaultUserInstallationPath.replace("$ORIGIN", home.getAbsolutePath()).replace("$SYSUSERCONFIG",
sysUserConfig);
+		defaultUserInstallation = new File(defaultUserInstallationPath);
 	}
-	public String getHome() {
-		return home;
+
+	/**
+	 * Set UserInstallation directory. When openoffice is launched, the argument
+	 * "-env:UserInstallation" will be enabled.
+	 * 
+	 * @param dir
+	 *            user installation directory. If null is given, the default
+	 *            will be used.
+	 */
+	public void setUserInstallation(File dir) {
+		userInstallation = dir;
 	}
-	
-	public void kill() {
-		SystemUtil.execScript(cmdKill, false);
+
+	/**
+	 * Get UserInstallation directory
+	 * 
+	 * @return
+	 */
+	public File getUserInstallation() {
+		return userInstallation == null ? defaultUserInstallation : userInstallation;
 	}
-	
-	public int start(String args) {
-		if (args == null)
-			args = "";
-		
-		return SystemUtil.execScript(cmdStart + " -norestore -quickstart=no -nofirststartwizard
-enableautomation -automationport=" + port + " " + args, true);
+
+	/**
+	 * Get default UserInstallation directory
+	 * 
+	 * @return
+	 */
+	public File getDefaultUserInstallation() {
+		return defaultUserInstallation;
 	}
 	
-	public void start() {
-		start(null);
+	/**
+	 * Get installation directory of OpenOffice.
+	 * 
+	 * @return
+	 */
+	public File getHome() {
+		return home;
 	}
-	
+
 	/**
-	 * Activate the document window at the given index
+	 * Set other command line arguments
+	 * 
+	 * @param args
+	 */
+	public void setArgs(String args) {
+		this.args = args;
+	}
+
+	public boolean isAutomationEnabled() {
+		return automationEnabled;
+	}
+
+	public void setAutomationEnabled(boolean automationEnabled) {
+		this.automationEnabled = automationEnabled;
+	}
+
+	/**
+	 * Kill OpenOffice
+	 */
+	public void kill() {
+		if (SystemUtil.isWindows()) {
+			SystemUtil.execScript("taskkill /F /IM soffice.bin /IM soffice.exe", false);
+		} else {
+			SystemUtil.execScript("killall -9 soffice soffice.bin", false);
+		}
+
+	}
+
+	/**
+	 * Start OpenOffice
 	 * 
+	 * @return
+	 */
+	public int start() {
+		String cmd = null;
+
+		if (SystemUtil.isWindows()) {
+			cmd = "\"" + home + "\\soffice.exe\"";
+		} else {
+			cmd = "cd \"" + home + "\" ; ./soffice";
+		}
+
+		if (automationEnabled) {
+			cmd += " -norestore -quickstart=no -nofirststartwizard -enableautomation -automationport="
+ port;
+		}
+
+		if (userInstallation != null) {
+			try {
+				String url = userInstallation.toURL().toString();
+				url = url.replace("file:/", "file:///");
+				cmd += " -env:UserInstallation=" + url;
+			} catch (MalformedURLException e) {
+				// ignore never to occur
+			}
+		}
+
+		if (args != null)
+			cmd += " " + args;
+
+		return SystemUtil.execScript(cmd, true);
+	}
+
+	/**
+	 * Activate the document window at the given index
+	 * Note: this method requires automation enabled.
 	 * @param i
 	 * @return
 	 */
 	public void activateDoc(int i) {
-		VclHook.invokeCommand(Constant.RC_ActivateDocument,
-				new Object[] { i + 1 });
+		VclHook.invokeCommand(Constant.RC_ActivateDocument, new Object[] { i + 1 });
 	}
 
+	/**
+	 * Try to close all OpenOffice windows, until startcenter window appears.
+	 * The method does not always succeed.
+	 * Note: this method requires automation enabled.
+	 */
 	public void reset() {
 		VclHook.invokeCommand(Constant.RC_ResetApplication);
 	}
 
+	/**
+	 * Note: this method requires automation enabled.
+	 * @return
+	 */
 	public boolean existsSysDialog() {
 		return (Boolean) VclHook.invokeCommand(Constant.RC_ExistsSysDialog);
 	}
 
+	/**
+	 * Note: this method requires automation enabled.
+	 */
 	public void closeSysDialog() {
 		VclHook.invokeCommand(Constant.RC_CloseSysDialog);
 	}
 
+	/**
+	 * Note: this method requires automation enabled.
+	 * @return
+	 */
 	public String getClipboard() {
 		return (String) VclHook.invokeCommand(Constant.RC_GetClipboard);
 	}
 
+	/**
+	 * Note: this method requires automation enabled.
+	 * @param content
+	 */
 	public void setClipboard(String content) {
 		VclHook.invokeCommand(Constant.RC_SetClipboard, content);
 	}
 
+	/**
+	 * Check if OpenOffice exists.
+	 * Note: this method requires automation enabled.
+	 * @return
+	 */
 	public boolean exists() {
 		return VclHook.available();
 	}
 
 	/**
 	 * Check if the control exists in a period of time
+	 * Note: this method requires automation enabled.
 	 */
 	public boolean exists(double iTimeout) {
 		return exists(iTimeout, 1);
@@ -145,6 +264,7 @@ public class VclApp {
 
 	/**
 	 * Check if the control exists in a period of time
+	 * Note: this method requires automation enabled.
 	 */
 	public boolean exists(double iTimeout, double interval) {
 		long startTime = System.currentTimeMillis();
@@ -157,6 +277,13 @@ public class VclApp {
 		return exists();
 	}
 
+	/**
+	 * Wait OpenOffice for existence in the given period.
+	 * When time is out, an runtime exception will be thrown.
+	 * Note: this method requires automation enabled.
+	 * @param iTimeout
+	 * @param interval
+	 */
 	public void waitForExistence(double iTimeout, double interval) {
 		if (!exists(iTimeout, interval))
 			throw new RuntimeException("OpenOffice is not found!");
@@ -164,28 +291,34 @@ public class VclApp {
 
 	/**
 	 * Get document window count
-	 * 
+	 * Note: this method requires automation enabled.
 	 * @return
 	 */
 	public int getDocCount() {
 		return (Integer) VclHook.invokeCommand(Constant.RC_GetDocumentCount);
 	}
-	
-	public Properties getVersion() {
-		if (version == null)
-			version = FileUtil.loadProperties(home + "/" + versionFile);
-		return version;
-	}
-	
-	
+
+	/**
+	 * Run a dispatch
+	 * Note: this method requires automation enabled.
+	 * @param url
+	 */
 	public void dispatch(String url) {
 		VclHook.invokeUNOSlot(url);
 	}
-	
+
 	private static final int CONST_WSTimeout = 701;
-//	private static final int CONST_WSAborted = 702; // Not used now!
-//	private static final int CONST_WSFinished = 703; //
-	
+
+	// private static final int CONST_WSAborted = 702; // Not used now!
+	// private static final int CONST_WSFinished = 703; //
+
+	/**
+	 * Run a dispatch and then wait some time.
+	 * If time is out, an runtime exception will be thrown
+	 * Note: this method requires automation enabled.
+	 * @param url
+	 * @param time timeout
+	 */
 	public void dispatch(String url, double time) {
 		VclHook.invokeUNOSlot(url);
 		int result = (Integer) VclHook.invokeCommand(Constant.RC_WaitSlot, (int) time * 1000);

Modified: incubator/ooo/trunk/main/test/testoo/build.xml
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testoo/build.xml?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testoo/build.xml (original)
+++ incubator/ooo/trunk/main/test/testoo/build.xml Wed Jul  4 06:02:29 2012
@@ -39,7 +39,7 @@
 	<property name="test.result" value="${test.output}/result" />
 	<property name="test.report" value="${test.output}/report" />
 	<property name="junit.style.dir" value="./reportstyle" />
-	
+
 	<path id="classpath">
 		<pathelement location="${classes}" />
 		<fileset dir="${lib}" erroronmissingdir="false">
@@ -232,13 +232,24 @@
 
 	<target name="report.test" unless="report.test.skip" description="Upload the testing
result to report repository.">
 		<exec executable="hostname" outputproperty="host.name" />
-		<property name="report.to" value="${openoffice.build}/${host.name}" />
+		<property name="report.to" value="${openoffice.build}_${host.name}" />
+		<!--
 		<echo>Sending report to ${report.repos.server}/${report.repos.dir}/${report.to}</echo>
 		<ftp server="${report.repos.server}" remotedir="${report.repos.dir}/${report.to}" userid="${report.repos.user}"
password="${report.repos.password}" action="mkdir" />
 		<ftp server="${report.repos.server}" remotedir="${report.repos.dir}/${report.to}" userid="${report.repos.user}"
password="${report.repos.password}" depends="yes">
 			<fileset dir="${test.output}">
 			</fileset>
 		</ftp>
+		-->
+		<echo>Uploading report to ${report.repos}/${report.to}</echo>
+		<tempfile property="report.to.temp" suffix=".output" destDir="${testspace}" deleteonexit="true"/>
+		<copy todir="${report.to.temp}/${report.to}">
+			<fileset dir="${test.output}" />
+		</copy>
+
+		<scp todir="${report.repos}">
+			<fileset dir="${report.to.temp}"/>
+		</scp>
 	</target>
 
 	<target name="detect.build" depends="find.build" description="Check if new build is available.
If no new build is available, the target will be failed.">

Modified: incubator/ooo/trunk/main/test/testoo/src/testcase/BVTFunction.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testoo/src/testcase/BVTFunction.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testoo/src/testcase/BVTFunction.java (original)
+++ incubator/ooo/trunk/main/test/testoo/src/testcase/BVTFunction.java Wed Jul  4 06:02:29
2012
@@ -60,7 +60,7 @@ public class BVTFunction {
 	 */
 	@Before
 	public void setUp() throws Exception {
-		initApp();
+		setUp();
 	}
 	
 	
@@ -113,7 +113,7 @@ public class BVTFunction {
 		
 		//Create a new text document and launch a Wizards dialog which need JVM work correctly.
 		startcenter.menuItem("File->New->Text Document").select();
-		File tempfile=new File(getUserInstallationDir(),"user/template/myAgendaTemplate.ott");
+		File tempfile=new File(app.getUserInstallation(),"user/template/myAgendaTemplate.ott");
 		FileUtil.deleteFile(tempfile);
 		sleep(3);	
 		writer.menuItem("File->Wizards->Agenda").select();
@@ -486,6 +486,294 @@ public class BVTFunction {
 		assertArrayEquals("Sorted Data", expected4, CalcUtil.getCellTexts("E1:E10"));
 	}
 	
+	/**
+	 * Test insert a chart in a draw document
+	 * 1. New a draw document
+	 * 2. Insert a chart
+	 * 3. Check if the chart is inserted successfully
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertChartInDraw() throws Exception{
+		
+		// Create a new drawing document
+		startcenter.menuItem("File->New->Drawing").select();
+		sleep(3);
+		
+		// Insert a chart
+		draw.menuItem("Insert->Chart...").select();
+		sleep(3);
+		
+		// Verify if the chart is inserted successfully
+		assertTrue(chart.exists(3));
+		// Focus on edit pane
+		draw.click(5,5);
+		sleep(1);
+	}
+	
+	/**
+	 * Test insert a chart in a text document
+	 * 1. New a text document
+	 * 2. Insert a chart
+	 * 3. Check if the chart is inserted successfully
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertChartInDocument() throws Exception{
+		
+		// Create a new text document
+		startcenter.menuItem("File->New->Text Document").select();
+		sleep(3);
+		
+		// Insert a chart
+		writer.menuItem("Insert->Object->Chart...").select();
+		sleep(3);
+		
+		// Verify if the chart is inserted successfully
+		assertTrue(chart.exists(3));
+		// Focus on edit pane
+		writer.click(5,5);
+		sleep(1);
+	}
+	
+	/**
+	 * Test insert a chart in a spreadsheet document
+	 * 1. New a spreadsheet document
+	 * 2. Insert a chart
+	 * 3. Check if the chart is inserted successfully
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertChartInSpreadsheet() throws Exception{
+		
+		// Create a new spreadsheet document
+		startcenter.menuItem("File->New->Spreadsheet").select();
+		sleep(3);
+		
+		// Insert a chart
+		calc.menuItem("Insert->Chart...").select();
+		sleep(3);
+		Chart_Wizard.ok();
+		
+		// Verify if the chart is inserted successfully
+		assertTrue(chart.exists(3));
+		// Focus on edit pane
+		calc.click(5,5);
+		sleep(1);	
+	}
+	
+	/**
+	 * Test insert a chart in a presentation document
+	 * 1. New a presentation document
+	 * 2. Insert a chart
+	 * 3. Check if the chart is inserted successfully
+	 * @throws Exception
+	 */
+	@Ignore("There is bug in presentation")
+	public void testInsertChartInPresentation() throws Exception{
+		
+		// Create a new presentation document
+		startcenter.menuItem("File->New->Presentation").select();
+		PresentationWizard.ok();
+		sleep(3);
+		
+		// Insert a chart
+		impress.menuItem("Insert->Chart...").select();
+		sleep(3);
+		
+		// Verify if the chart is inserted successfully
+		assertTrue(chart.exists(3));
+		// Focus on edit pane
+		impress.click(5,5);
+		sleep(1);	
+	}
+	
+	/**
+	 * Test insert a table in a draw document
+	 * 1. New a draw document
+	 * 2. Insert a default table
+	 * 3. Check if the table is inserted successfully
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertTableInDraw() throws Exception{
+		
+		// Create a new drawing document
+		startcenter.menuItem("File->New->Drawing").select();
+		sleep(3);
+		
+		// Insert a table
+		draw.menuItem("Insert->Table...").select();
+		InsertTable.ok();
+		sleep(3);
+		
+		// Verify if the table toolbar is active
+//		assertTrue(Table_Toolbar.exists(3));
+		
+		// Check the statusbar to verify if the table is inserted successfully
+		assertEquals("Table selected", StatusBar.getItemText(0));
+		// Focus on edit pane
+		draw.click(5,5);
+		sleep(1);
+	}
+	
+	/**
+	 * Test insert a table in a text document
+	 * 1. New a text document
+	 * 2. Insert a default table
+	 * 3. Check if the table is inserted successfully
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertTableInDocument() throws Exception{
+		
+		// Create a new text document
+		startcenter.menuItem("File->New->Text Document").select();
+		sleep(3);
+		
+		// Insert a table
+		writer.menuItem("Insert->Table...").select();
+		writer_InsertTable.ok();
+		sleep(3);
+		
+		// Verify if the table toolbar is active
+		assertTrue(Table_Toolbar.exists(3));
+		
+		// Check the statusbar to verify if the table is inserted successfully
+		assertEquals("Table1:A1", StatusBar.getItemText(7));
+		// Focus on edit pane
+		writer.click(5,5);
+		sleep(1);
+	}
+	
+	/**
+	 * Test insert a table in a presentation document
+	 * 1. New a presentation document
+	 * 2. Insert a default table
+	 * 3. Check if the table is inserted successfully
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertTableInPresentation() throws Exception{
+		
+		// Create a new presentation document
+		startcenter.menuItem("File->New->Presentation").select();
+		PresentationWizard.ok();
+		sleep(3);
+		
+		// Insert a table
+		impress.menuItem("Insert->Table...").select();
+		InsertTable.ok();
+		sleep(3);
+		
+		// Verify if the table toolbar is active
+		assertTrue(Table_Toolbar.exists(3));
+		
+		// Check the statusbar to verify if the table is inserted successfully
+		assertEquals("Table selected", StatusBar.getItemText(0));
+		// Focus on edit pane
+		impress.click(5,5);
+		sleep(1);
+	}
+	
+
+	/**
+	 * Test insert a function in a spreadsheet document via Sum button
+	 * 1. New a spreadsheet document
+	 * 2. Insert a function via Sum button
+	 * 3. Check if the result is correct
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertFunctionInSCViaSumButton() throws Exception{
+		
+		// Create a new spreadsheet document
+		startcenter.menuItem("File->New->Spreadsheet").select();
+		sleep(3);
+		
+		// Insert source numbers
+		String sourceNumber1 = "5";
+		String sourceNumber2 = "3";
+		String expectedResult = "8";
+		CalcUtil.selectRange("A1");
+		typeKeys(sourceNumber1);
+		CalcUtil.selectRange("B1");
+		typeKeys(sourceNumber2);		
+		
+		// Insert a function via Sum button
+		CalcUtil.selectRange("C1");
+		SC_InputBar_Sum.click();
+		typeKeys("<enter>");
+		
+		// Verify if the calculated result is equal to the expected result
+		assertEquals("The calculated result", expectedResult, CalcUtil.getCellText("C1"));
+	}
+	
+	/**
+	 * Test insert a function in a spreadsheet document via inputbar
+	 * 1. New a spreadsheet document
+	 * 2. Insert a function via inputbar: POWER
+	 * 3. Check if the result is correct
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertFunctionInSCViaInputbar() throws Exception{
+		
+		// Create a new spreadsheet document
+		startcenter.menuItem("File->New->Spreadsheet").select();
+		sleep(3);
+		
+		// Insert source numbers and expected result
+		String sourceBase = "5";
+		String sourcePower = "3";
+		String expectedResult = "125";
+		CalcUtil.selectRange("A1");
+		typeKeys(sourceBase);
+		CalcUtil.selectRange("B1");
+		typeKeys(sourcePower);
+		
+		// Insert a function via inputbar: POWER
+		CalcUtil.selectRange("D1");
+		SC_InputBar_Input.inputKeys("=POWER(A1;B1)");
+		typeKeys("<enter>");
+		
+		// Verify if the calculated result is equal to the expected result
+		assertEquals("The calculated result", expectedResult, CalcUtil.getCellText("D1"));
+	}
+	
+	/**
+	 * Test insert a function in a spreadsheet document via Function Wizard Dialog
+	 * 1. New a spreadsheet document
+	 * 2. Insert a function via Function Wizard Dialog: ABS
+	 * 3. Check if the result is correct
+	 * @throws Exception
+	 */
+	@Test
+	public void testInsertFunctionInSCViaFunctionWizard() throws Exception{
+		
+		// Create a new spreadsheet document
+		startcenter.menuItem("File->New->Spreadsheet").select();
+		sleep(3);
+		
+		// Insert source number
+		String sourceNumber = "-5";
+		String expectedResult = "5";
+		CalcUtil.selectRange("A1");
+		typeKeys(sourceNumber);
+		typeKeys("<enter>");
+		
+		// Insert a function via Function Wizard Dialog: ABS
+		CalcUtil.selectRange("B1");
+		calc.menuItem("Insert->Function...").select();
+		SC_FunctionWizardDlg_FunctionList.doubleClick(5,5);
+
+		SC_FunctionWizardDlg_Edit1.inputKeys("A1");
+		SC_FunctionWizardDlg.ok();
+		
+		// Verify if the calculated result is equal to the expected result
+		assertEquals("The calculated result", expectedResult, CalcUtil.getCellText("B1"));
+	}
+	
 	@AfterClass
 	public static void afterClass() {
 		app.kill();

Modified: incubator/ooo/trunk/main/test/testoo/src/testcase/SmokeTest.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testoo/src/testcase/SmokeTest.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testoo/src/testcase/SmokeTest.java (original)
+++ incubator/ooo/trunk/main/test/testoo/src/testcase/SmokeTest.java Wed Jul  4 06:02:29 2012
@@ -24,9 +24,9 @@
 package testcase;
 
 import static org.junit.Assert.*;
+import static org.openoffice.test.common.FileUtil.*;
 import static testlib.AppUtil.*;
 import static testlib.UIMap.*;
-import static org.openoffice.test.common.FileUtil.*;
 
 import java.io.File;
 
@@ -35,7 +35,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import testlib.AppUtil;
 import testlib.Log;
 
 public class SmokeTest {
@@ -46,13 +45,13 @@ public class SmokeTest {
 	File smoketestOutput;
 	@Before
 	public void setUp() throws Exception {
-		initApp();
-		smoketestOutput = new File(AppUtil.getUserInstallationDir(), "user/temp");
+		initApp(true);
+		smoketestOutput = new File(app.getUserInstallation(), "user/temp");
 		deleteFile(smoketestOutput);
 	}
 
 	@Test
-	public void test() {
+	public void testMacro() {
 		testFile("TestExtension.oxt");
 		String file = testFile("smoketestdoc.sxw");
 		// Open sample file smoketestdoc.sxw

Modified: incubator/ooo/trunk/main/test/testoo/src/testlib/AppUtil.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testoo/src/testlib/AppUtil.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testoo/src/testlib/AppUtil.java (original)
+++ incubator/ooo/trunk/main/test/testoo/src/testlib/AppUtil.java Wed Jul  4 06:02:29 2012
@@ -24,9 +24,7 @@
 package testlib;
 import static testlib.UIMap.*;
 
-
 import java.io.File;
-import java.net.MalformedURLException;
 
 import org.openoffice.test.common.Condition;
 import org.openoffice.test.common.FileUtil;
@@ -35,8 +33,6 @@ import org.openoffice.test.vcl.Tester;
 import org.openoffice.test.vcl.widgets.VclWindow;
 
 public class AppUtil extends Tester {
-	static String user_installation = Testspace.getPath("oouser"); // Use automation special
user data
-	static String user_installation_url = null;
 	static {
 		Testspace.getFile("temp").mkdirs();
 		// TODO move these shortcut into a file
@@ -60,62 +56,58 @@ public class AppUtil extends Tester {
 		} else if (SystemUtil.isLinux()) {
 			
 		} 
-		patch();
+//		patch();
 	}
 	
-	private static boolean isFirstInitApp = true;
-	
-	public static void initApp() {
-		
-		// kill all soffice processes to avoid testing the wrong instance
-		if (isFirstInitApp) {
-			isFirstInitApp = false;
+	/**
+	 * This method is used to start OpenOffice and make it ready for testing.
+	 * 
+	 * @param cleanUserInstallation if use a totally clean user installation data
+	 * @param userInstallation Specify user installation directory. If it's null, the default
will be used.
+	 */
+	public static void initApp(boolean cleanUserInstallation, String userInstallation) {
+		File newUserInstallation = userInstallation == null ? app.getDefaultUserInstallation()
: new File(fullPath(userInstallation));
+		if (!newUserInstallation.equals(app.getUserInstallation())) {
+			// user installation changed...
 			app.kill();
-			sleep(2);
+			app.setUserInstallation(userInstallation == null ? null : newUserInstallation);
 		}
 		
-		// Start soffice if necessary
-		if (!app.exists()) {
-			int code = app.start("\"-env:UserInstallation=" + user_installation_url + "\"");
-			if (code != 0) {
-				throw new Error("OpenOffice can't be started! Testing aborted!");
-			}
-			sleep(3); // this sleep is important. 
-			app.waitForExistence(30, 5);
-		}
+		patch(cleanUserInstallation);
 		
-		boolean tryAgain = false;
-		try {
-			app.reset();
-			if (!startcenter.exists()) {
-				if (SystemUtil.isMac()) {
-					SystemUtil.execScript("osascript -e 'tell app \"OpenOffice.org\" to activate'", false);
-					typeKeys("<command n>");
-					if (!startcenter.exists())
-						tryAgain = true;
-						
-				} else {
-					tryAgain = true;
+		//try to reset application
+		for (int i = 0; i < 3; i++) {
+			try {
+				if (app.exists()) {
+					app.reset();
+					openStartcenter();
+					if (startcenter.exists(2))
+						return;
 				}
+			} catch (Exception e){
+				
 			}
-		} catch (Exception e) {
-			tryAgain = true;
-		}
-		
-		// Give the second chance
-		if (tryAgain) {
+			
 			app.kill();
-			sleep(2);
-			int code = app.start("\"-env:UserInstallation=" + user_installation_url + "\"");
-			if (code != 0) {
+			if (app.start() != 0)
 				throw new Error("OpenOffice can't be started! Testing aborted!");
-			}
 			sleep(3); // this sleep is important. 
 			app.waitForExistence(30, 5);
-			app.reset();
 		}
-		
-		openStartcenter();
+	}
+
+	/**
+	 * @see initApp(boolean cleanUserInstallation, String userInstallation)
+	 */
+	public static void initApp(boolean cleanUserInstallation) {
+		initApp(cleanUserInstallation, System.getProperty("openoffice.userinstallation"));
+	}
+	
+	/**
+	 * @see initApp(boolean cleanUserInstallation, String userInstallation)
+	 */
+	public static void initApp() {
+		initApp(false);
 	}
 	
 	public static void openStartcenter() {
@@ -199,51 +191,30 @@ public class AppUtil extends Tester {
 		sleep(1);
 	}
 	
-	public static File getUserInstallationDir() {
-		return new File(user_installation);
-	}
 	/**
 	 * In order to automatically test OO, some settings/files need to be modified
 	 */
-	public static void patch() {		
-		File profileDir = new File(user_installation);
-		try {
-			user_installation_url = profileDir.toURL().toString();
-		} catch (MalformedURLException e) {
-			//ignore never to occur
-		}
-		user_installation_url = user_installation_url.replace("file:/", "file:///");
-		if (profileDir.exists()) 
+	public static void patch(boolean force) {
+		File userInstallationDir = app.getUserInstallation();
+		File patchMark = new File(userInstallationDir, "automationenabled");
+		if (!force && patchMark.exists())
 			return;
-		
-		app.kill(); // make sure no any soffice process exists
-		sleep(2);
-		app.start("\"-env:UserInstallation=" + user_installation_url + "\"");
+	
+		// remove user installation dir
+		app.kill();
+		sleep(1);		
+		FileUtil.deleteFile(userInstallationDir);
+		app.start();
 		sleep(10);
 		app.kill();
-		sleep(2);
-		FileUtil.copyFile(new File("patch/Common.xcu"), new File(user_installation, "user/registry/data/org/openoffice/Office/Common.xcu"));
-		FileUtil.copyFile(new File("patch/Setup.xcu"), new File(user_installation, "user/registry/data/org/openoffice/Setup.xcu"));
-		FileUtil.copyFile(new File("patch/registrymodifications.xml"), new File(user_installation,
"user/registrymodifications.xcu"));
+		sleep(1);
 		
+		FileUtil.copyFile(new File("patch/Common.xcu"), new File(userInstallationDir, "user/registry/data/org/openoffice/Office/Common.xcu"));
+		FileUtil.copyFile(new File("patch/Setup.xcu"), new File(userInstallationDir, "user/registry/data/org/openoffice/Setup.xcu"));
+		FileUtil.copyFile(new File("patch/registrymodifications.xml"), new File(userInstallationDir,
"user/registrymodifications.xcu"));
+		FileUtil.writeStringToFile(patchMark.getAbsolutePath(), "patched for automation");
 	}
 	
-//	private static final Pattern VARIABLE_PATTERN = Pattern.compile("\\$\\{([^\\}]+)\\} |
\\$([^/]+)");
-//	
-//	public static String resolveEnv(String text) {
-//		Matcher matcher = VARIABLE_PATTERN.matcher(text);
-//		StringBuffer result = new StringBuffer();
-//		while (matcher.find()) {
-//			String str = System.getenv(matcher.group(1));
-//			if (str == null)
-//				str = matcher.group();
-//			matcher.appendReplacement(result, str.replace("\\", "\\\\")
-//					.replace("$", "\\$"));
-//		}
-//		matcher.appendTail(result);
-//		return result.toString();
-//	}
-	
 	public static void handleBlocker(final VclWindow... windows) {
 		new Condition() {
 			@Override
@@ -287,8 +258,4 @@ public class AppUtil extends Tester {
 			
 		}.waitForTrue("Time out wait window to be active.",  120, 2);
 	}
-	
-	public static void main(String[] args) {
-//		initApp();
-	}
 }

Modified: incubator/ooo/trunk/main/test/testoo/src/testlib/UIMap.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testoo/src/testlib/UIMap.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testoo/src/testlib/UIMap.java (original)
+++ incubator/ooo/trunk/main/test/testoo/src/testlib/UIMap.java Wed Jul  4 06:02:29 2012
@@ -113,7 +113,7 @@ public class UIMap {
 		return new VclDockingWin(idList.getId(id));
 	}
 	
-	public static final VclApp app = new VclApp();
+	public static final VclApp app = new VclApp(null);
 	public static final VclWindow writer = window("SW_HID_EDIT_WIN");
 	public static final VclWindow startcenter = window("FWK_HID_BACKINGWINDOW");
 	public static final VclWindow calc = window("SC_HID_SC_WIN_GRIDWIN");

Modified: incubator/ooo/trunk/main/test/testoo/src/testsuite/BVT.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testoo/src/testsuite/BVT.java?rev=1357090&r1=1357089&r2=1357090&view=diff
==============================================================================
--- incubator/ooo/trunk/main/test/testoo/src/testsuite/BVT.java (original)
+++ incubator/ooo/trunk/main/test/testoo/src/testsuite/BVT.java Wed Jul  4 06:02:29 2012
@@ -29,11 +29,10 @@ import org.junit.runners.Suite.SuiteClas
 
 import testcase.BVTFileType;
 import testcase.BVTFunction;
-import testcase.BVTFunction2;
 import testcase.SmokeTest;
 
 @RunWith(Suite.class)
-@SuiteClasses({SmokeTest.class, BVTFileType.class, BVTFunction.class, BVTFunction2.class
})
+@SuiteClasses({SmokeTest.class, BVTFileType.class, BVTFunction.class})
 public class BVT {
 
 }



Mime
View raw message