...
1
2
3
4
5 package main
6
7 import (
8 "bytes"
9 "os"
10 "os/exec"
11 "runtime"
12 "testing"
13
14 "golang.org/x/tools/go/packages/packagestest"
15 )
16
17 func TestBundle(t *testing.T) { packagestest.TestAll(t, testBundle) }
18 func testBundle(t *testing.T, x packagestest.Exporter) {
19 load := func(name string) string {
20 data, err := os.ReadFile(name)
21 if err != nil {
22 t.Fatal(err)
23 }
24 return string(data)
25 }
26
27 e := packagestest.Export(t, x, []packagestest.Module{
28 {
29 Name: "initial",
30 Files: map[string]interface{}{
31 "a.go": load("testdata/src/initial/a.go"),
32 "b.go": load("testdata/src/initial/b.go"),
33 "c.go": load("testdata/src/initial/c.go"),
34 },
35 },
36 {
37 Name: "domain.name/importdecl",
38 Files: map[string]interface{}{
39 "p.go": load("testdata/src/domain.name/importdecl/p.go"),
40 },
41 },
42 })
43 defer e.Cleanup()
44 testingOnlyPackagesConfig = e.Config
45
46 os.Args = os.Args[:1]
47 out, err := bundle("initial", "github.com/dest", "dest", "prefix", "tag")
48 if err != nil {
49 t.Fatal(err)
50 }
51
52 if got, want := string(out), load("testdata/out.golden"); got != want {
53 t.Errorf("-- got --\n%s\n-- want --\n%s\n-- diff --", got, want)
54
55 if err := os.WriteFile("testdata/out.got", out, 0644); err != nil {
56 t.Fatal(err)
57 }
58 t.Log(diff("testdata/out.golden", "testdata/out.got"))
59 }
60 }
61
62 func diff(a, b string) string {
63 var cmd *exec.Cmd
64 switch runtime.GOOS {
65 case "plan9":
66 cmd = exec.Command("/bin/diff", "-c", a, b)
67 default:
68 cmd = exec.Command("/usr/bin/diff", "-u", a, b)
69 }
70 var out bytes.Buffer
71 cmd.Stdout = &out
72 cmd.Stderr = &out
73 cmd.Run()
74 if out.Len() == 0 {
75 return "(failed to compute diff)"
76 }
77 return out.String()
78 }
79
View as plain text