diff options
Diffstat (limited to 'commands/patch/rebase_test.go')
-rw-r--r-- | commands/patch/rebase_test.go | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/commands/patch/rebase_test.go b/commands/patch/rebase_test.go new file mode 100644 index 00000000..fd3d705b --- /dev/null +++ b/commands/patch/rebase_test.go @@ -0,0 +1,114 @@ +package patch + +import ( + "fmt" + "reflect" + "strings" + "testing" + + "git.sr.ht/~rjarry/aerc/lib/pama/models" +) + +func TestRebase_reorder(t *testing.T) { + newCommits := func(order []string) []models.Commit { + var commits []models.Commit + for _, s := range order { + commits = append(commits, models.Commit{ID: s}) + } + return commits + } + tests := []struct { + name string + commits []models.Commit + now []string + by []string + want []models.Commit + }{ + { + name: "nothing to reorder", + commits: newCommits([]string{"1", "2", "3"}), + now: []string{"1", "2", "3"}, + by: []string{"1", "2", "3"}, + want: newCommits([]string{"1", "2", "3"}), + }, + { + name: "reorder", + commits: newCommits([]string{"1", "3", "2"}), + now: []string{"1", "3", "2"}, + by: []string{"1", "2", "3"}, + want: newCommits([]string{"1", "2", "3"}), + }, + { + name: "reorder inverted", + commits: newCommits([]string{"3", "2", "1"}), + now: []string{"3", "2", "1"}, + by: []string{"1", "2", "3"}, + want: newCommits([]string{"1", "2", "3"}), + }, + { + name: "changed hash: do not sort", + commits: newCommits([]string{"1", "6", "3"}), + now: []string{"1", "6", "3"}, + by: []string{"1", "2", "3"}, + want: newCommits([]string{"1", "6", "3"}), + }, + } + + for _, test := range tests { + reorder(test.commits, test.now, test.by) + if !reflect.DeepEqual(test.commits, test.want) { + t.Errorf("test '%s' failed to reorder: got %v but "+ + "want %v", test.name, test.commits, test.want) + } + } +} + +func newCommit(id, subj, tag string) models.Commit { + return models.Commit{ + ID: id, + Subject: subj, + Tag: tag, + } +} + +func TestRebase_parse(t *testing.T) { + input := ` + # some header info + hello_v1 123 same info + hello_v1 456 same info + untracked 789 same info + hello_v2 012 diff info + untracked 345 diff info # not very useful comment + # some footer info + ` + commits := []models.Commit{ + newCommit("123123", "same info", "hello_v1"), + newCommit("456456", "same info", "hello_v1"), + newCommit("789789", "same info", models.Untracked), + newCommit("012012", "diff info", "hello_v2"), + newCommit("345345", "diff info", models.Untracked), + } + + var order []string + for _, c := range commits { + order = append(order, fmt.Sprintf("%3.3s", c.ID)) + } + + table := make(map[string]models.Commit) + for i, shortId := range order { + table[shortId] = commits[i] + } + + rebase := &rebase{ + commits: commits, + table: table, + order: order, + } + + results := rebase.parse(strings.NewReader(input)) + + if len(results) != 3 { + t.Errorf("failed to return correct number of commits: "+ + "got %d but wanted 3", len(results)) + } +} |