Add assertion package.
This commit is contained in:
		
							parent
							
								
									1650edee19
								
							
						
					
					
						commit
						c90d9ccc39
					
				|  | @ -0,0 +1,103 @@ | |||
| // Package assert provides C-like assertions for Go. For more
 | ||||
| // information, see assert(3) (e.g. `man 3 assert`).
 | ||||
| package assert | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"runtime" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| // NoDebug, if set to true, will cause all asserts to be ignored.
 | ||||
| var NoDebug bool | ||||
| 
 | ||||
| func die(what string) { | ||||
| 	_, file, line, ok := runtime.Caller(2) | ||||
| 	if !ok { | ||||
| 		panic(what) | ||||
| 	} else { | ||||
| 		fmt.Fprintf(os.Stderr, "%s\n", what) | ||||
| 		fmt.Fprintf(os.Stderr, "\t%s line %d\n", file, line) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Bool asserts that cond is false.
 | ||||
| func Bool(cond bool) { | ||||
| 	if NoDebug { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if !cond { | ||||
| 		die("assert.Bool failed") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Error asserts that err is nil.
 | ||||
| func Error(err error) { | ||||
| 	if NoDebug { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if nil != err { | ||||
| 		die(err.Error()) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Error2 asserts that the actual error is the expected error.
 | ||||
| func Error2(expected, actual error) { | ||||
| 	if NoDebug || (expected == actual) { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if expected == nil { | ||||
| 		die(fmt.Sprintf("assert.Error2: %s", actual.Error())) | ||||
| 	} | ||||
| 
 | ||||
| 	var should string | ||||
| 	if actual == nil { | ||||
| 		should = "no error was returned" | ||||
| 	} else { | ||||
| 		should = fmt.Sprintf("have '%s'", actual) | ||||
| 	} | ||||
| 
 | ||||
| 	die(fmt.Sprintf("assert.Error2: expected '%s', but %s", expected, should)) | ||||
| } | ||||
| 
 | ||||
| // BoolT checks a boolean condition, calling Fatal on t if it is
 | ||||
| // false.
 | ||||
| func BoolT(t *testing.T, cond bool) { | ||||
| 	if !cond { | ||||
| 		t.Fatal("assert.Bool failed") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // ErrorT checks whether the error is nil, calling Fatal on t if it
 | ||||
| // isn't.
 | ||||
| func ErrorT(t *testing.T, err error) { | ||||
| 	if nil != err { | ||||
| 		t.Fatalf("%s", err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Error2T compares a pair of errors, calling Fatal on it if they
 | ||||
| // don't match.
 | ||||
| func Error2T(t *testing.T, expected, actual error) { | ||||
| 	if NoDebug || (expected == actual) { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if expected == nil { | ||||
| 		die(fmt.Sprintf("assert.Error2: %s", actual.Error())) | ||||
| 	} | ||||
| 
 | ||||
| 	var should string | ||||
| 	if actual == nil { | ||||
| 		should = "no error was returned" | ||||
| 	} else { | ||||
| 		should = fmt.Sprintf("have '%s'", actual) | ||||
| 	} | ||||
| 
 | ||||
| 	die(fmt.Sprintf("assert.Error2: expected '%s', but %s", expected, should)) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue