summaryrefslogtreecommitdiff
path: root/framework/qa
diff options
context:
space:
mode:
authorSander Vesik <svesik@openoffice.org>2004-04-21 11:02:45 +0000
committerSander Vesik <svesik@openoffice.org>2004-04-21 11:02:45 +0000
commit5d30d3678152bb09c1c811e0f1706094a9840ccc (patch)
tree59784bbdd72445d899197557a4b521e15cc1485c /framework/qa
parent9bf09fc18004d11ab6be088d764b93a708328fed (diff)
INTEGRATION: CWS loadenv01 (1.1.2); FILE ADDED
2004/04/13 16:46:18 sw 1.1.2.2: #i26496# 2004/04/13 15:49:47 sw 1.1.2.1: #i26496#
Diffstat (limited to 'framework/qa')
-rw-r--r--framework/qa/complex/loadAllDocuments/CheckXComponentLoader.java664
1 files changed, 664 insertions, 0 deletions
diff --git a/framework/qa/complex/loadAllDocuments/CheckXComponentLoader.java b/framework/qa/complex/loadAllDocuments/CheckXComponentLoader.java
new file mode 100644
index 000000000000..a11bec2e9fa2
--- /dev/null
+++ b/framework/qa/complex/loadAllDocuments/CheckXComponentLoader.java
@@ -0,0 +1,664 @@
+/*************************************************************************
+ *
+ * $RCSfile: CheckXComponentLoader.java,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Date: 2004-04-21 12:02:45 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+package complex.loadAllDocuments;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.comp.loader.FactoryHelper;
+import com.sun.star.frame.FrameSearchFlag;
+import com.sun.star.frame.XComponentLoader;
+import com.sun.star.frame.XFrame;
+import com.sun.star.frame.XStorable;
+import com.sun.star.io.XInputStream;
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XInitialization;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XServiceInfo;
+import com.sun.star.lang.XSingleServiceFactory;
+import com.sun.star.lang.XTypeProvider;
+import com.sun.star.registry.XRegistryKey;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.util.XCloseable;
+
+import complex.loadAllDocuments.helper.InteractionHandler;
+import complex.loadAllDocuments.helper.StatusIndicator;
+import complex.loadAllDocuments.helper.StreamSimulator;
+
+import complexlib.ComplexTestCase;
+
+import helper.URLHelper;
+
+import java.io.File;
+import java.io.InputStreamReader;
+
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+
+/**
+ * Check "loadComponentFromURL"
+ * A prerequisite for this test is a server which allows access to files
+ * that will be loaded via three different access methods:
+ * 1. nfs (mounted directory / mapped network drive)
+ * 2. ftp
+ * 3. http
+ * The test will look for a list of files from the TestDocumentPath on and
+ * load these files from the mounted directory, via ftp and http.
+ * The parameters for this have to be "ftp_access" and "http_access".
+ * If they are not given, tests for ftp and http will fail.
+ */
+public class CheckXComponentLoader extends ComplexTestCase {
+ private static XMultiServiceFactory xMSF;
+
+ /**
+ * some const
+ */
+ private static final int RESULT_UNKNOWN = 0;
+ private static final int RESULT_VALID_DOC = 1;
+ private static final int RESULT_EMPTY_DOC = 2;
+ private static final int RESULT_ILLEGALARGUMENTEXCEPTION = 3;
+ private static final int RESULT_IOEXCEPTION = 4;
+ private static final int RESULT_RUNTIMEEXCEPTION = 5;
+ private static final int RESULT_EXCEPTION = 6;
+ static XFrame xDesktop;
+ static XFrame xFrame;
+ static XComponentLoader xFrameLoader;
+
+ // directory for seraching files to load
+ static String sTestDocPath = null;
+
+ // files to test
+ static Vector lTestFiles = null;
+
+ // debug mode with lots of output: deprecated
+ static boolean bDebug = false;
+
+ // test mode: test component loader on desktop or on frame;
+ // default is false, meaning frame
+ static boolean bTestDesktopLoader = true;
+
+ // File separator
+ static String fs = "/";
+
+ /**
+ * A function to tell the framework, which test functions are available.
+ * @return All test methods.
+ */
+ public String[] getTestMethodNames() {
+ return new String[] {
+ "checkLoading", "checkPasswordHandling", "checkURLEncoding",
+ "checkURLHandling"
+ };
+ }
+
+ /**
+ * Create the environment for following tests.
+ * Use either a component loader from desktop or
+ * from frame
+ */
+ public void before() {
+ xMSF = (XMultiServiceFactory) param.getMSF();
+
+ if (xDesktop == null) {
+ try {
+ xDesktop = (XFrame) UnoRuntime.queryInterface(XFrame.class,
+ xMSF.createInstance(
+ "com.sun.star.frame.Desktop"));
+ } catch (com.sun.star.uno.Exception e) {
+ failed("Could not create a desktop instance.");
+ }
+ }
+
+ xFrame = xDesktop.findFrame("testFrame_componentLoader",
+ FrameSearchFlag.TASKS |
+ FrameSearchFlag.CREATE);
+
+ XComponentLoader xDesktopLoader = (XComponentLoader) UnoRuntime.queryInterface(
+ XComponentLoader.class,
+ xDesktop);
+
+ XComponentLoader aFrameLoader = (XComponentLoader) UnoRuntime.queryInterface(
+ XComponentLoader.class, xFrame);
+
+ if ((xDesktopLoader == null) || (aFrameLoader == null)) {
+ failed("Couldn't create desktop or test frame " +
+ "with the required loader interface");
+ }
+
+ if (bTestDesktopLoader) {
+ xFrameLoader = xDesktopLoader;
+ } else {
+ xFrameLoader = aFrameLoader;
+ }
+
+
+ // get all files from the given directory
+ sTestDocPath = (String) param.get("TestDocumentPath");
+ if (lTestFiles == null) {
+ try {
+ File aBase = new File(sTestDocPath);
+ lTestFiles = URLHelper.getSystemFilesFromDir(aBase.getPath());
+ } catch (java.lang.NullPointerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ for (int i = 0; i < lTestFiles.size(); i++) {
+ String completePath = ((File) lTestFiles.get(i)).getAbsolutePath();
+ String subPath = completePath.substring(sTestDocPath.length() -1 );
+ String fs_sys = System.getProperty("file.separator");
+ File tempFile = new File(sTestDocPath+fs_sys+subPath);
+ if (!tempFile.exists()) {
+ subPath = subPath.substring(2);
+ }
+ lTestFiles.set(i, subPath);
+ }
+
+ fs = System.getProperty("file.separator");
+ }
+
+ /**
+ * close the environment
+ */
+ public void after() {
+ log.println("try to close the test frame which " +
+ "implements the new loader interface ... ");
+
+ XCloseable xClose = (XCloseable) UnoRuntime.queryInterface(
+ XCloseable.class, xFrame);
+ xFrame = null;
+ xFrameLoader = null;
+
+ try {
+ xClose.close(false);
+ } catch (com.sun.star.util.CloseVetoException exVeto) {
+ XComponent xDispose = (XComponent) UnoRuntime.queryInterface(
+ XComponent.class, xClose);
+ xDispose.dispose();
+ }
+ }
+
+ /**
+ * Look for files in the given directory for loading.
+ */
+ public void checkLoading() {
+ File aBase = null;
+
+ if (lTestFiles == null) {
+ log.println(
+ "Found an empty directory. There are no files for testing.");
+
+ return;
+ }
+
+ Enumeration aSnapshot = lTestFiles.elements();
+ String sURL = null;
+ PropertyValue[] lProps = new PropertyValue[3];
+
+ lProps[0] = new PropertyValue();
+ lProps[0].Name = "Hidden";
+ lProps[0].Value = Boolean.TRUE;
+
+ lProps[1] = new PropertyValue();
+ lProps[1].Name = "InteractionHandler";
+
+ InteractionHandler xHandler = new InteractionHandler();
+ lProps[1].Value = xHandler;
+
+ lProps[2] = new PropertyValue();
+ lProps[2].Name = "StatusIndicator";
+
+ StatusIndicator xIndicator = new StatusIndicator(
+ StatusIndicator.SHOWSTATUS_LOG);
+ lProps[2].Value = xIndicator;
+
+ while (aSnapshot.hasMoreElements()) {
+ File aFile = new File(sTestDocPath + fs +
+ (String) aSnapshot.nextElement());
+ sURL = URLHelper.getFileURLFromSystemPath(aFile);
+ if (sURL.indexOf("CVS") < 0) {
+ loadURL(xFrameLoader, RESULT_VALID_DOC, sURL, "_blank", 0, lProps);
+ }
+
+ if (xIndicator.wasUsed()) {
+ log.println("Indicator was used");
+ }
+
+ if (xHandler.wasUsed()) {
+ log.println("Interaction was used");
+ }
+ }
+ }
+
+ /**
+ * Check the password handling. The used password is the one given
+ * as password for the ftp connection, or - if none given, "MyPassword"
+ * as default.
+ */
+ public void checkPasswordHandling() {
+ File aTestFile = new File("password_check.sxw");
+ String sPassword = "MyPassword";
+ String sTestURL = URLHelper.getFileURLFromSystemPath(aTestFile);
+ XComponent xDoc = null;
+ XStorable xStore = null;
+
+ PropertyValue[] lLoadProps = new PropertyValue[1];
+ lLoadProps[0] = new PropertyValue();
+ lLoadProps[0].Name = "Hidden";
+ lLoadProps[0].Value = Boolean.TRUE;
+
+ PropertyValue[] lSaveProps = new PropertyValue[2];
+ lSaveProps[0] = new PropertyValue();
+ lSaveProps[0].Name = "PassWord";
+ lSaveProps[0].Value = sPassword;
+ lSaveProps[1] = new PropertyValue();
+ lSaveProps[1].Name = "Overwrite";
+ lSaveProps[1].Value = Boolean.TRUE;
+
+ log.println("create a new password protected document ... ");
+
+ try {
+ xDoc = xFrameLoader.loadComponentFromURL("private:factory/swriter",
+ "_blank", 0, lLoadProps);
+ } catch (com.sun.star.io.IOException exIO) {
+ failed("IOException");
+
+ return;
+ } catch (com.sun.star.lang.IllegalArgumentException exArg) {
+ failed("IllegalArgumentException");
+
+ return;
+ }
+
+ if (xDoc == null) {
+ assure("The document is null so it was not loaded.", false);
+
+ return;
+ }
+
+ xStore = (XStorable) UnoRuntime.queryInterface(XStorable.class, xDoc);
+
+ try {
+ xStore.storeAsURL(sTestURL, lSaveProps);
+ } catch (com.sun.star.io.IOException exIO) {
+ failed("IOException");
+
+ return;
+ }
+
+
+ // don't forget to "close" the document.
+ // Otherwhise we can't reopen it successfully.
+ xDoc.dispose();
+ xDoc = null;
+
+ log.println("\topen the password protected document ... ");
+
+ lLoadProps = new PropertyValue[2];
+ lLoadProps[0] = new PropertyValue();
+ lLoadProps[0].Name = "Hidden";
+ lLoadProps[0].Value = Boolean.TRUE;
+ lLoadProps[1] = new PropertyValue();
+ lLoadProps[1].Name = "Password";
+ lLoadProps[1].Value = sPassword;
+
+ try {
+ xDoc = xFrameLoader.loadComponentFromURL(sTestURL, "_blank", 0,
+ lLoadProps);
+ } catch (com.sun.star.io.IOException exIO) {
+ failed("IOException");
+
+ return;
+ } catch (com.sun.star.lang.IllegalArgumentException exArg) {
+ failed("IllegalArgumentException");
+
+ return;
+ }
+
+ if (xDoc == null) {
+ assure("document was not loaded.", false);
+
+ return;
+ }
+
+ xDoc.dispose();
+ xDoc = null;
+ }
+
+ /**
+ * Check URL encoding. The first filename that matches "*.sxw"
+ * is used as source for several encodings.
+ */
+ public void checkURLEncoding() {
+ PropertyValue[] lProps = new PropertyValue[1];
+
+ lProps[0] = new PropertyValue();
+ lProps[0].Name = "Hidden";
+ lProps[0].Value = Boolean.TRUE;
+
+ // first get encoding of this system
+ InputStreamReader in = new InputStreamReader(System.in);
+ String sSystemEncoding = in.getEncoding();
+
+ log.println("This system's encoding: " + sSystemEncoding);
+
+ if (lTestFiles == null) {
+ failed("Found an empty directory. There are no files for testing.");
+
+ return;
+ }
+
+ // get a file name as byte array
+ Enumeration aSnapshot = lTestFiles.elements();
+ byte[] baURL = null;
+
+ while (aSnapshot.hasMoreElements()) {
+ File aFile = new File(sTestDocPath + fs +
+ aSnapshot.nextElement());
+ String sFile = URLHelper.getFileURLFromSystemPath(aFile);
+
+ // take the first sxw file as stream
+ if (sFile.endsWith(".sxw")) {
+ baURL = sFile.getBytes();
+
+ break;
+ }
+ }
+
+ if (baURL == null) {
+ failed("Found no file to load. Cannot test.");
+
+ return;
+ }
+
+ //construct several different encoded strings
+ String[] sEncoding = new String[] {
+ "US-ASCII", "TRUE", // us ascii encoding
+ "ISO-8859-1", "TRUE", // iso encoding
+ "UTF-8", "TRUE", // 8 bit utf encoding
+ "UTF-16BE", "FALSE", // 16 bit big endian utf
+ "UTF-16LE", "FALSE", // 16 bit little endian utf
+ "UTF-16", "FALSE" // 16 bit, order specified by byte order mark
+
+ };
+
+ for (int i = 0; i < sEncoding.length; i = i + 2) {
+ try {
+ String encURL = new String(baURL, sEncoding[i]);
+ log.println("ENC[" + sEncoding[i] + "]");
+
+ if (sEncoding[i + 1].equals("TRUE")) {
+ loadURL(xFrameLoader, RESULT_VALID_DOC, encURL, "_blank", 0,
+ lProps);
+ } else {
+ //with cws_loadenv01 changed to IllegalArgumentException
+ loadURL(xFrameLoader, RESULT_ILLEGALARGUMENTEXCEPTION, encURL, "_blank", 0,
+ lProps);
+ }
+ } catch (java.io.UnsupportedEncodingException e) {
+ failed("Unsopported Encoding: " + sEncoding[i] +
+ "\n Not able to test encoding on this platform.", true);
+ }
+ }
+ }
+
+ /**
+ * Check url handling with a load of URLs.
+ * 1. unsupported URLs.
+ * 2. "stupid" URLs
+ * 3. case sensitive URLs
+ * 4. FTP URLs
+ * 5. HTTP URLs
+ */
+ public void checkURLHandling() {
+ PropertyValue[] lProps = new PropertyValue[1];
+
+ lProps[0] = new PropertyValue();
+ lProps[0].Name = "Hidden";
+ lProps[0].Value = Boolean.TRUE;
+
+ log.println("check possible but unsupported URLs");
+
+ String[] sIllegalArgs = new String[] {
+ "slot:5000", "slot:10909", ".uno:SaveAs", ".uno:Open",
+ };
+ loadURL(xFrameLoader, RESULT_ILLEGALARGUMENTEXCEPTION, sIllegalArgs,
+ "_blank", 0, lProps);
+
+ log.println("check stupid URLs");
+
+ sIllegalArgs = new String[] {
+ "slot:xxx", "slot:111111111", ".uno:save_as", ".uno:open_this",
+ ".UnO:*",
+ };
+ loadURL(xFrameLoader, RESULT_ILLEGALARGUMENTEXCEPTION, sIllegalArgs,
+ "_blank", 0, lProps);
+
+ String[] sEmptyDocs = new String[] {
+ "mailo:hansi.meier@germany.sun.com", "file:/c:\\test/file.cxx",
+ "file:///c|:\\test/file.cxx", "http_server://staroffice-doc\\",
+ "c:\\\\test///\\test.sxw", "news_:staroffice-doc",
+ "newsletter@blubber", "private_factory/swriter",
+ "private:factory//swriter", "private:factory/swriter/___",
+ "c:\\test\\test.sxw", "macro:///ImportWizard.Main.Main",
+ "macro:///Euro.AutoPilotRun.StartAutoPilot",
+ "service:com.sun.star.frame.Frame",
+ "mailto:steffen.grund@germany.sun.com", "news:staroffice-doc",
+ "macro:/ExportWizard", "macro://Euro.AutoPilotRun.StartAutoPilot",
+ "service:com.sun.star.frame."
+ };
+
+ //with cws_loadenv01 changed to IllegalArgumentException
+ loadURL(xFrameLoader, RESULT_ILLEGALARGUMENTEXCEPTION, sEmptyDocs, "_blank", 0,
+ lProps);
+
+ log.println("check case senstive URLs");
+
+ sIllegalArgs = new String[] {
+ "sLot:5000", "sloT:10909", ".unO:SaveAs", ".uno:OPEN",
+ };
+ loadURL(xFrameLoader, RESULT_ILLEGALARGUMENTEXCEPTION, sIllegalArgs,
+ "_blank", 0, lProps);
+
+ sEmptyDocs = new String[] {
+ "private:factory/SWRITER", "private:factory/SWRITER/WEB",
+ "macro:///importwizard.main.main",
+ "Macro:///euro.autopilotrun.startautopilot",
+ "Service:Com.Sun.Star.Frame.Frame",
+ "Mailto:andreas.schluens@germany.sun.com", "neWs:staroffice-doc",
+ "News:Staroffice-doc"
+ };
+
+ //with cws_loadenv01 changed to IllegalArgumentException
+ loadURL(xFrameLoader, RESULT_ILLEGALARGUMENTEXCEPTION, sEmptyDocs, "_blank", 0,
+ lProps);
+
+ log.println("check FTP URLs");
+
+ String sFTPURL = (String) param.get("FtpAccess");
+ Enumeration aSnapshot = lTestFiles.elements();
+
+ while (aSnapshot.hasMoreElements()) {
+ String doc = (String) aSnapshot.nextElement();
+
+
+ // if os is windows
+ doc = doc.replace('\\', '/');
+ if (doc.indexOf("CVS")<0) {
+ loadURL(xFrameLoader, RESULT_VALID_DOC, sFTPURL + "/" + doc,
+ "_blank", 0, lProps);
+ }
+ }
+
+ log.println("check HTTP URLs");
+
+ String sHTTPURL = (String) param.get("HttpAccess");
+ aSnapshot = lTestFiles.elements();
+
+ while (aSnapshot.hasMoreElements()) {
+ String doc = (String) aSnapshot.nextElement();
+
+
+ // if os is windows
+ doc = doc.replace('\\', '/');
+ if (doc.indexOf("CVS")<0) {
+ loadURL(xFrameLoader, RESULT_VALID_DOC, sHTTPURL + "/" + doc,
+ "_blank", 0, lProps);
+ }
+ }
+ }
+
+ /**
+ * Loads one URL with the given parameters using the method
+ * loadComponentFromURL(). Further it's possible to specify, whch result is
+ * required and we check internally if it was reached. Logging of errors
+ * and success stories is done inside this method too. Of course we catch
+ * all possible exceptions and try to leave the office without any forgotten
+ * but opened documents.
+ */
+ private void loadURL(XComponentLoader xFrameLoader, int nRequiredResult,
+ String sURL, String sTarget, int nFlags,
+ PropertyValue[] lProps) {
+ int nResult = RESULT_EMPTY_DOC;
+ XComponent xDoc = null;
+
+ try {
+ xDoc = xFrameLoader.loadComponentFromURL(sURL, sTarget, nFlags,
+ lProps);
+
+ if (xDoc != null) {
+ nResult = RESULT_VALID_DOC;
+ } else {
+ nResult = RESULT_EMPTY_DOC;
+ }
+ } catch (com.sun.star.lang.IllegalArgumentException exArgument) {
+ nResult = RESULT_ILLEGALARGUMENTEXCEPTION;
+ } catch (com.sun.star.io.IOException exIO) {
+ nResult = RESULT_IOEXCEPTION;
+ } catch (com.sun.star.uno.RuntimeException exRuntime) {
+ exRuntime.printStackTrace();
+ nResult = RESULT_RUNTIMEEXCEPTION;
+ } catch (Exception e) {
+ e.printStackTrace();
+ nResult = RESULT_EXCEPTION;
+ }
+
+ try {
+ if (xDoc != null) {
+ xDoc.dispose();
+ xDoc = null;
+ }
+ } catch (com.sun.star.uno.RuntimeException exClosing) {
+ log.println("exception during disposing of a document found!" +
+ " Doesn't influence test - but should be checked.");
+ }
+
+ String sMessage = "URL[\"" + sURL + "\"]";
+
+ if (nResult == nRequiredResult) {
+ log.println(sMessage + " expected result [" +
+ convertResult2String(nResult) + "] ");
+ } else {
+ failed(sMessage + " unexpected result [" +
+ convertResult2String(nResult) + "] " +
+ "\nrequired was [" +
+ convertResult2String(nRequiredResult) + "]" +
+ "\nwe got [" + convertResult2String(nResult) + "]",
+ true);
+ }
+ }
+
+ private void loadURL(XComponentLoader xFrameLoader, int nRequiredResult,
+ String[] sURL, String sTarget, int nFlags,
+ PropertyValue[] lProps) {
+ for (int i = 0; i < sURL.length; i++)
+ loadURL(xFrameLoader, nRequiredResult, sURL[i], sTarget, nFlags,
+ lProps);
+ }
+
+ /**
+ * it match the int result value to a string, which can be used for logging
+ */
+ private static String convertResult2String(int nResult) {
+ switch (nResult) {
+ case RESULT_VALID_DOC:
+ return "VALID_DOC";
+
+ case RESULT_EMPTY_DOC:
+ return "EMPTY_DOC";
+
+ case RESULT_ILLEGALARGUMENTEXCEPTION:
+ return "ILLEGALARGUMENTEXCEPTION";
+
+ case RESULT_IOEXCEPTION:
+ return "IOEXCEPTION";
+
+ case RESULT_RUNTIMEEXCEPTION:
+ return "RUNTIMEEXCEPTION";
+
+ case RESULT_EXCEPTION:
+ return "ALLOTHEREXCEPTION";
+ }
+
+ return "unknown!";
+ }
+} \ No newline at end of file