cmd/go: convert DevNull tests to script tests

I'm hoping to eliminate testdata/src/go-cmd-test, so porting over
tests that assume its existence.

Updates #28387
Updates #30316

Change-Id: I20bae780a4eb87cc19cc1e8531b84ab4a8a3c255
Reviewed-on: https://go-review.googlesource.com/c/go/+/207608
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index 8dc655f..102ee73 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -1380,44 +1380,6 @@
 	tg.wantExecutable("testdata/bin/go-cmd-test"+exeSuffix, "go install go-cmd-test did not write to testdata/bin/go-cmd-test")
 }
 
-// Issue 12407
-func TestBuildOutputToDevNull(t *testing.T) {
-	tg := testgo(t)
-	defer tg.cleanup()
-	fi1, err1 := os.Lstat(os.DevNull)
-	tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
-	tg.run("build", "-o", os.DevNull, "go-cmd-test")
-	fi2, err2 := os.Lstat(os.DevNull)
-	if err1 == nil {
-		if err2 != nil {
-			t.Errorf("second stat of /dev/null failed: %v", err2)
-		} else if !os.SameFile(fi1, fi2) {
-			t.Errorf("/dev/null changed: now %v was %v", fi1, fi2)
-		}
-	}
-}
-
-// Issue 28549.
-func TestTestOutputToDevNull(t *testing.T) {
-	tg := testgo(t)
-	defer tg.cleanup()
-	fi1, err1 := os.Lstat(os.DevNull)
-	tg.makeTempdir()
-	tg.setenv("GOPATH", tg.path("."))
-	tg.tempFile("src/p/p.go", "package p\n")
-	tg.tempFile("src/p/p_test.go", "package p\nimport \"testing\"\nfunc TestX(t *testing.T) {}\n")
-	tg.run("test", "-o", os.DevNull, "-c", "p")
-	tg.mustNotExist("p.test")
-	fi2, err2 := os.Lstat(os.DevNull)
-	if err1 == nil {
-		if err2 != nil {
-			t.Errorf("second stat of /dev/null failed: %v", err2)
-		} else if !os.SameFile(fi1, fi2) {
-			t.Errorf("/dev/null changed: now %v was %v", fi1, fi2)
-		}
-	}
-}
-
 func TestPackageMainTestImportsArchiveNotBinary(t *testing.T) {
 	tooSlow(t)
 	tg := testgo(t)
diff --git a/src/cmd/go/testdata/script/devnull.txt b/src/cmd/go/testdata/script/devnull.txt
new file mode 100644
index 0000000..ccb866a
--- /dev/null
+++ b/src/cmd/go/testdata/script/devnull.txt
@@ -0,0 +1,26 @@
+env GO111MODULE=off
+
+# Issue 28035: go test -c -o NUL should work.
+# Issue 28549: go test -c -o /dev/null should not overwrite /dev/null when run as root.
+cd x
+cmp $devnull $WORK/empty.txt
+go test -o=$devnull -c
+! exists x.test$GOEXE
+cmp $devnull $WORK/empty.txt
+
+# Issue 12407: go build -o /dev/null should succeed.
+cd ..
+go build -o $devnull y
+cmp $devnull $WORK/empty.txt
+
+-- x/x_test.go --
+package x_test
+import (
+    "testing"
+)
+func TestNUL(t *testing.T) {
+}
+-- y/y.go --
+package y
+func main() {}
+-- $WORK/empty.txt --
diff --git a/src/cmd/go/testdata/script/test_devnull.txt b/src/cmd/go/testdata/script/test_devnull.txt
deleted file mode 100644
index 3307167..0000000
--- a/src/cmd/go/testdata/script/test_devnull.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-env GO111MODULE=off
-
-# go test -c -o NUL
-# should work (see golang.org/issue/28035).
-cd x
-go test -o=$devnull -c
-! exists x.test$GOEXE
-
--- x/x_test.go --
-package x_test
-import (
-    "testing"
-)
-func TestNUL(t *testing.T) {
-}