rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/LaunchSetup.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 24 Feb 2015 11:12:53 +0100
changeset 1787 ea12a3bb4b33
parent 1537 897d7f70c5a5
permissions -rw-r--r--
Using year range 2012-2015 in copyright header
     1 /**
     2  * Back 2 Browser Bytecode Translator
     3  * Copyright (C) 2012-2015 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, version 2 of the License.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License
    15  * along with this program. Look for COPYING file in the top folder.
    16  * If not, see http://opensource.org/licenses/GPL-2.0.
    17  */
    18 package org.apidesign.bck2brwsr.vmtest.impl;
    19 
    20 import java.io.IOException;
    21 import java.util.HashSet;
    22 import java.util.LinkedHashMap;
    23 import java.util.Map;
    24 import java.util.Set;
    25 import org.apidesign.bck2brwsr.launcher.Launcher;
    26 import org.testng.annotations.AfterGroups;
    27 import org.testng.annotations.BeforeGroups;
    28 
    29 /**
    30  *
    31  * @author Jaroslav Tulach <jtulach@netbeans.org>
    32  */
    33 public final class LaunchSetup {
    34     static LaunchSetup INSTANCE = new LaunchSetup();
    35     
    36     private Launcher js;
    37     private final Map<String,Launcher> brwsrs = new LinkedHashMap<>();
    38     
    39     private LaunchSetup() {
    40     }
    41     
    42     public Launcher javaScript() {
    43         return js(true);
    44     } 
    45     private synchronized  Launcher js(boolean create) {
    46         if (js == null && create) {
    47             final String p = System.getProperty("vmtest.js", "script"); // NOI18N
    48             switch (p) {
    49                 case "brwsr": // NOI18N
    50                     String cmd = null;
    51                     String pb = System.getProperty("vmtest.brwsrs"); // NOI18N
    52                     if (pb != null) {
    53                         cmd = pb.split(",")[0]; // NOI18N
    54                     }
    55                     js = brwsr(cmd);
    56                     break;
    57                 case "script": js = Launcher.createJavaScript(); break; // NOI18N
    58                 default: throw new IllegalArgumentException(
    59                     "Unknown value of vmtest.js property: " + p
    60                 );
    61             }
    62         }
    63         return js;
    64     } 
    65     
    66     public synchronized Launcher brwsr(String cmd) {
    67         Launcher s = brwsrs.get(cmd);
    68         if (s == null) {
    69             s = Launcher.createBrowser(cmd);
    70             brwsrs.put(cmd, s);
    71         }
    72         return s;
    73     }
    74 
    75     @BeforeGroups("run")
    76     public void initializeLauncher() throws IOException {
    77         Set<Launcher> all = new HashSet<>(brwsrs.values());
    78         if (js(false) != null) {
    79             all.add(js(true));
    80         }
    81         for (Launcher launcher : all) {
    82             launcher.initialize();
    83         }
    84     }
    85 
    86     @AfterGroups("run")
    87     public void shutDownLauncher() throws IOException, InterruptedException {
    88         Set<Launcher> all = new HashSet<>(brwsrs.values());
    89         if (js(false) != null) {
    90             all.add(js(true));
    91         }
    92         for (Launcher launcher : all) {
    93             launcher.shutdown();
    94         }
    95     }
    96 }