From ac4ca0a760598f53c542384277f5d71507a057bb Mon Sep 17 00:00:00 2001 From: Eugene Berman Date: Mon, 28 Jul 2025 08:23:46 -0400 Subject: [PATCH] substringAfter bug fix --- src/main/scala/com/datasonnet/DS.scala | 3 ++- src/test/java/com/datasonnet/StringsTest.java | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/scala/com/datasonnet/DS.scala b/src/main/scala/com/datasonnet/DS.scala index bd488e93..cefe7743 100644 --- a/src/main/scala/com/datasonnet/DS.scala +++ b/src/main/scala/com/datasonnet/DS.scala @@ -2353,10 +2353,11 @@ object DSLowercase extends Library { (_, _, value: Val, sep: String) => value match { case Val.Str(s) => + val sepLength = sep.length Val.Lazy(Val.Str(s.substring( s.indexOf(sep) match { case -1 => s.length - case i => if (sep.equals("")) i else i + 1 + case i => if (sep.equals("")) i else i + sepLength } ))).force case Val.Null => Val.Lazy(Val.Null).force diff --git a/src/test/java/com/datasonnet/StringsTest.java b/src/test/java/com/datasonnet/StringsTest.java index 2658439c..a47904f8 100644 --- a/src/test/java/com/datasonnet/StringsTest.java +++ b/src/test/java/com/datasonnet/StringsTest.java @@ -485,6 +485,14 @@ void testStrings_substringAfter() { value = mapper.transform("{}").replaceAll("\"", ""); assertEquals("abc", value); + mapper = new Mapper(lib + pack + ".substringAfter(\"abcba\", \"ab\")", new ArrayList<>(), new HashMap<>(), true); + value = mapper.transform("{}").replaceAll("\"", ""); + assertEquals("cba", value); + + mapper = new Mapper(lib + pack + ".substringAfter(\"abcXXXba\", \"XXX\")", new ArrayList<>(), new HashMap<>(), true); + value = mapper.transform("{}").replaceAll("\"", ""); + assertEquals("ba", value); + } @Test