diff --git a/build.gradle b/build.gradle index c950698..a7374cb 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group 'com.stringcare' -version '3.0' +version '3.1' def siteUrl = 'https://github.com/StringCare/KotlinGradlePlugin' def gitUrl = 'https://github.com/StringCare/KotlinGradlePlugin.git' diff --git a/src/main/kotlin/StringCare.kt b/src/main/kotlin/StringCare.kt index d91837d..3729f22 100644 --- a/src/main/kotlin/StringCare.kt +++ b/src/main/kotlin/StringCare.kt @@ -1,19 +1,23 @@ import components.* +import org.gradle.api.DefaultTask import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.internal.plugins.DslObject +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.TaskAction +import java.io.File open class StringCare : Plugin { companion object { @JvmStatic - private lateinit var absoluteProjectPath: String + internal lateinit var absoluteProjectPath: String - internal var internalTempDir: String? = null + private var internalTempDir: String? = null @JvmStatic var tempFolder: String - get() = internalTempDir?: tempPath() + get() = internalTempDir ?: tempPath() set(value) { internalTempDir = value } @@ -21,12 +25,19 @@ open class StringCare : Plugin { fun resetFolder() { internalTempDir = null } + + @JvmStatic + internal val moduleMap: MutableMap = mutableMapOf() + + @JvmStatic + internal var mainModule: String = defaultMainModule + + @JvmStatic + internal var debug: Boolean = defaultDebug } private lateinit var project: Project private lateinit var extension: Extension - private val moduleMap: MutableMap = mutableMapOf() - override fun apply(target: Project) { this@StringCare.project = target @@ -41,28 +52,36 @@ open class StringCare : Plugin { moduleMap[module.name!!] = Configuration(module.name).apply { stringFiles.addAll(module.stringFiles) srcFolders.addAll(module.srcFolders) + debug = extension.debug } } module.srcFolders.isNotEmpty() -> { moduleMap[module.name!!] = Configuration(module.name).apply { stringFiles.addAll(defaultConfig().stringFiles) srcFolders.addAll(module.srcFolders) + debug = extension.debug } } module.stringFiles.isNotEmpty() -> { moduleMap[module.name!!] = Configuration(module.name).apply { stringFiles.addAll(module.stringFiles) srcFolders.addAll(defaultConfig().srcFolders) + debug = extension.debug } } } } + if (moduleMap.isEmpty()) { + moduleMap[defaultMainModule] = defaultConfig().normalize() + } + this.project.registerTask() } this.project.gradle.addBuildListener(ExecutionListener( debug = extension.debug, dataFound = { _, _ -> // nothing to do here - }, mergeResourcesStart = { module, variant -> + }, + mergeResourcesStart = { module, variant -> fingerPrint(module, variant, extension.debug) { key -> if ("none" == key) { return@fingerPrint @@ -98,11 +117,13 @@ open class StringCare : Plugin { } } - }, mergeResourcesFinish = { module, _ -> + }, + mergeResourcesFinish = { module, _ -> restoreFiles(absoluteProjectPath, module) } )) } + open class Extension { var debug: Boolean = false var main_module: String = "app" @@ -117,7 +138,9 @@ open class StringCare : Plugin { open class Configuration(var name: String?) { var stringFiles = mutableListOf() var srcFolders = mutableListOf() + var debug = false } + } diff --git a/src/main/kotlin/components/Extensions.kt b/src/main/kotlin/components/Extensions.kt index 3eca368..57db5df 100644 --- a/src/main/kotlin/components/Extensions.kt +++ b/src/main/kotlin/components/Extensions.kt @@ -1,5 +1,6 @@ package components +import StringCare import StringCare.Configuration import StringCare.Extension import groovy.json.StringEscapeUtils @@ -11,6 +12,8 @@ import org.slf4j.LoggerFactory import org.w3c.dom.Document import org.w3c.dom.Node import org.xml.sax.InputSource +import task.SCPreview +import task.SCTestObfuscation import java.io.* import javax.xml.parsers.DocumentBuilderFactory import javax.xml.transform.TransformerFactory @@ -33,6 +36,28 @@ fun String.normalize(): String { return com.joinToString(" ") } +fun String.normalizePath(): String { + val unixPath = this.replace("\\", "/") + .replace("\\\\", "/") + .replace("//", "/") + return when (getOs()) { + Os.OSX -> unixPath + Os.WINDOWS -> unixPath.replace("/", "\\") + } +} + +fun String.uncapitalize(): String { + val original = this.trim() + if (original.isEmpty()) { + return "" + } + val char = original[0].toLowerCase() + return when { + original.length == 1 -> char.toString() + else -> char + original.substring(1, original.length) + } +} + fun String.escape(): String = Regex.escape(this) fun String.unescape(): String = StringEscapeUtils.unescapeJava(this) fun String.removeNewLines(): String = this.replace("\n", "") @@ -49,7 +74,7 @@ fun String.androidTreatment(): String { fun File.validForConfiguration(configuration: Configuration): Boolean { var valid = this.absolutePath.contains("${File.separator}${configuration.name}${File.separator}") - + && excluded().not() if (valid) { valid = false configuration.srcFolders.forEach { folder -> @@ -78,9 +103,28 @@ fun File.validForConfiguration(configuration: Configuration): Boolean { } } } + if (configuration.debug && excluded().not()) { + println("${if (valid) "✔ " else "❌ not"} valid file ${this.absolutePath}") + } return valid } +fun File.excluded(): Boolean { + val exclude = listOf( + "/build/", + "/.git/", + "/.gradle/", + "/gradle/" + ) + var valid = true + exclude.forEach { value -> + when { + this.absolutePath.contains(value.normalizePath()) -> valid = false + } + } + return (valid && this.isDirectory.not() && this.absolutePath.contains(".xml")).not() +} + fun File.resourceFile(configuration: Configuration): ResourceFile? { var sourceFolder = "" var validFile: File? = null @@ -123,9 +167,32 @@ fun Project.absolutePath(): String = this.file(wrapperWindows).absolutePath.repl fun Project.createExtension(): Extension { val extension = this.extensions.create(extensionName, Extension::class.java) extension.modules = this.container(Configuration::class.java) + StringCare.mainModule = extension.main_module + StringCare.debug = extension.debug return extension } +fun Project.registerTask() { + this.tasks.addRule("Pattern: $gradleTaskNameObfuscate") { taskName -> + if (taskName.startsWith(gradleTaskNameObfuscate)) { + println("taskname $taskName") + task(taskName) { + it.doLast { + val variant = taskName.replace(gradleTaskNameObfuscate, "").uncapitalize() + println("variant $variant") + val task = this.tasks.getByName(gradleTaskNameObfuscate) as SCTestObfuscation + task.variant = variant + task.module = StringCare.mainModule + task.debug = StringCare.debug + task.greet() + } + } + } + } + this.tasks.register(gradleTaskNameDoctor, SCPreview::class.java) + this.tasks.register(gradleTaskNameObfuscate, SCTestObfuscation::class.java) +} + fun Process.outputString(): String { val input = this.inputStream.bufferedReader().use { it.readText() } val error = this.errorStream.bufferedReader().use { it.readText() } @@ -135,13 +202,16 @@ fun Process.outputString(): String { fun defaultConfig(): Configuration { return Configuration("app").apply { stringFiles.add("strings.xml") - srcFolders.add("src${File.separator}main") + srcFolders.add("src/main") } } fun ResourceFile.backup(): File { - val cleanPath = "${StringCare.tempFolder}${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split(this.sourceFolder)[1]}" - .replace("${File.separator}${File.separator}", File.separator) + val cleanPath = + "${StringCare.tempFolder}${File.separator}${this.module}${File.separator}${this.sourceFolder}${this.file.absolutePath.split( + this.sourceFolder + )[1]}" + .replace("${File.separator}${File.separator}", File.separator) val backupFile = File(cleanPath) this.file.copyTo(backupFile, true) @@ -294,3 +364,17 @@ fun Node.getType(): StringType { else -> StringType.TEXT } } + +fun Configuration.normalize(): Configuration { + val stringFiles = mutableListOf() + val sourceFolders = mutableListOf() + this.stringFiles.forEach { file -> + stringFiles.add(file.normalizePath()) + } + this.srcFolders.forEach { folder -> + sourceFolders.add(folder.normalizePath()) + } + this.stringFiles = stringFiles + this.srcFolders = sourceFolders + return this +} diff --git a/src/main/kotlin/components/Tasks.kt b/src/main/kotlin/components/Tasks.kt index e9219fa..aa699f4 100644 --- a/src/main/kotlin/components/Tasks.kt +++ b/src/main/kotlin/components/Tasks.kt @@ -19,7 +19,9 @@ internal fun pluginBuildTask(): String = "${when (getOs()) { internal val librarySetupTask = """ ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$osxLib out${File.separator}production${File.separator}classes${File.separator}$osxLib && - ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$winLib out${File.separator}production${File.separator}classes${File.separator}$winLib + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$winLib out${File.separator}production${File.separator}classes${File.separator}$winLib && + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$osxLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$osxLib && + ${copyCommand()} src${File.separator}main${File.separator}kotlin${File.separator}components${File.separator}jni${File.separator}$winLib build${File.separator}classes${File.separator}kotlin${File.separator}main${File.separator}$winLib """.trimIndent() internal fun prepareTask(directory: String): String { @@ -37,6 +39,20 @@ internal fun buildTask(directory: String): String { """.trimIndent() } +internal fun basicGradleTask(directory: String): String { + return """ + cd $directory && + ${gradleWrapper()} $gradleTaskNameDoctor + """.trimIndent() +} + +internal fun obfuscationTestGradleTask(directory: String): String { + return """ + cd $directory && + ${gradleWrapper()} ${gradleTaskNameObfuscate}Debug + """.trimIndent() +} + // gradlew task needs export ANDROID_SDK_ROOT=/Users/efrainespada/Library/Android/sdk // echo "sdk.dir=${System.getenv("ANDROID_SDK_ROOT")}" > local.properties && internal fun signingReportTask(directory: String): String { @@ -46,13 +62,6 @@ internal fun signingReportTask(directory: String): String { """.trimIndent() } -internal fun resetCommand(directory: String): String { - return when(getOs()) { - Os.OSX -> "rm -rf $directory && " - Os.WINDOWS -> "rmdir /q/s $directory & " - } -} - internal fun copyCommand(): String = when (getOs()) { Os.WINDOWS -> copyCommandWindows Os.OSX -> copyCommandOsX diff --git a/src/main/kotlin/components/Vars.kt b/src/main/kotlin/components/Vars.kt index 843c05f..bb60915 100644 --- a/src/main/kotlin/components/Vars.kt +++ b/src/main/kotlin/components/Vars.kt @@ -2,9 +2,14 @@ package components import java.io.File +internal const val version = "3.1" internal const val testProjectName = "KotlinSample" +internal const val defaultDebug = false internal const val defaultMainModule = "app" +internal const val defaultVariant = "debug" internal val mainModuleTest = "$testProjectName${File.separator}$defaultMainModule" +internal const val gradleTaskNameDoctor = "stringcarePreview" +internal const val gradleTaskNameObfuscate = "stringcareTestObfuscate" internal const val extensionName = "stringcare" internal const val winLib = "libsignKey.dll" internal const val osxLib = "libsignKey.dylib" diff --git a/src/main/kotlin/components/XParser.kt b/src/main/kotlin/components/XParser.kt index ccd7a4c..a807873 100644 --- a/src/main/kotlin/components/XParser.kt +++ b/src/main/kotlin/components/XParser.kt @@ -6,15 +6,20 @@ import models.SAttribute import models.StringEntity import java.io.File -fun locateFiles(projectPath: String, configuration: Configuration): List = File(projectPath).walkTopDown() - .filterIndexed { _, file -> - file.validForConfiguration(configuration) - }.map { - it.resourceFile(configuration)!! - }.toList() +fun locateFiles(projectPath: String, configuration: Configuration): List { + if (configuration.debug) { + println("== FILES FOUND ======================================") + } + return File(projectPath).walkTopDown() + .filterIndexed { _, file -> + file.validForConfiguration(configuration.normalize()) + }.map { + it.resourceFile(configuration.normalize())!! + }.toList() +} fun backupFiles(projectPath: String, configuration: Configuration): List { - val files = locateFiles(projectPath, configuration) + val files = locateFiles(projectPath, configuration.normalize()) files.forEach { resource -> resource.backup() } diff --git a/src/main/kotlin/task/SCPreview.kt b/src/main/kotlin/task/SCPreview.kt new file mode 100644 index 0000000..e7aaa30 --- /dev/null +++ b/src/main/kotlin/task/SCPreview.kt @@ -0,0 +1,46 @@ +package task + +import StringCare.Companion.absoluteProjectPath +import StringCare.Companion.moduleMap +import components.getContent +import components.locateFiles +import components.parseXML +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction +import java.io.File + +open class SCPreview : DefaultTask() { + @TaskAction + fun greet() { + println("== REPORT ======================================") + println("Modules (${moduleMap.size})") + + moduleMap.forEach { entry -> + val files = locateFiles(absoluteProjectPath, entry.value) + println("Located files(${files.size}) for obfuscating") + files.forEach { file -> + println("- ${file.file.name}") + println("\t${file.module}${File.separator}${file.sourceFolder}${File.separator}") + val entities = parseXML(file.file) + println("path: ${file.file.absolutePath}") + println("") + println("============================") + entities.forEach { entity -> + entity.attributes.forEach { attribute -> + println("\"${attribute.name}\": \"${attribute.value}\"") + } + println("\"value\": \"${entity.value}\"") + println("============================") + } + println("") + println("=== content ================") + println(file.file.getContent()) + println("============================") + + } + } + println("== END REPORT ==================================") + + + } +} diff --git a/src/main/kotlin/task/SCTestObfuscation.kt b/src/main/kotlin/task/SCTestObfuscation.kt new file mode 100644 index 0000000..cabe32f --- /dev/null +++ b/src/main/kotlin/task/SCTestObfuscation.kt @@ -0,0 +1,60 @@ +package task + +import StringCare.Companion.absoluteProjectPath +import StringCare.Companion.moduleMap +import components.* +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.TaskAction + +open class SCTestObfuscation : DefaultTask() { + + @Input + var variant: String? = null + + @Input + var module: String? = null + + @Input + var debug: Boolean? = null + + @TaskAction + fun greet() { + println("== TEST OBFUSCATION ======================================") + println("Modules (${moduleMap.size})") + + moduleMap.forEach { entry -> + var key = "" + signingReportTask().runCommand { _, result -> + key = result.extractFingerprint(entry.value.name!!, variant ?: defaultVariant, debug ?: defaultDebug) + } + println("fingerprint: $key") + println("variant: ${variant ?: "debug"}") + val filesToObfuscate = backupFiles(absoluteProjectPath, entry.value) + filesToObfuscate.forEach { file -> + val originalEntities = parseXML(file.file) + println("============================") + println("path: ${file.file.absolutePath}") + originalEntities.forEach { entity -> + entity.attributes.forEach { attribute -> + println("\"${attribute.name}\": \"${attribute.value}\"") + } + println("\"value\": \"${entity.value}\"") + println("============================") + } + println("") + println("=== content ================") + println(file.file.getContent()) + println("============================") + modifyXML(file.file, module!!, key, true) + println("=== content obfuscated ================") + println(file.file.getContent()) + println("============================") + } + restoreFiles(absoluteProjectPath, entry.value.name!!) + } + println("== END OBFUSCATION ==================================") + + + } +} diff --git a/src/test/kotlin/SCTest.kt b/src/test/kotlin/SCTest.kt index 12fbad5..0621264 100644 --- a/src/test/kotlin/SCTest.kt +++ b/src/test/kotlin/SCTest.kt @@ -9,6 +9,11 @@ class SCTest { // private val logger by logger() + private val configuration = defaultConfig().apply { + stringFiles.add("strings_extra.xml") + srcFolders.add("src/other_source") + } + @Before fun setup() { librarySetupTask.runCommand() @@ -17,6 +22,7 @@ class SCTest { @Test fun `01 - (PLUGIN) terminal verification`() { "echo $extensionName".runCommand { command, result -> + println(result) assert(command.contains(result.normalize())) } } @@ -25,6 +31,7 @@ class SCTest { fun `02 - (PLUGIN) gradlew signingReport`() { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> + println(report) assert(report.contains("SHA1") && report.contains("BUILD SUCCESSFUL")) } } @@ -33,6 +40,7 @@ class SCTest { fun `03 - (PLUGIN) fingerprint extraction`() { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> + println(report) assert(report.extractFingerprint().split(":").size == 20) } } @@ -41,7 +49,7 @@ class SCTest { fun `04 - (PLUGIN) locate string files for default configuration`() { val temp = tempPath() prepareTask(temp).runCommand { _, _ -> - assert(locateFiles("$temp${File.separator}$testProjectName", defaultConfig()).isNotEmpty()) + assert(locateFiles("$temp${File.separator}$testProjectName", configuration).isNotEmpty()) } StringCare.resetFolder() } @@ -50,7 +58,7 @@ class SCTest { fun `05 - (PLUGIN) backup string files`() { val temp = tempPath() prepareTask(temp).runCommand { _, _ -> - assert(backupFiles("$temp${File.separator}$testProjectName", defaultConfig()).isNotEmpty()) + assert(backupFiles("$temp${File.separator}$testProjectName", configuration).isNotEmpty()) } StringCare.resetFolder() } @@ -58,15 +66,13 @@ class SCTest { @Test fun `06 - (PLUGIN) restore string files`() { val temp = tempPath() - prepareTask(temp).runCommand { _, _ -> + prepareTask(temp).runCommand { _, report -> + println(report) assert( restoreFiles("$temp${File.separator}$testProjectName", defaultMainModule).isEmpty() ) assert( - backupFiles("$temp${File.separator}$testProjectName", defaultConfig().apply { - stringFiles.add("strings_extra.xml") - srcFolders.add("src${File.separator}other_source") - }).isNotEmpty() + backupFiles("$temp${File.separator}$testProjectName", configuration).isNotEmpty() ) assert( restoreFiles("$temp${File.separator}$testProjectName", defaultMainModule).isNotEmpty() @@ -77,8 +83,9 @@ class SCTest { @Test fun `07 - (PLUGIN) xml parsing`() { val temp = tempPath() - prepareTask(temp).runCommand { _, _ -> - val files = locateFiles("$temp${File.separator}$testProjectName", defaultConfig()) + prepareTask(temp).runCommand { _, report -> + println(report) + val files = locateFiles("$temp${File.separator}$testProjectName", configuration) files.forEach { assert(parseXML(it.file).isNotEmpty()) } @@ -89,9 +96,11 @@ class SCTest { fun `08 - (PLUGIN) obfuscate string values`() { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> + println(report) val key = report.extractFingerprint() + println(key) assert(key.isNotEmpty()) - val files = locateFiles("$temp${File.separator}$testProjectName", defaultConfig()) + val files = locateFiles("$temp${File.separator}$testProjectName", configuration) files.forEach { file -> val entities = parseXML(file.file) entities.forEach { entity -> @@ -110,12 +119,11 @@ class SCTest { fun `09 - (PLUGIN) obfuscate and reveal string values`() { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> + println(report) val key = report.extractFingerprint() + println(key) assert(key.isNotEmpty()) - val files = locateFiles("$temp${File.separator}$testProjectName", defaultConfig().apply { - stringFiles.add("strings_extra.xml") - srcFolders.add("src${File.separator}other_source") - }) + val files = locateFiles("$temp${File.separator}$testProjectName", configuration) files.forEach { file -> val entities = parseXML(file.file) entities.forEach { entity -> @@ -148,13 +156,14 @@ class SCTest { fun `10 - (PLUGIN) obfuscate xml`() { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> - val files = locateFiles("$temp${File.separator}$testProjectName", defaultConfig()) + println(report) + val files = locateFiles("$temp${File.separator}$testProjectName", configuration) files.forEach { file -> val entities = parseXML(file.file) assert(entities.isNotEmpty()) modifyXML(file.file, "$temp${File.separator}$mainModuleTest", report.extractFingerprint(), true) } - val filesObfuscated = locateFiles("$temp${File.separator}$testProjectName", defaultConfig()) + val filesObfuscated = locateFiles("$temp${File.separator}$testProjectName", configuration) filesObfuscated.forEach { file -> val entities = parseXML(file.file) assert(entities.isEmpty()) @@ -166,10 +175,7 @@ class SCTest { fun `11 - (PLUGIN) obfuscate, restore and compare xml values with originals`() { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> - val configuration = defaultConfig().apply { - stringFiles.add("strings_extra.xml") - srcFolders.add("src${File.separator}other_source") - } + println(report) val files = backupFiles("$temp${File.separator}$testProjectName", configuration) assert(files.isNotEmpty()) files.forEach { file -> @@ -214,10 +220,8 @@ class SCTest { fun `12 - (ANDROID COMPILATION) obfuscate xml and build (not real workflow)`() { val temp = tempPath() signingReportTask(temp).runCommand { _, report -> - val files = locateFiles("$temp${File.separator}$testProjectName", defaultConfig().apply { - stringFiles.add("strings_extra.xml") - srcFolders.add("src${File.separator}other_source") - }) + println(report) + val files = locateFiles("$temp${File.separator}$testProjectName", configuration) files.forEach { file -> val entities = parseXML(file.file) assert(entities.isNotEmpty()) @@ -230,10 +234,7 @@ class SCTest { } val filesObfuscated = locateFiles( "$temp${File.separator}$testProjectName", - defaultConfig().apply { - stringFiles.add("strings_extra.xml") - srcFolders.add("src${File.separator}other_source") - } + configuration ) filesObfuscated.forEach { file -> val entities = parseXML(file.file) @@ -246,6 +247,7 @@ class SCTest { fun `13 - (PLUGIN COMPILATION) plugin with no test`() { pluginBuildTask().runCommand { _, report -> assert(report.contains("BUILD SUCCESSFUL")) + println(report) } } @@ -259,8 +261,41 @@ class SCTest { modifyForTest(temp, testProjectName) buildTask("$temp${File.separator}$testProjectName").runCommand { _, androidReport -> assert(androidReport.contains("BUILD SUCCESSFUL")) + println(androidReport) } } } + @Test + fun `15 - (GRADLE TASK) stringcarePreview`() { + pluginBuildTask().runCommand { _, report -> + assert(report.contains("BUILD SUCCESSFUL")) + } + val temp = tempPath() + prepareTask(temp).runCommand { _, _ -> + modifyForTest(temp, testProjectName) + basicGradleTask("$temp${File.separator}$testProjectName").runCommand { _, androidReport -> + assert(androidReport.contains("END REPORT")) + println(androidReport) + } + + } + } + + @Test + fun `16 - (GRADLE TASK) stringcareTestObfuscate`() { + pluginBuildTask().runCommand { _, report -> + assert(report.contains("BUILD SUCCESSFUL")) + } + val temp = tempPath() + prepareTask(temp).runCommand { _, _ -> + modifyForTest(temp, testProjectName) + obfuscationTestGradleTask("$temp${File.separator}$testProjectName").runCommand { _, androidReport -> + assert(androidReport.contains("END OBFUSCATION")) + println(androidReport) + } + + } + } + } \ No newline at end of file diff --git a/src/test/kotlin/utils/Helper.kt b/src/test/kotlin/utils/Helper.kt index 1f2f2e7..119551b 100644 --- a/src/test/kotlin/utils/Helper.kt +++ b/src/test/kotlin/utils/Helper.kt @@ -3,6 +3,7 @@ package utils import components.Os import components.getContent import components.getOs +import components.version import java.io.File import java.io.FileWriter @@ -12,8 +13,8 @@ fun modifyForTest(directory: String, projectPath: String) { val content = file.getContent().replace( "classpath \"com.stringcare:plugin:\$stringcare_version\"", when (getOs()) { - Os.WINDOWS -> "\nclasspath files(\"${current.absolutePath.replace("\\", "\\\\")}${File.separator}${File.separator}build${File.separator}${File.separator}libs${File.separator}${File.separator}plugin-2.2.jar\")\n" - Os.OSX -> "\nclasspath files(\"${current.absolutePath}${File.separator}build${File.separator}libs${File.separator}plugin-2.2.jar\")\n" + Os.WINDOWS -> "\nclasspath files(\"${current.absolutePath.replace("\\", "\\\\")}${File.separator}${File.separator}build${File.separator}${File.separator}libs${File.separator}${File.separator}plugin-$version.jar\")\n" + Os.OSX -> "\nclasspath files(\"${current.absolutePath}${File.separator}build${File.separator}libs${File.separator}plugin-$version.jar\")\n" } ) FileWriter(file.absolutePath).use { it.write(content) }