code.gitea.io/gitea@v1.19.3/modules/git/diff_test.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package git 5 6 import ( 7 "strings" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 const exampleDiff = `diff --git a/README.md b/README.md 14 --- a/README.md 15 +++ b/README.md 16 @@ -1,3 +1,6 @@ 17 # gitea-github-migrator 18 + 19 + Build Status 20 - Latest Release 21 Docker Pulls 22 + cut off 23 + cut off` 24 25 const breakingDiff = `diff --git a/aaa.sql b/aaa.sql 26 index d8e4c92..19dc8ad 100644 27 --- a/aaa.sql 28 +++ b/aaa.sql 29 @@ -1,9 +1,10 @@ 30 --some comment 31 --- some comment 5 32 +--some coment 2 33 +-- some comment 3 34 create or replace procedure test(p1 varchar2) 35 is 36 begin 37 ---new comment 38 dbms_output.put_line(p1); 39 +--some other comment 40 end; 41 / 42 ` 43 44 var issue17875Diff = `diff --git a/Geschäftsordnung.md b/Geschäftsordnung.md 45 index d46c152..a7d2d55 100644 46 --- a/Geschäftsordnung.md 47 +++ b/Geschäftsordnung.md 48 @@ -1,5 +1,5 @@ 49 --- 50 -date: "23.01.2021" 51 +date: "30.11.2021" 52 ... 53 ` + ` 54 # Geschäftsordnung 55 @@ -16,4 +16,22 @@ Diese Geschäftsordnung regelt alle Prozesse des Vereins, solange diese nicht du 56 ` + ` 57 ## § 3 Datenschutzverantwortlichkeit 58 ` + ` 59 -1. Der Verein bestellt eine datenschutzverantwortliche Person mit den Aufgaben nach Artikel 39 DSGVO. 60 \ No newline at end of file 61 +1. Der Verein bestellt eine datenschutzverantwortliche Person mit den Aufgaben nach Artikel 39 DSGVO. 62 + 63 +## §4 Umgang mit der SARS-Cov-2-Pandemie 64 + 65 +1. Der Vorstand hat die Befugnis, in Rücksprache mit den Vereinsmitgliedern, verschiedene Hygienemaßnahmen für Präsenzveranstaltungen zu beschließen. 66 + 67 +2. Die Einführung, Änderung und Abschaffung dieser Maßnahmen sind nur zum Zweck der Eindämmung der SARS-Cov-2-Pandemie zulässig. 68 + 69 +3. Die Einführung, Änderung und Abschaffung von Maßnahmen nach Abs. 2 bedarf einer wissenschaftlichen Grundlage. 70 + 71 +4. Die Maßnahmen nach Abs. 2 setzen sich aus den folgenden Bausteinen inklusive einer ihrer Ausprägungen zusammen. 72 + 73 + 1. Maskenpflicht: Keine; Maskenpflicht, außer am Platz, oder wo Abstände nicht eingehalten werden können; Maskenpflicht, wenn Abstände nicht eingehalten werden können; Maskenpflicht 74 + 75 + 2. Geimpft-, Genesen- oder Testnachweis: Kein Nachweis notwendig; Nachweis, dass Person geimpft, genesen oder tagesaktuell getestet ist (3G); Nachweis, dass Person geimpft oder genesen ist (2G); Nachweis, dass Person geimpft bzw. genesen und tagesaktuell getestet ist (2G+) 76 + 77 + 3. Online-Veranstaltung: Keine, parallele Online-Veranstaltung, ausschließlich Online-Veranstaltung 78 + 79 +5. Bei Präsenzveranstungen gelten außerdem die Hygienevorschriften des Veranstaltungsorts. Bei Regelkollision greift die restriktivere Regel. 80 \ No newline at end of file` 81 82 func TestCutDiffAroundLineIssue17875(t *testing.T) { 83 result, err := CutDiffAroundLine(strings.NewReader(issue17875Diff), 23, false, 3) 84 assert.NoError(t, err) 85 expected := `diff --git a/Geschäftsordnung.md b/Geschäftsordnung.md 86 --- a/Geschäftsordnung.md 87 +++ b/Geschäftsordnung.md 88 @@ -20,0 +21,3 @@ 89 +## §4 Umgang mit der SARS-Cov-2-Pandemie 90 + 91 +1. Der Vorstand hat die Befugnis, in Rücksprache mit den Vereinsmitgliedern, verschiedene Hygienemaßnahmen für Präsenzveranstaltungen zu beschließen.` 92 assert.Equal(t, expected, result) 93 } 94 95 func TestCutDiffAroundLine(t *testing.T) { 96 result, err := CutDiffAroundLine(strings.NewReader(exampleDiff), 4, false, 3) 97 assert.NoError(t, err) 98 resultByLine := strings.Split(result, "\n") 99 assert.Len(t, resultByLine, 7) 100 // Check if headers got transferred 101 assert.Equal(t, "diff --git a/README.md b/README.md", resultByLine[0]) 102 assert.Equal(t, "--- a/README.md", resultByLine[1]) 103 assert.Equal(t, "+++ b/README.md", resultByLine[2]) 104 // Check if hunk header is calculated correctly 105 assert.Equal(t, "@@ -2,2 +3,2 @@", resultByLine[3]) 106 // Check if line got transferred 107 assert.Equal(t, "+ Build Status", resultByLine[4]) 108 109 // Must be same result as before since old line 3 == new line 5 110 newResult, err := CutDiffAroundLine(strings.NewReader(exampleDiff), 3, true, 3) 111 assert.NoError(t, err) 112 assert.Equal(t, result, newResult, "Must be same result as before since old line 3 == new line 5") 113 114 newResult, err = CutDiffAroundLine(strings.NewReader(exampleDiff), 6, false, 300) 115 assert.NoError(t, err) 116 assert.Equal(t, exampleDiff, newResult) 117 118 emptyResult, err := CutDiffAroundLine(strings.NewReader(exampleDiff), 6, false, 0) 119 assert.NoError(t, err) 120 assert.Empty(t, emptyResult) 121 122 // Line is out of scope 123 emptyResult, err = CutDiffAroundLine(strings.NewReader(exampleDiff), 434, false, 0) 124 assert.NoError(t, err) 125 assert.Empty(t, emptyResult) 126 127 // Handle minus diffs properly 128 minusDiff, err := CutDiffAroundLine(strings.NewReader(breakingDiff), 2, false, 4) 129 assert.NoError(t, err) 130 131 expected := `diff --git a/aaa.sql b/aaa.sql 132 --- a/aaa.sql 133 +++ b/aaa.sql 134 @@ -1,9 +1,10 @@ 135 --some comment 136 --- some comment 5 137 +--some coment 2` 138 assert.Equal(t, expected, minusDiff) 139 140 // Handle minus diffs properly 141 minusDiff, err = CutDiffAroundLine(strings.NewReader(breakingDiff), 3, false, 4) 142 assert.NoError(t, err) 143 144 expected = `diff --git a/aaa.sql b/aaa.sql 145 --- a/aaa.sql 146 +++ b/aaa.sql 147 @@ -1,9 +1,10 @@ 148 --some comment 149 --- some comment 5 150 +--some coment 2 151 +-- some comment 3` 152 153 assert.Equal(t, expected, minusDiff) 154 } 155 156 func BenchmarkCutDiffAroundLine(b *testing.B) { 157 for n := 0; n < b.N; n++ { 158 CutDiffAroundLine(strings.NewReader(exampleDiff), 3, true, 3) 159 } 160 } 161 162 func ExampleCutDiffAroundLine() { 163 const diff = `diff --git a/README.md b/README.md 164 --- a/README.md 165 +++ b/README.md 166 @@ -1,3 +1,6 @@ 167 # gitea-github-migrator 168 + 169 + Build Status 170 - Latest Release 171 Docker Pulls 172 + cut off 173 + cut off` 174 result, _ := CutDiffAroundLine(strings.NewReader(diff), 4, false, 3) 175 println(result) 176 } 177 178 func TestParseDiffHunkString(t *testing.T) { 179 leftLine, leftHunk, rightLine, rightHunk := ParseDiffHunkString("@@ -19,3 +19,5 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER") 180 assert.EqualValues(t, 19, leftLine) 181 assert.EqualValues(t, 3, leftHunk) 182 assert.EqualValues(t, 19, rightLine) 183 assert.EqualValues(t, 5, rightHunk) 184 }