@@ -12,6 +12,7 @@ import {customElement} from 'lit/decorators.js';
1212import { literal } from 'lit/static-html.js' ;
1313
1414import { Environment } from '../../testing/environment.js' ;
15+ import { createFormTests } from '../../testing/forms.js' ;
1516import { Harness } from '../../testing/harness.js' ;
1617import { TextFieldHarness } from '../harness.js' ;
1718
@@ -634,36 +635,87 @@ describe('TextField', () => {
634635 } ) ;
635636 } ) ;
636637
637- describe ( 'form submission' , ( ) => {
638- async function setupFormTest ( propsInit : Partial < TestTextField > = { } ) {
639- const template = html `
640- < form >
641- < md-test-text-field
642- ?disabled =${ propsInit . disabled === true }
643- .name =${ propsInit . name ?? '' }
644- .value=${ propsInit . value ?? '' } >
645- </ md-test-text-field >
646- </ form > ` ;
647- return setupTest ( template ) ;
648- }
649-
650- it ( 'does not submit if disabled' , async ( ) => {
651- const { harness} = await setupFormTest ( { name : 'foo' , disabled : true } ) ;
652- const formData = await harness . submitForm ( ) ;
653- expect ( formData . get ( 'foo' ) ) . toBeNull ( ) ;
654- } ) ;
655-
656- it ( 'does not submit if name is not provided' , async ( ) => {
657- const { harness} = await setupFormTest ( ) ;
658- const formData = await harness . submitForm ( ) ;
659- const keys = Array . from ( formData . keys ( ) ) ;
660- expect ( keys . length ) . toEqual ( 0 ) ;
661- } ) ;
662-
663- it ( 'submits under correct conditions' , async ( ) => {
664- const { harness} = await setupFormTest ( { name : 'foo' , value : 'bar' } ) ;
665- const formData = await harness . submitForm ( ) ;
666- expect ( formData . get ( 'foo' ) ) . toEqual ( 'bar' ) ;
638+ describe ( 'forms' , ( ) => {
639+ createFormTests ( {
640+ queryControl : root => root . querySelector ( 'md-test-text-field' ) ,
641+ valueTests : [
642+ {
643+ name : 'unnamed' ,
644+ render : ( ) =>
645+ html `< md-test-text-field value ="Value "> </ md-test-text-field > ` ,
646+ assertValue ( formData ) {
647+ expect ( formData )
648+ . withContext ( 'should not add anything to form without a name' )
649+ . toHaveSize ( 0 ) ;
650+ }
651+ } ,
652+ {
653+ name : 'should add empty value' ,
654+ render : ( ) =>
655+ html `< md-test-text-field name ="input "> </ md-test-text-field > ` ,
656+ assertValue ( formData ) {
657+ expect ( formData . get ( 'input' ) ) . toBe ( '' ) ;
658+ }
659+ } ,
660+ {
661+ name : 'with value' ,
662+ render : ( ) =>
663+ html `< md-test-text-field name ="input " value ="Value "> </ md-test-text-field > ` ,
664+ assertValue ( formData ) {
665+ expect ( formData . get ( 'input' ) ) . toBe ( 'Value' ) ;
666+ }
667+ } ,
668+ {
669+ name : 'disabled' ,
670+ render : ( ) =>
671+ html `< md-test-text-field name ="input " value ="Value " disabled > </ md-test-text-field > ` ,
672+ assertValue ( formData ) {
673+ expect ( formData )
674+ . withContext ( 'should not add anything to form when disabled' )
675+ . toHaveSize ( 0 ) ;
676+ }
677+ }
678+ ] ,
679+ resetTests : [
680+ {
681+ name : 'reset to empty value' ,
682+ render : ( ) =>
683+ html `< md-test-text-field name ="input "> </ md-test-text-field > ` ,
684+ change ( textField ) {
685+ textField . value = 'Value' ;
686+ } ,
687+ assertReset ( textField ) {
688+ expect ( textField . value )
689+ . withContext ( 'textField.value after reset' )
690+ . toBe ( '' ) ;
691+ }
692+ } ,
693+ {
694+ name : 'reset value' ,
695+ render : ( ) =>
696+ html `< md-test-text-field name ="input " value ="First "> </ md-test-text-field > ` ,
697+ change ( textField ) {
698+ textField . value = 'Second' ;
699+ } ,
700+ assertReset ( textField ) {
701+ expect ( textField . value )
702+ . withContext ( 'textField.value after reset' )
703+ . toBe ( 'First' ) ;
704+ }
705+ } ,
706+ ] ,
707+ restoreTests : [
708+ {
709+ name : 'restore value' ,
710+ render : ( ) =>
711+ html `< md-test-text-field name ="input " value ="Value "> </ md-test-text-field > ` ,
712+ assertRestored ( textField ) {
713+ expect ( textField . value )
714+ . withContext ( 'textField.value after restore' )
715+ . toBe ( 'Value' ) ;
716+ }
717+ } ,
718+ ]
667719 } ) ;
668720 } ) ;
669721} ) ;
0 commit comments