github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/buildutil/overlay_test.go (about) 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 }