aboutsummaryrefslogtreecommitdiff
package progress_test

import (
	"bytes"
	"strings"
	"sync"
	"testing"
	"time"

	"lindenii.org/go/furgit/internal/progress"
	"lindenii.org/go/lgo/iowrap"
)

func TestMeterConcurrentAdd(t *testing.T) {
	t.Parallel()

	var buf bytes.Buffer

	meter := progress.New(progress.Options{
		Writer: iowrap.NopFlush(&buf),
		Title:  "test",
		Total:  1000,
	})

	var wg sync.WaitGroup

	for range 10 {
		wg.Go(func() {
			for range 100 {
				meter.Add(1, 0)
				time.Sleep(time.Millisecond)
			}
		})
	}

	wg.Wait()

	meter.Stop("done")

	if got := buf.String(); !strings.Contains(got, "100% (1000/1000)") {
		t.Fatalf("final line = %q, want it to contain %q", got, "100% (1000/1000)")
	}
}