diff --git a/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java b/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java index b5fe69dccf..3788b8465f 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java @@ -194,10 +194,6 @@ public static Optional extractCode(String fullMessage) { } int languageStart = codeFenceStart + CODE_FENCE_SYMBOL.length(); - int codeFenceEnd = fullMessage.indexOf(CODE_FENCE_SYMBOL, languageStart); - if (codeFenceEnd == -1) { - return Optional.empty(); - } // Language is between ``` and newline, no spaces allowed, like ```java // Look for the next newline and then assert no space between @@ -213,6 +209,11 @@ public static Optional extractCode(String fullMessage) { languageEnd = languageStart; } + int codeFenceEnd = fullMessage.indexOf(CODE_FENCE_SYMBOL, languageEnd); + if (codeFenceEnd == -1) { + return Optional.empty(); + } + String code = fullMessage.substring(languageEnd, codeFenceEnd).strip(); return Optional.of(new CodeFence(language, code)); diff --git a/application/src/test/java/org/togetherjava/tjbot/features/utils/MessageUtilsTest.java b/application/src/test/java/org/togetherjava/tjbot/features/utils/MessageUtilsTest.java index cfaa20a7fb..a9777cab0a 100644 --- a/application/src/test/java/org/togetherjava/tjbot/features/utils/MessageUtilsTest.java +++ b/application/src/test/java/org/togetherjava/tjbot/features/utils/MessageUtilsTest.java @@ -247,6 +247,19 @@ fun main() { tests.add(Arguments.of("small code fence", "Foo `int x = 5` Bar", null)); + tests.add(Arguments.of("six backticks", """ + ``````test + foo```""", new CodeFence("```test", "foo"))); + + tests.add(Arguments.of("single line", "```java test```", new CodeFence(null, "java test"))); + + tests.add(Arguments.of("space in language", """ + ```java test + test``` + """, new CodeFence(null, """ + java test + test"""))); + return tests; }