.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.0 / go / buildutil / overlay_test.go
1 // Copyright 2016 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package buildutil_test
6
7 import (
8         "go/build"
9         "io/ioutil"
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 := ioutil.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 }