package progress_test import ( "testing" "time" "github.com/restic/restic/internal/test" "github.com/restic/restic/internal/ui/progress" ) func TestCounter(t *testing.T) { const N = 100 var ( finalSeen = false increasing = true last uint64 ncalls int ) report := func(value uint64, d time.Duration, final bool) { finalSeen = true if value < last { increasing = false } last = value ncalls++ } c := progress.New(10*time.Millisecond, report) done := make(chan struct{}) go func() { defer close(done) for i := 0; i < N; i++ { time.Sleep(time.Millisecond) c.Add(1) } }() <-done c.Done() test.Assert(t, finalSeen, "final call did not happen") test.Assert(t, increasing, "values not increasing") test.Equals(t, uint64(N), last) t.Log("number of calls:", ncalls) } func TestCounterNil(t *testing.T) { // Shouldn't panic. var c *progress.Counter = nil c.Add(1) c.Done() } func TestCounterNoTick(t *testing.T) { finalSeen := false otherSeen := false report := func(value uint64, d time.Duration, final bool) { if final { finalSeen = true } else { otherSeen = true } } c := progress.New(0, report) time.Sleep(time.Millisecond) c.Done() test.Assert(t, finalSeen, "final call did not happen") test.Assert(t, !otherSeen, "unexpected status update") }