From 97476148bd03193156e2c3ff37dff595bc28c654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Tue, 13 Aug 2024 09:50:01 +0200 Subject: [PATCH 1/4] feat: remove 'textInput' --- .../__snapshots__/clear.test.tsx.snap | 24 --------- src/user-event/__tests__/clear.test.tsx | 3 -- .../__snapshots__/type.test.tsx.snap | 50 ------------------- .../type/__tests__/type-managed.test.tsx | 2 - src/user-event/type/__tests__/type.test.tsx | 4 -- src/user-event/type/type.ts | 10 +--- 6 files changed, 1 insertion(+), 92 deletions(-) diff --git a/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap b/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap index 7ac08d0b5..67308a925 100644 --- a/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +++ b/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap @@ -331,30 +331,6 @@ How are you?" multiline: true, 1`] = ` "timeStamp": 0, }, }, - { - "name": "textInput", - "payload": { - "currentTarget": {}, - "isDefaultPrevented": [Function], - "isPersistent": [Function], - "isPropagationStopped": [Function], - "nativeEvent": { - "previousText": "Hello World! -How are you?", - "range": { - "end": 0, - "start": 0, - }, - "target": 0, - "text": "", - }, - "persist": [Function], - "preventDefault": [Function], - "stopPropagation": [Function], - "target": {}, - "timeStamp": 0, - }, - }, { "name": "change", "payload": { diff --git a/src/user-event/__tests__/clear.test.tsx b/src/user-event/__tests__/clear.test.tsx index fe4112cf0..b0fe11c34 100644 --- a/src/user-event/__tests__/clear.test.tsx +++ b/src/user-event/__tests__/clear.test.tsx @@ -20,8 +20,6 @@ function renderTextInputWithToolkit(props: TextInputProps = {}) { onChange={logEvent('change')} onChangeText={logEvent('changeText')} onKeyPress={logEvent('keyPress')} - /** @ts-expect-error property typedef removed in RN 0.75 */ - onTextInput={logEvent('textInput')} onSelectionChange={logEvent('selectionChange')} onSubmitEditing={logEvent('submitEditing')} onEndEditing={logEvent('endEditing')} @@ -142,7 +140,6 @@ describe('clear()', () => { 'focus', 'selectionChange', 'keyPress', - 'textInput', 'change', 'changeText', 'selectionChange', diff --git a/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap b/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap index b75157f8f..fe84b3271 100644 --- a/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +++ b/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap @@ -843,30 +843,6 @@ exports[`type() supports multiline: input: "{Enter}\\n", multiline: true 1`] = ` "timeStamp": 0, }, }, - { - "name": "textInput", - "payload": { - "currentTarget": {}, - "isDefaultPrevented": [Function], - "isPersistent": [Function], - "isPropagationStopped": [Function], - "nativeEvent": { - "previousText": "", - "range": { - "end": 1, - "start": 1, - }, - "target": 0, - "text": " -", - }, - "persist": [Function], - "preventDefault": [Function], - "stopPropagation": [Function], - "target": {}, - "timeStamp": 0, - }, - }, { "name": "change", "payload": { @@ -950,32 +926,6 @@ exports[`type() supports multiline: input: "{Enter}\\n", multiline: true 1`] = ` "timeStamp": 0, }, }, - { - "name": "textInput", - "payload": { - "currentTarget": {}, - "isDefaultPrevented": [Function], - "isPersistent": [Function], - "isPropagationStopped": [Function], - "nativeEvent": { - "previousText": " -", - "range": { - "end": 2, - "start": 2, - }, - "target": 0, - "text": " - -", - }, - "persist": [Function], - "preventDefault": [Function], - "stopPropagation": [Function], - "target": {}, - "timeStamp": 0, - }, - }, { "name": "change", "payload": { diff --git a/src/user-event/type/__tests__/type-managed.test.tsx b/src/user-event/type/__tests__/type-managed.test.tsx index 4f142b9ca..37e9f03c7 100644 --- a/src/user-event/type/__tests__/type-managed.test.tsx +++ b/src/user-event/type/__tests__/type-managed.test.tsx @@ -38,8 +38,6 @@ function ManagedTextInput({ onPressOut={logEvent('pressOut')} onChange={logEvent('change')} onKeyPress={logEvent('keyPress')} - /** @ts-expect-error property typedef removed in RN 0.75 */ - onTextInput={logEvent('textInput')} onSelectionChange={logEvent('selectionChange')} onSubmitEditing={logEvent('submitEditing')} onEndEditing={logEvent('endEditing')} diff --git a/src/user-event/type/__tests__/type.test.tsx b/src/user-event/type/__tests__/type.test.tsx index a432930f0..0ded57f86 100644 --- a/src/user-event/type/__tests__/type.test.tsx +++ b/src/user-event/type/__tests__/type.test.tsx @@ -21,8 +21,6 @@ function renderTextInputWithToolkit(props: TextInputProps = {}) { onChange={logEvent('change')} onChangeText={logEvent('changeText')} onKeyPress={logEvent('keyPress')} - /** @ts-expect-error property typedef removed in RN 0.75 */ - onTextInput={logEvent('textInput')} onSelectionChange={logEvent('selectionChange')} onSubmitEditing={logEvent('submitEditing')} onEndEditing={logEvent('endEditing')} @@ -173,13 +171,11 @@ describe('type()', () => { 'focus', 'pressOut', 'keyPress', - 'textInput', 'change', 'changeText', 'selectionChange', 'contentSizeChange', 'keyPress', - 'textInput', 'change', 'changeText', 'selectionChange', diff --git a/src/user-event/type/type.ts b/src/user-event/type/type.ts index 50131539e..dbf351fee 100644 --- a/src/user-event/type/type.ts +++ b/src/user-event/type/type.ts @@ -55,7 +55,6 @@ export async function type( config: this.config, key, text: currentText, - previousText, isAccepted, }); } @@ -76,13 +75,12 @@ type EmitTypingEventsContext = { config: UserEventConfig; key: string; text: string; - previousText: string; isAccepted?: boolean; }; export async function emitTypingEvents( element: ReactTestInstance, - { config, key, text, previousText, isAccepted }: EmitTypingEventsContext, + { config, key, text, isAccepted }: EmitTypingEventsContext, ) { const isMultiline = element.props.multiline === true; @@ -96,12 +94,6 @@ export async function emitTypingEvents( return; } - // According to the docs only multiline TextInput emits textInput event - // @see: https://github.com/facebook/react-native/blob/42a2898617da1d7a98ef574a5b9e500681c8f738/packages/react-native/Libraries/Components/TextInput/TextInput.d.ts#L754 - if (isMultiline) { - dispatchEvent(element, 'textInput', EventBuilder.TextInput.textInput(text, previousText)); - } - dispatchEvent(element, 'change', EventBuilder.TextInput.change(text)); dispatchEvent(element, 'changeText', text); From 3f9d9446ecd0ccde5ce4baa85d4f75372c4e31bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Tue, 13 Aug 2024 11:45:03 +0200 Subject: [PATCH 2/4] refactor: fix ts, tweak naming --- src/user-event/clear.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/user-event/clear.ts b/src/user-event/clear.ts index 207230e99..b9cdc2eec 100644 --- a/src/user-event/clear.ts +++ b/src/user-event/clear.ts @@ -24,25 +24,23 @@ export async function clear(this: UserEventInstance, element: ReactTestInstance) dispatchEvent(element, 'focus', EventBuilder.Common.focus()); // 2. Select all - const previousText = element.props.value ?? element.props.defaultValue ?? ''; + const textToClear = element.props.value ?? element.props.defaultValue ?? ''; const selectionRange = { start: 0, - end: previousText.length, + end: textToClear.length, }; dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(selectionRange)); // 3. Press backspace with selected text - const finalText = ''; + const textAfterClear = ''; await emitTypingEvents(element, { config: this.config, key: 'Backspace', - text: finalText, - previousText, + text: textAfterClear, }); // 4. Exit element await wait(this.config); - dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(finalText)); - + dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(textAfterClear)); dispatchEvent(element, 'blur', EventBuilder.Common.blur()); } From cdc21be9aff05c01f487ea578e4fecf5e79a9c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Tue, 13 Aug 2024 16:31:34 +0200 Subject: [PATCH 3/4] refactor: self-code review --- src/user-event/event-builder/text-input.ts | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/user-event/event-builder/text-input.ts b/src/user-event/event-builder/text-input.ts index 89a45a340..61ea3c064 100644 --- a/src/user-event/event-builder/text-input.ts +++ b/src/user-event/event-builder/text-input.ts @@ -63,23 +63,6 @@ export const TextInputEventBuilder = { }; }, - /** - * Experimental values: - * - iOS: `{"eventCount": 2, "previousText": "Te", "range": {"end": 2, "start": 2}, "target": 75, "text": "s"}` - * - Android: `{"previousText": "Te", "range": {"end": 2, "start": 0}, "target": 53, "text": "Tes"}` - */ - textInput: (text: string, previousText: string) => { - return { - ...baseSyntheticEvent(), - nativeEvent: { - text, - previousText, - range: { start: text.length, end: text.length }, - target: 0, - }, - }; - }, - /** * Experimental values: * - iOS: `{"contentSize": {"height": 21.666666666666668, "width": 11.666666666666666}, "target": 75}` From 372b5555c2a3245b1e254eba065d065a5c09cf07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Tue, 13 Aug 2024 16:46:09 +0200 Subject: [PATCH 4/4] refactor: self-code review --- src/user-event/clear.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/user-event/clear.ts b/src/user-event/clear.ts index b9cdc2eec..42ba54644 100644 --- a/src/user-event/clear.ts +++ b/src/user-event/clear.ts @@ -32,15 +32,15 @@ export async function clear(this: UserEventInstance, element: ReactTestInstance) dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(selectionRange)); // 3. Press backspace with selected text - const textAfterClear = ''; + const emptyText = ''; await emitTypingEvents(element, { config: this.config, key: 'Backspace', - text: textAfterClear, + text: emptyText, }); // 4. Exit element await wait(this.config); - dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(textAfterClear)); + dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(emptyText)); dispatchEvent(element, 'blur', EventBuilder.Common.blur()); }