diff --git a/src/test/kotlin/io/snyk/plugin/ui/jcef/ApplyFixHandlerTest.kt b/src/test/kotlin/io/snyk/plugin/ui/jcef/ApplyFixHandlerTest.kt index 76725efc..0177528e 100644 --- a/src/test/kotlin/io/snyk/plugin/ui/jcef/ApplyFixHandlerTest.kt +++ b/src/test/kotlin/io/snyk/plugin/ui/jcef/ApplyFixHandlerTest.kt @@ -1,9 +1,9 @@ package io.snyk.plugin.ui.jcef import org.junit.Test -import junit.framework.TestCase.assertEquals +import com.intellij.testFramework.fixtures.BasePlatformTestCase -class DiffPatchTest { +class DiffPatchTest : BasePlatformTestCase(){ private val originalFileContent = """ /* * Copyright (c) 2014-2023 Bjoern Kimminich & the OWASP Juice Shop contributors. @@ -46,8 +46,10 @@ class DiffPatchTest { @Test fun `test applying patch`() { - val diffPatch = parseDiff(responseDiff) - val patchedContent = applyPatch(originalFileContent, diffPatch) + val applyFixHandler = ApplyFixHandler(project) + + val diffPatch = applyFixHandler.parseDiff(responseDiff) + val patchedContent = applyFixHandler.applyPatch(originalFileContent, diffPatch) val expectedPatchedContent = """ /* @@ -76,88 +78,4 @@ class DiffPatchTest { assertEquals(expectedPatchedContent, patchedContent) } - - private fun applyPatch(fileContent: String, diffPatch: DiffPatch): String { - val lines = fileContent.lines().toMutableList() - - for (hunk in diffPatch.hunks) { - var originalLineIndex = hunk.startLineOriginal - 1 // Convert to 0-based index - - for (change in hunk.changes) { - when (change) { - is Change.Addition -> { - lines.add(originalLineIndex, change.line) - originalLineIndex++ - } - is Change.Deletion -> { - if (originalLineIndex < lines.size && lines[originalLineIndex].trim() == change.line) { - lines.removeAt(originalLineIndex) - } - } - is Change.Context -> { - originalLineIndex++ // Move past unchanged context lines - } - } - } - } - return lines.joinToString("\n") - } - - private fun parseDiff(diff: String): DiffPatch { - val lines = diff.lines() - val originalFile = lines.first { it.startsWith("---") }.substringAfter("--- ") - val fixedFile = lines.first { it.startsWith("+++") }.substringAfter("+++ ") - - val hunks = mutableListOf() - var currentHunk: Hunk? = null - val changes = mutableListOf() - - for (line in lines) { - when { - line.startsWith("@@") -> { - // Parse hunk header (e.g., @@ -4,9 +4,14 @@) - val hunkHeader = line.substringAfter("@@ ").substringBefore(" @@").split(" ") - val original = hunkHeader[0].substring(1).split(",") - val fixed = hunkHeader[1].substring(1).split(",") - - val startLineOriginal = original[0].toInt() - val numLinesOriginal = original.getOrNull(1)?.toInt() ?: 1 - val startLineFixed = fixed[0].toInt() - val numLinesFixed = fixed.getOrNull(1)?.toInt() ?: 1 - - if (currentHunk != null) { - hunks.add(currentHunk.copy(changes = changes.toList())) - changes.clear() - } - currentHunk = Hunk( - startLineOriginal = startLineOriginal, - numLinesOriginal = numLinesOriginal, - startLineFixed = startLineFixed, - numLinesFixed = numLinesFixed, - changes = emptyList() - ) - } - - line.startsWith("---") || line.startsWith("+++") -> { - // Skip file metadata lines (--- and +++) - continue - } - - line.startsWith("-") -> changes.add(Change.Deletion(line.substring(1).trim())) - line.startsWith("+") -> changes.add(Change.Addition(line.substring(1).trim())) - else -> changes.add(Change.Context(line.trim())) - } - } - - // Add the last hunk - if (currentHunk != null) { - hunks.add(currentHunk.copy(changes = changes.toList())) - } - - return DiffPatch( - originalFile = originalFile, - fixedFile = fixedFile, - hunks = hunks - ) - } }