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)) } }