JAL-3453 Some tests require different Desktop constructor
authorhansonr <hansonr@STO24954W.ad.stolaf.edu>
Mon, 7 Oct 2019 05:50:08 +0000 (07:50 +0200)
committerhansonr <hansonr@STO24954W.ad.stolaf.edu>
Mon, 7 Oct 2019 05:50:08 +0000 (07:50 +0200)
better idea:

Desktop.getInstanceOnly()

- creates an instance with no dialog prompting and no frame display,
similar to headless mode, but not fully bypassing the code that
Jalview.headless bypasses.

src/jalview/bin/ApplicationSingletonProvider.java
src/jalview/gui/Desktop.java

index 45ec8ab..b64f40c 100644 (file)
@@ -140,15 +140,10 @@ public class ApplicationSingletonProvider
      * store the new singleton; note that a
      * null value is saved if construction failed
      */
-    setInstance(c, o);
+    getContextMap().put(c, o);
     return o;
   }
 
-  public static void setInstance(Class<? extends ApplicationSingletonI> c,
-          ApplicationSingletonI o)
-  {
-    getContextMap().put(c, o);
-  }
   /**
    * Removes the current singleton instance of the given class from the current
    * application context. This has the effect of ensuring that a new instance is
index d2f3841..91e1948 100644 (file)
@@ -234,7 +234,7 @@ public class Desktop extends GDesktop
    * object but no actual frames. Though not headless, this option disallows
    * dialogs to run in test environments.
    * 
-   * It is set by invoking the Desktop(true) constructor.
+   * It is set by invoking Desktop.getInstanceOnly().
    * 
    */
   boolean instanceOnly;
@@ -380,17 +380,18 @@ public class Desktop extends GDesktop
 
   /**
    * For TestNG, this constructor can be utilized to allow the creation of a
-   * singleton Desktop instance without the formation of frames and, especially,
-   * not involving dialogs. Cache.log is also initialized for some tests that
-   * require it despite there being no Desktop.
+   * singleton Desktop instance with the creation of frames, but no addition to
+   * the Desktop object, as in headless mode. Dialogs are not initiated.
+   * Cache.log is also initialized for some tests that require it despite there
+   * being no Desktop.
    * 
-   * @param forInstance
    */
-  public Desktop(boolean forInstance)
+  public static Desktop getInstanceOnly()
   {
-    ApplicationSingletonProvider.setInstance(Desktop.class, this);
-    Cache.initLogger();
-    instanceOnly = true;
+    Desktop d = (Desktop) ApplicationSingletonProvider
+            .getInstance(Desktop.class);
+    d.instanceOnly = true;
+    return d;
   }
   
   /**
@@ -926,7 +927,7 @@ public class Desktop extends GDesktop
     }
     // THIS IS A PUBLIC STATIC METHOD, SO IT MAY BE CALLED EVEN IN
     // A HEADLESS STATE WHEN NO DESKTOP EXISTS. MUST RETURN
-    // IF JALVIEW IS RUNNING HEADLESS
+    // IF JALVIEW IS RUNNING HEADLESS OR IN INSTANCE-ONLY (testNG) MODE
     // ///////////////////////////////////////////////
     if (Jalview.isHeadlessMode() || Desktop.getInstance().instanceOnly)
     {
@@ -3311,8 +3312,6 @@ public class Desktop extends GDesktop
           {
           }
         }
-        System.out.println("Desktop headless or instanceonly" + instanceOnly
-                + " " + Jalview.isHeadlessMode());
         if (instanceOnly || Jalview.isHeadlessMode())
         {
           return;