Skip to content

Commit

Permalink
chore: Removes dependencies on React <19 in test utils
Browse files Browse the repository at this point in the history
  • Loading branch information
pan-kot committed Feb 21, 2025
1 parent 20e6a83 commit 8b361da
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 14 deletions.
18 changes: 16 additions & 2 deletions src/autosuggest/__tests__/autosuggest.test.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import * as React from 'react';
import React, { useState } from 'react';
import { render } from '@testing-library/react';

import { warnOnce } from '@cloudscape-design/component-toolkit/internal';
Expand Down Expand Up @@ -28,6 +28,20 @@ const defaultProps: AutosuggestProps = {
options: defaultOptions,
};

function StatefulAutosuggest(props: AutosuggestProps) {
const [value, setValue] = useState(props.value);
return (
<Autosuggest
{...props}
value={value}
onChange={event => {
props.onChange?.(event);
setValue(event.detail.value);
}}
/>
);
}

function renderAutosuggest(jsx: React.ReactElement) {
const { container, rerender } = render(jsx);
const wrapper = createWrapper(container).findAutosuggest()!;
Expand Down Expand Up @@ -114,7 +128,7 @@ test('option with special characters can be selected by value', () => {
test('should display entered text option/label', () => {
const enteredTextLabel = jest.fn(value => `Custom function with ${value} placeholder`);
const { wrapper } = renderAutosuggest(
<Autosuggest enteredTextLabel={enteredTextLabel} value="1" options={defaultOptions} />
<StatefulAutosuggest enteredTextLabel={enteredTextLabel} value="" options={defaultOptions} />
);
wrapper.setInputValue('1');
expect(enteredTextLabel).toHaveBeenCalledWith('1');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ describe('extended operators', () => {
expect(wrapper.findDropdown()?.findOpenDropdown()).toBeFalsy();

// Reopen dropdown
wrapper.setInputValue('index >');
wrapper.setInputValue('index > ');
expect(wrapper.find('[data-testid="change+"]')!.getElement()).toHaveTextContent('0');
});

Expand Down
7 changes: 4 additions & 3 deletions src/test-utils/dom/input/base-input.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import { Simulate } from 'react-dom/test-utils';

import { ComponentWrapper, ElementWrapper, usesDom } from '@cloudscape-design/test-utils-core/dom';
import { act } from '@cloudscape-design/test-utils-core/utils-dom';
import { act, setNativeValue } from '@cloudscape-design/test-utils-core/utils-dom';

import inputSelectors from '../../../input/styles.selectors.js';

Expand Down Expand Up @@ -45,7 +44,9 @@ export default abstract class BaseInputWrapper extends ComponentWrapper {
@usesDom setInputValue(value: string): void {
const element = this.findNativeInput().getElement();
act(() => {
Simulate.change(element, { target: { value } as unknown as EventTarget });
const event = new Event('change', { bubbles: true, cancelable: false });
setNativeValue(element, value);
element.dispatchEvent(event);
});
}

Expand Down
9 changes: 5 additions & 4 deletions src/test-utils/dom/prompt-input/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import { Simulate } from 'react-dom/test-utils';

import { ComponentWrapper, ElementWrapper, usesDom } from '@cloudscape-design/test-utils-core/dom';
import { act } from '@cloudscape-design/test-utils-core/utils-dom';
import { act, setNativeValue } from '@cloudscape-design/test-utils-core/utils-dom';

import testutilStyles from '../../../prompt-input/test-classes/styles.selectors.js';

Expand Down Expand Up @@ -41,9 +40,11 @@ export default class PromptInputWrapper extends ComponentWrapper {
* @param value value to set the textarea to.
*/
@usesDom setTextareaValue(value: string): void {
const element: HTMLTextAreaElement = this.findNativeTextarea().getElement();
const element = this.findNativeTextarea().getElement();
act(() => {
Simulate.change(element, { target: { value } as unknown as EventTarget });
const event = new Event('change', { bubbles: true, cancelable: false });
setNativeValue(element, value);
element.dispatchEvent(event);
});
}
}
9 changes: 5 additions & 4 deletions src/test-utils/dom/textarea/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import { Simulate } from 'react-dom/test-utils';

import { ComponentWrapper, ElementWrapper, usesDom } from '@cloudscape-design/test-utils-core/dom';
import { act } from '@cloudscape-design/test-utils-core/utils-dom';
import { act, setNativeValue } from '@cloudscape-design/test-utils-core/utils-dom';

import selectors from '../../../textarea/styles.selectors.js';

Expand All @@ -29,9 +28,11 @@ export default class TextareaWrapper extends ComponentWrapper<HTMLTextAreaElemen
* @param value value to set the textarea to.
*/
@usesDom setTextareaValue(value: string): void {
const element: HTMLTextAreaElement = this.findNativeTextarea().getElement();
const element = this.findNativeTextarea().getElement();
act(() => {
Simulate.change(element, { target: { value } as unknown as EventTarget });
const event = new Event('change', { bubbles: true, cancelable: false });
setNativeValue(element, value);
element.dispatchEvent(event);
});
}
}

0 comments on commit 8b361da

Please sign in to comment.