@@ -4,8 +4,6 @@ import { tagName as RadioTagName } from '../radio/radio.options.js';
44import type { RadioGroup } from './radio-group.js' ;
55import { tagName } from './radio-group.options.js' ;
66
7- const sourceBaseUrl = `/@fs${ new URL ( '../' , import . meta. url ) . pathname } ` ;
8-
97test . describe ( 'RadioGroup' , ( ) => {
108 test . use ( {
119 tagName,
@@ -252,83 +250,6 @@ test.describe('RadioGroup', () => {
252250 await expect ( radios . nth ( 2 ) ) . toHaveJSProperty ( 'checked' , false ) ;
253251 } ) ;
254252
255- test ( 'should preserve checked state when radios upgrade after the group' , async ( { page } ) => {
256- await page . goto ( '/' ) ;
257-
258- const result = await page . evaluate ( async sourceBaseUrl => {
259- const id = Date . now ( ) . toString ( 36 ) ;
260- const groupTagName = `upgrade-${ id } -radio-group` ;
261- const radioTagName = `upgrade-${ id } -radio` ;
262-
263- const importModule = ( path : string ) : Promise < Record < string , unknown > > => import ( path ) ;
264- const [
265- radioGroupModule ,
266- radioGroupTemplateModule ,
267- radioGroupStylesModule ,
268- radioModule ,
269- radioTemplateModule ,
270- radioStylesModule ,
271- ] = await Promise . all ( [
272- importModule ( `${ sourceBaseUrl } radio-group/radio-group.ts` ) ,
273- importModule ( `${ sourceBaseUrl } radio-group/radio-group.template.ts` ) ,
274- importModule ( `${ sourceBaseUrl } radio-group/radio-group.styles.ts` ) ,
275- importModule ( `${ sourceBaseUrl } radio/radio.ts` ) ,
276- importModule ( `${ sourceBaseUrl } radio/radio.template.ts` ) ,
277- importModule ( `${ sourceBaseUrl } radio/radio.styles.ts` ) ,
278- ] ) ;
279-
280- const RadioGroup = radioGroupModule . RadioGroup as {
281- compose ( options : Record < string , unknown > ) : { define ( registry : CustomElementRegistry ) : void } ;
282- } ;
283- const Radio = radioModule . Radio as {
284- compose ( options : Record < string , unknown > ) : { define ( registry : CustomElementRegistry ) : void } ;
285- } ;
286-
287- document . body . innerHTML = /* html */ `
288- <${ groupTagName } value="bar">
289- <${ radioTagName } value="foo"></${ radioTagName } >
290- <${ radioTagName } value="bar"></${ radioTagName } >
291- <${ radioTagName } value="baz"></${ radioTagName } >
292- </${ groupTagName } >
293- ` ;
294-
295- RadioGroup . compose ( {
296- name : groupTagName ,
297- template : radioGroupTemplateModule . template ,
298- styles : radioGroupStylesModule . styles ,
299- } ) . define ( customElements ) ;
300-
301- const group = document . querySelector ( groupTagName ) ;
302- if ( ! group ) {
303- throw new Error ( 'Expected radio group to exist.' ) ;
304- }
305-
306- customElements . upgrade ( group ) ;
307-
308- Radio . compose ( {
309- name : radioTagName ,
310- template : radioTemplateModule . template ,
311- styles : radioStylesModule . styles ,
312- } ) . define ( customElements ) ;
313-
314- await customElements . whenDefined ( groupTagName ) ;
315- await customElements . whenDefined ( radioTagName ) ;
316- await new Promise ( requestAnimationFrame ) ;
317-
318- const checkedRadio = document . querySelector ( `${ radioTagName } [value="bar"]` ) as HTMLElement & {
319- checked : boolean ;
320- } ;
321-
322- return {
323- checked : checkedRadio . checked ,
324- hasOwnChecked : Object . prototype . hasOwnProperty . call ( checkedRadio , 'checked' ) ,
325- } ;
326- } , sourceBaseUrl ) ;
327-
328- expect ( result . checked ) . toBe ( true ) ;
329- expect ( result . hasOwnChecked ) . toBe ( false ) ;
330- } ) ;
331-
332253 test ( 'radio should remain checked after it is set to disabled and uncheck when a new radio is checked' , async ( {
333254 fastPage,
334255 page,
@@ -869,3 +790,24 @@ test.describe('RadioGroup', () => {
869790 await expect ( radios . nth ( 1 ) ) . toHaveJSProperty ( 'checked' , true ) ;
870791 } ) ;
871792} ) ;
793+
794+ test . describe ( 'RadioGroup upgrade order' , ( ) => {
795+ test . use ( {
796+ tagName : '' ,
797+ } ) ;
798+
799+ test ( 'should preserve checked state when radios upgrade after the group' , async ( { fastPage } ) => {
800+ await fastPage . page . goto ( '/test/radio-group-upgrade-order.html' ) ;
801+
802+ const result = await fastPage . page . evaluate ( ( ) => {
803+ return (
804+ window as unknown as {
805+ runRadioGroupUpgradeOrderTest ( ) : Promise < { checked : boolean ; hasOwnChecked : boolean } > ;
806+ }
807+ ) . runRadioGroupUpgradeOrderTest ( ) ;
808+ } ) ;
809+
810+ expect ( result . checked ) . toBe ( true ) ;
811+ expect ( result . hasOwnChecked ) . toBe ( false ) ;
812+ } ) ;
813+ } ) ;
0 commit comments