M build-tests.xml

- changes to make unit tests run again.

M build.xml

- updated version

- create the services definition for the webclient implementation

M classes_spec/org/mozilla/webclient/BrowserControlCanvas.java
M classes_spec/org/mozilla/webclient/BrowserControlImpl.java

- temporary hacks until we have everything migrated to the new package
  structure.

M classes_spec/org/mozilla/webclient/BrowserControlFactory.java

- Make this class be a shim to the implementation specific instance.

A classes_spec/org/mozilla/webclient/BrowserControlFactoryInterface.java

- Interface to be implemented by the webclient implementor

A classes_spec/org/mozilla/webclient/impl/BrowserControlFactoryImpl.java

- concrete implementation of BrowserControlFactoryInterface

A test/automated/src/classes/org/mozilla/webclient/BrowserControlFactoryTest.java

- test that the factory can be instantiated.

M test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java

- Make sure we have our bin dir set.


Index: build-tests.xml
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/build-tests.xml,v
retrieving revision 1.1
diff -u -r1.1 build-tests.xml
--- build-tests.xml	1 Oct 2002 00:39:18 -0000	1.1
+++ build-tests.xml	6 Sep 2003 06:22:05 -0000
@@ -3,7 +3,7 @@
  SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 -->
 
-<project name="Webclient Unit Tests" default="test.local" basedir=".">
+<project name="Webclient Unit Tests" default="run.test" basedir=".">
 
 <!--
         This is a generic build.xml file for Ant that is used to run the
@@ -75,7 +75,7 @@
 
     <path id="test.classpath">
       <pathelement location="${junit.jar}"/>
-      <pathelement location="${build.home}/classes"/>
+      <pathelement location="${build.home}"/>
       <pathelement location="${out.test.dir}/classes"/>
     </path>
 
@@ -87,6 +87,8 @@
 -->
     <target name="compile.test">
 
+        <echo message="${build.home}"/>
+
         <mkdir  dir="${out.test.dir}/classes"/>
 
         <javac srcdir="${src.test.dir}"
@@ -125,6 +127,7 @@
             <jvmarg value="-Djava.library.path=${myenv.MOZILLA_FIVE_HOME}:${myenv.MOZILLA_FIVE_HOME}/components"/>
             <jvmarg value="-DNSPR_LOG_MODULES=${myenv.NSPR_LOG_MODULES}"/>
             <jvmarg value="-DNSPR_LOG_FILE=${myenv.NSPR_LOG_FILE}"/>
+            <jvmarg value="-DBROWSER_BIN_DIR=${myenv.MOZILLA_FIVE_HOME}"/>
             <jvmarg line="${debug.jvm.args}"/>
 
 
@@ -132,7 +135,11 @@
 
             <formatter type="plain" usefile="false"/>
 
+            <test name="org.mozilla.webclient.BrowserControlFactoryTest"/>
+<!-- non-running tests 
+
             <test name="org.mozilla.webclient.wrapper_native.gtk.TestGtkBrowserControlCanvas"/>
+-->
 
         </junit>
 
Index: build.xml
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/build.xml,v
retrieving revision 1.15
diff -u -r1.15 build.xml
--- build.xml	9 Jun 2003 20:05:33 -0000	1.15
+++ build.xml	6 Sep 2003 06:22:06 -0000
@@ -30,7 +30,7 @@

   <property name="Name" value="webclient"/>
   <property name="name" value="webclient"/>
-  <property name="version" value="20020916"/>
+  <property name="version" value="20030906"/>

 <!-- ************ Per user local properties ******************************* -->

@@ -85,8 +85,12 @@

       <include name="org/mozilla/webclient/*"/>
       <include name="org/mozilla/webclient/wrapper_native/*"/>
+      <include name="org/mozilla/webclient/impl/**"/>
       <include name="org/mozilla/webclient/test/*"/>
     </javac>
+
+    <mkdir dir="${build.home}/META-INF/services"/>
+    <echo file="${build.home}/META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface">org.mozilla.webclient.impl.BrowserControlFactoryImpl</echo>

   </target>

