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  }