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  }