| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | package assertionsimport "fmt"// ShouldPanic receives a void, niladic function and expects to recover a panic.func ShouldPanic(actual interface{}, expected ...interface{}) (message string) {	if fail := need(0, expected); fail != success {		return fail	}	action, _ := actual.(func())	if action == nil {		message = shouldUseVoidNiladicFunction		return	}	defer func() {		recovered := recover()		if recovered == nil {			message = shouldHavePanicked		} else {			message = success		}	}()	action()	return}// ShouldNotPanic receives a void, niladic function and expects to execute the function without any panic.func ShouldNotPanic(actual interface{}, expected ...interface{}) (message string) {	if fail := need(0, expected); fail != success {		return fail	}	action, _ := actual.(func())	if action == nil {		message = shouldUseVoidNiladicFunction		return	}	defer func() {		recovered := recover()		if recovered != nil {			message = fmt.Sprintf(shouldNotHavePanicked, recovered)		} else {			message = success		}	}()	action()	return}// ShouldPanicWith receives a void, niladic function and expects to recover a panic with the second argument as the content.func ShouldPanicWith(actual interface{}, expected ...interface{}) (message string) {	if fail := need(1, expected); fail != success {		return fail	}	action, _ := actual.(func())	if action == nil {		message = shouldUseVoidNiladicFunction		return	}	defer func() {		recovered := recover()		if recovered == nil {			message = shouldHavePanicked		} else {			if equal := ShouldEqual(recovered, expected[0]); equal != success {				message = serializer.serialize(expected[0], recovered, fmt.Sprintf(shouldHavePanickedWith, expected[0], recovered))			} else {				message = success			}		}	}()	action()	return}// ShouldNotPanicWith receives a void, niladic function and expects to recover a panic whose content differs from the second argument.func ShouldNotPanicWith(actual interface{}, expected ...interface{}) (message string) {	if fail := need(1, expected); fail != success {		return fail	}	action, _ := actual.(func())	if action == nil {		message = shouldUseVoidNiladicFunction		return	}	defer func() {		recovered := recover()		if recovered == nil {			message = success		} else {			if equal := ShouldEqual(recovered, expected[0]); equal == success {				message = fmt.Sprintf(shouldNotHavePanickedWith, expected[0])			} else {				message = success			}		}	}()	action()	return}
 |