57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package engine
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
func TestBufferedReporterRecordsEventsInOrder(t *testing.T) {
|
|
r := NewBufferedReporter()
|
|
r.Progress("m", 1, 3, "step 1")
|
|
r.Log("m", "hello")
|
|
r.Progress("m", 2, 3, "step 2")
|
|
|
|
ev := r.Events()
|
|
if len(ev) != 3 {
|
|
t.Fatalf("want 3 events, got %d", len(ev))
|
|
}
|
|
if ev[0].Kind != EventProgress || ev[0].Current != 1 {
|
|
t.Errorf("event[0] = %+v", ev[0])
|
|
}
|
|
if ev[1].Kind != EventLog || ev[1].Message != "hello" {
|
|
t.Errorf("event[1] = %+v", ev[1])
|
|
}
|
|
}
|
|
|
|
func TestBufferedReporterIsConcurrencySafe(t *testing.T) {
|
|
r := NewBufferedReporter()
|
|
var wg sync.WaitGroup
|
|
for i := 0; i < 50; i++ {
|
|
wg.Add(1)
|
|
go func(i int) {
|
|
defer wg.Done()
|
|
r.Progress("m", i, 50, "x")
|
|
}(i)
|
|
}
|
|
wg.Wait()
|
|
if got := len(r.Events()); got != 50 {
|
|
t.Fatalf("want 50 events, got %d", got)
|
|
}
|
|
}
|
|
|
|
func TestPlainReporterFormat(t *testing.T) {
|
|
var buf bytes.Buffer
|
|
r := NewPlainReporter(&buf)
|
|
r.Progress("packages", 2, 10, "installing tio")
|
|
r.Log("packages", "pacman: done")
|
|
|
|
out := buf.String()
|
|
for _, want := range []string{"[packages] (2/10) installing tio", "[packages] pacman: done"} {
|
|
if !strings.Contains(out, want) {
|
|
t.Errorf("output missing %q; got:\n%s", want, out)
|
|
}
|
|
}
|
|
}
|