Path: blob/main/vendor/go.uber.org/zap/internal/exit/exit.go
2880 views
// Copyright (c) 2016 Uber Technologies, Inc.1//2// Permission is hereby granted, free of charge, to any person obtaining a copy3// of this software and associated documentation files (the "Software"), to deal4// in the Software without restriction, including without limitation the rights5// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell6// copies of the Software, and to permit persons to whom the Software is7// furnished to do so, subject to the following conditions:8//9// The above copyright notice and this permission notice shall be included in10// all copies or substantial portions of the Software.11//12// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR13// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,14// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE15// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER16// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,17// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN18// THE SOFTWARE.1920// Package exit provides stubs so that unit tests can exercise code that calls21// os.Exit(1).22package exit2324import "os"2526var _exit = os.Exit2728// With terminates the process by calling os.Exit(code). If the package is29// stubbed, it instead records a call in the testing spy.30func With(code int) {31_exit(code)32}3334// A StubbedExit is a testing fake for os.Exit.35type StubbedExit struct {36Exited bool37Code int38prev func(code int)39}4041// Stub substitutes a fake for the call to os.Exit(1).42func Stub() *StubbedExit {43s := &StubbedExit{prev: _exit}44_exit = s.exit45return s46}4748// WithStub runs the supplied function with Exit stubbed. It returns the stub49// used, so that users can test whether the process would have crashed.50func WithStub(f func()) *StubbedExit {51s := Stub()52defer s.Unstub()53f()54return s55}5657// Unstub restores the previous exit function.58func (se *StubbedExit) Unstub() {59_exit = se.prev60}6162func (se *StubbedExit) exit(code int) {63se.Exited = true64se.Code = code65}666768