package main

import "strings"
import . "exception_order"

func main() {
	a := NewA()

	func() {
		defer func() {
			e := recover()
			if strings.Index(e.(string), "E1") == -1 {
				panic(e.(string))
			}
		}()
		a.Foo()
	}()

	func() {
		defer func() {
			e := recover()
			if strings.Index(e.(string), "E2") == -1 {
				panic(e.(string))
			}
		}()
		a.Bar()
	}()

	func() {
		defer func() {
			e := recover()
			if e.(string) != "postcatch unknown" {
				panic("bad exception order")
			}
		}()
		a.Foobar()
	}()

	func() {
		defer func() {
			e := recover()
			if strings.Index(e.(string), "E1") == -1 {
				panic(e.(string))
			}
		}()
		a.Barfoo(1)
	}()

	func() {
		defer func() {
			e := recover()
			if strings.Index(e.(string), "E2") == -1 {
				panic(e.(string))
			}
		}()
		a.Barfoo(2)
	}()
}
