-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/go: ensure streaming test's stdout, stderr are same as cmd/go's
Fixes golang#18153 Change-Id: Ie8a32dd6fe306f00e51cde77dd4ea353f7109940 Reviewed-on: https://go-review.googlesource.com/34010 Reviewed-by: Ian Lance Taylor <[email protected]>
- Loading branch information
Showing
4 changed files
with
96 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
// Copyright 2016 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// +build linux | ||
|
||
package main | ||
|
||
import ( | ||
"syscall" | ||
"unsafe" | ||
) | ||
|
||
const ioctlReadTermios = syscall.TCGETS | ||
|
||
// isTerminal reports whether fd is a terminal. | ||
func isTerminal(fd uintptr) bool { | ||
var termios syscall.Termios | ||
_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) | ||
return err == 0 | ||
} | ||
|
||
func init() { | ||
stdOutErrAreTerminals = func() bool { | ||
return isTerminal(1) && isTerminal(2) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
// Copyright 2016 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// +build linux | ||
|
||
// This test is run by src/cmd/dist/test.go (cmd_go_test_terminal), | ||
// and not by cmd/go's tests. This is because this test requires that | ||
// that it be called with its stdout and stderr being a terminal. | ||
// dist doesn't run `cmd/go test` against this test directory if | ||
// dist's stdout/stderr aren't terminals. | ||
// | ||
// See issue 18153. | ||
|
||
package p | ||
|
||
import ( | ||
"syscall" | ||
"testing" | ||
"unsafe" | ||
) | ||
|
||
const ioctlReadTermios = syscall.TCGETS | ||
|
||
// isTerminal reports whether fd is a terminal. | ||
func isTerminal(fd uintptr) bool { | ||
var termios syscall.Termios | ||
_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) | ||
return err == 0 | ||
} | ||
|
||
func TestIsTerminal(t *testing.T) { | ||
if !isTerminal(1) { | ||
t.Errorf("stdout is not a terminal") | ||
} | ||
if !isTerminal(2) { | ||
t.Errorf("stderr is not a terminal") | ||
} | ||
} |