blob: 92e2258a37eab527375c1727322d9fac90a39a3b [file] [log] [blame]
package buildutil_test
import (
"go/build"
"io/ioutil"
"reflect"
"strings"
"testing"
"golang.org/x/tools/go/buildutil"
)
func TestParseOverlayArchive(t *testing.T) {
var tt = []struct {
in string
out map[string][]byte
hasErr bool
}{
{
"a.go\n5\n12345",
map[string][]byte{"a.go": []byte("12345")},
false,
},
{
"a.go\n5\n1234",
nil,
true,
},
{
"a.go\n5\n12345b.go\n4\n1234",
map[string][]byte{"a.go": []byte("12345"), "b.go": []byte("1234")},
false,
},
}
for _, test := range tt {
got, err := buildutil.ParseOverlayArchive(strings.NewReader(test.in))
if err == nil && test.hasErr {
t.Errorf("expected error for %q", test.in)
}
if err != nil && !test.hasErr {
t.Errorf("unexpected error %v for %q", err, test.in)
}
if !reflect.DeepEqual(got, test.out) {
t.Errorf("got %#v, want %#v", got, test.out)
}
}
}
func TestOverlay(t *testing.T) {
ctx := &build.Default
ov := map[string][]byte{
"/somewhere/a.go": []byte("file contents"),
}
names := []string{"/somewhere/a.go", "/somewhere//a.go"}
ctx = buildutil.OverlayContext(ctx, ov)
for _, name := range names {
f, err := buildutil.OpenFile(ctx, name)
if err != nil {
t.Errorf("unexpected error %v", err)
}
b, err := ioutil.ReadAll(f)
if err != nil {
t.Errorf("unexpected error %v", err)
}
if got, expected := string(b), string(ov["/somewhere/a.go"]); got != expected {
t.Errorf("read %q, expected %q", got, expected)
}
}
}