From 0463adea80fe2b7cd1b146a575a4207b1a1e7056 Mon Sep 17 00:00:00 2001 From: linjianhui <1273887820@qq.com> Date: Thu, 19 May 2022 14:14:40 +0800 Subject: [PATCH] [TEXT-209]Fixed LookupTranslator returns count of codepoints consumed --- .../commons/text/translate/LookupTranslator.java | 2 +- .../text/translate/LookupTranslatorTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/commons/text/translate/LookupTranslator.java b/src/main/java/org/apache/commons/text/translate/LookupTranslator.java index 18a7c93d2f..8c12a6da90 100644 --- a/src/main/java/org/apache/commons/text/translate/LookupTranslator.java +++ b/src/main/java/org/apache/commons/text/translate/LookupTranslator.java @@ -95,7 +95,7 @@ public int translate(final CharSequence input, final int index, final Writer wri if (result != null) { writer.write(result); - return i; + return Character.codePointCount(subSeq, 0, subSeq.length()); } } } diff --git a/src/test/java/org/apache/commons/text/translate/LookupTranslatorTest.java b/src/test/java/org/apache/commons/text/translate/LookupTranslatorTest.java index 8ca8e2f426..ad533f7231 100644 --- a/src/test/java/org/apache/commons/text/translate/LookupTranslatorTest.java +++ b/src/test/java/org/apache/commons/text/translate/LookupTranslatorTest.java @@ -61,4 +61,17 @@ public void testFailsToCreateLookupTranslatorThrowsInvalidParameterException() { assertThatExceptionOfType(InvalidParameterException.class).isThrownBy(() -> new LookupTranslator(null)); } + @Test + public void testTranslateSupplementaryCharacter() { + /* Key: string with Mathematical double-struck capital A (U+1D538) */ + String symbol = new StringBuilder().appendCodePoint(0x1D538).toString(); + /* Map U+1D538 to "A" */ + Map map = new HashMap<>(); + map.put(symbol, "A"); + LookupTranslator translator = new LookupTranslator(map); + String translated = translator.translate(symbol + "=A"); + /* we should get "A=A". */ + assertThat(translated).as("Incorrect value").isEqualTo("A=A"); + } + }