JAL-3599 More stderr/stdout output to logs when anything
[jalview.git] / build.gradle
index 995d012..6517f43 100644 (file)
@@ -568,11 +568,13 @@ ext {
   jalviewjsJ2sAltSettingsFileName = string("${jalviewDir}/${jalviewjs_j2s_alt_settings}")
   jalviewjsJ2sProps = null
   jalviewjsJ2sPlugin = jalviewjs_j2s_plugin
+  jalviewjsStderrLaunchFilename = "${jalviewjsSiteDir}/"+(file(jalviewjs_stderr_launch).getName())
 
   eclipseWorkspace = null
   eclipseBinary = string("")
   eclipseVersion = string("")
   eclipseDebug = false
+  
   // ENDEXT
 }
 
@@ -1748,7 +1750,6 @@ test {
 
   // not running tests in this task
   exclude "**/*"
-
 }
 /* testTask0 is the main test task */
 task testTask0(type: Test) {
@@ -1813,17 +1814,21 @@ tasks.withType(Test).matching {t -> t.getName().startsWith("testTask")}.all { te
     testTask.mustRunAfter "testTask0"
 
   testTask.testLogging { logging ->
-    events TestLogEvent.FAILED,
-      TestLogEvent.SKIPPED,
-      TestLogEvent.STANDARD_OUT,
-      TestLogEvent.STANDARD_ERROR
+    events TestLogEvent.FAILED
+//      TestLogEvent.SKIPPED,
+//      TestLogEvent.STANDARD_OUT,
+//      TestLogEvent.STANDARD_ERROR
 
     exceptionFormat TestExceptionFormat.FULL
     showExceptions true
     showCauses true
     showStackTraces true
+
+    info.events = [ TestLogEvent.FAILED ]
   }
 
+
+
   ignoreFailures = true // Always try to run all tests for all modules
 
   afterSuite { desc, result ->
@@ -1858,12 +1863,19 @@ tasks.withType(Test).matching {t -> t.getName().startsWith("testTask")}.all { te
     // testTasks that include the tests, and exclude all from the others.
     // get --test argument
     filter.commandLineIncludePatterns = test.filter.commandLineIncludePatterns
+    // do something with testTask.getCandidateClassFiles() to see if the test should silently finish because of the
+    // commandLineIncludePatterns not matching anything.  Instead we are doing setFailOnNoMatchingTests(false) below
+
 
     if (useClover) {
       println("Running tests " + (useClover?"WITH":"WITHOUT") + " clover")
     }
   }
 
+
+  /* don't fail on no matching tests (so --tests will run across all testTasks) */
+  testTask.filter.setFailOnNoMatchingTests(false)
+
   /* ensure the "test" task dependsOn all the testTasks */
   test.dependsOn testTask
 }
@@ -1886,24 +1898,30 @@ private static String colString(styler, col, colour, text) {
 
 private static String getSummaryLine(s, pn, tn, rt, rc, rs, rf, rsk, t, col) {
   def colour = 'black'
+  def text = rt
   def nocol = false
-  switch(rt) {
-    case TestResult.ResultType.SUCCESS:
-      colour = 'green'
-      break;
-    case TestResult.ResultType.FAILURE:
-      colour = 'red'
-      break;
-    default:
-      nocol = true
-      break;
+  if (rc == 0) {
+    text = "-----"
+    nocol = true
+  } else {
+    switch(rt) {
+      case TestResult.ResultType.SUCCESS:
+        colour = 'green'
+        break;
+      case TestResult.ResultType.FAILURE:
+        colour = 'red'
+        break;
+      default:
+        nocol = true
+        break;
+    }
   }
   StringBuilder sb = new StringBuilder()
   sb.append("${pn}")
   if (tn != null)
     sb.append(":${tn}")
   sb.append(" results: ")
-  sb.append(colString(s, col && !nocol, colour, rt))
+  sb.append(colString(s, col && !nocol, colour, text))
   sb.append(" (")
   sb.append("${rc} tests, ")
   sb.append(colString(s, col && rs > 0, 'green', rs))
@@ -2221,8 +2239,8 @@ task getdownWebsite() {
       props.put("getdown_txt_ui.instant_background_image", "${getdownImagesBuildDir}/${getdown_instant_background_image}")
       props.put("getdown_txt_ui.error_background", "${getdownImagesBuildDir}/${getdown_error_background}")
       props.put("getdown_txt_ui.progress_image", "${getdownImagesBuildDir}/${getdown_progress_image}")
-      props.put("getdown_txt_ui.icon", "${getdownImagesBuildDir}/${getdown_icon}")
-      props.put("getdown_txt_ui.mac_dock_icon", "${getdownImagesBuildDir}/${getdown_mac_dock_icon}")
+      props.put("getdown_txt_ui.icon", "${getdownImagesDir}/${getdown_icon}")
+      props.put("getdown_txt_ui.mac_dock_icon", "${getdownImagesDir}/${getdown_mac_dock_icon}")
     }
 
     props.put("getdown_txt_title", jalview_name)
@@ -2771,6 +2789,7 @@ task installerFiles(type: com.install4j.gradle.Install4jTask) {
     'WRAPPER_LINK': getdownWrapperLink,
     'BASH_WRAPPER_SCRIPT': getdown_bash_wrapper_script,
     'POWERSHELL_WRAPPER_SCRIPT': getdown_powershell_wrapper_script,
+    'BATCH_WRAPPER_SCRIPT': getdown_batch_wrapper_script,
     'WRAPPER_SCRIPT_BIN_DIR': getdown_wrapper_script_dir,
     'INSTALLER_NAME': install4jInstallerName,
     'INSTALL4J_UTILS_DIR': install4j_utils_dir,
@@ -4190,3 +4209,79 @@ task jalviewjs {
   dependsOn jalviewjsBuildSite
 }
 
+
+task jalviewjsCopyStderrLaunchFile(type: Copy) {
+  from file(jalviewjs_stderr_launch)
+  into jalviewjsSiteDir
+
+  inputs.file jalviewjs_stderr_launch
+  outputs.file jalviewjsStderrLaunchFilename
+}
+
+task jalviewjsChromiumProfile {
+  def profileDir = "${jalviewjsBuildDir}/${jalviewjs_chromium_user_dir}/${jalviewjs_chromium_profile_name}"
+  def firstRun = file("${profileDir}/First Run")
+
+  doFirst {
+    mkdir profileDir
+    firstRun.text = ""
+  }
+  
+  outputs.file firstRun
+}
+
+task jalviewjsLaunchTest(type: Exec) {
+  group "Test"
+  description "Check JalviewJS opens in a browser"
+  dependsOn jalviewjsBuildSite
+  dependsOn jalviewjsCopyStderrLaunchFile
+  dependsOn jalviewjsChromiumProfile
+
+  def chromiumBinary = jalviewjs_chromium_binary
+  if (chromiumBinary.startsWith("~/")) {
+    chromiumBinary = System.getProperty("user.home") + chromiumBinary.substring(1)
+  }
+  
+  doFirst {
+    def exec = file(chromiumBinary)
+    if (!exec.exists()) {
+      throw new GradleException("Could not find chromium binary '${chromiumBinary}'. Cannot run task ${name}.")
+    }
+  }
+
+  executable(chromiumBinary)
+  args([
+    "--headless=new",
+    "--timeout=60000",
+    "--virtual-time-budget=60000",
+    "--user-data-dir=${jalviewjsBuildDir}/${jalviewjs_chromium_user_dir}",
+    "--profile-directory=${jalviewjs_chromium_profile_name}",
+    "--allow-file-access-from-files",
+    "--enable-logging=stderr",
+    jalviewjsStderrLaunchFilename
+  ])
+
+  standardOutput = new ByteArrayOutputStream()
+  errorOutput = new ByteArrayOutputStream()
+  
+  doLast {
+    println("Chrome STDOUT: ")
+    println(standardOutput.toString())
+    println("Chrome STDERR: ")
+    println(errorOutput.toString())
+
+    def found = false
+    def stderr = errorOutput.toString()
+    stderr.eachLine { line ->
+      if (line.contains(jalviewjs_desktop_init_string)) {
+        println("Found line '"+line+"'")
+        found = true
+        return
+      }
+    }
+    if (!found) {
+      
+      throw new GradleException("Could not find evidence of Desktop launch in JalviewJS.")
+    }
+  }
+}