On Tue, 6 Jun 2023 09:46:53 GMT, Karthik P K <k...@openjdk.org> wrote:
>> tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java >> line 151: >> >>> 149: private void addMultipleEmojis() { >>> 150: Util.runAndWait(() -> { >>> 151: text = new Text("ππππ¦ππ₯"); >> >> Both new code (the last commit) and the old code (previous commit) fail this >> test if the text string is the following sequence: >> βπΏβπΏβπΏ >> \u261d\ud83c\udfff\u261d\ud83c\udfff\u261d\ud83c\udfff >> >> I've tried it with jdk19 and jdk20.0.1 (the latter contains a BreakInterator >> change [JDK-8291660](https://bugs.openjdk.org/browse/JDK-8291660) that >> alters its handling of grapheme clusters. >> >> Exception: >> >> java.lang.AssertionError: expected:<0> but was:<1> >> at org.junit.Assert.fail(Assert.java:89) >> at org.junit.Assert.failNotEquals(Assert.java:835) >> at org.junit.Assert.assertEquals(Assert.java:647) >> at org.junit.Assert.assertEquals(Assert.java:633) >> at >> test.robot.javafx.scene.TextFlowSurrogatePairInsertionIndexTest.testTextFlowInsertionIndexUsingMultipleEmojis(TextFlowSurrogatePairInsertionIndexTest.java:216) >> at >> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) >> at java.base/java.lang.reflect.Method.invoke(Method.java:578) >> at >> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) >> at >> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) >> at >> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) >> at >> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) >> at >> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) >> at >> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) >> at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) >> at >> org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) >> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) >> at >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) >> at >> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) >> at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) >> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) >> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) >> at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) >> at org.junit.runners.Pare... > > This case is same as the one which we saw with red heart as the emoji > sequence mentioned here is also a U+FE0F Variation Selector-16 character. > Since it exhibits different behavior in different platforms we decided to > remove it. > > I compared the insertion index calculated for these emojis with the insertion > index calculated for red heart emoji. The insertion index calculated looks to > be correct for the above given emojis. It is considered as 2 characters if > color is also present else it is considered as single character. > For me it is giving correct caret position as well in the Monkey tester. > > I found strange behavior when I tried to add heart emojis (with and without > color) along with the `CLUSTERS` variable present in Monkey Tester so that it > gets displayed when Rich Text option is selected. > When `CLUSTERS = "β€οΈβ€β€οΈ"`, emojis are displayed properly. > <img width="658" alt="image" > src="https://github.com/openjdk/jfx/assets/26969459/f3de5d1d-ad8c-42a6-8284-01916dfd37a8"> > > When `CLUSTERS = "βπΏβπΏβπΏπ€¦πΌββοΈβ€οΈβ€β€οΈ";`, following sequence is displayed. > <img width="532" alt="image" > src="https://github.com/openjdk/jfx/assets/26969459/6eaa67b8-6fa1-475f-82bd-e9c48240b1c1"> > > This looks like a separate issue. Please let me know your thoughts on this. @karthikpandelu : 1. you are right, multiple symbols and a failed test are due to lack of proper handling of grapheme clusters in fx. I don't think we have a ticket, so created JDK-8309565 for that 2. your latest fix uncovered a problem in my RichTextArea code, so thank you! The new code passes all my tests in the MonkeyTester and RichTextArea. ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1220270289