misc/cgo/{life,stdio}: remove reliance on test/run.go

The misc/cgo/life and misc/cgo/stdio tests started out as fairly simple
test cases when they were added, but the machinery to execute them has
grown in complexity over the years.

They currently reuse the test/run.go runner and its "run" action without
needing much of the additional flexibility that said runner implements.
Given that runner isn't well documented, it makes it harder to see that
ultimately these tests just do 'go run' on a few test programs and check
that the output matches a golden file.

Maybe these test cases should move out of misc to be near similar tests,
or the machinery to execute them can made available in a package that is
easier and safer to reuse. I'd rather not block the refactor of the test
directory runner on that, so for now rewrite these to be self-contained.

Also delete misc/cgo/stdio/testdata/run.out which has no effect on the
test. It was seemingly accidentally kept behind during the refactor in
CL 6220049.

For #56844.

Change-Id: I5e2f542824925092cdddb03b44b6295a4136ccb4
Reviewed-on: https://go-review.googlesource.com/c/go/+/465755
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Austin Clements <austin@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
This commit is contained in:
Dmitri Shuralyov 2023-02-06 13:44:32 -05:00 committed by Gopher Robot
parent fa9efd9171
commit 01f5a17aa3
10 changed files with 38 additions and 188 deletions

View File

@ -10,7 +10,6 @@ import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
)
@ -44,20 +43,22 @@ func testMain(m *testing.M) int {
return m.Run()
}
// TestTestRun runs a test case for cgo //export.
func TestTestRun(t *testing.T) {
if os.Getenv("GOOS") == "android" {
t.Skip("the go tool runs with CGO_ENABLED=0 on the android device")
}
out, err := exec.Command("go", "env", "GOROOT").Output()
if err != nil {
t.Fatal(err)
}
GOROOT := string(bytes.TrimSpace(out))
cmd := exec.Command("go", "run", filepath.Join(GOROOT, "test", "run.go"), "-", ".")
out, err = cmd.CombinedOutput()
cmd := exec.Command("go", "run", "main.go")
got, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("%s: %s\n%s", strings.Join(cmd.Args, " "), err, out)
t.Fatalf("%v: %s\n%s", cmd, err, got)
}
want, err := os.ReadFile("main.out")
if err != nil {
t.Fatal("reading golden output:", err)
}
if !bytes.Equal(got, want) {
t.Errorf("'%v' output does not match expected in main.out. Instead saw:\n%s", cmd, got)
}
t.Logf("%s:\n%s", strings.Join(cmd.Args, " "), out)
}

View File

@ -1,5 +1,3 @@
// skip
// Copyright 2010 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.

View File

@ -1,10 +1,8 @@
// run -tags=use_go_run
// Copyright 2010 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 test_run
//go:build test_run
// Run the game of life in C using Go for parallelization.

View File

@ -44,20 +44,33 @@ func testMain(m *testing.M) int {
return m.Run()
}
// TestTestRun runs a cgo test that doesn't depend on non-standard libraries.
func TestTestRun(t *testing.T) {
if os.Getenv("GOOS") == "android" {
t.Skip("subpackage stdio is not available on android")
}
out, err := exec.Command("go", "env", "GOROOT").Output()
if err != nil {
t.Fatal(err)
}
GOROOT := string(bytes.TrimSpace(out))
cmd := exec.Command("go", "run", filepath.Join(GOROOT, "test", "run.go"), "-", ".")
out, err = cmd.CombinedOutput()
if err != nil {
t.Fatalf("%s: %s\n%s", strings.Join(cmd.Args, " "), err, out)
for _, file := range [...]string{
"chain.go",
"fib.go",
"hello.go",
} {
file := file
wantFile := strings.Replace(file, ".go", ".out", 1)
t.Run(file, func(t *testing.T) {
cmd := exec.Command("go", "run", file)
got, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("%v: %s\n%s", cmd, err, got)
}
got = bytes.ReplaceAll(got, []byte("\r\n"), []byte("\n"))
want, err := os.ReadFile(wantFile)
if err != nil {
t.Fatal("reading golden output:", err)
}
if !bytes.Equal(got, want) {
t.Errorf("'%v' output does not match expected in %s. Instead saw:\n%s", cmd, wantFile, got)
}
})
}
t.Logf("%s:\n%s", strings.Join(cmd.Args, " "), out)
}

View File

@ -1,10 +1,8 @@
// run -tags=use_go_run
// Copyright 2009 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 test_run
//go:build test_run
// Pass numbers along a chain of threads.

View File

@ -1,10 +1,8 @@
// run -tags=use_go_run
// Copyright 2009 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 test_run
//go:build test_run
// Compute Fibonacci numbers with two goroutines
// that pass integers back and forth. No actual

View File

@ -1,10 +1,8 @@
// run -tags=use_go_run
// Copyright 2009 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 test_run
//go:build test_run
package main

View File

@ -1,150 +0,0 @@
* hello
hello, world
* fib
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
139583862445
225851433717
365435296162
591286729879
956722026041
1548008755920
2504730781961
4052739537881
6557470319842
10610209857723
17167680177565
27777890035288
44945570212853
72723460248141
117669030460994
190392490709135
308061521170129
498454011879264
806515533049393
1304969544928657
2111485077978050
3416454622906707
5527939700884757
8944394323791464
14472334024676221
23416728348467685
37889062373143906
61305790721611591
99194853094755497
160500643816367088
259695496911122585
420196140727489673
679891637638612258
1100087778366101931
1779979416004714189
2880067194370816120
* chain
0
1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9
10

View File

@ -1,5 +1,3 @@
// skip
// Copyright 2009 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.

View File

@ -1,5 +1,3 @@
// skip
// Copyright 2009 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.