| package gitinfo |
| |
| import ( |
| "context" |
| "strings" |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| |
| cipd_git "go.skia.org/infra/bazel/external/cipd/git" |
| "go.skia.org/infra/go/git" |
| vcstu "go.skia.org/infra/go/vcsinfo/testutils" |
| ) |
| |
| func TestVCSSuite(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| require.NoError(t, err) |
| vcstu.TestDisplay(ctx, t, r) |
| } |
| |
| func TestFrom(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| require.NoError(t, err) |
| vcstu.TestFrom(ctx, t, r) |
| } |
| |
| func TestLastN(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| testCases := []struct { |
| n int |
| values []string |
| }{ |
| { |
| n: 0, |
| values: []string{}, |
| }, |
| { |
| n: 1, |
| values: []string{"8652a6df7dc8a7e6addee49f6ed3c2308e36bd18"}, |
| }, |
| { |
| n: 2, |
| values: []string{"7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18"}, |
| }, |
| { |
| n: 5, |
| values: []string{"7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18"}, |
| }, |
| } |
| for _, tc := range testCases { |
| assert.ElementsMatch(t, tc.values, r.LastN(ctx, tc.n)) |
| } |
| } |
| |
| func TestByIndex(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| require.NoError(t, err) |
| vcstu.TestByIndex(ctx, t, r) |
| } |
| |
| func TestLastNIndex(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| require.NoError(t, err) |
| vcstu.TestLastNIndex(ctx, t, r) |
| } |
| |
| func TestIndexOf(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| if err != nil { |
| t.Fatal(err) |
| } |
| vcstu.TestIndexOf(ctx, t, r) |
| require.Equal(t, "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", r.firstCommit) |
| } |
| |
| func TestRange(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| require.NoError(t, err) |
| vcstu.TestRange(ctx, t, r) |
| } |
| func TestLog(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| got, err := r.Log(ctx, "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", "") |
| if err != nil { |
| t.Fatal(err) |
| } |
| want := `commit 7a669cfa3f4cd3482a4fd03989f75efcc7595f7f |
| Author: Joe Gregorio <jcgregorio@google.com> |
| Date: Wed Jul 30 08:00:42 2014 -0400 |
| |
| First "checkin" |
| ` + "\n" + ` With quotes. |
| |
| README.txt |
| ` |
| |
| if got != want { |
| t.Errorf("Log failed: \nGot %q \nWant %q", got, want) |
| } |
| |
| got, err = r.Log(ctx, "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18") |
| if err != nil { |
| t.Fatal(err) |
| } |
| want = `commit 8652a6df7dc8a7e6addee49f6ed3c2308e36bd18 |
| Author: Joe Gregorio <jcgregorio@google.com> |
| Date: Wed Jul 30 08:01:55 2014 -0400 |
| |
| Added code. No body. |
| |
| README.txt |
| hello.go |
| ` |
| |
| if got != want { |
| t.Errorf("Log failed: \nGot %q \nWant %q", got, want) |
| } |
| |
| } |
| |
| func TestLogFine(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| got, err := r.LogFine(ctx, "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", "", "--format=format:%H") |
| if err != nil { |
| t.Fatal(err) |
| } |
| want := `7a669cfa3f4cd3482a4fd03989f75efcc7595f7f` |
| |
| if got != want { |
| t.Errorf("Log failed: \nGot %q \nWant %q", got, want) |
| } |
| |
| got, err = r.LogFine(ctx, "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18", "--format=format:%H") |
| if err != nil { |
| t.Fatal(err) |
| } |
| want = `8652a6df7dc8a7e6addee49f6ed3c2308e36bd18` |
| |
| if got != want { |
| t.Errorf("Log failed: \nGot %q \nWant %q", got, want) |
| } |
| } |
| |
| func TestLogArgs(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| if err != nil { |
| t.Fatal(err) |
| } |
| got, err := r.LogArgs(ctx, "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f..8652a6df7dc8a7e6addee49f6ed3c2308e36bd18", "--format=format:%H") |
| if err != nil { |
| t.Fatal(err) |
| } |
| want := `8652a6df7dc8a7e6addee49f6ed3c2308e36bd18` |
| if got != want { |
| t.Errorf("Log failed: \nGot %q \nWant %q", got, want) |
| } |
| |
| } |
| |
| func TestShortList(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, false) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| l, err := r.ShortList(ctx, "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18", "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18") |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if got, want := len(l.Commits), 0; got != want { |
| t.Fatalf("Wrong number of zero results: Got %v Want %v", got, want) |
| } |
| |
| c, err := r.ShortList(ctx, "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f", "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18") |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| expected := []struct { |
| Hash string |
| Author string |
| Subject string |
| }{ |
| { |
| Hash: "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18", |
| Author: "Joe Gregorio", |
| Subject: "Added code. No body.", |
| }, |
| } |
| if got, want := len(c.Commits), len(expected); got != want { |
| t.Fatalf("Wrong number of results: Got %v Want %v", got, want) |
| } |
| for i, o := range c.Commits { |
| if got, want := o.Hash, expected[i].Hash; got != want { |
| t.Errorf("Wrong hash: Got %v Want %v", got, want) |
| } |
| if got, want := o.Author, expected[i].Author; got != want { |
| t.Errorf("Wrong author: Got %v Want %v", got, want) |
| } |
| if got, want := o.Subject, expected[i].Subject; got != want { |
| t.Errorf("Wrong subject: Got %v Want %v", got, want) |
| } |
| } |
| } |
| |
| func TestRevList(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, true) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| const rev1 = "7a669cfa3f4cd3482a4fd03989f75efcc7595f7f" |
| const rev2 = "8652a6df7dc8a7e6addee49f6ed3c2308e36bd18" |
| revs := []string{rev2, rev1} // rev-list is reverse-chronological. |
| testCases := []struct { |
| Input []string |
| Expected []string |
| }{ |
| { |
| Input: []string{git.MasterBranch}, |
| Expected: revs, |
| }, |
| { |
| Input: []string{"HEAD"}, |
| Expected: revs, |
| }, |
| { |
| Input: []string{"7a669cf..8652a6d"}, |
| Expected: []string{rev2}, |
| }, |
| { |
| Input: []string{"8652a6d", "^7a669cf"}, |
| Expected: []string{rev2}, |
| }, |
| { |
| Input: []string{"8652a6d..7a669cf"}, |
| Expected: []string{}, |
| }, |
| } |
| for _, tc := range testCases { |
| actual, err := r.RevList(ctx, tc.Input...) |
| if err != nil { |
| t.Fatal(err) |
| } |
| assert.Equal(t, tc.Expected, actual, "Failed test for: git rev-list %s\nGot: %v\nWant: %v", strings.Join(tc.Input, " "), actual, tc.Expected) |
| } |
| } |
| |
| func TestBranchInfo(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, true) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| allBranches, err := r.GetBranches(ctx) |
| require.NoError(t, err) |
| branches := []string{} |
| for _, b := range allBranches { |
| branches = append(branches, b.Name) |
| } |
| vcstu.TestBranchInfo(ctx, t, r, branches) |
| } |
| |
| func TestSetBranch(t *testing.T) { |
| repoDir, cleanup := vcstu.InitTempRepo(t) |
| defer cleanup() |
| |
| ctx := cipd_git.UseGitFinder(context.Background()) |
| r, err := NewGitInfo(ctx, repoDir, false, true) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| branches, err := r.GetBranches(ctx) |
| require.NoError(t, err) |
| require.Equal(t, 2, len(branches)) |
| |
| err = r.Checkout(ctx, "test-branch-1") |
| require.NoError(t, err) |
| |
| commits := r.LastN(ctx, 10) |
| require.Equal(t, 3, len(commits)) |
| require.Equal(t, "3f5a807d432ac232a952bbf223bc6952e4b49b2c", commits[2]) |
| } |