@@ -56,6 +56,11 @@ describe('DateField', () => {
5656 expect ( segment ) . toHaveAttribute ( 'data-placeholder' , 'true' ) ;
5757 expect ( segment ) . toHaveAttribute ( 'data-type' ) ;
5858 expect ( segment ) . toHaveAttribute ( 'data-test' , 'test' ) ;
59+ expect ( segment ) . not . toHaveAttribute ( 'data-readonly' ) ;
60+ }
61+
62+ for ( let literal of [ ...input . children ] . filter ( child => child . getAttribute ( 'data-type' ) === 'literal' ) ) {
63+ expect ( literal ) . not . toHaveAttribute ( 'data-readonly' ) ;
5964 }
6065 } ) ;
6166
@@ -164,7 +169,7 @@ describe('DateField', () => {
164169 } ) ;
165170
166171 it ( 'should support disabled state' , ( ) => {
167- let { getByRole} = render (
172+ let { getByRole, getAllByRole } = render (
168173 < DateField isDisabled >
169174 < Label > Birth date</ Label >
170175 < DateInput className = { ( { isDisabled} ) => isDisabled ? 'disabled' : '' } >
@@ -175,6 +180,64 @@ describe('DateField', () => {
175180 let group = getByRole ( 'group' ) ;
176181 expect ( group ) . toHaveAttribute ( 'data-disabled' ) ;
177182 expect ( group ) . toHaveClass ( 'disabled' ) ;
183+
184+ for ( let segment of getAllByRole ( 'spinbutton' ) ) {
185+ expect ( segment ) . not . toHaveAttribute ( 'data-readonly' ) ;
186+ expect ( segment ) . toHaveAttribute ( 'data-disabled' ) ;
187+ }
188+ for ( let literal of [ ...group . children ] . filter ( child => child . getAttribute ( 'data-type' ) === 'literal' ) ) {
189+ expect ( literal ) . not . toHaveAttribute ( 'data-readonly' ) ;
190+ expect ( literal ) . toHaveAttribute ( 'data-disabled' ) ;
191+ }
192+ } ) ;
193+
194+ it ( 'should support readonly with disabled state' , ( ) => {
195+ let { getByRole, getAllByRole} = render (
196+ < DateField isReadOnly isDisabled >
197+ < Label > Birth date</ Label >
198+ < DateInput >
199+ { segment => < DateSegment segment = { segment } /> }
200+ </ DateInput >
201+ </ DateField >
202+ ) ;
203+
204+ let group = getByRole ( 'group' ) ;
205+ expect ( group ) . toHaveAttribute ( 'data-readonly' ) ;
206+ expect ( group ) . toHaveAttribute ( 'data-disabled' ) ;
207+
208+ for ( let segment of getAllByRole ( 'spinbutton' ) ) {
209+ expect ( segment ) . toHaveAttribute ( 'data-readonly' ) ;
210+ expect ( segment ) . toHaveAttribute ( 'data-disabled' ) ;
211+ }
212+ for ( let literal of [ ...group . children ] . filter ( child => child . getAttribute ( 'data-type' ) === 'literal' ) ) {
213+ expect ( literal ) . toHaveAttribute ( 'data-readonly' ) ;
214+ expect ( literal ) . toHaveAttribute ( 'data-disabled' ) ;
215+ }
216+ } ) ;
217+
218+ it ( 'should support readonly state' , ( ) => {
219+ let { getByRole, getAllByRole} = render (
220+ < DateField isReadOnly >
221+ < Label > Birth date</ Label >
222+ < DateInput >
223+ { segment => < DateSegment segment = { segment } /> }
224+ </ DateInput >
225+ </ DateField >
226+ ) ;
227+
228+ let group = getByRole ( 'group' ) ;
229+ expect ( group ) . toHaveAttribute ( 'data-readonly' ) ;
230+ expect ( group ) . not . toHaveAttribute ( 'data-disabled' ) ;
231+ expect ( group ) . not . toHaveClass ( 'disabled' ) ;
232+
233+ for ( let segment of getAllByRole ( 'spinbutton' ) ) {
234+ expect ( segment ) . toHaveAttribute ( 'data-readonly' ) ;
235+ expect ( segment ) . not . toHaveAttribute ( 'data-disabled' ) ;
236+ }
237+ for ( let literal of [ ...group . children ] . filter ( child => child . getAttribute ( 'data-type' ) === 'literal' ) ) {
238+ expect ( literal ) . toHaveAttribute ( 'data-readonly' ) ;
239+ expect ( literal ) . not . toHaveAttribute ( 'data-disabled' ) ;
240+ }
178241 } ) ;
179242
180243 it ( 'should support render props' , ( ) => {
0 commit comments