diff --git a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtils.kt b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtils.kt index 074c2ec07..18e5605d2 100644 --- a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtils.kt +++ b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtils.kt @@ -21,7 +21,6 @@ import kotlin.reflect.* import kotlin.reflect.full.allSuperclasses import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.functions -import kotlin.text.appendLine /** *

Util operations for rule.

@@ -29,7 +28,7 @@ import kotlin.text.appendLine * @see StandardJdkRuleParser */ @ScriptTypeName("tool") -class RuleToolUtils { +object RuleToolUtils { //region any @@ -46,12 +45,15 @@ class RuleToolUtils { null -> { null } + is Array<*> -> { any } + is Collection<*> -> { any.toTypedArray() } + else -> { arrayOf(any) } @@ -63,15 +65,19 @@ class RuleToolUtils { null -> { null } + is Array<*> -> { any.toMutableList() } + is List<*> -> { any } + is Collection<*> -> { any.toMutableList() } + else -> { listOf(any) } @@ -1032,43 +1038,37 @@ class RuleToolUtils { ToolUtils.copy2Clipboard(str) } - companion object { - - val INSTANCE = RuleToolUtils() - - private val excludedMethods = Arrays.asList( - "hashCode", - "toString", - "equals", - "getClass", - "clone", - "notify", - "notifyAll", - "wait", - "finalize" - ) - - private val TO_LINE_PATTERN = Pattern.compile("[A-Z]+") - - private val typeMapper = KV.create() - .set("java.lang.String", "string") - .set("java.lang.Long", "long") - .set("java.lang.Double", "double") - .set("java.lang.Short", "short") - .set("java.lang.Integer", "int") - .set("java.lang.Object", "object") - .set("kotlin.String", "string") - .set("kotlin.Array", "array") - .set("kotlin.Int", "int") - .set("kotlin.Unit", "void") - .set("kotlin.collections.List", "array") - .set("kotlin.Any", "object") - .set("kotlin.Boolean", "bool") - .set("kotlin.collections.Map", "map") - .set("kotlin.collections.Set", "array") - .set("kotlin.CharArray", "array") - .set("kotlin.Function0", "func") - .set("kotlin.Function1", "func") - - } + private val excludedMethods = listOf( + "hashCode", + "toString", + "equals", + "getClass", + "clone", + "notify", + "notifyAll", + "wait", + "finalize" + ) + + private val TO_LINE_PATTERN = Pattern.compile("[A-Z]+") + + private val typeMapper = KV.create() + .set("java.lang.String", "string") + .set("java.lang.Long", "long") + .set("java.lang.Double", "double") + .set("java.lang.Short", "short") + .set("java.lang.Integer", "int") + .set("java.lang.Object", "object") + .set("kotlin.String", "string") + .set("kotlin.Array", "array") + .set("kotlin.Int", "int") + .set("kotlin.Unit", "void") + .set("kotlin.collections.List", "array") + .set("kotlin.Any", "object") + .set("kotlin.Boolean", "bool") + .set("kotlin.collections.Map", "map") + .set("kotlin.collections.Set", "array") + .set("kotlin.CharArray", "array") + .set("kotlin.Function0", "func") + .set("kotlin.Function1", "func") } \ No newline at end of file diff --git a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParser.kt b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParser.kt index a86385ee9..9b70c9b5d 100644 --- a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParser.kt +++ b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParser.kt @@ -25,17 +25,18 @@ import com.itangcent.suv.http.HttpClientProvider import com.itangcent.utils.TemplateKit import java.nio.charset.Charset import javax.script.* +import kotlin.collections.set abstract class StandardJdkRuleParser : ScriptRuleParser() { @Inject - private var httpClientProvider: HttpClientProvider? = null + private lateinit var httpClientProvider: HttpClientProvider @Inject - protected val localStorage: LocalStorage? = null + protected lateinit var localStorage: LocalStorage @Inject - protected val sessionStorage: SessionStorage? = null + protected lateinit var sessionStorage: SessionStorage private var scriptEngine: ScriptEngine? = null @@ -56,12 +57,12 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { synchronized(this) { if (scriptEngine != null) return scriptEngine!! scriptEngine = buildScriptEngine() + initScripEngine(scriptEngine!!) } if (scriptEngine == null) { unsupported = true throw UnsupportedScriptException(scriptType()) } - initScripEngine(scriptEngine!!) return scriptEngine!! } @@ -72,14 +73,14 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { override fun initScriptContext(scriptContext: ScriptContext, context: RuleContext) { val engineBindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE) engineBindings.putAll(toolBindings) - engineBindings["logger"] = logger + engineBindings.set("logger", "LOG", logger!!) engineBindings["localStorage"] = localStorage - engineBindings["session"] = sessionStorage - engineBindings["helper"] = Helper(context.getPsiContext()) - engineBindings["httpClient"] = httpClientProvider!!.getHttpClient() - engineBindings["files"] = actionContext.instance(Files::class) - engineBindings["config"] = actionContext.instance(Config::class) - engineBindings["runtime"] = Runtime(context) + engineBindings.set("session", "S", sessionStorage) + engineBindings.set("helper", "H", Helper(context.getPsiContext())) + engineBindings["httpClient"] = httpClientProvider.getHttpClient() + engineBindings.set("files", "F", actionContext.instance(Files::class)) + engineBindings.set("config", "C", actionContext.instance(Config::class)) + engineBindings.set("runtime", "R", Runtime(context)) } @Inject @@ -183,7 +184,7 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { defaultFileName: String?, onSaveSuccess: () -> Unit, onSaveFailed: (String?) -> Unit, - onSaveCancel: () -> Unit + onSaveCancel: () -> Unit, ) { saveWithUI( content, @@ -204,7 +205,7 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { defaultFileName: String?, onSaveSuccess: () -> Unit, onSaveFailed: (String?) -> Unit, - onSaveCancel: () -> Unit + onSaveCancel: () -> Unit, ) { saveWithUI( content, @@ -226,7 +227,7 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { defaultFileName: String?, onSaveSuccess: () -> Unit, onSaveFailed: (String?) -> Unit, - onSaveCancel: () -> Unit + onSaveCancel: () -> Unit, ) { fileSaveHelper!!.saveBytes( { @@ -246,7 +247,7 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { fun save( content: String, charset: String, - path: String + path: String, ) { save(content, Charsets.forName(charset)!!.charset(), path) } @@ -254,7 +255,7 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { private fun save( content: String, charset: Charset, - path: String + path: String, ) { FileUtils.forceSave(path, content.toByteArray(charset)) } @@ -290,9 +291,14 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() { init { val bindings: Bindings = SimpleBindings() - bindings["tool"] = RuleToolUtils.INSTANCE - bindings["regex"] = RegexUtils.INSTANCE + bindings.set("tool", "T", RuleToolUtils) + bindings.set("regex", "RE", RegexUtils) toolBindings = bindings } + + fun Bindings.set(name: String, alias: String, value: Any) { + this[name] = value + this[alias] = value + } } } \ No newline at end of file diff --git a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/settings/helper/HttpSettingsHelper.kt b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/settings/helper/HttpSettingsHelper.kt index 2d597225b..f56182028 100644 --- a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/settings/helper/HttpSettingsHelper.kt +++ b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/settings/helper/HttpSettingsHelper.kt @@ -108,7 +108,7 @@ class HttpSettingsHelper { val HOST_RESOLVERS: Array<(String) -> String?> = arrayOf({ if (it.startsWith("https://raw.githubusercontent.com")) { val url = if (it.endsWith("/")) it else "$it/" - return@arrayOf RegexUtils.INSTANCE.extract("https://raw.githubusercontent.com/(.*?)/.*", + return@arrayOf RegexUtils.extract("https://raw.githubusercontent.com/(.*?)/.*", url, "https://raw.githubusercontent.com/$1") } return@arrayOf null diff --git a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/utils/RegexUtils.kt b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/utils/RegexUtils.kt index 0dba76e37..53e53f01b 100755 --- a/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/utils/RegexUtils.kt +++ b/idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/utils/RegexUtils.kt @@ -11,7 +11,7 @@ import java.util.regex.Pattern * Refactoring from {@url https://github.com/aoju/bus/blob/master/bus-core/src/main/java/org/aoju/bus/core/utils/PatternUtils.java} */ @ScriptTypeName("regex") -class RegexUtils { +object RegexUtils { private val cache = WeakHashMap() private val cacheLock = ReentrantReadWriteLock() @@ -191,7 +191,12 @@ class RegexUtils { return findAll(pattern, content, group, collection) } - private fun > findAll(pattern: Pattern?, content: String?, group: Int, collection: T?): T? { + private fun > findAll( + pattern: Pattern?, + content: String?, + group: Int, + collection: T?, + ): T? { if (null == pattern || null == content) { return null } @@ -293,17 +298,6 @@ class RegexUtils { return value } - companion object { - - private const val GROUP_VAR_PATTERN = "\\$(\\d+)" - val GROUP_VAR = Pattern.compile(GROUP_VAR_PATTERN)!! - - val REGEX_KEYWORD = setOf('$', '(', ')', '*', '+', '.', - '[', ']', '?', '\\', '^', '{', '}', '|') - - val INSTANCE = RegexUtils() - } - private class RegexWithFlag(private val regex: String?, private val flag: Int) { override fun hashCode(): Int { @@ -335,5 +329,12 @@ class RegexUtils { } } - + + private const val GROUP_VAR_PATTERN = "\\$(\\d+)" + private val GROUP_VAR = Pattern.compile(GROUP_VAR_PATTERN)!! + + private val REGEX_KEYWORD = setOf( + '$', '(', ')', '*', '+', '.', + '[', ']', '?', '\\', '^', '{', '}', '|' + ) } diff --git a/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtilsTest.kt b/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtilsTest.kt index dfb1249f7..5f97276c4 100644 --- a/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtilsTest.kt +++ b/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/RuleToolUtilsTest.kt @@ -16,380 +16,378 @@ import kotlin.test.assertTrue */ internal class RuleToolUtilsTest { - private val ruleToolUtils = RuleToolUtils() - @Test fun testIsNullOrEmpty() { - assertTrue(ruleToolUtils.isNullOrEmpty(null)) - assertTrue(ruleToolUtils.isNullOrEmpty("")) - assertFalse(ruleToolUtils.isNullOrEmpty(" ")) - assertFalse(ruleToolUtils.isNullOrEmpty("a")) - assertTrue(ruleToolUtils.isNullOrEmpty(emptyArray())) - assertFalse(ruleToolUtils.isNullOrEmpty(arrayOf("a"))) - assertTrue(ruleToolUtils.isNullOrEmpty(emptyList())) - assertFalse(ruleToolUtils.isNullOrEmpty(listOf("a"))) - assertTrue(ruleToolUtils.isNullOrEmpty(emptyMap())) - assertFalse(ruleToolUtils.isNullOrEmpty(mapOf("a" to 1))) - assertFalse(ruleToolUtils.isNullOrEmpty(RuleToolUtilsTestPoint(1, 2, 3))) + assertTrue(RuleToolUtils.isNullOrEmpty(null)) + assertTrue(RuleToolUtils.isNullOrEmpty("")) + assertFalse(RuleToolUtils.isNullOrEmpty(" ")) + assertFalse(RuleToolUtils.isNullOrEmpty("a")) + assertTrue(RuleToolUtils.isNullOrEmpty(emptyArray())) + assertFalse(RuleToolUtils.isNullOrEmpty(arrayOf("a"))) + assertTrue(RuleToolUtils.isNullOrEmpty(emptyList())) + assertFalse(RuleToolUtils.isNullOrEmpty(listOf("a"))) + assertTrue(RuleToolUtils.isNullOrEmpty(emptyMap())) + assertFalse(RuleToolUtils.isNullOrEmpty(mapOf("a" to 1))) + assertFalse(RuleToolUtils.isNullOrEmpty(RuleToolUtilsTestPoint(1, 2, 3))) } @Test fun testNotNullOrEmpty() { - assertFalse(ruleToolUtils.notNullOrEmpty(null)) - assertFalse(ruleToolUtils.notNullOrEmpty("")) - assertTrue(ruleToolUtils.notNullOrEmpty(" ")) - assertTrue(ruleToolUtils.notNullOrEmpty("a")) - assertFalse(ruleToolUtils.notNullOrEmpty(emptyArray())) - assertTrue(ruleToolUtils.notNullOrEmpty(arrayOf("a"))) - assertFalse(ruleToolUtils.notNullOrEmpty(emptyList())) - assertTrue(ruleToolUtils.notNullOrEmpty(listOf("a"))) - assertFalse(ruleToolUtils.notNullOrEmpty(emptyMap())) - assertTrue(ruleToolUtils.notNullOrEmpty(mapOf("a" to 1))) - assertTrue(ruleToolUtils.notNullOrEmpty(RuleToolUtilsTestPoint(1, 2, 3))) + assertFalse(RuleToolUtils.notNullOrEmpty(null)) + assertFalse(RuleToolUtils.notNullOrEmpty("")) + assertTrue(RuleToolUtils.notNullOrEmpty(" ")) + assertTrue(RuleToolUtils.notNullOrEmpty("a")) + assertFalse(RuleToolUtils.notNullOrEmpty(emptyArray())) + assertTrue(RuleToolUtils.notNullOrEmpty(arrayOf("a"))) + assertFalse(RuleToolUtils.notNullOrEmpty(emptyList())) + assertTrue(RuleToolUtils.notNullOrEmpty(listOf("a"))) + assertFalse(RuleToolUtils.notNullOrEmpty(emptyMap())) + assertTrue(RuleToolUtils.notNullOrEmpty(mapOf("a" to 1))) + assertTrue(RuleToolUtils.notNullOrEmpty(RuleToolUtilsTestPoint(1, 2, 3))) } @Test fun testAsArray() { - assertNull(ruleToolUtils.asArray(null)) - assertArrayEquals(arrayOf(1), ruleToolUtils.asArray(1)) - assertArrayEquals(arrayOf(1, 2), ruleToolUtils.asArray(arrayOf(1, 2))) - assertArrayEquals(arrayOf(1, 2), ruleToolUtils.asArray(listOf(1, 2))) + assertNull(RuleToolUtils.asArray(null)) + assertArrayEquals(arrayOf(1), RuleToolUtils.asArray(1)) + assertArrayEquals(arrayOf(1, 2), RuleToolUtils.asArray(arrayOf(1, 2))) + assertArrayEquals(arrayOf(1, 2), RuleToolUtils.asArray(listOf(1, 2))) } @Test fun testAsList() { - assertNull(ruleToolUtils.asList(null)) - assertEquals(arrayListOf(1), ruleToolUtils.asList(1)) - assertEquals(arrayListOf(1, 2), ruleToolUtils.asList(arrayOf(1, 2))) - assertEquals(arrayListOf(1, 2), ruleToolUtils.asList(setOf(1, 2))) - assertEquals(arrayListOf(1, 2), ruleToolUtils.asList(listOf(1, 2))) + assertNull(RuleToolUtils.asList(null)) + assertEquals(arrayListOf(1), RuleToolUtils.asList(1)) + assertEquals(arrayListOf(1, 2), RuleToolUtils.asList(arrayOf(1, 2))) + assertEquals(arrayListOf(1, 2), RuleToolUtils.asList(setOf(1, 2))) + assertEquals(arrayListOf(1, 2), RuleToolUtils.asList(listOf(1, 2))) } @Test fun testIntersect() { - assertNull(ruleToolUtils.intersect(null, null)) - assertNull(ruleToolUtils.intersect(listOf(1, 2), null)) - assertNull(ruleToolUtils.intersect(null, arrayOf(1, 2))) - assertArrayEquals(arrayOf(2, 3), ruleToolUtils.intersect(listOf(1, 2, 3), arrayOf(2, 3, 4))) + assertNull(RuleToolUtils.intersect(null, null)) + assertNull(RuleToolUtils.intersect(listOf(1, 2), null)) + assertNull(RuleToolUtils.intersect(null, arrayOf(1, 2))) + assertArrayEquals(arrayOf(2, 3), RuleToolUtils.intersect(listOf(1, 2, 3), arrayOf(2, 3, 4))) } @Test fun testAnyIntersect() { - assertFalse(ruleToolUtils.anyIntersect(null, null)) - assertFalse(ruleToolUtils.anyIntersect(listOf(1, 2), null)) - assertFalse(ruleToolUtils.anyIntersect(null, arrayOf(1, 2))) - assertTrue(ruleToolUtils.anyIntersect(listOf(1, 2, 3), arrayOf(2, 3, 4))) + assertFalse(RuleToolUtils.anyIntersect(null, null)) + assertFalse(RuleToolUtils.anyIntersect(listOf(1, 2), null)) + assertFalse(RuleToolUtils.anyIntersect(null, arrayOf(1, 2))) + assertTrue(RuleToolUtils.anyIntersect(listOf(1, 2, 3), arrayOf(2, 3, 4))) } @Test fun testEqualOrIntersect() { - assertTrue(ruleToolUtils.equalOrIntersect(null, null)) - assertFalse(ruleToolUtils.equalOrIntersect(listOf(1, 2), null)) - assertFalse(ruleToolUtils.equalOrIntersect(null, arrayOf(1, 2))) - assertTrue(ruleToolUtils.equalOrIntersect(listOf(1, 2, 3), arrayOf(2, 3, 4))) + assertTrue(RuleToolUtils.equalOrIntersect(null, null)) + assertFalse(RuleToolUtils.equalOrIntersect(listOf(1, 2), null)) + assertFalse(RuleToolUtils.equalOrIntersect(null, arrayOf(1, 2))) + assertTrue(RuleToolUtils.equalOrIntersect(listOf(1, 2, 3), arrayOf(2, 3, 4))) } @Test fun testNewSet() { - assertEquals(hashSetOf(1), ruleToolUtils.newSet(1)) - assertEquals(hashSetOf(1, 2), ruleToolUtils.newSet(1, 2)) + assertEquals(hashSetOf(1), RuleToolUtils.newSet(1)) + assertEquals(hashSetOf(1, 2), RuleToolUtils.newSet(1, 2)) } @Test fun testNewList() { - assertEquals(arrayListOf(1), ruleToolUtils.newList(1)) - assertEquals(arrayListOf(1, 2), ruleToolUtils.newList(1, 2)) + assertEquals(arrayListOf(1), RuleToolUtils.newList(1)) + assertEquals(arrayListOf(1, 2), RuleToolUtils.newList(1, 2)) } @Test fun testNewMap() { - assertEquals(LinkedHashMap(), ruleToolUtils.newMap()) + assertEquals(LinkedHashMap(), RuleToolUtils.newMap()) } @Test fun testParseJson() { - assertNull(ruleToolUtils.parseJson(null)) - assertNull(ruleToolUtils.parseJson("")) - assertEquals(mapOf("a" to "b"), ruleToolUtils.parseJson("{\"a\": \"b\"}")) + assertNull(RuleToolUtils.parseJson(null)) + assertNull(RuleToolUtils.parseJson("")) + assertEquals(mapOf("a" to "b"), RuleToolUtils.parseJson("{\"a\": \"b\"}")) } @Test fun testToJson() { - assertEquals(null, ruleToolUtils.toJson(null)) - assertEquals("{\"a\":1}", ruleToolUtils.toJson(mapOf("a" to 1))) + assertEquals(null, RuleToolUtils.toJson(null)) + assertEquals("{\"a\":1}", RuleToolUtils.toJson(mapOf("a" to 1))) } @Test fun testPrettyJson() { - assertEquals(null, ruleToolUtils.prettyJson(null)) - assertEquals("{\n \"a\": 1\n}", ruleToolUtils.prettyJson(mapOf("a" to 1))) + assertEquals(null, RuleToolUtils.prettyJson(null)) + assertEquals("{\n \"a\": 1\n}", RuleToolUtils.prettyJson(mapOf("a" to 1))) } @Test fun testNullOrEmpty() { - assertTrue(ruleToolUtils.nullOrEmpty(null)) - assertTrue(ruleToolUtils.nullOrEmpty("")) - assertFalse(ruleToolUtils.nullOrEmpty(" ")) - assertFalse(ruleToolUtils.nullOrEmpty("123")) + assertTrue(RuleToolUtils.nullOrEmpty(null)) + assertTrue(RuleToolUtils.nullOrEmpty("")) + assertFalse(RuleToolUtils.nullOrEmpty(" ")) + assertFalse(RuleToolUtils.nullOrEmpty("123")) } @Test fun testNullOrBlank() { - assertTrue(ruleToolUtils.nullOrBlank(null)) - assertTrue(ruleToolUtils.nullOrBlank("")) - assertTrue(ruleToolUtils.nullOrBlank(" ")) - assertFalse(ruleToolUtils.nullOrBlank("123")) + assertTrue(RuleToolUtils.nullOrBlank(null)) + assertTrue(RuleToolUtils.nullOrBlank("")) + assertTrue(RuleToolUtils.nullOrBlank(" ")) + assertFalse(RuleToolUtils.nullOrBlank("123")) } @Test fun testNotNullOrBlank() { - assertFalse(ruleToolUtils.notNullOrEmpty(null)) - assertFalse(ruleToolUtils.notNullOrEmpty("")) - assertTrue(ruleToolUtils.notNullOrEmpty(" ")) - assertTrue(ruleToolUtils.notNullOrEmpty("123")) + assertFalse(RuleToolUtils.notNullOrEmpty(null)) + assertFalse(RuleToolUtils.notNullOrEmpty("")) + assertTrue(RuleToolUtils.notNullOrEmpty(" ")) + assertTrue(RuleToolUtils.notNullOrEmpty("123")) } @Test fun testHeadLine() { - assertNull(ruleToolUtils.headLine(null)) - assertEquals(null, ruleToolUtils.headLine("")) - assertEquals("str", ruleToolUtils.headLine("str")) - assertEquals("first", ruleToolUtils.headLine("first\nsecond")) - assertEquals("first", ruleToolUtils.headLine("\nfirst\nsecond")) + assertNull(RuleToolUtils.headLine(null)) + assertEquals(null, RuleToolUtils.headLine("")) + assertEquals("str", RuleToolUtils.headLine("str")) + assertEquals("first", RuleToolUtils.headLine("first\nsecond")) + assertEquals("first", RuleToolUtils.headLine("\nfirst\nsecond")) } @Test fun testCapitalize() { - assertNull(ruleToolUtils.capitalize(null)) - assertEquals("Abc", ruleToolUtils.capitalize("abc")) - assertEquals("ABC", ruleToolUtils.capitalize("ABC")) + assertNull(RuleToolUtils.capitalize(null)) + assertEquals("Abc", RuleToolUtils.capitalize("abc")) + assertEquals("ABC", RuleToolUtils.capitalize("ABC")) } @Test fun testUncapitalize() { - assertNull(ruleToolUtils.uncapitalize(null)) - assertEquals("abc", ruleToolUtils.uncapitalize("Abc")) - assertEquals("abc", ruleToolUtils.uncapitalize("abc")) + assertNull(RuleToolUtils.uncapitalize(null)) + assertEquals("abc", RuleToolUtils.uncapitalize("Abc")) + assertEquals("abc", RuleToolUtils.uncapitalize("abc")) } @Test fun testSwapCase() { - assertNull(ruleToolUtils.swapCase(null)) - assertEquals("ABC", ruleToolUtils.swapCase("abc")) - assertEquals("AbC", ruleToolUtils.swapCase("aBc")) + assertNull(RuleToolUtils.swapCase(null)) + assertEquals("ABC", RuleToolUtils.swapCase("abc")) + assertEquals("AbC", RuleToolUtils.swapCase("aBc")) } @Test fun testUpperCase() { - assertNull(ruleToolUtils.upperCase(null)) - assertEquals("ABC", ruleToolUtils.upperCase("abc")) - assertEquals("ABC", ruleToolUtils.upperCase("aBc")) + assertNull(RuleToolUtils.upperCase(null)) + assertEquals("ABC", RuleToolUtils.upperCase("abc")) + assertEquals("ABC", RuleToolUtils.upperCase("aBc")) } @Test fun testLowerCase() { - assertNull(ruleToolUtils.lowerCase(null)) - assertEquals("abc", ruleToolUtils.lowerCase("abc")) - assertEquals("abc", ruleToolUtils.lowerCase("aBc")) + assertNull(RuleToolUtils.lowerCase(null)) + assertEquals("abc", RuleToolUtils.lowerCase("abc")) + assertEquals("abc", RuleToolUtils.lowerCase("aBc")) } @Test fun testReverse() { - assertNull(ruleToolUtils.reverse(null)) - assertEquals("cba", ruleToolUtils.reverse("abc")) - assertEquals("cBa", ruleToolUtils.reverse("aBc")) + assertNull(RuleToolUtils.reverse(null)) + assertEquals("cba", RuleToolUtils.reverse("abc")) + assertEquals("cBa", RuleToolUtils.reverse("aBc")) } @Test fun testRepeat() { - assertNull(ruleToolUtils.repeat(null, 10)) - assertEquals("", ruleToolUtils.repeat("", 10)) - assertEquals("abc", ruleToolUtils.repeat("abc", 1)) - assertEquals("abcabc", ruleToolUtils.repeat("abc", 2)) - assertEquals("abc,abc", ruleToolUtils.repeat("abc", ",", 2)) + assertNull(RuleToolUtils.repeat(null, 10)) + assertEquals("", RuleToolUtils.repeat("", 10)) + assertEquals("abc", RuleToolUtils.repeat("abc", 1)) + assertEquals("abcabc", RuleToolUtils.repeat("abc", 2)) + assertEquals("abc,abc", RuleToolUtils.repeat("abc", ",", 2)) } @Test fun testIsNumeric() { - assertFalse(ruleToolUtils.isNumeric(null)) - assertFalse(ruleToolUtils.isNumeric("")) - assertFalse(ruleToolUtils.isNumeric(" ")) - assertTrue(ruleToolUtils.isNumeric("123")) - assertTrue(ruleToolUtils.isNumeric("\u0967\u0968\u0969")) - assertFalse(ruleToolUtils.isNumeric("12 3")) - assertFalse(ruleToolUtils.isNumeric("ab2c")) - assertFalse(ruleToolUtils.isNumeric("12-3")) - assertFalse(ruleToolUtils.isNumeric("12.3")) - assertFalse(ruleToolUtils.isNumeric("-123")) - assertFalse(ruleToolUtils.isNumeric("+123")) + assertFalse(RuleToolUtils.isNumeric(null)) + assertFalse(RuleToolUtils.isNumeric("")) + assertFalse(RuleToolUtils.isNumeric(" ")) + assertTrue(RuleToolUtils.isNumeric("123")) + assertTrue(RuleToolUtils.isNumeric("\u0967\u0968\u0969")) + assertFalse(RuleToolUtils.isNumeric("12 3")) + assertFalse(RuleToolUtils.isNumeric("ab2c")) + assertFalse(RuleToolUtils.isNumeric("12-3")) + assertFalse(RuleToolUtils.isNumeric("12.3")) + assertFalse(RuleToolUtils.isNumeric("-123")) + assertFalse(RuleToolUtils.isNumeric("+123")) } @Test fun testIsAlpha() { - assertFalse(ruleToolUtils.isAlpha(null)) - assertFalse(ruleToolUtils.isAlpha("")) - assertFalse(ruleToolUtils.isAlpha(" ")) - assertTrue(ruleToolUtils.isAlpha("abc")) - assertFalse(ruleToolUtils.isAlpha("ab2c")) - assertFalse(ruleToolUtils.isAlpha("ab-c")) + assertFalse(RuleToolUtils.isAlpha(null)) + assertFalse(RuleToolUtils.isAlpha("")) + assertFalse(RuleToolUtils.isAlpha(" ")) + assertTrue(RuleToolUtils.isAlpha("abc")) + assertFalse(RuleToolUtils.isAlpha("ab2c")) + assertFalse(RuleToolUtils.isAlpha("ab-c")) } @Test fun testSubstringBefore() { - assertNull(ruleToolUtils.substringBefore(null, null)) - assertEquals("abc", ruleToolUtils.substringBefore("abc", null)) - assertNull(ruleToolUtils.substringBefore(null, "abc")) - assertEquals("", ruleToolUtils.substringBefore("abc", "abc")) - assertEquals("abcd", ruleToolUtils.substringBefore("abcdefg", "e")) + assertNull(RuleToolUtils.substringBefore(null, null)) + assertEquals("abc", RuleToolUtils.substringBefore("abc", null)) + assertNull(RuleToolUtils.substringBefore(null, "abc")) + assertEquals("", RuleToolUtils.substringBefore("abc", "abc")) + assertEquals("abcd", RuleToolUtils.substringBefore("abcdefg", "e")) } @Test fun testSubstringAfter() { - assertNull(ruleToolUtils.substringAfter(null, null)) - assertEquals("", ruleToolUtils.substringAfter("abc", null)) - assertNull(ruleToolUtils.substringAfter(null, "abc")) - assertEquals("", ruleToolUtils.substringAfter("abc", "abc")) - assertEquals("fg", ruleToolUtils.substringAfter("abcdefg", "e")) + assertNull(RuleToolUtils.substringAfter(null, null)) + assertEquals("", RuleToolUtils.substringAfter("abc", null)) + assertNull(RuleToolUtils.substringAfter(null, "abc")) + assertEquals("", RuleToolUtils.substringAfter("abc", "abc")) + assertEquals("fg", RuleToolUtils.substringAfter("abcdefg", "e")) } @Test fun testSubstringBeforeLast() { - assertNull(ruleToolUtils.substringBeforeLast(null, null)) - assertEquals("abc", ruleToolUtils.substringBeforeLast("abc", null)) - assertNull(ruleToolUtils.substringBeforeLast(null, "abc")) - assertEquals("", ruleToolUtils.substringBeforeLast("abc", "abc")) - assertEquals("abcd", ruleToolUtils.substringBeforeLast("abcdefg", "e")) - assertEquals("abcdefg", ruleToolUtils.substringBeforeLast("abcdefgefg", "e")) + assertNull(RuleToolUtils.substringBeforeLast(null, null)) + assertEquals("abc", RuleToolUtils.substringBeforeLast("abc", null)) + assertNull(RuleToolUtils.substringBeforeLast(null, "abc")) + assertEquals("", RuleToolUtils.substringBeforeLast("abc", "abc")) + assertEquals("abcd", RuleToolUtils.substringBeforeLast("abcdefg", "e")) + assertEquals("abcdefg", RuleToolUtils.substringBeforeLast("abcdefgefg", "e")) } @Test fun testSubstringAfterLast() { - assertNull(ruleToolUtils.substringAfterLast(null, null)) - assertEquals("", ruleToolUtils.substringAfterLast("abc", null)) - assertNull(ruleToolUtils.substringAfterLast(null, "abc")) - assertEquals("", ruleToolUtils.substringAfterLast("abc", "abc")) - assertEquals("fg", ruleToolUtils.substringAfterLast("abcdefg", "e")) - assertEquals("fg", ruleToolUtils.substringAfterLast("abcdefgefg", "e")) + assertNull(RuleToolUtils.substringAfterLast(null, null)) + assertEquals("", RuleToolUtils.substringAfterLast("abc", null)) + assertNull(RuleToolUtils.substringAfterLast(null, "abc")) + assertEquals("", RuleToolUtils.substringAfterLast("abc", "abc")) + assertEquals("fg", RuleToolUtils.substringAfterLast("abcdefg", "e")) + assertEquals("fg", RuleToolUtils.substringAfterLast("abcdefgefg", "e")) } @Test fun testSubstringBetween() { - assertNull(ruleToolUtils.substringBetween(null, null)) - assertNull(ruleToolUtils.substringBetween("abccba", null)) - assertNull(ruleToolUtils.substringBetween(null, "abccba")) - assertNull(ruleToolUtils.substringBetween(null, null, null)) - assertNull(ruleToolUtils.substringBetween("abccba", null, null)) - assertNull(ruleToolUtils.substringBetween(null, "abc", "abc")) - assertEquals("bccb", ruleToolUtils.substringBetween("abccbad", "a")) - assertEquals("cc", ruleToolUtils.substringBetween("abccbad", "b")) - assertEquals("", ruleToolUtils.substringBetween("abccbad", "c")) - assertEquals(null, ruleToolUtils.substringBetween("abccbad", "d")) - assertEquals("ccb", ruleToolUtils.substringBetween("abccbad", "ab", "ad")) + assertNull(RuleToolUtils.substringBetween(null, null)) + assertNull(RuleToolUtils.substringBetween("abccba", null)) + assertNull(RuleToolUtils.substringBetween(null, "abccba")) + assertNull(RuleToolUtils.substringBetween(null, null, null)) + assertNull(RuleToolUtils.substringBetween("abccba", null, null)) + assertNull(RuleToolUtils.substringBetween(null, "abc", "abc")) + assertEquals("bccb", RuleToolUtils.substringBetween("abccbad", "a")) + assertEquals("cc", RuleToolUtils.substringBetween("abccbad", "b")) + assertEquals("", RuleToolUtils.substringBetween("abccbad", "c")) + assertEquals(null, RuleToolUtils.substringBetween("abccbad", "d")) + assertEquals("ccb", RuleToolUtils.substringBetween("abccbad", "ab", "ad")) } @Test fun testSubstringsBetween() { - assertNull(ruleToolUtils.substringsBetween(null, null, null)) - assertNull(ruleToolUtils.substringsBetween("abccba", null, null)) - assertNull(ruleToolUtils.substringsBetween(null, "abccba", "abccba")) - assertArrayEquals(arrayOf("cc", "cca"), ruleToolUtils.substringsBetween("abccdabccaddbadb", "ab", "d")) + assertNull(RuleToolUtils.substringsBetween(null, null, null)) + assertNull(RuleToolUtils.substringsBetween("abccba", null, null)) + assertNull(RuleToolUtils.substringsBetween(null, "abccba", "abccba")) + assertArrayEquals(arrayOf("cc", "cca"), RuleToolUtils.substringsBetween("abccdabccaddbadb", "ab", "d")) } @Test fun testSplit() { - assertNull(ruleToolUtils.split(null)) - assertArrayEquals(emptyArray(), ruleToolUtils.split("")) - assertArrayEquals(arrayOf("abc"), ruleToolUtils.split("abc")) - assertArrayEquals(arrayOf("abc", "def"), ruleToolUtils.split("abc\ndef")) - assertArrayEquals(arrayOf("abc\nd", "ff", "d\ncba"), ruleToolUtils.split("abc\ndeffed\ncba", "e")) + assertNull(RuleToolUtils.split(null)) + assertArrayEquals(emptyArray(), RuleToolUtils.split("")) + assertArrayEquals(arrayOf("abc"), RuleToolUtils.split("abc")) + assertArrayEquals(arrayOf("abc", "def"), RuleToolUtils.split("abc\ndef")) + assertArrayEquals(arrayOf("abc\nd", "ff", "d\ncba"), RuleToolUtils.split("abc\ndeffed\ncba", "e")) } @Test fun testToCamelCase() { - assertNull(ruleToolUtils.toCamelCase(null, true)) - assertEquals("", ruleToolUtils.toCamelCase("", true)) - assertEquals(null, ruleToolUtils.toCamelCase(null, false)) - assertEquals("", ruleToolUtils.toCamelCase("", false, '*')) - assertEquals("*", ruleToolUtils.toCamelCase("*", false)) - assertEquals("*", ruleToolUtils.toCamelCase("*", true)) - assertEquals("toCamelCase", ruleToolUtils.toCamelCase("To.Camel.Case", false, '.')) - assertEquals("ToCamelCase", ruleToolUtils.toCamelCase(" to @ Camel case", true, '@')) - assertEquals("toCamelCase", ruleToolUtils.toCamelCase(" @to @ Camel case", false, '@')) + assertNull(RuleToolUtils.toCamelCase(null, true)) + assertEquals("", RuleToolUtils.toCamelCase("", true)) + assertEquals(null, RuleToolUtils.toCamelCase(null, false)) + assertEquals("", RuleToolUtils.toCamelCase("", false, '*')) + assertEquals("*", RuleToolUtils.toCamelCase("*", false)) + assertEquals("*", RuleToolUtils.toCamelCase("*", true)) + assertEquals("toCamelCase", RuleToolUtils.toCamelCase("To.Camel.Case", false, '.')) + assertEquals("ToCamelCase", RuleToolUtils.toCamelCase(" to @ Camel case", true, '@')) + assertEquals("toCamelCase", RuleToolUtils.toCamelCase(" @to @ Camel case", false, '@')) } @Test fun testCamel2Underline() { - assertNull(ruleToolUtils.camel2Underline(null)) - assertEquals("", ruleToolUtils.camel2Underline("")) - assertEquals("abcdefg", ruleToolUtils.camel2Underline("abcdefg")) - assertEquals("ab_cde_fg", ruleToolUtils.camel2Underline("abCdeFg")) - assertEquals("ab_cde_fg", ruleToolUtils.camel2Underline("AbCdeFg")) + assertNull(RuleToolUtils.camel2Underline(null)) + assertEquals("", RuleToolUtils.camel2Underline("")) + assertEquals("abcdefg", RuleToolUtils.camel2Underline("abcdefg")) + assertEquals("ab_cde_fg", RuleToolUtils.camel2Underline("abCdeFg")) + assertEquals("ab_cde_fg", RuleToolUtils.camel2Underline("AbCdeFg")) } @Test fun testRemovePrefix() { - assertNull(ruleToolUtils.removePrefix(null, null)) - assertNull(ruleToolUtils.removePrefix("abc", null)) - assertNull(ruleToolUtils.removePrefix(null, "abc")) - assertEquals("", ruleToolUtils.removePrefix("abc", "abc")) - assertEquals("abc", ruleToolUtils.removePrefix("abc", "def")) - assertEquals("def", ruleToolUtils.removePrefix("abcdef", "abc")) + assertNull(RuleToolUtils.removePrefix(null, null)) + assertNull(RuleToolUtils.removePrefix("abc", null)) + assertNull(RuleToolUtils.removePrefix(null, "abc")) + assertEquals("", RuleToolUtils.removePrefix("abc", "abc")) + assertEquals("abc", RuleToolUtils.removePrefix("abc", "def")) + assertEquals("def", RuleToolUtils.removePrefix("abcdef", "abc")) } @Test fun testRemoveSuffix() { - assertNull(ruleToolUtils.removeSuffix(null, null)) - assertNull(ruleToolUtils.removeSuffix("abc", null)) - assertNull(ruleToolUtils.removeSuffix(null, "abc")) - assertEquals("", ruleToolUtils.removeSuffix("abc", "abc")) - assertEquals("abc", ruleToolUtils.removeSuffix("abc", "def")) - assertEquals("abc", ruleToolUtils.removeSuffix("abcdef", "def")) + assertNull(RuleToolUtils.removeSuffix(null, null)) + assertNull(RuleToolUtils.removeSuffix("abc", null)) + assertNull(RuleToolUtils.removeSuffix(null, "abc")) + assertEquals("", RuleToolUtils.removeSuffix("abc", "abc")) + assertEquals("abc", RuleToolUtils.removeSuffix("abc", "def")) + assertEquals("abc", RuleToolUtils.removeSuffix("abcdef", "def")) } @Test fun testResolveProperty() { - assertNull(ruleToolUtils.resolveProperty(null, null, null)) + assertNull(RuleToolUtils.resolveProperty(null, null, null)) assertEquals( ",\${y}", - ruleToolUtils.resolveProperty("#{x},\${y}", "#", emptyMap()) + RuleToolUtils.resolveProperty("#{x},\${y}", "#", emptyMap()) ) assertEquals( - "111,\${y}", ruleToolUtils.resolveProperty("#{x},\${y}", "#", mapOf("x" to 111)) + "111,\${y}", RuleToolUtils.resolveProperty("#{x},\${y}", "#", mapOf("x" to 111)) ) assertEquals( - "111,\${y}", ruleToolUtils.resolveProperty("#{x},\${y}", "#", mapOf("x" to 111, "y" to 222)) + "111,\${y}", RuleToolUtils.resolveProperty("#{x},\${y}", "#", mapOf("x" to 111, "y" to 222)) ) assertEquals( ",", - ruleToolUtils.resolveProperty("#{x},\${y}", "#$", emptyMap()) + RuleToolUtils.resolveProperty("#{x},\${y}", "#$", emptyMap()) ) assertEquals( - "111,", ruleToolUtils.resolveProperty("#{x},\${y}", "#$", mapOf("x" to 111)) + "111,", RuleToolUtils.resolveProperty("#{x},\${y}", "#$", mapOf("x" to 111)) ) assertEquals( - "111,222", ruleToolUtils.resolveProperty("#{x},\${y}", "#$", mapOf("x" to 111, "y" to 222)) + "111,222", RuleToolUtils.resolveProperty("#{x},\${y}", "#$", mapOf("x" to 111, "y" to 222)) ) } @Test fun testNow() { assertTrue( - Pattern.compile("\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d").matcher(ruleToolUtils.now()).matches() + Pattern.compile("\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d").matcher(RuleToolUtils.now()).matches() ) - assertTrue(Pattern.compile("\\d\\d\\d\\d-\\d\\d-\\d\\d").matcher(ruleToolUtils.now("yyyy-MM-dd")).matches()) + assertTrue(Pattern.compile("\\d\\d\\d\\d-\\d\\d-\\d\\d").matcher(RuleToolUtils.now("yyyy-MM-dd")).matches()) } @Test fun testToday() { - assertTrue(Pattern.compile("\\d\\d\\d\\d-\\d\\d-\\d\\d").matcher(ruleToolUtils.today()).matches()) + assertTrue(Pattern.compile("\\d\\d\\d\\d-\\d\\d-\\d\\d").matcher(RuleToolUtils.today()).matches()) } @Test fun testFormat() { val date = DateUtils.parse("2020-01-01") - assertEquals("2020-01-01 02:23:20", ruleToolUtils.format(date.time + 8600000, "yyyy-MM-dd HH:mm:ss")) + assertEquals("2020-01-01 02:23:20", RuleToolUtils.format(date.time + 8600000, "yyyy-MM-dd HH:mm:ss")) } @Test @@ -445,21 +443,21 @@ internal class RuleToolUtilsTest { "string today()\n" + "string traversal(object)\n" + "string uncapitalize(string)\n" + - "string upperCase(string)\n", ruleToolUtils.debug(ruleToolUtils) + "string upperCase(string)\n", RuleToolUtils.debug(RuleToolUtils) ) } @Test fun testTraversal() { - assertEquals("null", ruleToolUtils.traversal(null)) - assertEquals("unable traversal abc", ruleToolUtils.traversal("abc")) + assertEquals("null", RuleToolUtils.traversal(null)) + assertEquals("unable traversal abc", RuleToolUtils.traversal("abc")) } @Test fun testCopy2Clipboard() { assertDoesNotThrow { try { - ruleToolUtils.copy2Clipboard("abc") + RuleToolUtils.copy2Clipboard("abc") } catch (e: HeadlessException) { //ignore HeadlessException } diff --git a/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParserTest.kt b/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParserTest.kt index c9fde5029..30df9f354 100644 --- a/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParserTest.kt +++ b/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/rule/StandardJdkRuleParserTest.kt @@ -45,14 +45,16 @@ internal class StandardJdkRuleParserTest : RuleParserBaseTest() { builder.bindInstance(ExportChannel::class, ExportChannel.of("markdown")) } - override fun customConfig(): String? { + override fun customConfig(): String { return "x=123\nx=456\ny=666" } fun testLogger() { - LoggerCollector.getLog()//clear - ruleParser.parseEventRule("groovy:logger.info(\"hello world\")")!!.compute(ruleContext) - assertEquals("[INFO]\thello world\n", LoggerCollector.getLog().toUnixString()) + arrayOf("logger", "LOG").forEach { logger -> + LoggerCollector.getLog()//clear + ruleParser.parseEventRule("groovy:$logger.info(\"hello world\")")!!.compute(ruleContext) + assertEquals("[INFO]\thello world\n", LoggerCollector.getLog().toUnixString()) + } } fun testLocalStorage() { @@ -61,8 +63,12 @@ internal class StandardJdkRuleParserTest : RuleParserBaseTest() { } fun testSessionStorage() { - ruleParser.parseEventRule("groovy:session.set(\"demo\",1)")!!.compute(ruleContext) - assertEquals(1, sessionStorage.get("demo")) + arrayOf("session", "S").forEach { session -> + ruleParser.parseEventRule("groovy:$session.set(\"demo\",1)")!!.compute(ruleContext) + assertEquals(1, sessionStorage.get("demo")) + ruleParser.parseEventRule("groovy:$session.set(\"demo\",2)")!!.compute(ruleContext) + assertEquals(2, sessionStorage.get("demo")) + } } fun testHttpClient() { @@ -77,96 +83,104 @@ internal class StandardJdkRuleParserTest : RuleParserBaseTest() { * Test case of [com.itangcent.idea.plugin.rule.StandardJdkRuleParser.Helper] */ fun testHelper() { - assertEquals( - "com.itangcent.model.Model", - ruleParser.parseStringRule("groovy:helper.findClass(\"com.itangcent.model.Model\")")!! - .compute(ruleParser.contextOf(userCtrlPsiClass, userCtrlPsiClass)) - ) - assertEquals( - "com.itangcent.model.Model#str", - ruleParser.parseStringRule("groovy:helper.resolveLink(\"{@link com.itangcent.model.Model#str}\")")!! - .compute(ruleParser.contextOf(userCtrlPsiClass, userCtrlPsiClass)) - ) - assertEquals( - "[com.itangcent.model.Model, com.itangcent.model.Model#str]", - ruleParser.parseStringRule("groovy:helper.resolveLinks(\"{@link com.itangcent.model.Model},{@link com.itangcent.model.Model#str}\")")!! - .compute(ruleParser.contextOf(userCtrlPsiClass, userCtrlPsiClass)) - ) + arrayOf("helper", "H").forEach { helper -> + assertEquals( + "com.itangcent.model.Model", + ruleParser.parseStringRule("groovy:$helper.findClass(\"com.itangcent.model.Model\")")!! + .compute(ruleParser.contextOf(userCtrlPsiClass, userCtrlPsiClass)) + ) + assertEquals( + "com.itangcent.model.Model#str", + ruleParser.parseStringRule("groovy:$helper.resolveLink(\"{@link com.itangcent.model.Model#str}\")")!! + .compute(ruleParser.contextOf(userCtrlPsiClass, userCtrlPsiClass)) + ) + assertEquals( + "[com.itangcent.model.Model, com.itangcent.model.Model#str]", + ruleParser.parseStringRule("groovy:$helper.resolveLinks(\"{@link com.itangcent.model.Model},{@link com.itangcent.model.Model#str}\")")!! + .compute(ruleParser.contextOf(userCtrlPsiClass, userCtrlPsiClass)) + ) + } } /** * Test case of [com.itangcent.idea.plugin.rule.StandardJdkRuleParser.Config] */ fun testConfig() { - assertEquals( - "123", - ruleParser.parseStringRule("groovy:config.get(\"x\")")!! - .compute(ruleContext) - ) - assertEquals( - "123456", - ruleParser.parseStringRule("groovy:config.getValues(\"x\").join()")!! - .compute(ruleContext) - ) - assertEquals( - "666", - ruleParser.parseStringRule("groovy:config.resolveProperty(\"\\\${y}\")")!! - .compute(ruleContext) - ) - assertNull( - ruleParser.parseStringRule("groovy:config.resolvePropertyWith(null,\"#\\\$\",[z:888])")!! - .compute(ruleContext) - ) - assertEquals( - "#{x},888", - ruleParser.parseStringRule("groovy:config.resolvePropertyWith(\"#{x},\\\${z}\",null,[z:888])")!! - .compute(ruleContext) - ) - assertEquals( - "123,", - ruleParser.parseStringRule("groovy:config.resolvePropertyWith(\"#{x},\\\${z}\",\"#\\\$\",null)")!! - .compute(ruleContext) - ) - assertEquals( - "123,888", - ruleParser.parseStringRule("groovy:config.resolvePropertyWith(\"#{x},\\\${z}\",\"#\\\$\",[z:888])")!! - .compute(ruleContext) - ) + arrayOf("config", "C").forEach { config -> + assertEquals( + "123", + ruleParser.parseStringRule("groovy:$config.get(\"x\")")!! + .compute(ruleContext) + ) + assertEquals( + "123456", + ruleParser.parseStringRule("groovy:$config.getValues(\"x\").join()")!! + .compute(ruleContext) + ) + assertEquals( + "666", + ruleParser.parseStringRule("groovy:$config.resolveProperty(\"\\\${y}\")")!! + .compute(ruleContext) + ) + assertNull( + ruleParser.parseStringRule("groovy:$config.resolvePropertyWith(null,\"#\\\$\",[z:888])")!! + .compute(ruleContext) + ) + assertEquals( + "#{x},888", + ruleParser.parseStringRule("groovy:$config.resolvePropertyWith(\"#{x},\\\${z}\",null,[z:888])")!! + .compute(ruleContext) + ) + assertEquals( + "123,", + ruleParser.parseStringRule("groovy:$config.resolvePropertyWith(\"#{x},\\\${z}\",\"#\\\$\",null)")!! + .compute(ruleContext) + ) + assertEquals( + "123,888", + ruleParser.parseStringRule("groovy:$config.resolvePropertyWith(\"#{x},\\\${z}\",\"#\\\$\",[z:888])")!! + .compute(ruleContext) + ) + } } /** * Test case of [com.itangcent.idea.plugin.rule.StandardJdkRuleParser.Files] */ fun testFiles() { - val demoPath = tempDir.sub("demo.txt").escapeBackslash() - ruleParser.parseEventRule("groovy:files.save(\"hello world\",\"$demoPath\")")!! - .compute(ruleContext) - Assert.assertEquals("hello world", FileUtils.read(File(demoPath))) - ruleParser.parseEventRule("groovy:files.saveWithUI({\"hello world!\"},\"demo2.txt\",{},{},{})")!! - .compute(ruleContext) - Assert.assertEquals("hello world!", - (fileSaveHelper as FileSaveHelperAdaptor).bytes()?.let { String(it, Charsets.UTF_8) }) + arrayOf("files", "F").forEach { files -> + val demoPath = tempDir.sub("demo.txt").escapeBackslash() + ruleParser.parseEventRule("groovy:$files.save(\"hello world\",\"$demoPath\")")!! + .compute(ruleContext) + Assert.assertEquals("hello world", FileUtils.read(File(demoPath))) + ruleParser.parseEventRule("groovy:$files.saveWithUI({\"hello world!\"},\"demo2.txt\",{},{},{})")!! + .compute(ruleContext) + Assert.assertEquals("hello world!", + (fileSaveHelper as FileSaveHelperAdaptor).bytes()?.let { String(it, Charsets.UTF_8) }) + } } /** * Test case of [com.itangcent.idea.plugin.rule.StandardJdkRuleParser.Runtime] */ fun testRuntime() { - Assert.assertEquals( - "markdown", ruleParser.parseStringRule("groovy:runtime.channel()")!! - .compute(ruleContext) - ) - Assert.assertEquals( - project.name, ruleParser.parseStringRule("groovy:runtime.projectName()")!! - .compute(ruleContext) - ) - Assert.assertEquals( - project.basePath, ruleParser.parseStringRule("groovy:runtime.projectPath()")!! - .compute(ruleContext) - ) - Assert.assertEquals( - "test_default", ruleParser.parseStringRule("groovy:runtime.module()")!! - .compute(ruleParser.contextOf("userCtrlPsiClass", userCtrlPsiClass)) - ) + arrayOf("runtime", "R").forEach { runtime -> + Assert.assertEquals( + "markdown", ruleParser.parseStringRule("groovy:$runtime.channel()")!! + .compute(ruleContext) + ) + Assert.assertEquals( + project.name, ruleParser.parseStringRule("groovy:$runtime.projectName()")!! + .compute(ruleContext) + ) + Assert.assertEquals( + project.basePath, ruleParser.parseStringRule("groovy:$runtime.projectPath()")!! + .compute(ruleContext) + ) + Assert.assertEquals( + "test_default", ruleParser.parseStringRule("groovy:$runtime.module()")!! + .compute(ruleParser.contextOf("userCtrlPsiClass", userCtrlPsiClass)) + ) + } } } \ No newline at end of file diff --git a/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/utils/RegexUtilsTest.kt b/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/utils/RegexUtilsTest.kt index c9247c324..2ba6f09c9 100644 --- a/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/utils/RegexUtilsTest.kt +++ b/idea-plugin/src/test/kotlin/com/itangcent/idea/plugin/utils/RegexUtilsTest.kt @@ -13,87 +13,85 @@ class RegexUtilsTest { @Test fun testGet() { - assertEquals("123", REGEX_UTILS.getGroup0("\\d+", "abc123efg")) - assertEquals("123", REGEX_UTILS.getGroup1("(\\d+)", "abc123efg")) - assertEquals(null, REGEX_UTILS.getGroup1("\\d[a-z]\\d+", "abc123efg")) - assertEquals(null, REGEX_UTILS.get(null, "abc123efg", 1)) - assertEquals(null, REGEX_UTILS.get("(\\d+)", null, 1)) - assertEquals("efg", REGEX_UTILS.get("(\\d+)(.*?)$", "abc123efg", 2)) - assertEquals(arrayListOf("123", "efg", "456"), REGEX_UTILS.getAllGroups("(\\d+)(.*?)(\\d+)\$", "abc123efg456")) - assertEquals(emptyList(), REGEX_UTILS.getAllGroups("(\\d+F\\d+)\$", "abc123efg456")) - assertEquals(null, REGEX_UTILS.getAllGroups(null, "abc123efg456")) - assertEquals(null, REGEX_UTILS.getAllGroups("(\\d+F\\d+)\$", null)) + assertEquals("123", RegexUtils.getGroup0("\\d+", "abc123efg")) + assertEquals("123", RegexUtils.getGroup1("(\\d+)", "abc123efg")) + assertEquals(null, RegexUtils.getGroup1("\\d[a-z]\\d+", "abc123efg")) + assertEquals(null, RegexUtils.get(null, "abc123efg", 1)) + assertEquals(null, RegexUtils.get("(\\d+)", null, 1)) + assertEquals("efg", RegexUtils.get("(\\d+)(.*?)$", "abc123efg", 2)) + assertEquals(arrayListOf("123", "efg", "456"), RegexUtils.getAllGroups("(\\d+)(.*?)(\\d+)\$", "abc123efg456")) + assertEquals(emptyList(), RegexUtils.getAllGroups("(\\d+F\\d+)\$", "abc123efg456")) + assertEquals(null, RegexUtils.getAllGroups(null, "abc123efg456")) + assertEquals(null, RegexUtils.getAllGroups("(\\d+F\\d+)\$", null)) } @Test fun testFind() { - assertEquals(listOf("c123", "g456"), REGEX_UTILS.findAllGroup0("[a-z]\\d+", "abc123efg456")) - assertEquals(listOf("123", "456"), REGEX_UTILS.findAllGroup1("[a-z](\\d+)", "abc123efg456")) - assertEquals(listOf("c", "g"), REGEX_UTILS.findAll("([a-z])(\\d+)", "abc123efg456", 1)) + assertEquals(listOf("c123", "g456"), RegexUtils.findAllGroup0("[a-z]\\d+", "abc123efg456")) + assertEquals(listOf("123", "456"), RegexUtils.findAllGroup1("[a-z](\\d+)", "abc123efg456")) + assertEquals(listOf("c", "g"), RegexUtils.findAll("([a-z])(\\d+)", "abc123efg456", 1)) } @Test fun testExtract() { - assertEquals("abcxefgx", REGEX_UTILS.extract("\\d+", "abc123efg456", "x")) - assertEquals("ab123-cef456-g", REGEX_UTILS.extract("([a-z])(\\d+)", "abc123efg456", "$2-$1")) - assertThrows { REGEX_UTILS.extract("[a-z]\\d+", "abc123efg456", "$2-$1") } - assertEquals(null, REGEX_UTILS.extract(null, "abc123efg456", "$2-$1")) - assertEquals(null, REGEX_UTILS.extract("([a-z])(\\d+)", null, "$2-$1")) - assertEquals(null, REGEX_UTILS.extract("([a-z])(\\d+)", "abc123efg456", null)) - assertEquals("ab123-cef456-g", REGEX_UTILS.replaceAll("abc123efg456", "([a-z])(\\d+)", "$2-$1")) + assertEquals("abcxefgx", RegexUtils.extract("\\d+", "abc123efg456", "x")) + assertEquals("ab123-cef456-g", RegexUtils.extract("([a-z])(\\d+)", "abc123efg456", "$2-$1")) + assertThrows { RegexUtils.extract("[a-z]\\d+", "abc123efg456", "$2-$1") } + assertEquals(null, RegexUtils.extract(null, "abc123efg456", "$2-$1")) + assertEquals(null, RegexUtils.extract("([a-z])(\\d+)", null, "$2-$1")) + assertEquals(null, RegexUtils.extract("([a-z])(\\d+)", "abc123efg456", null)) + assertEquals("ab123-cef456-g", RegexUtils.replaceAll("abc123efg456", "([a-z])(\\d+)", "$2-$1")) } @Test fun testDel() { - assertEquals("abcefg", REGEX_UTILS.delAll("\\d+", "abc123efg456")) - assertEquals("123456", REGEX_UTILS.delAll("[a-z]", "abc123efg456")) - assertEquals("", REGEX_UTILS.delAll("[a-z]", "")) - assertEquals("abc123efg456", REGEX_UTILS.delAll("", "abc123efg456")) - assertEquals("123efg456", REGEX_UTILS.delBefore("\\d", "abc123efg456")) - assertEquals("", REGEX_UTILS.delBefore("\\d", "")) - assertEquals("abc123efg456", REGEX_UTILS.delBefore("\\d[a-z]\\d", "abc123efg456")) - assertEquals("bc123efg456", REGEX_UTILS.delFirst("[a-z]", "abc123efg456")) - assertEquals("", REGEX_UTILS.delFirst("[a-z]", "")) - assertEquals("123efg456", REGEX_UTILS.delFirst("[a-z]+", "abc123efg456")) + assertEquals("abcefg", RegexUtils.delAll("\\d+", "abc123efg456")) + assertEquals("123456", RegexUtils.delAll("[a-z]", "abc123efg456")) + assertEquals("", RegexUtils.delAll("[a-z]", "")) + assertEquals("abc123efg456", RegexUtils.delAll("", "abc123efg456")) + assertEquals("123efg456", RegexUtils.delBefore("\\d", "abc123efg456")) + assertEquals("", RegexUtils.delBefore("\\d", "")) + assertEquals("abc123efg456", RegexUtils.delBefore("\\d[a-z]\\d", "abc123efg456")) + assertEquals("bc123efg456", RegexUtils.delFirst("[a-z]", "abc123efg456")) + assertEquals("", RegexUtils.delFirst("[a-z]", "")) + assertEquals("123efg456", RegexUtils.delFirst("[a-z]+", "abc123efg456")) } @Test fun testCount() { - assertEquals(2, REGEX_UTILS.count("\\d+", "abc123efg456")) - assertEquals(6, REGEX_UTILS.count("\\d", "abc123efg456")) - assertEquals(0, REGEX_UTILS.count(null, "abc123efg456")) - assertEquals(0, REGEX_UTILS.count("\\d", null)) + assertEquals(2, RegexUtils.count("\\d+", "abc123efg456")) + assertEquals(6, RegexUtils.count("\\d", "abc123efg456")) + assertEquals(0, RegexUtils.count(null, "abc123efg456")) + assertEquals(0, RegexUtils.count("\\d", null)) } @Test fun testContains() { - assertTrue(REGEX_UTILS.contains("\\d+", "abc123efg456")) - assertTrue(REGEX_UTILS.contains("\\d", "abc123efg456")) - assertTrue(REGEX_UTILS.contains("[a-z]\\d", "abc123efg456")) - assertFalse(REGEX_UTILS.contains("\\d[a-z]\\d", "abc123efg456")) - assertFalse(REGEX_UTILS.contains(null, "abc123efg456")) - assertFalse(REGEX_UTILS.contains("\\d", null)) + assertTrue(RegexUtils.contains("\\d+", "abc123efg456")) + assertTrue(RegexUtils.contains("\\d", "abc123efg456")) + assertTrue(RegexUtils.contains("[a-z]\\d", "abc123efg456")) + assertFalse(RegexUtils.contains("\\d[a-z]\\d", "abc123efg456")) + assertFalse(RegexUtils.contains(null, "abc123efg456")) + assertFalse(RegexUtils.contains("\\d", null)) } @Test fun testIsMatch() { - assertFalse(REGEX_UTILS.isMatch("\\d+", "abc123efg456")) - assertFalse(REGEX_UTILS.isMatch("\\d", "abc123efg456")) - assertFalse(REGEX_UTILS.isMatch("[a-z]\\d", "abc123efg456")) - assertTrue(REGEX_UTILS.isMatch("[a-z]+\\d+[a-z]+\\d+", "abc123efg456")) - assertFalse(REGEX_UTILS.isMatch("\\d[a-z]\\d", "abc123efg456")) - assertFalse(REGEX_UTILS.isMatch(null, "abc123efg456")) - assertFalse(REGEX_UTILS.isMatch("\\d", null)) + assertFalse(RegexUtils.isMatch("\\d+", "abc123efg456")) + assertFalse(RegexUtils.isMatch("\\d", "abc123efg456")) + assertFalse(RegexUtils.isMatch("[a-z]\\d", "abc123efg456")) + assertTrue(RegexUtils.isMatch("[a-z]+\\d+[a-z]+\\d+", "abc123efg456")) + assertFalse(RegexUtils.isMatch("\\d[a-z]\\d", "abc123efg456")) + assertFalse(RegexUtils.isMatch(null, "abc123efg456")) + assertFalse(RegexUtils.isMatch("\\d", null)) } @Test fun testEscape() { - assertEquals(null, REGEX_UTILS.escape(null)) - assertEquals("", REGEX_UTILS.escape("")) - assertEquals("abc123efg456", REGEX_UTILS.escape("abc123efg456")) - assertEquals("\\\$\\(a\\)bc123efg456", REGEX_UTILS.escape("\$(a)bc123efg456")) - assertEquals("\\\$\\(\\)\\*\\+\\.\\[\\]\\?\\\\\\\\\\^\\{\\}\\|", REGEX_UTILS.escape("\$()*+.[]?\\\\^{}|")) + assertEquals(null, RegexUtils.escape(null)) + assertEquals("", RegexUtils.escape("")) + assertEquals("abc123efg456", RegexUtils.escape("abc123efg456")) + assertEquals("\\\$\\(a\\)bc123efg456", RegexUtils.escape("\$(a)bc123efg456")) + assertEquals("\\\$\\(\\)\\*\\+\\.\\[\\]\\?\\\\\\\\\\^\\{\\}\\|", RegexUtils.escape("\$()*+.[]?\\\\^{}|")) } } - -private val REGEX_UTILS = RegexUtils();