diff options
| author | Michael Stapelberg <stapelberg@debian.org> | 2013-03-04 21:27:43 +0100 |
|---|---|---|
| committer | Michael Stapelberg <michael@stapelberg.de> | 2013-03-04 21:27:43 +0100 |
| commit | ad47422646a18ffcb47cec916ef7393c923f2e76 (patch) | |
| tree | 7c7861fb3d9539d61c1dcfd5b8dadee974c25760 /src/pkg/sync/once_test.go | |
| parent | 2c8d5d584a79781ca41bb6f4b396893fbbac5b97 (diff) | |
| parent | 04b08da9af0c450d645ab7389d1467308cfc2db8 (diff) | |
| download | golang-ad47422646a18ffcb47cec916ef7393c923f2e76.tar.gz | |
Merge tag 'upstream/1.1_hg20130304' into debian-sid
Upstream version 1.1~hg20130304
Diffstat (limited to 'src/pkg/sync/once_test.go')
| -rw-r--r-- | src/pkg/sync/once_test.go | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/pkg/sync/once_test.go b/src/pkg/sync/once_test.go index 37075af17..183069a1a 100644 --- a/src/pkg/sync/once_test.go +++ b/src/pkg/sync/once_test.go @@ -17,8 +17,11 @@ func (o *one) Increment() { *o++ } -func run(once *Once, o *one, c chan bool) { +func run(t *testing.T, once *Once, o *one, c chan bool) { once.Do(func() { o.Increment() }) + if v := *o; v != 1 { + t.Errorf("once failed inside run: %d is not 1", v) + } c <- true } @@ -28,14 +31,34 @@ func TestOnce(t *testing.T) { c := make(chan bool) const N = 10 for i := 0; i < N; i++ { - go run(once, o, c) + go run(t, once, o, c) } for i := 0; i < N; i++ { <-c } if *o != 1 { - t.Errorf("once failed: %d is not 1", *o) + t.Errorf("once failed outside run: %d is not 1", *o) + } +} + +func TestOncePanic(t *testing.T) { + once := new(Once) + for i := 0; i < 2; i++ { + func() { + defer func() { + if recover() == nil { + t.Fatalf("Once.Do() has not panic'ed") + } + }() + once.Do(func() { + panic("failed") + }) + }() } + once.Do(func() {}) + once.Do(func() { + t.Fatalf("Once called twice") + }) } func BenchmarkOnce(b *testing.B) { |
