This is a customizable plugin for simple-build-tool to show a visual notification containing the test results.
- Sbt version 0.7.x (not compatible with 0.5.x series).
- A library to display a notification, e.g. (libnotify-bin for Ubuntu with Gnome)
ATTENTION: This will just work if you download the source, build it by your own and
use publish-local to publish it to your local repository. ;)
But I am working on it.
To use this plugin you have change <your project directory>/project/plugins/Plugins.scala:
import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
// lazy val sbtTestNotifierRepository = "sbt-test-notifier-repo" at "???"
lazy val sbtIdea = "de.aaschmid.sbtplugin" % "sbt-test-notifier" % "0.1"
// ...
}
Afterwards you have to import de.aaschmid.sbtplugin.testnotifier.TestNotify and add it
to the project class in <your project directory>/project/Project.scala, e.g.:
import sbt._
class Project(info: ProjectInfo) extends DefaultProject(info) with TestNotify {
// ...
}
There are a lot possible customizations that are described in this section.
The displaying of notifications is done by executing a shell command using a
ProcessBuilder and its method !. This is highly dependent on the operating
system such that you can configure it according to your operating system.
Currently it just works for Ubuntu with Gnome by using
notify-send
from the libnotify-bin
package. On Debian/Ubuntu this can be installed using
apt-get.
sudo apt-get install libnotify-bin
If anyone does the customizations for a specific operating system with a certain library, I would be glad to get your code to add it to the plugin. One has to override
def notificationCommand: String
and
def notificationParams(worst: Severity, summary: String, body: String): List[String]
Furthermore the time how long a notification is shown can be set by
def notificationTime: Int using in milliseconds. But be aware that this will not work
if you use notify-send
from libnotify-bin which is
the default right now.
The message header/summary can be adjusted by overriding, e.g.:
def summary(worst: Severity): String = "Test " + worst
The message body can be changed completely within
def body(duration: Long, testResults: List[TestResult]): String or by
changing the result of one of this methods:
def formatDuration(millies: Long): Stringdef formatPassed(tests: List[TestResult]): Stringdef formatSkipped(tests: List[TestResult]): Stringdef formatFailed(tests: List[TestResult]): Stringdef formatErrors(tests: List[TestResult]): String
or the more generally
def formatTestResults(prefix: String, tests: List[TestResult], showTestClasses: Boolean): String.
The default images are copied from the jar package to the projects target/
directory on demand. The directory can e.g. set to the /tmp/ by
override def imageTargetDir: File =
new File(System.getProperty("java.io.tmpdir"))
If you want to use your own icons you can just set them for every severity in method
def icon(s: Severity): File
If you do not want to get the notification message also be printed on the console
you can set def printNotification: Boolean to false.