github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/review/git-review/util_test.go (about)

     1  // Copyright 2014 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  	"io/ioutil"
     9  	"os"
    10  	"os/exec"
    11  	"path/filepath"
    12  	"reflect"
    13  	"strings"
    14  	"testing"
    15  )
    16  
    17  type gitTest struct {
    18  	pwd    string // current directory before test
    19  	tmpdir string // temporary directory holding repos
    20  	server string // server repo root
    21  	client string // client repo root
    22  }
    23  
    24  func (gt *gitTest) done() {
    25  	os.RemoveAll(gt.tmpdir)
    26  	os.Chdir(gt.pwd)
    27  }
    28  
    29  func newGitTest(t *testing.T) *gitTest {
    30  	tmpdir, err := ioutil.TempDir("", "git-review-test")
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  
    35  	server := tmpdir + "/git-origin"
    36  
    37  	mkdir(t, server)
    38  	write(t, server+"/file", "this is master")
    39  	trun(t, server, "git", "init", ".")
    40  	trun(t, server, "git", "add", "file")
    41  	trun(t, server, "git", "commit", "-m", "on master")
    42  
    43  	for _, name := range []string{"dev.branch", "release.branch"} {
    44  		trun(t, server, "git", "checkout", "master")
    45  		trun(t, server, "git", "branch", name)
    46  		write(t, server+"/file", "this is "+name)
    47  		trun(t, server, "git", "commit", "-a", "-m", "on "+name)
    48  	}
    49  
    50  	client := tmpdir + "/git-client"
    51  	mkdir(t, client)
    52  	trun(t, client, "git", "clone", server, ".")
    53  	trun(t, client, "git", "config", "core.editor", "false")
    54  	pwd, err := os.Getwd()
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  
    59  	if err := os.Chdir(client); err != nil {
    60  		t.Fatal(err)
    61  	}
    62  
    63  	gt := &gitTest{
    64  		pwd:    pwd,
    65  		tmpdir: tmpdir,
    66  		server: server,
    67  		client: client,
    68  	}
    69  
    70  	return gt
    71  }
    72  
    73  func mkdir(t *testing.T, dir string) {
    74  	if err := os.Mkdir(dir, 0777); err != nil {
    75  		t.Fatal(err)
    76  	}
    77  }
    78  
    79  func write(t *testing.T, file, data string) {
    80  	if err := ioutil.WriteFile(file, []byte(data), 0666); err != nil {
    81  		t.Fatal(err)
    82  	}
    83  }
    84  
    85  func trun(t *testing.T, dir string, cmdline ...string) {
    86  	cmd := exec.Command(cmdline[0], cmdline[1:]...)
    87  	cmd.Dir = dir
    88  	out, err := cmd.CombinedOutput()
    89  	if err != nil {
    90  		t.Fatalf("in %s/, ran %s: %v\n%s", filepath.Base(dir), cmdline, err, out)
    91  	}
    92  }
    93  
    94  func testMain(t *testing.T, args ...string) {
    95  	t.Logf("git-review %s", strings.Join(args, " "))
    96  	runLog = []string{} // non-nil, to trigger saving of commands
    97  
    98  	defer func() {
    99  		if err := recover(); err != nil {
   100  			runLog = nil
   101  			dieTrap = nil
   102  			t.Fatalf("panic: %v", err)
   103  		}
   104  	}()
   105  
   106  	dieTrap = func() {
   107  		panic("died")
   108  	}
   109  
   110  	os.Args = append([]string{"git-review"}, args...)
   111  	main()
   112  
   113  	dieTrap = nil
   114  }
   115  
   116  func testRan(t *testing.T, cmds ...string) {
   117  	if !reflect.DeepEqual(runLog, cmds) {
   118  		t.Errorf("ran:\n%s", strings.Join(runLog, "\n"))
   119  		t.Errorf("wanted:\n%s", strings.Join(cmds, "\n"))
   120  	}
   121  }