On Tue, 14 Apr 2020 11:47:21 GMT, Kevin Rushforth <k...@openjdk.org> wrote:

>> Just a comment on how to add a failing test:  we can replace the actual 
>> typing (in the TestFx context) by
>> programmatically replacing the selection, actually, it doesn't even need the 
>> skin (so no scene nor parent) because all
>> collaborators are in TextInputControl:
>>       /**
>>         * Test for JDK-8176270: register changeListener on selectedText, 
>> select at
>>         * end of text and replace selection throws.
>>         */
>>     @Test
>>     public void addingChangeListenerNoSkin() {
>>         TextField textField = new TextField();
>>         textField.setText("1234 5678");
>>         textField.selectedTextProperty()
>>                  .addListener((o, ov, nv) -> {});
>> 
>>         textField.positionCaret(5);
>>         textField.selectEnd();
>>         textField.replaceSelection("d");
>>     }
>>     
>> Similarly, an invalidationListener that access the selectedText throws, 
>> while an invalidationListener not accessing the
>> selected is fine. ~~So it looks like a one-off when evaluating the actual 
>> selection during the process, somehow it's
>> not yet ready~~ That was my wrong assumption, the culprit is really the 
>> incorrect clamping of a no-longer valid end
>> index when adjusting the selectedText binding (as @Kevin noted above). It 
>> shows only if the selectedText must be
>> re-evaluated before the selectionRange is updated, f.i. forced by a 
>> changeListener (or direct access).  To make the
>> error show up on the test thread, replace the uncaughtExceptionHandler 
>> before (and cleanup after):
>>     @Before public void setup() throws Exception {
>>         Thread.currentThread().setUncaughtExceptionHandler((thread, 
>> throwable) -> {
>>             if (throwable instanceof RuntimeException) {
>>                 throw (RuntimeException)throwable;
>>             } else {
>>                 
>> Thread.currentThread().getThreadGroup().uncaughtException(thread, throwable);
>>             }
>>         });
>>         textInput = (TextInputControl) type.newInstance();
>>     }
>> 
>> 
>>     @After public void cleanup() {
>>         Thread.currentThread().setUncaughtExceptionHandler(null);
>>     }
>
> @koppor are you planning to resume work on this PR?

Closing, since there has been no activity for 3 months.

@koppor - if you would like to pursue this, please address the pending feedback 
and reopen the PR.

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

PR: https://git.openjdk.java.net/jfx/pull/73

Reply via email to