github.com/kopoli/go-terminal-size@v0.0.0-20170219200355-5c97524c8b54/size_unix_test.go (about)

     1  // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
     2  
     3  package tsize
     4  
     5  import (
     6  	"syscall"
     7  	"unsafe"
     8  
     9  	"golang.org/x/sys/unix"
    10  )
    11  
    12  func genFakeSyscall(s Size) func(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
    13  
    14  	return func(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
    15  		ws := (*winsize)(unsafe.Pointer(a3))
    16  		(*ws).cols = uint16(s.Width)
    17  		(*ws).rows = uint16(s.Height)
    18  
    19  		return 0, 0, 0
    20  	}
    21  }
    22  
    23  var origIsTerminal func(uintptr) bool
    24  
    25  func init() {
    26  	origIsTerminal = isTerminal
    27  }
    28  
    29  func fakeIsTerminal(uintptr) bool {
    30  	return true
    31  }
    32  
    33  func triggerFakeResize() {
    34  	unix.Kill(unix.Getpid(), unix.SIGWINCH)
    35  }
    36  
    37  func fakeSize(s Size) {
    38  	unixSyscall = genFakeSyscall(s)
    39  	isTerminal = fakeIsTerminal
    40  }
    41  
    42  func unFakeSize() {
    43  	unixSyscall = unix.Syscall
    44  	isTerminal = origIsTerminal
    45  }