github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/tools/cmd/bundle/main_test.go (about)

     1  // Copyright 2015 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 main
     6  
     7  import (
     8  	"bytes"
     9  	"io/ioutil"
    10  	"os/exec"
    11  	"runtime"
    12  	"testing"
    13  
    14  	"golang.org/x/tools/go/buildutil"
    15  )
    16  
    17  func TestBundle(t *testing.T) {
    18  	load := func(name string) string {
    19  		data, err := ioutil.ReadFile(name)
    20  		if err != nil {
    21  			t.Fatal(err)
    22  		}
    23  		return string(data)
    24  	}
    25  
    26  	ctxt = buildutil.FakeContext(map[string]map[string]string{
    27  		"initial": {
    28  			"a.go": load("testdata/src/initial/a.go"),
    29  			"b.go": load("testdata/src/initial/b.go"),
    30  		},
    31  		"fmt": {
    32  			"print.go": `package fmt; func Println(...interface{})`,
    33  		},
    34  	})
    35  
    36  	var out bytes.Buffer
    37  	if err := bundle(&out, "initial", "dest", "prefix"); err != nil {
    38  		t.Fatal(err)
    39  	}
    40  	if got, want := out.String(), load("testdata/out.golden"); got != want {
    41  		t.Errorf("-- got --\n%s\n-- want --\n%s\n-- diff --", got, want)
    42  
    43  		if err := ioutil.WriteFile("testdata/out.got", out.Bytes(), 0644); err != nil {
    44  			t.Fatal(err)
    45  		}
    46  		t.Log(diff("testdata/out.got", "testdata/out.golden"))
    47  	}
    48  }
    49  
    50  func diff(a, b string) string {
    51  	var cmd *exec.Cmd
    52  	switch runtime.GOOS {
    53  	case "plan9":
    54  		cmd = exec.Command("/bin/diff", "-c", a, b)
    55  	default:
    56  		cmd = exec.Command("/usr/bin/diff", "-u", a, b)
    57  	}
    58  	var out bytes.Buffer
    59  	cmd.Stdout = &out
    60  	cmd.Stderr = &out
    61  	cmd.Run() // nonzero exit is expected
    62  	if out.Len() == 0 {
    63  		return "(failed to compute diff)"
    64  	}
    65  	return out.String()
    66  }