// Copyright 2020 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package internal import ( "context" "testing" "time" ) func TestPeriodicallyDo(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() didWork := make(chan time.Time, 2) done := make(chan interface{}) go func() { PeriodicallyDo(ctx, time.Millisecond, func(ctx context.Context, t time.Time) { select { case didWork <- t: case <-ctx.Done(): } }) close(done) }() select { case <-time.After(5 * time.Second): t.Error("PeriodicallyDo() never called f, wanted at least one call") case <-didWork: // PeriodicallyDo called f successfully. } select { case <-done: t.Errorf("PeriodicallyDo() finished early, wanted it to still be looping") case <-didWork: cancel() } <-done }