Skip to content

Commit a94fb90

Browse files
committed
refactor: update UTR 0.2.0
1 parent 7280311 commit a94fb90

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+256
-269
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"jest": ">=28.0.0",
5757
"react": ">=18.0.0",
5858
"react-native": ">=0.59",
59-
"universal-test-renderer": "0.1.2"
59+
"universal-test-renderer": "0.2.0"
6060
},
6161
"peerDependenciesMeta": {
6262
"jest": {
@@ -91,7 +91,7 @@
9191
"release-it": "^17.10.0",
9292
"strip-ansi": "^6.0.1",
9393
"typescript": "^5.6.3",
94-
"universal-test-renderer": "0.1.2"
94+
"universal-test-renderer": "0.2.0"
9595
},
9696
"publishConfig": {
9797
"registry": "https://registry.npmjs.org"

src/fire-event.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
PressableProps,
66
ScrollViewProps,
77
} from 'react-native';
8-
import { HostComponent } from 'universal-test-renderer';
8+
import { HostElement } from 'universal-test-renderer';
99
import act from './act';
1010
import { isElementMounted, isValidElement } from './helpers/component-tree';
1111
import { isHostScrollView, isHostTextInput } from './helpers/host-component-names';
@@ -17,7 +17,7 @@ import { EventBuilder } from './user-event/event-builder';
1717

1818
type EventHandler = (...args: unknown[]) => unknown;
1919

20-
export function isTouchResponder(element: HostComponent) {
20+
export function isTouchResponder(element: HostElement) {
2121
if (!isValidElement(element)) {
2222
return false;
2323
}
@@ -57,9 +57,9 @@ const textInputEventsIgnoringEditableProp = new Set([
5757
]);
5858

5959
export function isEventEnabled(
60-
element: HostComponent,
60+
element: HostElement,
6161
eventName: string,
62-
nearestTouchResponder?: HostComponent,
62+
nearestTouchResponder?: HostElement,
6363
) {
6464
if (isHostTextInput(nearestTouchResponder)) {
6565
return (
@@ -82,9 +82,9 @@ export function isEventEnabled(
8282
}
8383

8484
function findEventHandler(
85-
element: HostComponent,
85+
element: HostElement,
8686
eventName: string,
87-
nearestTouchResponder?: HostComponent,
87+
nearestTouchResponder?: HostElement,
8888
): EventHandler | null {
8989
const touchResponder = isTouchResponder(element) ? element : nearestTouchResponder;
9090

@@ -101,7 +101,7 @@ function findEventHandler(
101101
return findEventHandler(element.parent, eventName, touchResponder);
102102
}
103103

104-
function getEventHandler(element: HostComponent, eventName: string) {
104+
function getEventHandler(element: HostElement, eventName: string) {
105105
const eventHandlerName = getEventHandlerName(eventName);
106106
if (typeof element.props[eventHandlerName] === 'function') {
107107
return element.props[eventHandlerName];
@@ -131,7 +131,7 @@ type EventName = StringWithAutocomplete<
131131
| EventNameExtractor<ScrollViewProps>
132132
>;
133133

134-
function fireEvent(element: HostComponent, eventName: EventName, ...data: unknown[]) {
134+
function fireEvent(element: HostElement, eventName: EventName, ...data: unknown[]) {
135135
if (!isElementMounted(element)) {
136136
return;
137137
}
@@ -151,7 +151,7 @@ function fireEvent(element: HostComponent, eventName: EventName, ...data: unknow
151151
return returnValue;
152152
}
153153

154-
fireEvent.press = (element: HostComponent, ...data: unknown[]) => {
154+
fireEvent.press = (element: HostElement, ...data: unknown[]) => {
155155
const nativeData =
156156
data.length === 1 &&
157157
typeof data[0] === 'object' &&
@@ -182,10 +182,10 @@ fireEvent.press = (element: HostComponent, ...data: unknown[]) => {
182182
fireEvent(element, 'responderRelease', responderReleaseEvent);
183183
};
184184

185-
fireEvent.changeText = (element: HostComponent, ...data: unknown[]) =>
185+
fireEvent.changeText = (element: HostElement, ...data: unknown[]) =>
186186
fireEvent(element, 'changeText', ...data);
187187

188-
fireEvent.scroll = (element: HostComponent, ...data: unknown[]) =>
188+
fireEvent.scroll = (element: HostElement, ...data: unknown[]) =>
189189
fireEvent(element, 'scroll', ...data);
190190

191191
export default fireEvent;
@@ -198,7 +198,7 @@ const scrollEventNames = new Set([
198198
'momentumScrollEnd',
199199
]);
200200

201-
function setNativeStateIfNeeded(element: HostComponent, eventName: string, value: unknown) {
201+
function setNativeStateIfNeeded(element: HostElement, eventName: string, value: unknown) {
202202
if (
203203
eventName === 'changeText' &&
204204
typeof value === 'string' &&

src/helpers/accessibility.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
Role,
66
StyleSheet,
77
} from 'react-native';
8-
import { HostComponent } from 'universal-test-renderer';
8+
import { HostElement } from 'universal-test-renderer';
99
import { getHostSiblings, getRootElement } from './component-tree';
1010
import {
1111
getHostComponentNames,
@@ -19,7 +19,7 @@ import { isTextInputEditable } from './text-input';
1919
import { findAllByProps } from './find-all';
2020

2121
type IsInaccessibleOptions = {
22-
cache?: WeakMap<HostComponent, boolean>;
22+
cache?: WeakMap<HostElement, boolean>;
2323
};
2424

2525
export const accessibilityStateKeys: (keyof AccessibilityState)[] = [
@@ -33,14 +33,14 @@ export const accessibilityStateKeys: (keyof AccessibilityState)[] = [
3333
export const accessibilityValueKeys: (keyof AccessibilityValue)[] = ['min', 'max', 'now', 'text'];
3434

3535
export function isHiddenFromAccessibility(
36-
element: HostComponent | null,
36+
element: HostElement | null,
3737
{ cache }: IsInaccessibleOptions = {},
3838
): boolean {
3939
if (element == null) {
4040
return true;
4141
}
4242

43-
let current: HostComponent | null = element;
43+
let current: HostElement | null = element;
4444
while (current) {
4545
let isCurrentSubtreeInaccessible = cache?.get(current);
4646

@@ -62,7 +62,7 @@ export function isHiddenFromAccessibility(
6262
/** RTL-compatibility alias for `isHiddenFromAccessibility` */
6363
export const isInaccessible = isHiddenFromAccessibility;
6464

65-
function isSubtreeInaccessible(element: HostComponent): boolean {
65+
function isSubtreeInaccessible(element: HostElement): boolean {
6666
// Null props can happen for React.Fragments
6767
if (element.props == null) {
6868
return false;
@@ -99,7 +99,7 @@ function isSubtreeInaccessible(element: HostComponent): boolean {
9999
return false;
100100
}
101101

102-
export function isAccessibilityElement(element: HostComponent | null): boolean {
102+
export function isAccessibilityElement(element: HostElement | null): boolean {
103103
if (element == null) {
104104
return false;
105105
}
@@ -134,7 +134,7 @@ export function isAccessibilityElement(element: HostComponent | null): boolean {
134134
* @param element
135135
* @returns
136136
*/
137-
export function getRole(element: HostComponent): Role | AccessibilityRole {
137+
export function getRole(element: HostElement): Role | AccessibilityRole {
138138
const explicitRole = element.props.role ?? element.props.accessibilityRole;
139139
if (explicitRole) {
140140
return normalizeRole(explicitRole);
@@ -165,11 +165,11 @@ export function normalizeRole(role: string): Role | AccessibilityRole {
165165
return role as Role | AccessibilityRole;
166166
}
167167

168-
export function computeAriaModal(element: HostComponent): boolean | undefined {
168+
export function computeAriaModal(element: HostElement): boolean | undefined {
169169
return element.props['aria-modal'] ?? element.props.accessibilityViewIsModal;
170170
}
171171

172-
export function computeAriaLabel(element: HostComponent): string | undefined {
172+
export function computeAriaLabel(element: HostElement): string | undefined {
173173
const explicitLabel = element.props['aria-label'] ?? element.props.accessibilityLabel;
174174
if (explicitLabel) {
175175
return explicitLabel;
@@ -183,17 +183,17 @@ export function computeAriaLabel(element: HostComponent): string | undefined {
183183
return undefined;
184184
}
185185

186-
export function computeAriaLabelledBy(element: HostComponent): string | undefined {
186+
export function computeAriaLabelledBy(element: HostElement): string | undefined {
187187
return element.props['aria-labelledby'] ?? element.props.accessibilityLabelledBy;
188188
}
189189

190190
// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#busy-state
191-
export function computeAriaBusy({ props }: HostComponent): boolean {
191+
export function computeAriaBusy({ props }: HostElement): boolean {
192192
return props['aria-busy'] ?? props.accessibilityState?.busy ?? false;
193193
}
194194

195195
// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#checked-state
196-
export function computeAriaChecked(element: HostComponent): AccessibilityState['checked'] {
196+
export function computeAriaChecked(element: HostElement): AccessibilityState['checked'] {
197197
const { props } = element;
198198

199199
if (isHostSwitch(element)) {
@@ -209,7 +209,7 @@ export function computeAriaChecked(element: HostComponent): AccessibilityState['
209209
}
210210

211211
// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#disabled-state
212-
export function computeAriaDisabled(element: HostComponent): boolean {
212+
export function computeAriaDisabled(element: HostElement): boolean {
213213
if (isHostTextInput(element) && !isTextInputEditable(element)) {
214214
return true;
215215
}
@@ -219,16 +219,16 @@ export function computeAriaDisabled(element: HostComponent): boolean {
219219
}
220220

221221
// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#expanded-state
222-
export function computeAriaExpanded({ props }: HostComponent): boolean | undefined {
222+
export function computeAriaExpanded({ props }: HostElement): boolean | undefined {
223223
return props['aria-expanded'] ?? props.accessibilityState?.expanded;
224224
}
225225

226226
// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#selected-state
227-
export function computeAriaSelected({ props }: HostComponent): boolean {
227+
export function computeAriaSelected({ props }: HostElement): boolean {
228228
return props['aria-selected'] ?? props.accessibilityState?.selected ?? false;
229229
}
230230

231-
export function computeAriaValue(element: HostComponent): AccessibilityValue {
231+
export function computeAriaValue(element: HostElement): AccessibilityValue {
232232
const {
233233
accessibilityValue,
234234
'aria-valuemax': ariaValueMax,
@@ -245,7 +245,7 @@ export function computeAriaValue(element: HostComponent): AccessibilityValue {
245245
};
246246
}
247247

248-
export function computeAccessibleName(element: HostComponent): string | undefined {
248+
export function computeAccessibleName(element: HostElement): string | undefined {
249249
const label = computeAriaLabel(element);
250250
if (label) {
251251
return label;

src/helpers/component-tree.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { CONTAINER_TYPE, HostComponent } from 'universal-test-renderer';
1+
import { CONTAINER_TYPE, HostElement } from 'universal-test-renderer';
22
import { screen } from '../screen';
33

44
/**
55
* Checks if the given element is a host element.
66
* @param element The element to check.
77
*/
8-
export function isValidElement(element?: HostComponent | null): element is HostComponent {
8+
export function isValidElement(element?: HostElement | null): element is HostElement {
99
return typeof element?.type === 'string' && element.type !== CONTAINER_TYPE;
1010
}
1111

12-
export function isElementMounted(element: HostComponent) {
12+
export function isElementMounted(element: HostElement) {
1313
return getRootElement(element) === screen.container;
1414
}
1515

@@ -19,8 +19,8 @@ export function isElementMounted(element: HostComponent) {
1919
* @param element The element start traversing from.
2020
* @returns The root element of the tree (host or composite).
2121
*/
22-
export function getRootElement(element: HostComponent) {
23-
let current: HostComponent | null = element;
22+
export function getRootElement(element: HostElement) {
23+
let current: HostElement | null = element;
2424
while (current?.parent) {
2525
current = current.parent;
2626
}
@@ -32,11 +32,11 @@ export function getRootElement(element: HostComponent) {
3232
* Returns host siblings for given element.
3333
* @param element The element start traversing from.
3434
*/
35-
export function getHostSiblings(element: HostComponent | null): HostComponent[] {
35+
export function getHostSiblings(element: HostElement | null): HostElement[] {
3636
const hostParent = element?.parent ?? null;
3737
return (
3838
hostParent?.children.filter(
39-
(sibling): sibling is HostComponent => typeof sibling === 'object' && sibling !== element,
39+
(sibling): sibling is HostElement => typeof sibling === 'object' && sibling !== element,
4040
) ?? []
4141
);
4242
}

src/helpers/find-all.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { HostComponent } from 'universal-test-renderer';
1+
import { HostElement } from 'universal-test-renderer';
22
import { getConfig } from '../config';
33
import { isHiddenFromAccessibility } from './accessibility';
44
import { isValidElement } from './component-tree';
@@ -15,10 +15,10 @@ interface FindAllOptions {
1515
}
1616

1717
export function findAll(
18-
root: HostComponent,
19-
predicate: (element: HostComponent) => boolean,
18+
root: HostElement,
19+
predicate: (element: HostElement) => boolean,
2020
options?: FindAllOptions,
21-
): HostComponent[] {
21+
): HostElement[] {
2222
const results = findAllInternal(root, predicate, options);
2323

2424
const includeHiddenElements =
@@ -28,24 +28,24 @@ export function findAll(
2828
return results;
2929
}
3030

31-
const cache = new WeakMap<HostComponent>();
31+
const cache = new WeakMap<HostElement>();
3232
return results.filter((element) => !isHiddenFromAccessibility(element, { cache }));
3333
}
3434

3535
// Extracted from React Test Renderer
3636
// src: https://github.com/facebook/react/blob/8e2bde6f2751aa6335f3cef488c05c3ea08e074a/packages/react-test-renderer/src/ReactTestRenderer.js#L402
3737
function findAllInternal(
38-
node: HostComponent,
39-
predicate: (element: HostComponent) => boolean,
38+
node: HostElement,
39+
predicate: (element: HostElement) => boolean,
4040
options?: FindAllOptions,
4141
indent: string = '',
42-
): HostComponent[] {
43-
const results: HostComponent[] = [];
42+
): HostElement[] {
43+
const results: HostElement[] = [];
4444

4545
//console.log(`${indent} 🟢 findAllInternal`, node.type, node.props);
4646

4747
// Match descendants first but do not add them to results yet.
48-
const matchingDescendants: HostComponent[] = [];
48+
const matchingDescendants: HostElement[] = [];
4949
node.children.forEach((child) => {
5050
if (typeof child === 'string') {
5151
return;
@@ -69,14 +69,14 @@ function findAllInternal(
6969
}
7070

7171
export function findAllByProps(
72-
root: HostComponent,
72+
root: HostElement,
7373
props: { [propName: string]: any },
7474
options?: FindAllOptions,
75-
): HostComponent[] {
75+
): HostElement[] {
7676
return findAll(root, (element) => matchProps(element, props), options);
7777
}
7878

79-
function matchProps(element: HostComponent, props: { [propName: string]: any }): boolean {
79+
function matchProps(element: HostElement, props: { [propName: string]: any }): boolean {
8080
for (const key in props) {
8181
if (props[key] !== element.props[key]) {
8282
return false;

0 commit comments

Comments
 (0)