mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
test: add comprehensive tests for applyContextMatching and applyDMP functions
This commit is contained in:
@@ -0,0 +1,259 @@
|
|||||||
|
import { applyContextMatching, applyDMP } from "../edit-strategies"
|
||||||
|
import { Hunk } from "../types"
|
||||||
|
|
||||||
|
const testCases = [
|
||||||
|
{
|
||||||
|
name: "should return original content if no match is found",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: "line1" },
|
||||||
|
{ type: "add", content: "line2" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["line1", "line3"],
|
||||||
|
matchPosition: -1,
|
||||||
|
expected: {
|
||||||
|
confidence: 0,
|
||||||
|
result: ["line1", "line3"],
|
||||||
|
},
|
||||||
|
expectedResult: "line1\nline3",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a simple add change",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: "line1" },
|
||||||
|
{ type: "add", content: "line2" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["line1", "line3"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: ["line1", "line2", "line3"],
|
||||||
|
},
|
||||||
|
expectedResult: "line1\nline2\nline3",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a simple remove change",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: "line1" },
|
||||||
|
{ type: "remove", content: "line2" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["line1", "line2", "line3"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: ["line1", "line3"],
|
||||||
|
},
|
||||||
|
expectedResult: "line1\nline3",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a simple context change",
|
||||||
|
hunk: {
|
||||||
|
changes: [{ type: "context", content: "line1" }],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["line1", "line2", "line3"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: ["line1", "line2", "line3"],
|
||||||
|
},
|
||||||
|
expectedResult: "line1\nline2\nline3",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a multi-line add change",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: "line1" },
|
||||||
|
{ type: "add", content: "line2\nline3" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["line1", "line4"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: ["line1", "line2\nline3", "line4"],
|
||||||
|
},
|
||||||
|
expectedResult: "line1\nline2\nline3\nline4",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a multi-line remove change",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: "line1" },
|
||||||
|
{ type: "remove", content: "line2\nline3" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["line1", "line2", "line3", "line4"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: ["line1", "line4"],
|
||||||
|
},
|
||||||
|
expectedResult: "line1\nline4",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a multi-line context change",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: "line1" },
|
||||||
|
{ type: "context", content: "line2\nline3" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["line1", "line2", "line3", "line4"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: ["line1", "line2\nline3", "line4"],
|
||||||
|
},
|
||||||
|
expectedResult: "line1\nline2\nline3\nline4",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a change with indentation",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: " line1" },
|
||||||
|
{ type: "add", content: " line2" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: [" line1", " line3"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: [" line1", " line2", " line3"],
|
||||||
|
},
|
||||||
|
expectedResult: " line1\n line2\n line3",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a change with mixed indentation",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: "\tline1" },
|
||||||
|
{ type: "add", content: " line2" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: ["\tline1", " line3"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: ["\tline1", " line2", " line3"],
|
||||||
|
},
|
||||||
|
expectedResult: "\tline1\n line2\n line3",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a change with mixed indentation and multi-line",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: " line1" },
|
||||||
|
{ type: "add", content: "\tline2\n line3" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: [" line1", " line4"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: [" line1", "\tline2\n line3", " line4"],
|
||||||
|
},
|
||||||
|
expectedResult: " line1\n\tline2\n line3\n line4",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a complex change with mixed indentation and multi-line",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: " line1" },
|
||||||
|
{ type: "remove", content: " line2" },
|
||||||
|
{ type: "add", content: "\tline3\n line4" },
|
||||||
|
{ type: "context", content: " line5" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: [" line1", " line2", " line5", " line6"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: [" line1", "\tline3\n line4", " line5", " line6"],
|
||||||
|
},
|
||||||
|
expectedResult: " line1\n\tline3\n line4\n line5\n line6",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a complex change with mixed indentation and multi-line and context",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: " line1" },
|
||||||
|
{ type: "remove", content: " line2" },
|
||||||
|
{ type: "add", content: "\tline3\n line4" },
|
||||||
|
{ type: "context", content: " line5" },
|
||||||
|
{ type: "context", content: " line6" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: [" line1", " line2", " line5", " line6", " line7"],
|
||||||
|
matchPosition: 0,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: [" line1", "\tline3\n line4", " line5", " line6", " line7"],
|
||||||
|
},
|
||||||
|
expectedResult: " line1\n\tline3\n line4\n line5\n line6\n line7",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "should apply a complex change with mixed indentation and multi-line and context and a different match position",
|
||||||
|
hunk: {
|
||||||
|
changes: [
|
||||||
|
{ type: "context", content: " line1" },
|
||||||
|
{ type: "remove", content: " line2" },
|
||||||
|
{ type: "add", content: "\tline3\n line4" },
|
||||||
|
{ type: "context", content: " line5" },
|
||||||
|
{ type: "context", content: " line6" },
|
||||||
|
],
|
||||||
|
} as Hunk,
|
||||||
|
content: [" line0", " line1", " line2", " line5", " line6", " line7"],
|
||||||
|
matchPosition: 1,
|
||||||
|
expected: {
|
||||||
|
confidence: 1,
|
||||||
|
result: [" line0", " line1", "\tline3\n line4", " line5", " line6", " line7"],
|
||||||
|
},
|
||||||
|
expectedResult: " line0\n line1\n\tline3\n line4\n line5\n line6\n line7",
|
||||||
|
strategies: ["context", "dmp"],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
describe("applyContextMatching", () => {
|
||||||
|
testCases.forEach(({ name, hunk, content, matchPosition, expected, strategies, expectedResult }) => {
|
||||||
|
if (!strategies?.includes("context")) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
it(name, () => {
|
||||||
|
const result = applyContextMatching(hunk, content, matchPosition)
|
||||||
|
expect(result.result.join("\n")).toEqual(expectedResult)
|
||||||
|
expect(result.confidence).toBeGreaterThanOrEqual(expected.confidence)
|
||||||
|
expect(result.strategy).toBe("context")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("applyDMP", () => {
|
||||||
|
testCases.forEach(({ name, hunk, content, matchPosition, expected, strategies, expectedResult }) => {
|
||||||
|
if (!strategies?.includes("dmp")) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
it(name, () => {
|
||||||
|
const result = applyDMP(hunk, content, matchPosition)
|
||||||
|
expect(result.result.join("\n")).toEqual(expectedResult)
|
||||||
|
expect(result.confidence).toBeGreaterThanOrEqual(expected.confidence)
|
||||||
|
expect(result.strategy).toBe("dmp")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user