diff --git a/lib/__tests__/is-disabled.js b/lib/__tests__/is-disabled.js new file mode 100644 index 000000000..2b84cce8e --- /dev/null +++ b/lib/__tests__/is-disabled.js @@ -0,0 +1,72 @@ +/* eslint-env jest */ + +import TestAssertions from "../helpers/test-assertions"; + +describe('assert.dom(...).isDisabled()', () => { + let assert; + + beforeEach(() => { + assert = new TestAssertions(); + }); + + describe('input tags', () => { + test('succeeds when input is disabled', () => { + document.body.innerHTML = ''; + + assert.dom('input').isDisabled(); + assert.dom(document.querySelector('input')).isDisabled(); + + expect(assert.results).toEqual([{ + actual: 'Element input is disabled', + expected: 'Element input is disabled', + message: 'Element input is disabled', + result: true, + }, { + actual: 'Element input[disabled] is disabled', + expected: 'Element input[disabled] is disabled', + message: 'Element input[disabled] is disabled', + result: true, + }]); + }); + + test('fails when input is not disabled', () => { + document.body.innerHTML = ''; + + assert.dom('input').isDisabled(); + assert.dom(document.querySelector('input')).isDisabled(); + + expect(assert.results).toEqual([{ + actual: 'Element input is not disabled', + expected: 'Element input is disabled', + message: 'Element input is disabled', + result: false, + }, { + actual: 'Element input is not disabled', + expected: 'Element input is disabled', + message: 'Element input is disabled', + result: false, + }]); + }); + }); + + describe('non-disablable elements', () => { + test('fails when element does not support disabled', () => { + document.body.innerHTML = '
'; + + assert.dom('div#dis').isDisabled(); + assert.dom(document.querySelector('div#dis')).isDisabled(); + + expect(assert.results).toEqual([{ + actual: 'Element div#dis does not support disabled', + expected: 'Element div#dis is disabled', + message: 'Element div#dis is disabled', + result: false, + }, { + actual: 'Element div#dis[disabled] does not support disabled', + expected: 'Element div#dis[disabled] is disabled', + message: 'Element div#dis[disabled] is disabled', + result: false, + }]); + }); + }); +}); diff --git a/lib/assertions.js b/lib/assertions.js index d583fee0d..ad641bbb2 100644 --- a/lib/assertions.js +++ b/lib/assertions.js @@ -135,6 +135,27 @@ export default class DOMAssertions { } } + isDisabled(message) { + let element = this.findTargetElement(); + + let expected = `Element ${this.targetDescription} is disabled`; + let actual = `Element ${this.targetDescription} is disabled`; + let result = element.disabled; + + if (result === false) { + actual = `Element ${this.targetDescription} is not disabled`; + } else if(result === undefined) { + actual = `Element ${this.targetDescription} does not support disabled`; + result = false; + } + + if (!message) { + message = expected; + } + + this.pushResult({ result, actual, expected, message }); + } + /** * Assert that the [HTMLElement][] has no attribute with the provided `name`. *