// Copyright 2022 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package gitdiff import ( "fmt" "strings" "testing" "github.com/sergi/go-diff/diffmatchpatch" "github.com/stretchr/testify/assert" ) func TestDiffWithHighlight(t *testing.T) { hcd := newHighlightCodeDiff() diffs := hcd.diffWithHighlight( "main.v", "", " run('<>')\n", " run(db)\n", ) expected := ` run('<>')` output := diffToHTML(nil, diffs, DiffLineDel) assert.Equal(t, expected, output) expected = ` run(db)` output = diffToHTML(nil, diffs, DiffLineAdd) assert.Equal(t, expected, output) hcd = newHighlightCodeDiff() hcd.placeholderTokenMap['O'] = "" hcd.placeholderTokenMap['C'] = "" diff := diffmatchpatch.Diff{} diff.Text = "OC" hcd.recoverOneDiff(&diff) assert.Equal(t, "", diff.Text) diff.Text = "O" hcd.recoverOneDiff(&diff) assert.Equal(t, "", diff.Text) diff.Text = "C" hcd.recoverOneDiff(&diff) assert.Equal(t, "", diff.Text) } func TestDiffWithHighlightPlaceholder(t *testing.T) { hcd := newHighlightCodeDiff() diffs := hcd.diffWithHighlight( "main.js", "", "a='\U00100000'", "a='\U0010FFFD''", ) assert.Equal(t, "", hcd.placeholderTokenMap[0x00100000]) assert.Equal(t, "", hcd.placeholderTokenMap[0x0010FFFD]) expected := fmt.Sprintf(`a='%s'`, "\U00100000") output := diffToHTML(hcd.lineWrapperTags, diffs, DiffLineDel) assert.Equal(t, expected, output) hcd = newHighlightCodeDiff() diffs = hcd.diffWithHighlight( "main.js", "", "a='\U00100000'", "a='\U0010FFFD'", ) expected = fmt.Sprintf(`a='%s'`, "\U0010FFFD") output = diffToHTML(nil, diffs, DiffLineAdd) assert.Equal(t, expected, output) } func TestDiffWithHighlightPlaceholderExhausted(t *testing.T) { hcd := newHighlightCodeDiff() hcd.placeholderMaxCount = 0 diffs := hcd.diffWithHighlight( "main.js", "", "'", ``, ) output := diffToHTML(nil, diffs, DiffLineDel) expected := fmt.Sprintf(`%s#39;`, "\uFFFD") assert.Equal(t, expected, output) hcd = newHighlightCodeDiff() hcd.placeholderMaxCount = 0 diffs = hcd.diffWithHighlight( "main.js", "", "a < b", "a > b", ) output = diffToHTML(nil, diffs, DiffLineDel) expected = fmt.Sprintf(`a %slt; b`, "\uFFFD") assert.Equal(t, expected, output) output = diffToHTML(nil, diffs, DiffLineAdd) expected = fmt.Sprintf(`a %sgt; b`, "\uFFFD") assert.Equal(t, expected, output) } func TestDiffWithHighlightTagMatch(t *testing.T) { totalOverflow := 0 for i := 0; i < 100; i++ { hcd := newHighlightCodeDiff() hcd.placeholderMaxCount = i diffs := hcd.diffWithHighlight( "main.js", "", "a='1'", "b='2'", ) totalOverflow += hcd.placeholderOverflowCount output := diffToHTML(nil, diffs, DiffLineDel) c1 := strings.Count(output, "