71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|