On Thu, 18 May 2023 09:27:18 GMT, Karthik P K <k...@openjdk.org> wrote:

>> Since surrogate pairs are internally considered as 2 characters and text 
>> field is null in `HitInfo` when `getInsertionIndex` is invoked from 
>> `TextFlow`, wrong insertion index was returned.
>> 
>> Updated code to calculate insertion index in `getHitInfo` method of 
>> `PrismTextLayout` class when `hitTest` of trailing side of surrogate pair is 
>> requested. Since text runs are processed in this method already, calculating 
>> the insertion index in this method looks better than calculating in 
>> `getInsertionIndex` of `HitInfo` method.
>> The latter approach also requires the text to be sent to `HitInfo` as 
>> parameter from the `hitTest` method of `TextFlow`. If the number of `Text` 
>> nodes in `TextFlow` are very large, processing all the `Text` nodes on each 
>> `hitTest` method invocation might cause performance issue. Hence implemented 
>> first approach.
>> 
>> Added system test to validate the fix.
>
> Karthik P K has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Add new test. Optimizations to make the tests robust

please try adding firePulse(), and also please check on Windows and Linux.
thanks!

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 153:

> 151:             textFlow.getChildren().clear();
> 152:             textFlow.getChildren().setAll(text);
> 153: 

let's add Toolkit.getToolkit().firePulse(); before textSetLatch.countDown();

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 166:

> 164:             textFlow.getChildren().clear();
> 165:             textFlow.getChildren().setAll(text);
> 166: 

let's add Toolkit.getToolkit().firePulse(); before textSetLatch.countDown();

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 179:

> 177:             textFlow.getChildren().clear();
> 178:             textFlow.getChildren().setAll(text);
> 179: 

let's add Toolkit.getToolkit().firePulse(); before textSetLatch.countDown();

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 196:

> 194:             textFlow.getChildren().clear();
> 195:             textFlow.getChildren().setAll(text, emoji);
> 196: 

let's add Toolkit.getToolkit().firePulse(); before textSetLatch.countDown();

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 210:

> 208:             textFlow.getChildren().clear();
> 209:             textFlow.getChildren().setAll(text);
> 210: 

let's add Toolkit.getToolkit().firePulse(); before textSetLatch.countDown();

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 219:

> 217:     public void testTextFlowInsertionIndexUsingTwoEmojis() throws 
> Exception {
> 218:         addTwoEmojis();
> 219:         Thread.sleep(500);

we can remove Thread.sleep() now

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 233:

> 231:     public void testTextFlowInsertionIndexUsingMultipleEmojis() throws 
> Exception {
> 232:         addMultipleEmojis();
> 233:         Thread.sleep(500);

we can remove Thread.sleep() now

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 251:

> 249:     public void testTextFlowInsertionIndexUsingTextAndEmojis() throws 
> Exception {
> 250:         addTextAndEmojis();
> 251:         Thread.sleep(500);

we can remove Thread.sleep() now

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 271:

> 269:     public void testTextFlowInsertionIndexUsingEmbeddedTextNodes() 
> throws Exception {
> 270:         addTwoTextNodes();
> 271:         Thread.sleep(500);

we can remove Thread.sleep() now

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 292:

> 290:     public void testTextFlowInsertionIndexWhenMouseMovedOutsideText() 
> throws Exception {
> 291:         addTextAndEmojis();
> 292:         Thread.sleep(500);

we can remove Thread.sleep() now

tests/system/src/test/java/test/robot/javafx/scene/TextFlowSurrogatePairInsertionIndexTest.java
 line 309:

> 307:     public void testTextFlowInsertionIndexUsingWrappedText() throws 
> Exception {
> 308:         addLongText();
> 309:         Thread.sleep(500);

we can remove Thread.sleep() now

-------------

Changes requested by angorya (Reviewer).

PR Review: https://git.openjdk.org/jfx/pull/1091#pullrequestreview-1433090838
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198063741
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198063856
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198064029
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198064162
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198064333
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198064998
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198065122
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198065253
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198065402
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198065526
PR Review Comment: https://git.openjdk.org/jfx/pull/1091#discussion_r1198065732

Reply via email to