]> Cypherpunks.ru repositories - gostls13.git/commitdiff
misc/cgo/{life,stdio}: remove reliance on test/run.go
authorDmitri Shuralyov <dmitshur@golang.org>
Mon, 6 Feb 2023 18:44:32 +0000 (13:44 -0500)
committerGopher Robot <gobot@golang.org>
Tue, 28 Feb 2023 01:11:11 +0000 (01:11 +0000)
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>

misc/cgo/life/life_test.go
misc/cgo/life/testdata/life.go
misc/cgo/life/testdata/main.go
misc/cgo/stdio/stdio_test.go
misc/cgo/stdio/testdata/chain.go
misc/cgo/stdio/testdata/fib.go
misc/cgo/stdio/testdata/hello.go
misc/cgo/stdio/testdata/run.out [deleted file]
misc/cgo/stdio/testdata/stdio/file.go
misc/cgo/stdio/testdata/stdio/stdio.go

index 0becb262b43e9ab8cafcccd5148d798ea451ac64..98d25a197dcc593ec129086715c145d671afe7bb 100644 (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()
+
+       cmd := exec.Command("go", "run", "main.go")
+       got, err := cmd.CombinedOutput()
        if err != nil {
-               t.Fatal(err)
+               t.Fatalf("%v: %s\n%s", cmd, err, got)
        }
-       GOROOT := string(bytes.TrimSpace(out))
-
-       cmd := exec.Command("go", "run", filepath.Join(GOROOT, "test", "run.go"), "-", ".")
-       out, err = cmd.CombinedOutput()
+       want, err := os.ReadFile("main.out")
        if err != nil {
-               t.Fatalf("%s: %s\n%s", strings.Join(cmd.Args, " "), err, out)
+               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)
 }
index 2e0af81d05f6323fa57cffe657166b148d6138bd..70701cc12131afc968b0bc1a2aa0aad4652a7aa9 100644 (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.
index cc2ca7c74237458cc0eae4f4bb3022aebef8caa9..e9d19be48741919d5f9a4ca3924db78e04dda970 100644 (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.
 
index 675418f98d026e22a61d3a4088c4100638127f84..cd03443ec2cabf6b8ddacadcb79c20c43408164e 100644 (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)
 }
index 6c3f406a0da3f5439bc05741857f9978da0315be..c7163f5ae0bb356cb3e45cfcb53d7aba9459a418 100644 (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.
 
index 49cb0ea06f23c8f59973dce88fdcc381b80e66fe..96173683353151458b698f6a0409aacfa8cd1177 100644 (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
index 046bfee7a7915a907f2d8df143889d45bbb1f80a..c0b52bf6c5a19758f86418a6fc3490235d80f480 100644 (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
 
diff --git a/misc/cgo/stdio/testdata/run.out b/misc/cgo/stdio/testdata/run.out
deleted file mode 100644 (file)
index c0e4965..0000000
+++ /dev/null
@@ -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
index a024f2c361c8be4b87ab99d89b8b33b1e490e516..2aa282eed3eeca9dab1fadd252f534785cdfe177 100644 (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.
index d216e44fe7ce3a817c2e1801f8c4bc37a3702eb3..08286d4898e01819f6c08aa5e257108ccd363b80 100644 (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.