mirror of
https://github.com/alibaba/open-code-review.git
synced 2026-07-09 17:28:58 +00:00
Add table-driven tests for pure computation functions with no external dependencies, improving overall coverage from 45.9% to 48.8%. Covered functions: - suggestdiff: ComputeLineDiff (LCS algorithm) - tool: CommentCollector, DiffMap, FileReadDiff, Registry, ParseReviewMode, scanLines - llmloop: CountMessagesTokens, groupIntoRounds, partitionMessages, StripMarkdownFences - agent: buildFilterCommentsJSON, parseFilterResponse, extFromPath, formatToolDefs, BuildToolDefs - viewer: truncateText, formatDuration, formatTime
127 lines
2.6 KiB
Go
127 lines
2.6 KiB
Go
package suggestdiff
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestComputeLineDiff(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
old []string
|
|
new []string
|
|
wantLen int
|
|
wantAdds int
|
|
wantDels int
|
|
}{
|
|
{
|
|
name: "both empty",
|
|
old: nil,
|
|
new: nil,
|
|
wantLen: 0,
|
|
wantAdds: 0,
|
|
wantDels: 0,
|
|
},
|
|
{
|
|
name: "identical single line",
|
|
old: []string{"hello"},
|
|
new: []string{"hello"},
|
|
wantLen: 1,
|
|
wantAdds: 0,
|
|
wantDels: 0,
|
|
},
|
|
{
|
|
name: "add lines to empty",
|
|
old: []string{},
|
|
new: []string{"a", "b"},
|
|
wantLen: 2,
|
|
wantAdds: 2,
|
|
wantDels: 0,
|
|
},
|
|
{
|
|
name: "delete all lines",
|
|
old: []string{"a", "b"},
|
|
new: []string{},
|
|
wantLen: 2,
|
|
wantAdds: 0,
|
|
wantDels: 2,
|
|
},
|
|
{
|
|
name: "replace single line",
|
|
old: []string{"old"},
|
|
new: []string{"new"},
|
|
wantLen: 2,
|
|
wantAdds: 1,
|
|
wantDels: 1,
|
|
},
|
|
{
|
|
name: "insert in middle",
|
|
old: []string{"a", "c"},
|
|
new: []string{"a", "b", "c"},
|
|
wantLen: 3,
|
|
wantAdds: 1,
|
|
wantDels: 0,
|
|
},
|
|
{
|
|
name: "delete from middle",
|
|
old: []string{"a", "b", "c"},
|
|
new: []string{"a", "c"},
|
|
wantLen: 3,
|
|
wantAdds: 0,
|
|
wantDels: 1,
|
|
},
|
|
{
|
|
name: "case insensitive match with whitespace",
|
|
old: []string{" Hello "},
|
|
new: []string{"hello"},
|
|
wantLen: 1,
|
|
wantAdds: 0,
|
|
wantDels: 0,
|
|
},
|
|
{
|
|
name: "multi-line edit",
|
|
old: []string{"func main() {", " fmt.Println(\"old\")", "}"},
|
|
new: []string{"func main() {", " fmt.Println(\"new\")", " return", "}"},
|
|
wantLen: 5,
|
|
wantAdds: 2,
|
|
wantDels: 1,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := ComputeLineDiff(tt.old, tt.new)
|
|
if len(got) != tt.wantLen {
|
|
t.Errorf("len = %d, want %d; diff = %v", len(got), tt.wantLen, got)
|
|
}
|
|
var adds, dels int
|
|
for _, l := range got {
|
|
switch l.Type {
|
|
case DiffAdded:
|
|
adds++
|
|
case DiffDeleted:
|
|
dels++
|
|
}
|
|
}
|
|
if adds != tt.wantAdds {
|
|
t.Errorf("adds = %d, want %d", adds, tt.wantAdds)
|
|
}
|
|
if dels != tt.wantDels {
|
|
t.Errorf("dels = %d, want %d", dels, tt.wantDels)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestComputeLineDiff_ContextContent(t *testing.T) {
|
|
old := []string{"a", "b", "c"}
|
|
new := []string{"a", "x", "c"}
|
|
got := ComputeLineDiff(old, new)
|
|
|
|
if got[0].Type != DiffContext || got[0].Content != "a" {
|
|
t.Errorf("first line should be context 'a', got %+v", got[0])
|
|
}
|
|
last := got[len(got)-1]
|
|
if last.Type != DiffContext || last.Content != "c" {
|
|
t.Errorf("last line should be context 'c', got %+v", last)
|
|
}
|
|
}
|