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 }