summaryrefslogtreecommitdiff
path: root/src/pkg/exp/exception/exception_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/exp/exception/exception_test.go')
-rw-r--r--src/pkg/exp/exception/exception_test.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/pkg/exp/exception/exception_test.go b/src/pkg/exp/exception/exception_test.go
new file mode 100644
index 000000000..91f742ea0
--- /dev/null
+++ b/src/pkg/exp/exception/exception_test.go
@@ -0,0 +1,61 @@
+// Copyright 2009 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 exception
+
+import "testing"
+
+func TestNoException(t *testing.T) {
+ e := Try(func(throw Handler) {});
+ if e != nil {
+ t.Fatalf("no exception expected, found: %v", e)
+ }
+}
+
+
+func TestNilException(t *testing.T) {
+ e := Try(func(throw Handler) { throw(nil) });
+ if e == nil {
+ t.Fatalf("exception expected", e)
+ }
+ if e.Value != nil {
+ t.Fatalf("nil exception expected, found: %v", e)
+ }
+}
+
+
+func TestTry(t *testing.T) {
+ s := 0;
+ for i := 1; i <= 10; i++ {
+ e := Try(func(throw Handler) {
+ if i%3 == 0 {
+ throw(i);
+ panic("throw returned");
+ }
+ });
+ if e != nil {
+ s += e.Value.(int)
+ }
+ }
+ result := 3 + 6 + 9;
+ if s != result {
+ t.Fatalf("expected: %d, found: %d", result, s)
+ }
+}
+
+
+func TestCatch(t *testing.T) {
+ s := 0;
+ for i := 1; i <= 10; i++ {
+ Try(func(throw Handler) {
+ if i%3 == 0 {
+ throw(i)
+ }
+ }).Catch(func(x interface{}) { s += x.(int) })
+ }
+ result := 3 + 6 + 9;
+ if s != result {
+ t.Fatalf("expected: %d, found: %d", result, s)
+ }
+}