@@ -19,74 +19,114 @@ import {render} from './helpers/test-utils'
19
19
* @link https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation
20
20
* @link https://github.com/jsdom/jsdom
21
21
*/
22
- function getDOMInput ( htmlString ) {
23
- const dom = new JSDOM ( htmlString )
24
-
25
- return dom . window . document . querySelector ( 'input' )
22
+ function getDOMElement ( htmlString , selector ) {
23
+ return new JSDOM ( htmlString ) . window . document . querySelector ( selector )
26
24
}
27
25
28
- const invalidInputNode = getDOMInput (
29
- `<input pattern="[a-z]{1,3}" value="test+">` ,
30
- )
31
-
32
- test ( '.toBeInvalid' , ( ) => {
33
- const { queryByTestId} = render ( `
34
- <div>
35
- <input data-testid="no-aria-invalid">
36
- <input data-testid="aria-invalid" aria-invalid>
37
- <input data-testid="aria-invalid-value" aria-invalid="true">
38
- <input data-testid="aria-invalid-false" aria-invalid="false">
39
- </div>
40
- ` )
41
-
42
- expect ( queryByTestId ( 'no-aria-invalid' ) ) . not . toBeInvalid ( )
43
- expect ( queryByTestId ( 'aria-invalid' ) ) . toBeInvalid ( )
44
- expect ( queryByTestId ( 'aria-invalid-value' ) ) . toBeInvalid ( )
45
- expect ( queryByTestId ( 'aria-invalid-false' ) ) . not . toBeInvalid ( )
46
- expect ( invalidInputNode ) . toBeInvalid ( )
47
-
48
- // negative test cases wrapped in throwError assertions for coverage.
49
- expect ( ( ) =>
50
- expect ( queryByTestId ( 'no-aria-invalid' ) ) . toBeInvalid ( ) ,
51
- ) . toThrowError ( )
52
- expect ( ( ) =>
53
- expect ( queryByTestId ( 'aria-invalid' ) ) . not . toBeInvalid ( ) ,
54
- ) . toThrowError ( )
55
- expect ( ( ) =>
56
- expect ( queryByTestId ( 'aria-invalid-value' ) ) . not . toBeInvalid ( ) ,
57
- ) . toThrowError ( )
58
- expect ( ( ) =>
59
- expect ( queryByTestId ( 'aria-invalid-false' ) ) . toBeInvalid ( ) ,
60
- ) . toThrowError ( )
61
- expect ( ( ) => expect ( invalidInputNode ) . not . toBeInvalid ( ) ) . toThrowError ( )
26
+ // A required field without a value is invalid
27
+ const invalidInputHtml = `<input required>`
28
+
29
+ const invalidInputNode = getDOMElement ( invalidInputHtml , 'input' )
30
+
31
+ // A form is invalid if it contains an invalid input
32
+ const invalidFormHtml = `<form>${ invalidInputHtml } </form>`
33
+
34
+ const invalidFormNode = getDOMElement ( invalidFormHtml , 'form' )
35
+
36
+ describe ( '.toBeInvalid' , ( ) => {
37
+ test ( 'handles <input/>' , ( ) => {
38
+ const { queryByTestId} = render ( `
39
+ <div>
40
+ <input data-testid="no-aria-invalid">
41
+ <input data-testid="aria-invalid" aria-invalid>
42
+ <input data-testid="aria-invalid-value" aria-invalid="true">
43
+ <input data-testid="aria-invalid-false" aria-invalid="false">
44
+ </div>
45
+ ` )
46
+
47
+ expect ( queryByTestId ( 'no-aria-invalid' ) ) . not . toBeInvalid ( )
48
+ expect ( queryByTestId ( 'aria-invalid' ) ) . toBeInvalid ( )
49
+ expect ( queryByTestId ( 'aria-invalid-value' ) ) . toBeInvalid ( )
50
+ expect ( queryByTestId ( 'aria-invalid-false' ) ) . not . toBeInvalid ( )
51
+ expect ( invalidInputNode ) . toBeInvalid ( )
52
+
53
+ // negative test cases wrapped in throwError assertions for coverage.
54
+ expect ( ( ) =>
55
+ expect ( queryByTestId ( 'no-aria-invalid' ) ) . toBeInvalid ( ) ,
56
+ ) . toThrowError ( )
57
+ expect ( ( ) =>
58
+ expect ( queryByTestId ( 'aria-invalid' ) ) . not . toBeInvalid ( ) ,
59
+ ) . toThrowError ( )
60
+ expect ( ( ) =>
61
+ expect ( queryByTestId ( 'aria-invalid-value' ) ) . not . toBeInvalid ( ) ,
62
+ ) . toThrowError ( )
63
+ expect ( ( ) =>
64
+ expect ( queryByTestId ( 'aria-invalid-false' ) ) . toBeInvalid ( ) ,
65
+ ) . toThrowError ( )
66
+ expect ( ( ) => expect ( invalidInputNode ) . not . toBeInvalid ( ) ) . toThrowError ( )
67
+ } )
68
+
69
+ test ( 'handles <form/>' , ( ) => {
70
+ const { queryByTestId} = render ( `
71
+ <form data-testid="valid">
72
+ <input>
73
+ </form>
74
+ ` )
75
+
76
+ expect ( queryByTestId ( 'valid' ) ) . not . toBeInvalid ( )
77
+ expect ( invalidFormNode ) . toBeInvalid ( )
78
+
79
+ // negative test cases wrapped in throwError assertions for coverage.
80
+ expect ( ( ) => expect ( queryByTestId ( 'valid' ) ) . toBeInvalid ( ) ) . toThrowError ( )
81
+ expect ( ( ) => expect ( invalidFormNode ) . not . toBeInvalid ( ) ) . toThrowError ( )
82
+ } )
62
83
} )
63
84
64
- test ( '.toBeValid' , ( ) => {
65
- const { queryByTestId} = render ( `
66
- <div>
67
- <input data-testid="no-aria-invalid">
68
- <input data-testid="aria-invalid" aria-invalid>
69
- <input data-testid="aria-invalid-value" aria-invalid="true">
70
- <input data-testid="aria-invalid-false" aria-invalid="false">
71
- </div>
72
- ` )
73
-
74
- expect ( queryByTestId ( 'no-aria-invalid' ) ) . toBeValid ( )
75
- expect ( queryByTestId ( 'aria-invalid' ) ) . not . toBeValid ( )
76
- expect ( queryByTestId ( 'aria-invalid-value' ) ) . not . toBeValid ( )
77
- expect ( queryByTestId ( 'aria-invalid-false' ) ) . toBeValid ( )
78
- expect ( invalidInputNode ) . not . toBeValid ( )
79
-
80
- // negative test cases wrapped in throwError assertions for coverage.
81
- expect ( ( ) =>
82
- expect ( queryByTestId ( 'no-aria-invalid' ) ) . not . toBeValid ( ) ,
83
- ) . toThrowError ( )
84
- expect ( ( ) => expect ( queryByTestId ( 'aria-invalid' ) ) . toBeValid ( ) ) . toThrowError ( )
85
- expect ( ( ) =>
86
- expect ( queryByTestId ( 'aria-invalid-value' ) ) . toBeValid ( ) ,
87
- ) . toThrowError ( )
88
- expect ( ( ) =>
89
- expect ( queryByTestId ( 'aria-invalid-false' ) ) . not . toBeValid ( ) ,
90
- ) . toThrowError ( )
91
- expect ( ( ) => expect ( invalidInputNode ) . toBeValid ( ) ) . toThrowError ( )
85
+ describe ( '.toBeValid' , ( ) => {
86
+ test ( 'handles <input/>' , ( ) => {
87
+ const { queryByTestId} = render ( `
88
+ <div>
89
+ <input data-testid="no-aria-invalid">
90
+ <input data-testid="aria-invalid" aria-invalid>
91
+ <input data-testid="aria-invalid-value" aria-invalid="true">
92
+ <input data-testid="aria-invalid-false" aria-invalid="false">
93
+ </div>
94
+ ` )
95
+
96
+ expect ( queryByTestId ( 'no-aria-invalid' ) ) . toBeValid ( )
97
+ expect ( queryByTestId ( 'aria-invalid' ) ) . not . toBeValid ( )
98
+ expect ( queryByTestId ( 'aria-invalid-value' ) ) . not . toBeValid ( )
99
+ expect ( queryByTestId ( 'aria-invalid-false' ) ) . toBeValid ( )
100
+ expect ( invalidInputNode ) . not . toBeValid ( )
101
+
102
+ // negative test cases wrapped in throwError assertions for coverage.
103
+ expect ( ( ) =>
104
+ expect ( queryByTestId ( 'no-aria-invalid' ) ) . not . toBeValid ( ) ,
105
+ ) . toThrowError ( )
106
+ expect ( ( ) =>
107
+ expect ( queryByTestId ( 'aria-invalid' ) ) . toBeValid ( ) ,
108
+ ) . toThrowError ( )
109
+ expect ( ( ) =>
110
+ expect ( queryByTestId ( 'aria-invalid-value' ) ) . toBeValid ( ) ,
111
+ ) . toThrowError ( )
112
+ expect ( ( ) =>
113
+ expect ( queryByTestId ( 'aria-invalid-false' ) ) . not . toBeValid ( ) ,
114
+ ) . toThrowError ( )
115
+ expect ( ( ) => expect ( invalidInputNode ) . toBeValid ( ) ) . toThrowError ( )
116
+ } )
117
+
118
+ test ( 'handles <form/>' , ( ) => {
119
+ const { queryByTestId} = render ( `
120
+ <form data-testid="valid">
121
+ <input>
122
+ </form>
123
+ ` )
124
+
125
+ expect ( queryByTestId ( 'valid' ) ) . toBeValid ( )
126
+ expect ( invalidFormNode ) . not . toBeValid ( )
127
+
128
+ // negative test cases wrapped in throwError assertions for coverage.
129
+ expect ( ( ) => expect ( queryByTestId ( 'valid' ) ) . not . toBeValid ( ) ) . toThrowError ( )
130
+ expect ( ( ) => expect ( invalidFormNode ) . toBeValid ( ) ) . toThrowError ( )
131
+ } )
92
132
} )
0 commit comments