Index: classes_spec/org/mozilla/webclient/BrowserControlCanvas.java
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/classes_spec/org/mozilla/webclient/BrowserControlCanvas.java,v
retrieving revision 1.5
diff -u -r1.5 BrowserControlCanvas.java
--- classes_spec/org/mozilla/webclient/BrowserControlCanvas.java	9 Apr 2003 17:42:30 -0000	1.5
+++ classes_spec/org/mozilla/webclient/BrowserControlCanvas.java	6 Sep 2003 06:22:06 -0000
@@ -114,7 +114,8 @@

 } // BrowserControlCanvas() ctor

-protected void initialize(BrowserControl controlImpl)
+// PENDING(edburns): make this protected again
+public void initialize(BrowserControl controlImpl)
 {
     ParameterCheck.nonNull(controlImpl);
     webShell = controlImpl;
Index: classes_spec/org/mozilla/webclient/BrowserControlFactory.java
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/classes_spec/org/mozilla/webclient/BrowserControlFactory.java,v
retrieving revision 1.7
diff -u -r1.7 BrowserControlFactory.java
--- classes_spec/org/mozilla/webclient/BrowserControlFactory.java	1 Oct 2002 00:39:20 -0000	1.7
+++ classes_spec/org/mozilla/webclient/BrowserControlFactory.java	6 Sep 2003 06:22:06 -0000
@@ -35,22 +35,38 @@
 import java.io.File;
 import java.io.FileNotFoundException;

-/**
- *
- *  <B>BrowserControlFactory</B> creates concrete instances of BrowserControl
-
- * <B>Lifetime And Scope</B> <P>
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Properties;

- * This is a static class, it is neven instantiated.

+/**
+ *
+ *  <p><B>BrowserControlFactory</B> uses a discovery algorithm to find
+ *  an implementation of {@link BrowserControlFactoryInterface}.  All of
+ *  the public static methods in this class simply call through to this
+ *  implemenatation instance.</p>
+ *
+ * <p>The discovery mechanism used is to look try to load a resource
+ * called
+ * <code>META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface</code>.
+ * If the resource is found, interpret it as a <code>Properties</code>
+ * file and read out its first line.  Interpret the first line as the
+ * fully qualified class name of a class that implements {@link
+ * BrowserControlFactoryInterface}.  The named class must have a public
+ * no-arg constructor.</p>
+ *
  *
  * @version $Id: BrowserControlFactory.java,v 1.7 2002/10/01 00:39:20 edburns%acm.org Exp $
  *
- * @see	org.mozilla.webclient.test.EmbeddedMozilla
-
+ *
  */

-public class BrowserControlFactory extends Object
+public class BrowserControlFactory extends Object
 {
 //
 // Protected Constants
@@ -60,24 +76,13 @@
 // Class Variables
 //

-    private static boolean appDataHasBeenSet = false;
-    private static Class browserControlCanvasClass = null;
-    private static String platformCanvasClassName = null;
-    private static String browserType = null;
-
-//
-// Instance Variables
-//
-
-// Attribute Instance Variables
-
-// Relationship Instance Variables
+private static BrowserControlFactoryInterface instance = null;

 //
 // Constructors and Initializers
 //

-public BrowserControlFactory()
+private BrowserControlFactory()
 {
     Assert.assert_it(false, "This class shouldn't be constructed.");
 }
@@ -88,179 +93,97 @@

 public static void setAppData(String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException
 {
-    BrowserControlFactory.setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir);
+    getInstance().setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir);
 }

-
-    /**
-
-     * This method is used to set per-application instance data, such as
-     * the location of the browser binary.
-
-     * @param myBrowserType.  Either "native" or "nonnative"
-
-     * @param absolutePathToNativeBrowserBinDir the path to the bin dir
-     * of the native browser, including the bin.  ie:
-     * "D:\Projects\mozilla\dist\win32_d.obj\bin"
-
-     */
-
 public static void setAppData(String myBrowserType, String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException
 {
-    browserType = myBrowserType;
-    if (!appDataHasBeenSet) {
-        // figure out the correct value for platformCanvasClassName
-        if (browserType.equals(BrowserControl.BROWSER_TYPE_NON_NATIVE)) {
-            platformCanvasClassName = "org.mozilla.webclient.wrapper_nonnative.JavaBrowserControlCanvas";
-        }
-        else {
-            ParameterCheck.nonNull(absolutePathToNativeBrowserBinDir);
-
-            // verify that the directory exists:
-            File binDir = new File(absolutePathToNativeBrowserBinDir);
-            if (!binDir.exists()) {
-                throw new FileNotFoundException("Directory " + absolutePathToNativeBrowserBinDir + " is not found.");
-            }
-
-            // This hack is necessary for Sun Bug #4303996
-            java.awt.Canvas c = new java.awt.Canvas();
-            platformCanvasClassName = determinePlatformCanvasClassName();
-        }
-        // end of figuring out the correct value for platformCanvasClassName
-        if (platformCanvasClassName != null) {
-            browserControlCanvasClass = Class.forName(platformCanvasClassName);
-        }
-        else {
-            throw new ClassNotFoundException("Could not determine BrowserControlCanvas class to load\n");
-        }
-
-        try {
-            BrowserControlImpl.appInitialize(browserType, absolutePathToNativeBrowserBinDir);
-        }
-        catch (Exception e) {
-            throw new ClassNotFoundException("Can't initialize native browser: " +
-                                             e.getMessage());
-        }
-        appDataHasBeenSet = true;
-    }
+    getInstance().setAppData(myBrowserType, absolutePathToNativeBrowserBinDir);
 }

 public static void appTerminate() throws Exception
 {
-    BrowserControlImpl.appTerminate();
+    getInstance().appTerminate();
 }

 public static BrowserControl newBrowserControl() throws InstantiationException, IllegalAccessException, IllegalStateException
 {
-    if (!appDataHasBeenSet) {
-        throw new IllegalStateException("Can't create BrowserControl instance: setAppData() has not been called.");
-    }
-    Assert.assert_it(null != browserControlCanvasClass);
-
-    BrowserControlCanvas newCanvas = null;
-    BrowserControl result = null;
-    newCanvas = (BrowserControlCanvas) browserControlCanvasClass.newInstance();
-    if (null != newCanvas &&
-        null != (result = new BrowserControlImpl(browserType, newCanvas))) {
-        newCanvas.initialize(result);
-    }
-
+    BrowserControl result = null;
+    result = getInstance().newBrowserControl();
     return result;
 }

-/**
-
- * BrowserControlFactory.deleteBrowserControl is called with a
- * BrowserControl instance obtained from
- * BrowserControlFactory.newBrowserControl.  This method renders the
- * argument instance completely un-usable.  It should be called when the
- * BrowserControl instance is no longer needed.  This method simply
- * calls through to the non-public BrowserControlImpl.delete() method.
-
- * @see org.mozilla.webclient.ImplObject#delete
-
- */
-
 public static void deleteBrowserControl(BrowserControl toDelete)
 {
-    ParameterCheck.nonNull(toDelete);
-    ((BrowserControlImpl)toDelete).delete();
+    getInstance().deleteBrowserControl(toDelete);
 }

 //
-// General Methods
-//
-
-/**
+// helper methods
+//

- * Called from setAppData() in the native case.  This method simply
- * figures out the proper name for the class that is the
- * BrowserControlCanvas.
-
- * @return  "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas" or "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas"
-
- */
-
-private static String determinePlatformCanvasClassName()
+protected static BrowserControlFactoryInterface getInstance()
 {
-    String result = null;
-    // cause the native library to be loaded
-    // PENDING(edburns): do some magic to determine the right kind of
-    // MozWebShellCanvas to instantiate
-
-    // How about this:
-    // I try loading sun.awt.windows.WDrawingSurfaceInfo. If it doesn't
-    // load, then I try loading sun.awt.motif.MDrawingSufaceInfo. If
-    // none loads, then I return a error message.
-    // If you think up of a better way, let me know.
-    // -- Mark
-    // Here is what I think is a better way: query the os.name property.
-    // This works in JDK1.4, as well.
-    // -- edburns
+    if (null != instance) {
+        return instance;
+    }

-    String osName = System.getProperty("os.name");
-
-    if (null != osName) {
-       if (-1 != osName.indexOf("indows")) {
-           result = "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas";
-       }
-       else {
-           result = "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas";
-       }
+    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+    if (classLoader == null) {
+        throw new RuntimeException("Context ClassLoader");
     }

-    return result;
-}
-
-// ----UNIT_TEST_START
-
-//
-// Test methods
-//
-
-public static void main(String [] args)
-{
-    System.out.println("doing asserts");
-    Assert.setEnabled(true);
-    Log.setApplicationName("BrowserControlFactory");
-    Log.setApplicationVersion("0.0");
-    Log.setApplicationVersionDate("$Id: BrowserControlFactory.java,v 1.7 2002/10/01 00:39:20 edburns%acm.org Exp $");
-
-    BrowserControlCanvas canvas = null;
-    BrowserControl control = null;
+    BufferedReader reader = null;
+    InputStream stream = null;
+    String
+        className = null,
+        resourceName = "META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface";
     try {
-        BrowserControlFactory.setAppData("nonnative", args[0]);
-        control = BrowserControlFactory.newBrowserControl();
-        Assert.assert_it(control != null);
-        canvas = (BrowserControlCanvas) control.queryInterface("webclient.BrowserControlCanvas");
-        Assert.assert_it(canvas != null);
+        stream = classLoader.getResourceAsStream(resourceName);
+        if (stream != null) {
+            // Deal with systems whose native encoding is possibly
+            // different from the way that the services entry was created
+            try {
+                reader =
+                    new BufferedReader(new InputStreamReader(stream,
+                                                             "UTF-8"));
+            } catch (UnsupportedEncodingException e) {
+                reader = new BufferedReader(new InputStreamReader(stream));
+            }
+            className = reader.readLine();
+            reader.close();
+            reader = null;
+            stream = null;
+        }
+    } catch (IOException e) {
+    } catch (SecurityException e) {
+    } finally {
+        if (reader != null) {
+            try {
+                reader.close();
+            } catch (Throwable t) {
+                ;
+            }
+            reader = null;
+            stream = null;
+        }
+        if (stream != null) {
+            try {
+                stream.close();
+            } catch (Throwable t) {
+                ;
+            }
+            stream = null;
+        }
     }
-    catch (Exception e) {
-        System.out.println("\n BrowserControl not getting created \n");
-        System.out.println(e.getMessage());
+    if (null != className) {
+        try {
+            Class clazz = classLoader.loadClass(className);
+            instance = (BrowserControlFactoryInterface) (clazz.newInstance());
+        } catch (Exception e) {
+        }
     }
+    return instance;
 }
-
-// ----UNIT_TEST_END

 } // end of class BrowserControlFactory
Index: classes_spec/org/mozilla/webclient/BrowserControlImpl.java
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/classes_spec/org/mozilla/webclient/BrowserControlImpl.java,v
retrieving revision 1.7
diff -u -r1.7 BrowserControlImpl.java
--- classes_spec/org/mozilla/webclient/BrowserControlImpl.java	27 Jul 2001 20:57:52 -0000	1.7
+++ classes_spec/org/mozilla/webclient/BrowserControlImpl.java	6 Sep 2003 06:22:07 -0000
@@ -30,8 +30,8 @@
 import org.mozilla.util.Utilities;


-
-class BrowserControlImpl extends Object implements BrowserControl
+// PENDING(edburns); move this inside impl package
+public class BrowserControlImpl extends Object implements BrowserControl
 {
 //
 // Protected Constants
@@ -145,8 +145,8 @@
 //
 // Class methods
 //
-
-static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception
+// PENDING(edburns): make this package private again
+public static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception
 {
     browserType = myBrowserType;
     if (null == wrapperFactory) {
@@ -157,7 +157,8 @@
     wrapperFactory.initialize(verifiedBinDirAbsolutePath);
 }

-static void appTerminate() throws Exception
+// PENDING(edburns): make this package private again
+public static void appTerminate() throws Exception
 {
     Assert.assert_it(null != wrapperFactory);

Index: test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java,v
retrieving revision 1.1
diff -u -r1.1 WebclientTestCase.java
--- test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java	1 Oct 2002 00:39:28 -0000	1.1
+++ test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java	6 Sep 2003 06:22:08 -0000
@@ -133,6 +133,16 @@
 	
 }
 
+protected void verifyBinDirSet()
+{
+    assertTrue("BROWSER_BIN_DIR is not set",
+	       null != System.getProperty("BROWSER_BIN_DIR"));
+}
+
+protected String getBrowserBinDir() {
+    return System.getProperty("BROWSER_BIN_DIR");
+}
+
 /**
 
 * assertTrue that NSPR_LOG_FILE is set.
@@ -162,6 +172,7 @@
     // make sure we have at least PR_LOG_DEBUG set
     verifyLogModuleValueIsAtLeastN(WEBCLIENTSTUB_LOG_MODULE, 4);
     verifyLogModuleValueIsAtLeastN(WEBCLIENT_LOG_MODULE, 4);
+    verifyBinDirSet();
     if (sendOutputToFile()) {
 	verifyOutputFileIsSet();
     }
This commit is contained in:
edburns%acm.org 2003-09-06 06:26:50 +00:00
Родитель fc0873c197
Коммит e508b23f4e
9 изменённых файлов: 184 добавлений и 181 удалений

Просмотреть файл

@ -3,7 +3,7 @@
SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
-->
<project name="Webclient Unit Tests" default="test.local" basedir=".">
<project name="Webclient Unit Tests" default="run.test" basedir=".">
<!--
This is a generic build.xml file for Ant that is used to run the
@ -75,7 +75,7 @@
<path id="test.classpath">
<pathelement location="${junit.jar}"/>
<pathelement location="${build.home}/classes"/>
<pathelement location="${build.home}"/>
<pathelement location="${out.test.dir}/classes"/>
</path>
@ -87,6 +87,8 @@
-->
<target name="compile.test">
<echo message="${build.home}"/>
<mkdir dir="${out.test.dir}/classes"/>
<javac srcdir="${src.test.dir}"
@ -125,6 +127,7 @@
<jvmarg value="-Djava.library.path=${myenv.MOZILLA_FIVE_HOME}:${myenv.MOZILLA_FIVE_HOME}/components"/>
<jvmarg value="-DNSPR_LOG_MODULES=${myenv.NSPR_LOG_MODULES}"/>
<jvmarg value="-DNSPR_LOG_FILE=${myenv.NSPR_LOG_FILE}"/>
<jvmarg value="-DBROWSER_BIN_DIR=${myenv.MOZILLA_FIVE_HOME}"/>
<jvmarg line="${debug.jvm.args}"/>
@ -132,7 +135,11 @@
<formatter type="plain" usefile="false"/>
<test name="org.mozilla.webclient.BrowserControlFactoryTest"/>
<!-- non-running tests
<test name="org.mozilla.webclient.wrapper_native.gtk.TestGtkBrowserControlCanvas"/>
-->
</junit>

Просмотреть файл

@ -30,7 +30,7 @@
<property name="Name" value="webclient"/>
<property name="name" value="webclient"/>
<property name="version" value="20020916"/>
<property name="version" value="20030906"/>
<!-- ************ Per user local properties ******************************* -->
@ -85,9 +85,13 @@
<include name="org/mozilla/webclient/*"/>
<include name="org/mozilla/webclient/wrapper_native/*"/>
<include name="org/mozilla/webclient/impl/**"/>
<include name="org/mozilla/webclient/test/*"/>
</javac>
<mkdir dir="${build.home}/META-INF/services"/>
<echo file="${build.home}/META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface">org.mozilla.webclient.impl.BrowserControlFactoryImpl</echo>
</target>
<target name="compile.src_share" depends="compile.javah.headers">

Просмотреть файл

@ -52,7 +52,7 @@ import java.awt.*;
* See concrete subclasses for scope info.
* @version $Id: BrowserControlCanvas.java,v 1.5 2003-04-09 17:42:30 edburns%acm.org Exp $
* @version $Id: BrowserControlCanvas.java,v 1.6 2003-09-06 06:26:45 edburns%acm.org Exp $
* @see org.mozilla.webclient.win32.Win32BrowserControlCanvas
@ -114,7 +114,8 @@ protected BrowserControlCanvas ()
} // BrowserControlCanvas() ctor
protected void initialize(BrowserControl controlImpl)
// PENDING(edburns): make this protected again
public void initialize(BrowserControl controlImpl)
{
ParameterCheck.nonNull(controlImpl);
webShell = controlImpl;

Просмотреть файл

@ -35,22 +35,38 @@ import org.mozilla.util.ParameterCheck;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Properties;
/**
*
* <B>BrowserControlFactory</B> creates concrete instances of BrowserControl
* <B>Lifetime And Scope</B> <P>
* This is a static class, it is neven instantiated.
* <p><B>BrowserControlFactory</B> uses a discovery algorithm to find
* an implementation of {@link BrowserControlFactoryInterface}. All of
* the public static methods in this class simply call through to this
* implemenatation instance.</p>
*
* @version $Id: BrowserControlFactory.java,v 1.7 2002-10-01 00:39:20 edburns%acm.org Exp $
* <p>The discovery mechanism used is to look try to load a resource
* called
* <code>META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface</code>.
* If the resource is found, interpret it as a <code>Properties</code>
* file and read out its first line. Interpret the first line as the
* fully qualified class name of a class that implements {@link
* BrowserControlFactoryInterface}. The named class must have a public
* no-arg constructor.</p>
*
*
* @version $Id: BrowserControlFactory.java,v 1.8 2003-09-06 06:26:45 edburns%acm.org Exp $
*
* @see org.mozilla.webclient.test.EmbeddedMozilla
*
*/
public class BrowserControlFactory extends Object
public class BrowserControlFactory extends Object
{
//
// Protected Constants
@ -60,24 +76,13 @@ public class BrowserControlFactory extends Object
// Class Variables
//
private static boolean appDataHasBeenSet = false;
private static Class browserControlCanvasClass = null;
private static String platformCanvasClassName = null;
private static String browserType = null;
//
// Instance Variables
//
// Attribute Instance Variables
// Relationship Instance Variables
private static BrowserControlFactoryInterface instance = null;
//
// Constructors and Initializers
//
public BrowserControlFactory()
private BrowserControlFactory()
{
Assert.assert_it(false, "This class shouldn't be constructed.");
}
@ -88,179 +93,97 @@ public BrowserControlFactory()
public static void setAppData(String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException
{
BrowserControlFactory.setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir);
getInstance().setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir);
}
/**
* This method is used to set per-application instance data, such as
* the location of the browser binary.
* @param myBrowserType. Either "native" or "nonnative"
* @param absolutePathToNativeBrowserBinDir the path to the bin dir
* of the native browser, including the bin. ie:
* "D:\Projects\mozilla\dist\win32_d.obj\bin"
*/
public static void setAppData(String myBrowserType, String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException
{
browserType = myBrowserType;
if (!appDataHasBeenSet) {
// figure out the correct value for platformCanvasClassName
if (browserType.equals(BrowserControl.BROWSER_TYPE_NON_NATIVE)) {
platformCanvasClassName = "org.mozilla.webclient.wrapper_nonnative.JavaBrowserControlCanvas";
}
else {
ParameterCheck.nonNull(absolutePathToNativeBrowserBinDir);
// verify that the directory exists:
File binDir = new File(absolutePathToNativeBrowserBinDir);
if (!binDir.exists()) {
throw new FileNotFoundException("Directory " + absolutePathToNativeBrowserBinDir + " is not found.");
}
// This hack is necessary for Sun Bug #4303996
java.awt.Canvas c = new java.awt.Canvas();
platformCanvasClassName = determinePlatformCanvasClassName();
}
// end of figuring out the correct value for platformCanvasClassName
if (platformCanvasClassName != null) {
browserControlCanvasClass = Class.forName(platformCanvasClassName);
}
else {
throw new ClassNotFoundException("Could not determine BrowserControlCanvas class to load\n");
}
try {
BrowserControlImpl.appInitialize(browserType, absolutePathToNativeBrowserBinDir);
}
catch (Exception e) {
throw new ClassNotFoundException("Can't initialize native browser: " +
e.getMessage());
}
appDataHasBeenSet = true;
}
getInstance().setAppData(myBrowserType, absolutePathToNativeBrowserBinDir);
}
public static void appTerminate() throws Exception
{
BrowserControlImpl.appTerminate();
getInstance().appTerminate();
}
public static BrowserControl newBrowserControl() throws InstantiationException, IllegalAccessException, IllegalStateException
{
if (!appDataHasBeenSet) {
throw new IllegalStateException("Can't create BrowserControl instance: setAppData() has not been called.");
}
Assert.assert_it(null != browserControlCanvasClass);
BrowserControlCanvas newCanvas = null;
BrowserControl result = null;
newCanvas = (BrowserControlCanvas) browserControlCanvasClass.newInstance();
if (null != newCanvas &&
null != (result = new BrowserControlImpl(browserType, newCanvas))) {
newCanvas.initialize(result);
}
BrowserControl result = null;
result = getInstance().newBrowserControl();
return result;
}
/**
* BrowserControlFactory.deleteBrowserControl is called with a
* BrowserControl instance obtained from
* BrowserControlFactory.newBrowserControl. This method renders the
* argument instance completely un-usable. It should be called when the
* BrowserControl instance is no longer needed. This method simply
* calls through to the non-public BrowserControlImpl.delete() method.
* @see org.mozilla.webclient.ImplObject#delete
*/
public static void deleteBrowserControl(BrowserControl toDelete)
{
ParameterCheck.nonNull(toDelete);
((BrowserControlImpl)toDelete).delete();
getInstance().deleteBrowserControl(toDelete);
}
//
// General Methods
//
// helper methods
//
/**
* Called from setAppData() in the native case. This method simply
* figures out the proper name for the class that is the
* BrowserControlCanvas.
* @return "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas" or "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas"
*/
private static String determinePlatformCanvasClassName()
protected static BrowserControlFactoryInterface getInstance()
{
String result = null;
// cause the native library to be loaded
// PENDING(edburns): do some magic to determine the right kind of
// MozWebShellCanvas to instantiate
// How about this:
// I try loading sun.awt.windows.WDrawingSurfaceInfo. If it doesn't
// load, then I try loading sun.awt.motif.MDrawingSufaceInfo. If
// none loads, then I return a error message.
// If you think up of a better way, let me know.
// -- Mark
// Here is what I think is a better way: query the os.name property.
// This works in JDK1.4, as well.
// -- edburns
if (null != instance) {
return instance;
}
String osName = System.getProperty("os.name");
if (null != osName) {
if (-1 != osName.indexOf("indows")) {
result = "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas";
}
else {
result = "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas";
}
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
throw new RuntimeException("Context ClassLoader");
}
return result;
}
// ----UNIT_TEST_START
//
// Test methods
//
public static void main(String [] args)
{
System.out.println("doing asserts");
Assert.setEnabled(true);
Log.setApplicationName("BrowserControlFactory");
Log.setApplicationVersion("0.0");
Log.setApplicationVersionDate("$Id: BrowserControlFactory.java,v 1.7 2002-10-01 00:39:20 edburns%acm.org Exp $");
BrowserControlCanvas canvas = null;
BrowserControl control = null;
BufferedReader reader = null;
InputStream stream = null;
String
className = null,
resourceName = "META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface";
try {
BrowserControlFactory.setAppData("nonnative", args[0]);
control = BrowserControlFactory.newBrowserControl();
Assert.assert_it(control != null);
canvas = (BrowserControlCanvas) control.queryInterface("webclient.BrowserControlCanvas");
Assert.assert_it(canvas != null);
stream = classLoader.getResourceAsStream(resourceName);
if (stream != null) {
// Deal with systems whose native encoding is possibly
// different from the way that the services entry was created
try {
reader =
new BufferedReader(new InputStreamReader(stream,
"UTF-8"));
} catch (UnsupportedEncodingException e) {
reader = new BufferedReader(new InputStreamReader(stream));
}
className = reader.readLine();
reader.close();
reader = null;
stream = null;
}
} catch (IOException e) {
} catch (SecurityException e) {
} finally {
if (reader != null) {
try {
reader.close();
} catch (Throwable t) {
;
}
reader = null;
stream = null;
}
if (stream != null) {
try {
stream.close();
} catch (Throwable t) {
;
}
stream = null;
}
}
catch (Exception e) {
System.out.println("\n BrowserControl not getting created \n");
System.out.println(e.getMessage());
if (null != className) {
try {
Class clazz = classLoader.loadClass(className);
instance = (BrowserControlFactoryInterface) (clazz.newInstance());
} catch (Exception e) {
}
}
return instance;
}
// ----UNIT_TEST_END
} // end of class BrowserControlFactory

Просмотреть файл

Просмотреть файл

@ -30,8 +30,8 @@ import org.mozilla.util.ParameterCheck;
import org.mozilla.util.Utilities;
class BrowserControlImpl extends Object implements BrowserControl
// PENDING(edburns); move this inside impl package
public class BrowserControlImpl extends Object implements BrowserControl
{
//
// Protected Constants
@ -145,8 +145,8 @@ void delete()
//
// Class methods
//
static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception
// PENDING(edburns): make this package private again
public static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception
{
browserType = myBrowserType;
if (null == wrapperFactory) {
@ -157,7 +157,8 @@ static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePat
wrapperFactory.initialize(verifiedBinDirAbsolutePath);
}
static void appTerminate() throws Exception
// PENDING(edburns): make this package private again
public static void appTerminate() throws Exception
{
Assert.assert_it(null != wrapperFactory);
@ -334,7 +335,7 @@ public static void main(String [] args)
Assert.setEnabled(true);
Log.setApplicationName("BrowserControlImpl");
Log.setApplicationVersion("0.0");
Log.setApplicationVersionDate("$Id: BrowserControlImpl.java,v 1.7 2001-07-27 20:57:52 ashuk%eng.sun.com Exp $");
Log.setApplicationVersionDate("$Id: BrowserControlImpl.java,v 1.8 2003-09-06 06:26:45 edburns%acm.org Exp $");
}

Просмотреть файл

Просмотреть файл

@ -0,0 +1,56 @@
/*
* $Id: BrowserControlFactoryTest.java,v 1.1 2003-09-06 06:26:50 edburns%acm.org Exp $
*/
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Mozilla Public
* 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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Sun
* Microsystems, Inc. Portions created by Sun are
* Copyright (C) 1999 Sun Microsystems, Inc. All
* Rights Reserved.
*
* Contributor(s): Ed Burns &lt;edburns@acm.org&gt;
*/
package org.mozilla.webclient;
import junit.framework.TestSuite;
import junit.framework.Test;
// BrowserControlFactoryTest.java
public class BrowserControlFactoryTest extends WebclientTestCase {
public BrowserControlFactoryTest(String name) {
super(name);
}
public static Test suite() {
return (new TestSuite(BrowserControlFactoryTest.class));
}
//
// Testcases
//
public void testFactoryLocator() {
try {
BrowserControlFactory.setAppData(getBrowserBinDir());
}
catch (Throwable e) {
assertTrue(e.getMessage() + " " + e, false);
}
}
}

Просмотреть файл

@ -1,5 +1,5 @@
/*
* $Id: WebclientTestCase.java,v 1.1 2002-10-01 00:39:28 edburns%acm.org Exp $
* $Id: WebclientTestCase.java,v 1.2 2003-09-06 06:26:50 edburns%acm.org Exp $
*/
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
@ -43,7 +43,7 @@ import junit.framework.TestCase;
*
* <B>Lifetime And Scope</B> <P>
*
* @version $Id: WebclientTestCase.java,v 1.1 2002-10-01 00:39:28 edburns%acm.org Exp $
* @version $Id: WebclientTestCase.java,v 1.2 2003-09-06 06:26:50 edburns%acm.org Exp $
*
* @see Blah
* @see Bloo
@ -133,6 +133,16 @@ protected void verifyLogModuleValueIsAtLeastN(String logModuleName, int n)
}
protected void verifyBinDirSet()
{
assertTrue("BROWSER_BIN_DIR is not set",
null != System.getProperty("BROWSER_BIN_DIR"));
}
protected String getBrowserBinDir() {
return System.getProperty("BROWSER_BIN_DIR");
}
/**
* assertTrue that NSPR_LOG_FILE is set.
@ -162,6 +172,7 @@ protected void verifyPreconditions()
// make sure we have at least PR_LOG_DEBUG set
verifyLogModuleValueIsAtLeastN(WEBCLIENTSTUB_LOG_MODULE, 4);
verifyLogModuleValueIsAtLeastN(WEBCLIENT_LOG_MODULE, 4);
verifyBinDirSet();
if (sendOutputToFile()) {
verifyOutputFileIsSet();
}