github.com/komosa/bug@v0.3.1/scm/HgManager_test.go (about) 1 package scm 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "strings" 8 "testing" 9 ) 10 11 type HgCommit struct { 12 commit string 13 log string 14 } 15 16 func (c HgCommit) CommitID() string { 17 return c.commit 18 } 19 func (c HgCommit) LogMsg() string { 20 return c.log 21 } 22 func (c HgCommit) Diff() (string, error) { 23 return runCmd("hg", "log", "-p", "-g", "-r", c.commit, "--template={changelog}") 24 } 25 26 type HgTester struct { 27 handler SCMHandler 28 workdir string 29 } 30 31 func (t HgTester) GetLogs() ([]Commit, error) { 32 logs, err := runCmd("hg", "log", "-r", ":", "--template", "{node} {desc}\\n") 33 if err != nil { 34 return nil, err 35 } 36 logMsgs := strings.Split(logs, "\n") 37 // the last line is empty, so don't allocate 1 for 38 // it 39 commits := make([]Commit, len(logMsgs)-1) 40 for idx, commitText := range logMsgs { 41 if commitText == "" { 42 continue 43 } 44 spaceIdx := strings.Index(commitText, " ") 45 if spaceIdx >= 0 { 46 commits[idx] = HgCommit{commitText[0:spaceIdx], commitText[spaceIdx+1:]} 47 } 48 } 49 return commits, nil 50 } 51 52 func (c HgTester) AssertStagingIndex(t *testing.T, f []FileStatus) { 53 for _, file := range f { 54 out, err := runCmd("hg", "status", file.Filename) 55 if err != nil { 56 t.Error("Could not get status of " + file.Filename) 57 } 58 59 // hg status doesn't include the working directory status 60 expected := file.IndexStatus + " " + file.Filename + "\n" 61 if out != expected { 62 t.Error("Unexpected status. Got " + out + " not " + expected) 63 } 64 65 } 66 } 67 68 func (c HgTester) StageFile(file string) error { 69 _, err := runCmd("hg", "add", file) 70 return err 71 } 72 func (c *HgTester) Setup() error { 73 if dir, err := ioutil.TempDir("", "hgbug"); err == nil { 74 c.workdir = dir 75 os.Chdir(c.workdir) 76 } else { 77 return err 78 } 79 80 _, err := runCmd("hg", "init") 81 if err != nil { 82 return err 83 } 84 c.handler = HgManager{} 85 return nil 86 } 87 88 func (c HgTester) TearDown() { 89 os.RemoveAll(c.workdir) 90 } 91 92 func (c HgTester) GetWorkDir() string { 93 return c.workdir 94 } 95 func (c HgTester) AssertCleanTree(t *testing.T) { 96 out, err := runCmd("hg", "status") 97 if err != nil { 98 t.Error("Error running hg status") 99 } 100 if out != "" { 101 fmt.Printf("\"%s\"\n", out) 102 t.Error("Unexpected Output from hg status") 103 } 104 } 105 106 func (m HgTester) GetManager() SCMHandler { 107 return m.handler 108 } 109 110 func TestHgBugRenameCommits(t *testing.T) { 111 tester := HgTester{} 112 113 expectedDiffs := []string{ 114 `diff --git a/issues/Test-bug/Description b/issues/Test-bug/Description 115 new file mode 100644 116 117 `, `diff --git a/issues/Renamed-bug/Description b/issues/Renamed-bug/Description 118 new file mode 100644 119 diff --git a/issues/Test-bug/Description b/issues/Test-bug/Description 120 deleted file mode 100644 121 122 `} 123 runtestRenameCommitsHelper(&tester, t, expectedDiffs) 124 } 125 func TestHgFilesOutsideOfBugNotCommited(t *testing.T) { 126 tester := HgTester{} 127 tester.handler = GitManager{} 128 runtestCommitDirtyTree(&tester, t) 129 }