';
- assert.dom('div#dis').isDisabled();
- assert.dom(document.querySelector('div#dis')).isDisabled();
+ test('fails for missing element', () => {
+ assert.dom('input[type="password"]').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',
+ message: 'Element input[type="password"] exists',
result: false,
}]);
});
+
+ test('succeeds if element is disabled with text', () => {
+ document.body.innerHTML = '';
+ assert.dom('input').isDisabled();
+
+ expect(assert.results).toEqual([{
+ actual: 'Element input is disabled',
+ expected: 'Element input is disabled',
+ message: 'Element input is disabled',
+ result: true,
+ }]);
+ });
+ });
+
+ test('throws for unexpected parameter types', () => {
+ expect(() => assert.dom(5).isDisabled()).toThrow('Unexpected Parameter: 5');
+ expect(() => assert.dom(true).isDisabled()).toThrow('Unexpected Parameter: true');
+ expect(() => assert.dom(undefined).isDisabled()).toThrow('Unexpected Parameter: undefined');
+ expect(() => assert.dom({}).isDisabled()).toThrow('Unexpected Parameter: [object Object]');
+ expect(() => assert.dom(document).isDisabled()).toThrow('Unexpected Parameter: [object HTMLDocument]');
+ expect(() => assert.dom(document.createElement('div')).isDisabled()).toThrow('Unexpected Element Type: [object HTMLDivElement]');
});
});
diff --git a/lib/assertions.js b/lib/assertions.js
index 6aea0807f..7f02a2d01 100644
--- a/lib/assertions.js
+++ b/lib/assertions.js
@@ -7,7 +7,7 @@ import isRequired from './assertions/is-required';
import isNotRequired from './assertions/is-not-required';
import isVisible from './assertions/is-visible';
import isNotVisible from './assertions/is-not-visible';
-import isNotDisabled from './assertions/is-not-disabled';
+import isDisabled from './assertions/is-disabled';
import elementToString from './helpers/element-to-string';
import collapseWhitespace from './helpers/collapse-whitespace';
@@ -318,24 +318,7 @@ export default class DOMAssertions {
* @see {@link #isNotDisabled}
*/
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 });
+ isDisabled.call(this, message);
}
/**
@@ -351,7 +334,7 @@ export default class DOMAssertions {
* @see {@link #isDisabled}
*/
isNotDisabled(message) {
- isNotDisabled.call(this, message);
+ isDisabled.call(this, message, { inverted: true });
}
/**
diff --git a/lib/assertions/is-disabled.js b/lib/assertions/is-disabled.js
new file mode 100644
index 000000000..7bccfc715
--- /dev/null
+++ b/lib/assertions/is-disabled.js
@@ -0,0 +1,34 @@
+export default function isDisabled(message, options = {}) {
+ let { inverted } = options;
+
+ let element = this.findTargetElement();
+ if (!element) return;
+
+ if (!(
+ element instanceof HTMLInputElement ||
+ element instanceof HTMLTextAreaElement ||
+ element instanceof HTMLSelectElement ||
+ element instanceof HTMLButtonElement ||
+ element instanceof HTMLOptGroupElement ||
+ element instanceof HTMLOptionElement ||
+ element instanceof HTMLFieldSetElement
+ )) {
+ throw new TypeError(`Unexpected Element Type: ${element.toString()}`);
+ }
+
+ let result = element.disabled === !inverted;
+
+ let actual = element.disabled === false
+ ? `Element ${this.targetDescription} is not disabled`
+ : `Element ${this.targetDescription} is disabled`;
+
+ let expected = inverted
+ ? `Element ${this.targetDescription} is not disabled`
+ : `Element ${this.targetDescription} is disabled`;
+
+ if (!message) {
+ message = expected;
+ }
+
+ this.pushResult({ result, actual, expected, message });
+}
diff --git a/lib/assertions/is-not-disabled.js b/lib/assertions/is-not-disabled.js
deleted file mode 100644
index 6e557fc0f..000000000
--- a/lib/assertions/is-not-disabled.js
+++ /dev/null
@@ -1,26 +0,0 @@
-export default function notDisabled(message) {
- let element = this.findTargetElement();
- if (!element) return;
-
- if (!(
- element instanceof HTMLInputElement ||
- element instanceof HTMLTextAreaElement ||
- element instanceof HTMLSelectElement ||
- element instanceof HTMLButtonElement ||
- element instanceof HTMLOptGroupElement ||
- element instanceof HTMLOptionElement ||
- element instanceof HTMLFieldSetElement
- )) {
- throw new TypeError(`Unexpected Element Type: ${element.toString()}`);
- }
-
- let result = element.disabled === false;
- let actual = result ? `Element ${this.targetDescription} is not disabled` : `Element ${this.targetDescription} is disabled`;
- let expected = `Element ${this.targetDescription} is not disabled`;
-
- if (!message) {
- message = expected;
- }
-
- this.pushResult({ result, actual, expected, message });
-}