Plugin for simple-build-tool (sbt) to show a visual notification of the test results.
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



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


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): String
  • def formatPassed(tests: List[TestResult]): String
  • def formatSkipped(tests: List[TestResult]): String
  • def formatFailed(tests: List[TestResult]): String
  • def 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(""))

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.