@@ -5,84 +5,67 @@ package gitdiff
55
66import (
77 "fmt"
8+ "html/template"
9+ "strings"
810 "testing"
911
10- "github.com/sergi/go-diff/diffmatchpatch"
1112 "github.com/stretchr/testify/assert"
1213)
1314
1415func TestDiffWithHighlight (t * testing.T ) {
15- hcd := newHighlightCodeDiff ()
16- diffs := hcd .diffWithHighlight (
17- " run('<>')\n " ,
18- " run(db)\n " ,
19- )
20-
21- expected := "\t \t run(<span class=\" removed-code\" >'<>'</></span>)\n "
22-
23- output := diffToHTML (nil , diffs , DiffLineDel )
24- assert .Equal (t , expected , output )
25-
26- expected = ` run(<span class="added-code">db</span>)
27- `
28- output = diffToHTML (nil , diffs , DiffLineAdd )
29- assert .Equal (t , expected , output )
30-
31- hcd = newHighlightCodeDiff ()
32- hcd .placeholderTokenMap ['O' ] = "<span>"
33- hcd .placeholderTokenMap ['C' ] = "</span>"
34- diff := diffmatchpatch.Diff {}
16+ t .Run ("DiffLineAddDel" , func (t * testing.T ) {
17+ hcd := newHighlightCodeDiff ()
18+ codeA := template .HTML (`x <span class="k">foo</span> y` )
19+ codeB := template .HTML (`x <span class="k">bar</span> y` )
20+ outDel := hcd .diffLineWithHighlight (DiffLineDel , codeA , codeB )
21+ assert .Equal (t , `x <span class="k"><span class="removed-code">foo</span></span> y` , string (outDel ))
22+ outAdd := hcd .diffLineWithHighlight (DiffLineAdd , codeA , codeB )
23+ assert .Equal (t , `x <span class="k"><span class="added-code">bar</span></span> y` , string (outAdd ))
24+ })
3525
36- diff .Text = "C"
37- hcd .recoverOneDiff (& diff )
38- assert .Equal (t , "" , diff .Text )
26+ t .Run ("OpenCloseTags" , func (t * testing.T ) {
27+ hcd := newHighlightCodeDiff ()
28+ hcd .placeholderTokenMap ['O' ], hcd .placeholderTokenMap ['C' ] = "<span>" , "</span>"
29+ assert .Equal (t , "<span></span>" , string (hcd .recoverOneDiff ("OC" )))
30+ assert .Equal (t , "<span></span>" , string (hcd .recoverOneDiff ("O" )))
31+ assert .Equal (t , "" , string (hcd .recoverOneDiff ("C" )))
32+ })
3933}
4034
4135func TestDiffWithHighlightPlaceholder (t * testing.T ) {
4236 hcd := newHighlightCodeDiff ()
43- diffs := hcd .diffWithHighlight (
44- "a='\U00100000 '" ,
45- "a='\U0010FFFD ''" ,
46- )
37+ output := hcd .diffLineWithHighlight (DiffLineDel , "a='\U00100000 '" , "a='\U0010FFFD ''" )
4738 assert .Equal (t , "" , hcd .placeholderTokenMap [0x00100000 ])
4839 assert .Equal (t , "" , hcd .placeholderTokenMap [0x0010FFFD ])
49-
5040 expected := fmt .Sprintf (`a='<span class="removed-code">%s</span>'` , "\U00100000 " )
51- output := diffToHTML (hcd .lineWrapperTags , diffs , DiffLineDel )
52- assert .Equal (t , expected , output )
41+ assert .Equal (t , expected , string (output ))
5342
5443 hcd = newHighlightCodeDiff ()
55- diffs = hcd .diffWithHighlight (
56- "a='\U00100000 '" ,
57- "a='\U0010FFFD '" ,
58- )
44+ output = hcd .diffLineWithHighlight (DiffLineAdd , "a='\U00100000 '" , "a='\U0010FFFD '" )
5945 expected = fmt .Sprintf (`a='<span class="added-code">%s</span>'` , "\U0010FFFD " )
60- output = diffToHTML (nil , diffs , DiffLineAdd )
61- assert .Equal (t , expected , output )
46+ assert .Equal (t , expected , string (output ))
6247}
6348
6449func TestDiffWithHighlightPlaceholderExhausted (t * testing.T ) {
6550 hcd := newHighlightCodeDiff ()
6651 hcd .placeholderMaxCount = 0
67- diffs := hcd .diffWithHighlight (
68- "'" ,
69- `` ,
70- )
71- output := diffToHTML (nil , diffs , DiffLineDel )
72- expected := `<span class="removed-code">'</span>`
73- assert .Equal (t , expected , output )
74-
75- hcd = newHighlightCodeDiff ()
76- hcd .placeholderMaxCount = 0
77- diffs = hcd .diffWithHighlight (
78- "a this_is_not_html_at_this_point b" ,
79- "a this_is_is_still_not_html_at_this_point_its_just_a_string b" ,
80- )
81- output = diffToHTML (nil , diffs , DiffLineDel )
82- expected = "a this_is_not_html_at_this_point b"
83- assert .Equal (t , expected , output )
52+ placeHolderAmp := string (rune (0xFFFD ))
53+ output := hcd .diffLineWithHighlight (DiffLineDel , `<span class="k"><</span>` , `<span class="k">></span>` )
54+ assert .Equal (t , placeHolderAmp + "lt;" , string (output ))
55+ output = hcd .diffLineWithHighlight (DiffLineAdd , `<span class="k"><</span>` , `<span class="k">></span>` )
56+ assert .Equal (t , placeHolderAmp + "gt;" , string (output ))
57+ }
8458
85- output = diffToHTML (nil , diffs , DiffLineAdd )
86- expected = "a this_is_<span class=\" added-code\" >is_still_</span>not_html_at_this_point<span class=\" added-code\" >_its_just_a_string</span> b"
87- assert .Equal (t , expected , output )
59+ func TestDiffWithHighlightTagMatch (t * testing.T ) {
60+ totalOverflow := 0
61+ for i := 0 ; i < 100 ; i ++ {
62+ hcd := newHighlightCodeDiff ()
63+ hcd .placeholderMaxCount = i
64+ output := string (hcd .diffLineWithHighlight (DiffLineDel , `<span class="k"><</span>` , `<span class="k">></span>` ))
65+ totalOverflow += hcd .placeholderOverflowCount
66+ c1 := strings .Count (output , "<span" )
67+ c2 := strings .Count (output , "</span" )
68+ assert .Equal (t , c1 , c2 )
69+ }
70+ assert .NotZero (t , totalOverflow )
8871}
0 commit comments