summaryrefslogtreecommitdiffstats
path: root/services/gitdiff/gitdiff_test.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2020-09-09 14:08:40 +0100
committerGitHub <noreply@github.com>2020-09-09 14:08:40 +0100
commit96969ddec8f5f0ba010e7f4e12fceec7ef8e9956 (patch)
treeef2dc60c3ce87e7f2af2ee19b84ba94b9e19b5a7 /services/gitdiff/gitdiff_test.go
parent1fbc50f9747947541d998de99a6b7f0efb42522c (diff)
downloadgitea-96969ddec8f5f0ba010e7f4e12fceec7ef8e9956.tar.gz
gitea-96969ddec8f5f0ba010e7f4e12fceec7ef8e9956.zip
Fix yet another bug with diff file names (#12771)
Following further testing it has become apparent that the diff line cannot be used to determine filenames for diffs with any sort of predictability the answer therefore is to use the other lines that are provided with a diff Fix #12768 Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'services/gitdiff/gitdiff_test.go')
-rw-r--r--services/gitdiff/gitdiff_test.go145
1 files changed, 141 insertions, 4 deletions
diff --git a/services/gitdiff/gitdiff_test.go b/services/gitdiff/gitdiff_test.go
index 9826ece2dc..ad1d186e73 100644
--- a/services/gitdiff/gitdiff_test.go
+++ b/services/gitdiff/gitdiff_test.go
@@ -6,6 +6,7 @@
package gitdiff
import (
+ "encoding/json"
"fmt"
"html/template"
"strings"
@@ -14,11 +15,9 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/setting"
-
- "gopkg.in/ini.v1"
-
dmp "github.com/sergi/go-diff/diffmatchpatch"
"github.com/stretchr/testify/assert"
+ "gopkg.in/ini.v1"
)
func assertEqual(t *testing.T, s1 string, s2 template.HTML) {
@@ -77,7 +76,145 @@ func TestDiffToHTML(t *testing.T) {
}, DiffLineAdd))
}
-func TestParsePatch(t *testing.T) {
+func TestParsePatch_singlefile(t *testing.T) {
+ type testcase struct {
+ name string
+ gitdiff string
+ wantErr bool
+ addition int
+ deletion int
+ oldFilename string
+ filename string
+ }
+
+ tests := []testcase{
+ {
+ name: "readme.md2readme.md",
+ gitdiff: `diff --git "a/README.md" "b/README.md"
+--- a/README.md
++++ b/README.md
+@@ -1,3 +1,6 @@
+ # gitea-github-migrator
++
++ Build Status
+- Latest Release
+ Docker Pulls
++ cut off
++ cut off
+`,
+ addition: 4,
+ deletion: 1,
+ filename: "README.md",
+ },
+ {
+ name: "A \\ B",
+ gitdiff: `diff --git "a/A \\ B" "b/A \\ B"
+--- "a/A \\ B"
++++ "b/A \\ B"
+@@ -1,3 +1,6 @@
+ # gitea-github-migrator
++
++ Build Status
+- Latest Release
+ Docker Pulls
++ cut off
++ cut off`,
+ addition: 4,
+ deletion: 1,
+ filename: "A \\ B",
+ },
+ {
+ name: "really weird filename",
+ gitdiff: `diff --git a/a b/file b/a a/file b/a b/file b/a a/file
+index d2186f1..f5c8ed2 100644
+--- a/a b/file b/a a/file
++++ b/a b/file b/a a/file
+@@ -1,3 +1,2 @@
+ Create a weird file.
+
+-and what does diff do here?
+\ No newline at end of file`,
+ addition: 0,
+ deletion: 1,
+ filename: "a b/file b/a a/file",
+ oldFilename: "a b/file b/a a/file",
+ },
+ {
+ name: "delete file with blanks",
+ gitdiff: `diff --git a/file with blanks b/file with blanks
+deleted file mode 100644
+index 898651a..0000000
+--- a/file with blanks
++++ /dev/null
+@@ -1,5 +0,0 @@
+-a blank file
+-
+-has a couple o line
+-
+-the 5th line is the last
+`,
+ addition: 0,
+ deletion: 5,
+ filename: "file with blanks",
+ },
+ {
+ name: "rename a—as",
+ gitdiff: `diff --git "a/\360\243\220\265b\342\200\240vs" "b/a\342\200\224as"
+similarity index 100%
+rename from "\360\243\220\265b\342\200\240vs"
+rename to "a\342\200\224as"
+`,
+ addition: 0,
+ deletion: 0,
+ oldFilename: "𣐵b†vs",
+ filename: "a—as",
+ },
+ {
+ name: "rename with spaces",
+ gitdiff: `diff --git a/a b/file b/a a/file b/a b/a a/file b/b file
+similarity index 100%
+rename from a b/file b/a a/file
+rename to a b/a a/file b/b file
+`,
+ oldFilename: "a b/file b/a a/file",
+ filename: "a b/a a/file b/b file",
+ },
+ }
+
+ for _, testcase := range tests {
+ t.Run(testcase.name, func(t *testing.T) {
+ got, err := ParsePatch(setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff))
+ if (err != nil) != testcase.wantErr {
+ t.Errorf("ParsePatch() error = %v, wantErr %v", err, testcase.wantErr)
+ return
+ }
+ gotMarshaled, _ := json.MarshalIndent(got, " ", " ")
+ if got.NumFiles != 1 {
+ t.Errorf("ParsePath() did not receive 1 file:\n%s", string(gotMarshaled))
+ return
+ }
+ if got.TotalAddition != testcase.addition {
+ t.Errorf("ParsePath() does not have correct totalAddition %d, wanted %d", got.TotalAddition, testcase.addition)
+ }
+ if got.TotalDeletion != testcase.deletion {
+ t.Errorf("ParsePath() did not have correct totalDeletion %d, wanted %d", got.TotalDeletion, testcase.deletion)
+ }
+ file := got.Files[0]
+ if file.Addition != testcase.addition {
+ t.Errorf("ParsePath() does not have correct file addition %d, wanted %d", file.Addition, testcase.addition)
+ }
+ if file.Deletion != testcase.deletion {
+ t.Errorf("ParsePath() did not have correct file deletion %d, wanted %d", file.Deletion, testcase.deletion)
+ }
+ if file.OldName != testcase.oldFilename {
+ t.Errorf("ParsePath() did not have correct OldName %s, wanted %s", file.OldName, testcase.oldFilename)
+ }
+ if file.Name != testcase.filename {
+ t.Errorf("ParsePath() did not have correct Name %s, wanted %s", file.Name, testcase.filename)
+ }
+ })
+ }
+
var diff = `diff --git "a/README.md" "b/README.md"
--- a/README.md
+++ b/README.md