Skip to content

Commit

Permalink
Add post-run-command notify implementation for windows
Browse files Browse the repository at this point in the history
Requires notify-send.exe: http://vaskovsky.net/notify-send

Only tested with GOOS=windows and wine, but seems to work.
  • Loading branch information
afbjorklund committed Aug 27, 2023
1 parent e7e66e9 commit 57554cb
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,9 @@ example `notify` command only works on Linux with `notify-send` and on macOS wit
On Linux, you need to have some "test-pass" and "test-fail" icons installed in your icon theme.
Some sample icons can be found in `contrib/notify`, and can be installed with `make install`.

On Windows, you can install [notify-send.exe](https://github.com/vaskovsky/notify-send)
but it does not support custom icons so will have to use the basic "info" and "error".

```
gotestsum --post-run-command notify
```
Expand Down
60 changes: 60 additions & 0 deletions contrib/notify/notify_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package main

import (
"fmt"
"log"
"os"
"os/exec"
"strconv"
)

func main() {
total := envInt("TOTAL")
skipped := envInt("SKIPPED")
failed := envInt("FAILED")
errors := envInt("ERRORS")

icon := "info" // Info 🛈
title := "Passed"
switch {
case errors > 0:
icon = "important" // Warning ⚠
title = "Errored"
case failed > 0:
icon = "error" // Error ⮾
title = "Failed"
case skipped > 0:
title = "Passed with skipped"
}

subtitle := fmt.Sprintf("%d Tests Run", total)
if errors > 0 {
subtitle += fmt.Sprintf(", %d Errored", errors)
}
if failed > 0 {
subtitle += fmt.Sprintf(", %d Failed", failed)
}
if skipped > 0 {
subtitle += fmt.Sprintf(", %d Skipped", skipped)
}

args := []string{
"-i", icon,
title,
subtitle,
}
log.Printf("notify-send %#v", args)
err := exec.Command("notify-send.exe", args...).Run()
if err != nil {
log.Fatalf("Failed to exec: %v", err)
}
}

func envInt(name string) int {
val := os.Getenv("TESTS_" + name)
n, err := strconv.Atoi(val)
if err != nil {
return 0
}
return n
}

0 comments on commit 57554cb

Please sign in to comment.