...
1
2
3
4
5 package buildutil_test
6
7 import (
8 "go/build"
9 "io"
10 "reflect"
11 "strings"
12 "testing"
13
14 "golang.org/x/tools/go/buildutil"
15 )
16
17 func TestParseOverlayArchive(t *testing.T) {
18 var tt = []struct {
19 in string
20 out map[string][]byte
21 hasErr bool
22 }{
23 {
24 "a.go\n5\n12345",
25 map[string][]byte{"a.go": []byte("12345")},
26 false,
27 },
28 {
29 "a.go\n5\n1234",
30 nil,
31 true,
32 },
33 {
34 "a.go\n5\n12345b.go\n4\n1234",
35 map[string][]byte{"a.go": []byte("12345"), "b.go": []byte("1234")},
36 false,
37 },
38 }
39
40 for _, test := range tt {
41 got, err := buildutil.ParseOverlayArchive(strings.NewReader(test.in))
42 if err == nil && test.hasErr {
43 t.Errorf("expected error for %q", test.in)
44 }
45 if err != nil && !test.hasErr {
46 t.Errorf("unexpected error %v for %q", err, test.in)
47 }
48 if !reflect.DeepEqual(got, test.out) {
49 t.Errorf("got %#v, want %#v", got, test.out)
50 }
51 }
52 }
53
54 func TestOverlay(t *testing.T) {
55 ctx := &build.Default
56 ov := map[string][]byte{
57 "/somewhere/a.go": []byte("file contents"),
58 }
59 names := []string{"/somewhere/a.go", "/somewhere//a.go"}
60 ctx = buildutil.OverlayContext(ctx, ov)
61 for _, name := range names {
62 f, err := buildutil.OpenFile(ctx, name)
63 if err != nil {
64 t.Errorf("unexpected error %v", err)
65 }
66 b, err := io.ReadAll(f)
67 if err != nil {
68 t.Errorf("unexpected error %v", err)
69 }
70 if got, expected := string(b), string(ov["/somewhere/a.go"]); got != expected {
71 t.Errorf("read %q, expected %q", got, expected)
72 }
73 }
74 }
75
View as plain text