| package git |
| |
| import ( |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/deepequal" |
| ) |
| |
| func TestNormURL(t *testing.T) { |
| httpURL := "https://github.com/skia-dev/textfiles.git" |
| normHTTP, err := NormalizeURL(httpURL) |
| require.NoError(t, err) |
| assert.Equal(t, "github.com/skia-dev/textfiles", normHTTP) |
| |
| gitURL := "ssh://git@github.com/skia-dev/textfiles" |
| normGit, err := NormalizeURL(gitURL) |
| require.NoError(t, err) |
| assert.Equal(t, "github.com/skia-dev/textfiles", normGit) |
| |
| gitURLWithExt := "ssh://git@github.com:skia-dev/textfiles.git" |
| normGitWithExt, err := NormalizeURL(gitURLWithExt) |
| require.NoError(t, err) |
| assert.Equal(t, "github.com/skia-dev/textfiles", normGitWithExt) |
| } |
| |
| func TestSplitTrailers(t *testing.T) { |
| |
| test := func(commitMsg string, expectBody, expectTrailers []string) { |
| actualBody, actualTrailers := SplitTrailers(commitMsg) |
| require.Equal(t, expectBody, actualBody) |
| require.Equal(t, expectTrailers, actualTrailers) |
| } |
| |
| test("", []string{}, []string{}) |
| test("Hello World", []string{"Hello World"}, []string{}) |
| test(`Hello World |
| `, []string{"Hello World"}, []string{}) |
| test(`Hello World |
| |
| Paragraph 2 |
| `, []string{"Hello World", "", "Paragraph 2"}, []string{}) |
| test(`Hello World |
| |
| Trailer-Key: trailer-value`, []string{"Hello World", ""}, []string{"Trailer-Key: trailer-value"}) |
| test(`Hello World |
| |
| Trailer-Key: trailer-value |
| `, []string{"Hello World", ""}, []string{"Trailer-Key: trailer-value"}) |
| |
| test(`Hello World |
| |
| Paragraph 2 |
| |
| Trailer-Key: trailer-value |
| T2: V2 |
| Bug: 1234, chromium:5678 |
| `, |
| []string{"Hello World", "", "Paragraph 2", ""}, |
| []string{"Trailer-Key: trailer-value", "T2: V2", "Bug: 1234, chromium:5678"}) |
| |
| test(`Trailer-Key: trailer-value`, []string{}, []string{"Trailer-Key: trailer-value"}) |
| } |
| |
| func TestJoinTrailers(t *testing.T) { |
| |
| test := func(body, trailers []string, expect string) { |
| actual := JoinTrailers(body, trailers) |
| require.Equal(t, expect, actual) |
| } |
| |
| test([]string{}, []string{}, "") |
| test([]string{"Hello World"}, []string{}, "Hello World\n") |
| test([]string{"Hello World", ""}, []string{}, "Hello World\n") |
| test( |
| []string{"Hello World", "", "Paragraph 2", ""}, |
| []string{}, |
| `Hello World |
| |
| Paragraph 2 |
| `) |
| test([]string{}, []string{"Trailer-Key: trailer-value"}, "Trailer-Key: trailer-value") |
| |
| test( |
| []string{"Hello World", "", "Paragraph 2", ""}, |
| []string{"Trailer-Key: trailer-value"}, |
| `Hello World |
| |
| Paragraph 2 |
| |
| Trailer-Key: trailer-value`) |
| } |
| |
| func TestAddTrailer(t *testing.T) { |
| |
| test := func(commitMsg, trailer, expect, expectErr string) { |
| actual, err := AddTrailer(commitMsg, trailer) |
| require.Equal(t, expect, actual) |
| if expectErr != "" { |
| require.NotNil(t, err) |
| require.Contains(t, err.Error(), expectErr) |
| } |
| } |
| |
| test("", "", "", "\"\" is not a valid git trailer") |
| test("", "bogustrailer", "", "\"bogustrailer\" is not a valid git trailer") |
| test("", "Trailer-Key: trailer-value", "Trailer-Key: trailer-value", "") |
| test("Hello World", "Trailer-Key: trailer-value", `Hello World |
| |
| Trailer-Key: trailer-value`, "") |
| |
| test(`Hello World |
| |
| Paragraph 2 |
| `, |
| "Trailer-Key: trailer-value", |
| `Hello World |
| |
| Paragraph 2 |
| |
| Trailer-Key: trailer-value`, "") |
| |
| test(`Hello World |
| |
| Paragraph 2 |
| |
| K1: V1 |
| `, |
| "Trailer-Key: trailer-value", |
| `Hello World |
| |
| Paragraph 2 |
| |
| K1: V1 |
| Trailer-Key: trailer-value`, "") |
| } |
| |
| func TestGetFootersMap(t *testing.T) { |
| |
| tests := []struct { |
| commitMsg string |
| expectedOutput map[string]string |
| }{ |
| { |
| commitMsg: "Test test test\n\nfooter: value", |
| expectedOutput: map[string]string{"footer": "value"}, |
| }, |
| { |
| commitMsg: "Test test test\n\nfooter-no-space:value", |
| expectedOutput: map[string]string{"footer-no-space": "value"}, |
| }, |
| { |
| commitMsg: "Test test test\nfake-footer: value", |
| expectedOutput: map[string]string{}, |
| }, |
| { |
| commitMsg: "Test test test\nfake-footer: value\n\nfooter1: value1\nfooter2: value2", |
| expectedOutput: map[string]string{"footer1": "value1", "footer2": "value2"}, |
| }, |
| } |
| |
| for _, test := range tests { |
| require.True(t, deepequal.DeepEqual(test.expectedOutput, GetFootersMap(test.commitMsg))) |
| } |
| } |
| |
| func TestGetBoolFooterVal(t *testing.T) { |
| |
| testFooterName := "test-footer-name" |
| tests := []struct { |
| footersMap map[string]string |
| footer string |
| expectedOutput bool |
| }{ |
| { |
| footersMap: map[string]string{ |
| testFooterName: "true", |
| }, |
| footer: testFooterName, |
| expectedOutput: true, |
| }, |
| { |
| footersMap: map[string]string{ |
| testFooterName: "false", |
| }, |
| footer: testFooterName, |
| expectedOutput: false, |
| }, |
| { |
| footersMap: map[string]string{ |
| "some-other-footer": "true", |
| }, |
| footer: testFooterName, |
| expectedOutput: false, |
| }, |
| { |
| footersMap: map[string]string{ |
| "some-other-footer": "true", |
| testFooterName: "true", |
| }, |
| footer: testFooterName, |
| expectedOutput: true, |
| }, |
| { |
| footersMap: map[string]string{}, |
| footer: testFooterName, |
| expectedOutput: false, |
| }, |
| { |
| footersMap: nil, |
| footer: testFooterName, |
| expectedOutput: false, |
| }, |
| { |
| footersMap: map[string]string{ |
| testFooterName: "not-a-bool-val", |
| }, |
| footer: testFooterName, |
| expectedOutput: false, |
| }, |
| } |
| |
| for _, test := range tests { |
| require.Equal(t, test.expectedOutput, GetBoolFooterVal(test.footersMap, test.footer, 1)) |
| } |
| } |
| |
| func TestGetStringFooterVal(t *testing.T) { |
| |
| testFooterName := "test-footer-name" |
| tests := []struct { |
| footersMap map[string]string |
| footer string |
| expectedOutput string |
| }{ |
| { |
| footersMap: map[string]string{ |
| testFooterName: "value", |
| }, |
| footer: testFooterName, |
| expectedOutput: "value", |
| }, |
| { |
| footersMap: map[string]string{ |
| "some-other-footer": "value", |
| }, |
| footer: testFooterName, |
| expectedOutput: "", |
| }, |
| { |
| footersMap: map[string]string{ |
| "some-other-footer": "value1", |
| testFooterName: "value2", |
| }, |
| footer: testFooterName, |
| expectedOutput: "value2", |
| }, |
| { |
| footersMap: map[string]string{}, |
| footer: testFooterName, |
| expectedOutput: "", |
| }, |
| { |
| footersMap: nil, |
| footer: testFooterName, |
| expectedOutput: "", |
| }, |
| } |
| |
| for _, test := range tests { |
| require.Equal(t, test.expectedOutput, GetStringFooterVal(test.footersMap, test.footer)) |
| } |
| } |