From e866d9d3a3268196d7600cfc2e760ecf49a03c5a Mon Sep 17 00:00:00 2001 From: atomiks Date: Tue, 20 Aug 2024 15:58:17 +1000 Subject: [PATCH] Integrate with Field --- .../Description/FieldDescription.test.tsx | 20 +++++ .../src/Field/Label/FieldLabel.test.tsx | 20 +++++ .../src/Field/Root/FieldRoot.test.tsx | 89 +++++++++++++++++++ .../mui-base/src/Radio/Root/RadioRoot.tsx | 14 +-- .../src/Radio/Root/RadioRootContext.ts | 18 ++-- .../mui-base/src/Radio/Root/useRadioRoot.tsx | 32 +++++-- .../src/RadioGroup/Root/RadioGroupRoot.tsx | 33 ++++--- .../RadioGroup/Root/RadioGroupRootContext.ts | 30 +++---- .../src/RadioGroup/Root/useRadioGroupRoot.ts | 85 ++++++++++++++++-- 9 files changed, 285 insertions(+), 56 deletions(-) diff --git a/packages/mui-base/src/Field/Description/FieldDescription.test.tsx b/packages/mui-base/src/Field/Description/FieldDescription.test.tsx index ae3e43f2a..56ade9fbf 100644 --- a/packages/mui-base/src/Field/Description/FieldDescription.test.tsx +++ b/packages/mui-base/src/Field/Description/FieldDescription.test.tsx @@ -4,6 +4,8 @@ import * as Checkbox from '@base_ui/react/Checkbox'; import * as Switch from '@base_ui/react/Switch'; import * as NumberField from '@base_ui/react/NumberField'; import * as Slider from '@base_ui/react/Slider'; +import * as RadioGroup from '@base_ui/react/RadioGroup'; +import * as Radio from '@base_ui/react/Radio'; import { createRenderer, screen } from '@mui/internal-test-utils'; import { expect } from 'chai'; import { describeConformance } from '../../../test/describeConformance'; @@ -104,5 +106,23 @@ describe('', () => { ); }); }); + + describe('RadioGroup', () => { + it('supports RadioGroup', () => { + render( + + + + + + , + ); + + expect(screen.getByTestId('description')).to.have.attribute( + 'id', + screen.getByRole('radiogroup').getAttribute('aria-describedby')!, + ); + }); + }); }); }); diff --git a/packages/mui-base/src/Field/Label/FieldLabel.test.tsx b/packages/mui-base/src/Field/Label/FieldLabel.test.tsx index 16a8c2bce..c1cf8d645 100644 --- a/packages/mui-base/src/Field/Label/FieldLabel.test.tsx +++ b/packages/mui-base/src/Field/Label/FieldLabel.test.tsx @@ -4,6 +4,8 @@ import * as Checkbox from '@base_ui/react/Checkbox'; import * as Switch from '@base_ui/react/Switch'; import * as NumberField from '@base_ui/react/NumberField'; import * as Slider from '@base_ui/react/Slider'; +import * as RadioGroup from '@base_ui/react/RadioGroup'; +import * as Radio from '@base_ui/react/Radio'; import { createRenderer, screen } from '@mui/internal-test-utils'; import { expect } from 'chai'; import { describeConformance } from '../../../test/describeConformance'; @@ -95,5 +97,23 @@ describe('', () => { ); }); }); + + describe('RadioGroup', () => { + it('supports RadioGroup', () => { + render( + + + + + + , + ); + + expect(screen.getByTestId('radio-group')).to.have.attribute( + 'aria-labelledby', + screen.getByTestId('label').id, + ); + }); + }); }); }); diff --git a/packages/mui-base/src/Field/Root/FieldRoot.test.tsx b/packages/mui-base/src/Field/Root/FieldRoot.test.tsx index e293e8e46..355eafa8a 100644 --- a/packages/mui-base/src/Field/Root/FieldRoot.test.tsx +++ b/packages/mui-base/src/Field/Root/FieldRoot.test.tsx @@ -4,6 +4,9 @@ import * as Checkbox from '@base_ui/react/Checkbox'; import * as Switch from '@base_ui/react/Switch'; import * as NumberField from '@base_ui/react/NumberField'; import * as Slider from '@base_ui/react/Slider'; +import * as RadioGroup from '@base_ui/react/RadioGroup'; +import * as Radio from '@base_ui/react/Radio'; +import userEvent from '@testing-library/user-event'; import { act, createRenderer, @@ -221,6 +224,7 @@ describe('', () => { , ); + // eslint-disable-next-line testing-library/no-node-access const input = container.querySelector('input')!; const thumb = screen.getByTestId('thumb'); @@ -231,6 +235,27 @@ describe('', () => { expect(input).to.have.attribute('aria-invalid', 'true'); }); + + it('supports RadioGroup', () => { + render( + 'error'}> + + One + Two + + + , + ); + + const group = screen.getByTestId('group'); + + expect(group).not.to.have.attribute('aria-invalid'); + + fireEvent.focus(group); + fireEvent.blur(group); + + expect(group).to.have.attribute('aria-invalid', 'true'); + }); }); }); @@ -405,6 +430,50 @@ describe('', () => { expect(root).to.have.attribute('data-touched', 'true'); }); + + it('supports RadioGroup (click)', () => { + render( + + + + One + + Two + + , + ); + + const group = screen.getByTestId('group'); + const control = screen.getByTestId('control'); + + fireEvent.click(control); + + expect(group).to.have.attribute('data-touched', 'true'); + expect(control).to.have.attribute('data-touched', 'true'); + }); + + it('supports RadioGroup (blur)', async () => { + render( + + + + One + + Two + +