All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 35s
				
			Test / Sandbox (push) Successful in 2m21s
				
			Test / Hpkg (push) Successful in 4m21s
				
			Test / Sandbox (race detector) (push) Successful in 4m44s
				
			Test / Hakurei (race detector) (push) Successful in 5m24s
				
			Test / Hakurei (push) Successful in 2m26s
				
			Test / Flake checks (push) Successful in 1m36s
				
			This gets inlined and does not cause problems usually but turns out -coverpkg uninlines it and breaks the recovery. Signed-off-by: Ophestra <cat@gensokyo.uk>
		
			
				
	
	
		
			45 lines
		
	
	
		
			706 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			706 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package stub
 | |
| 
 | |
| import "testing"
 | |
| 
 | |
| // PanicExit is a magic panic value treated as a simulated exit.
 | |
| const PanicExit = 0xdeadbeef
 | |
| 
 | |
| const (
 | |
| 	panicFailNow = 0xcafe0000 + iota
 | |
| 	panicFatal
 | |
| 	panicFatalf
 | |
| )
 | |
| 
 | |
| // HandleExit must be deferred before calling with the stub.
 | |
| func HandleExit(t testing.TB) {
 | |
| 	switch r := recover(); r {
 | |
| 	case PanicExit:
 | |
| 		break
 | |
| 
 | |
| 	case panicFailNow:
 | |
| 		t.FailNow()
 | |
| 
 | |
| 	case panicFatal, panicFatalf, nil:
 | |
| 		break
 | |
| 
 | |
| 	default:
 | |
| 		panic(r)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // handleExitNew handles exits from goroutines created by [Stub.New].
 | |
| func handleExitNew(t testing.TB) {
 | |
| 	switch r := recover(); r {
 | |
| 	case PanicExit, panicFatal, panicFatalf, nil:
 | |
| 		break
 | |
| 
 | |
| 	case panicFailNow:
 | |
| 		t.Fail()
 | |
| 		break
 | |
| 
 | |
| 	default:
 | |
| 		panic(r)
 | |
| 	}
 | |
| }
 |