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 }