github.com/v2fly/tools@v0.100.0/go/internal/gccgoimporter/testenv_test.go (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // This file contains testing utilities copied from $GOROOT/src/internal/testenv/testenv.go. 6 7 package gccgoimporter 8 9 import ( 10 "runtime" 11 "strings" 12 "testing" 13 ) 14 15 // HasGoBuild reports whether the current system can build programs with ``go build'' 16 // and then run them with os.StartProcess or exec.Command. 17 func HasGoBuild() bool { 18 switch runtime.GOOS { 19 case "android", "nacl": 20 return false 21 case "darwin": 22 if strings.HasPrefix(runtime.GOARCH, "arm") { 23 return false 24 } 25 } 26 return true 27 } 28 29 // HasExec reports whether the current system can start new processes 30 // using os.StartProcess or (more commonly) exec.Command. 31 func HasExec() bool { 32 switch runtime.GOOS { 33 case "nacl", "js": 34 return false 35 case "darwin": 36 if strings.HasPrefix(runtime.GOARCH, "arm") { 37 return false 38 } 39 } 40 return true 41 } 42 43 // MustHaveGoBuild checks that the current system can build programs with ``go build'' 44 // and then run them with os.StartProcess or exec.Command. 45 // If not, MustHaveGoBuild calls t.Skip with an explanation. 46 func MustHaveGoBuild(t *testing.T) { 47 if !HasGoBuild() { 48 t.Skipf("skipping test: 'go build' not available on %s/%s", runtime.GOOS, runtime.GOARCH) 49 } 50 } 51 52 // MustHaveExec checks that the current system can start new processes 53 // using os.StartProcess or (more commonly) exec.Command. 54 // If not, MustHaveExec calls t.Skip with an explanation. 55 func MustHaveExec(t *testing.T) { 56 if !HasExec() { 57 t.Skipf("skipping test: cannot exec subprocess on %s/%s", runtime.GOOS, runtime.GOARCH) 58 } 59 } 60 61 var testenv = struct { 62 HasGoBuild func() bool 63 MustHaveGoBuild func(*testing.T) 64 MustHaveExec func(*testing.T) 65 }{ 66 HasGoBuild: HasGoBuild, 67 MustHaveGoBuild: MustHaveGoBuild, 68 MustHaveExec: MustHaveExec, 69 }