Skip to content

Commit 5e39222

Browse files
authoredJun 14, 2020
fix: element not allowed to be disabled being returned as disabled (#261)
1 parent f8d3095 commit 5e39222

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed
 

‎src/__tests__/to-be-disabled.js

+10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ test('.toBeDisabled', () => {
2525
</optgroup>
2626
</select>
2727
</div>
28+
<a href="http://github.com" data-testid="deep-a-element">x</a>
2829
</fieldset>
2930
3031
<a href="http://github.com" disabled={true} data-testid="a-element">x</a>
@@ -50,7 +51,11 @@ test('.toBeDisabled', () => {
5051
expect(queryByTestId('deep-option-element')).toBeDisabled()
5152

5253
expect(queryByTestId('a-element')).not.toBeDisabled()
54+
expect(queryByTestId('deep-a-element')).not.toBeDisabled()
5355
expect(() => expect(queryByTestId('a-element')).toBeDisabled()).toThrowError()
56+
expect(() =>
57+
expect(queryByTestId('deep-a-element')).toBeDisabled(),
58+
).toThrowError()
5459
})
5560

5661
test('.toBeDisabled fieldset>legend', () => {
@@ -129,6 +134,7 @@ test('.toBeEnabled', () => {
129134
</optgroup>
130135
</select>
131136
</div>
137+
<a href="http://github.com" data-testid="deep-a-element">x</a>
132138
</fieldset>
133139
134140
<a href="http://github.com" disabled={true} data-testid="a-element">x</a>
@@ -173,6 +179,10 @@ test('.toBeEnabled', () => {
173179
expect(() =>
174180
expect(queryByTestId('a-element')).not.toBeEnabled(),
175181
).toThrowError()
182+
expect(queryByTestId('deep-a-element')).toBeEnabled()
183+
expect(() =>
184+
expect(queryByTestId('deep-a-element')).not.toBeEnabled(),
185+
).toThrowError()
176186
})
177187

178188
test('.toBeEnabled fieldset>legend', () => {

‎src/to-be-disabled.js

+14-3
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,12 @@ function isElementDisabledByParent(element, parent) {
3737
)
3838
}
3939

40+
function canElementBeDisabled(element) {
41+
return FORM_TAGS.includes(getTag(element))
42+
}
43+
4044
function isElementDisabled(element) {
41-
return FORM_TAGS.includes(getTag(element)) && element.hasAttribute('disabled')
45+
return canElementBeDisabled(element) && element.hasAttribute('disabled')
4246
}
4347

4448
function isAncestorDisabled(element) {
@@ -49,10 +53,17 @@ function isAncestorDisabled(element) {
4953
)
5054
}
5155

56+
function isElementOrAncestorDisabled(element) {
57+
return (
58+
canElementBeDisabled(element) &&
59+
(isElementDisabled(element) || isAncestorDisabled(element))
60+
)
61+
}
62+
5263
export function toBeDisabled(element) {
5364
checkHtmlElement(element, toBeDisabled, this)
5465

55-
const isDisabled = isElementDisabled(element) || isAncestorDisabled(element)
66+
const isDisabled = isElementOrAncestorDisabled(element)
5667

5768
return {
5869
pass: isDisabled,
@@ -71,7 +82,7 @@ export function toBeDisabled(element) {
7182
export function toBeEnabled(element) {
7283
checkHtmlElement(element, toBeEnabled, this)
7384

74-
const isEnabled = !(isElementDisabled(element) || isAncestorDisabled(element))
85+
const isEnabled = !isElementOrAncestorDisabled(element)
7586

7687
return {
7788
pass: isEnabled,

0 commit comments

Comments
 (0)