You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.8 KiB
39 lines
1.8 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.toHaveDisplayValue = toHaveDisplayValue; |
|
|
|
var _utils = require("./utils"); |
|
|
|
function toHaveDisplayValue(htmlElement, expectedValue) { |
|
(0, _utils.checkHtmlElement)(htmlElement, toHaveDisplayValue, this); |
|
const tagName = htmlElement.tagName.toLowerCase(); |
|
|
|
if (!['select', 'input', 'textarea'].includes(tagName)) { |
|
throw new Error('.toHaveDisplayValue() currently supports only input, textarea or select elements, try with another matcher instead.'); |
|
} |
|
|
|
if (tagName === 'input' && ['radio', 'checkbox'].includes(htmlElement.type)) { |
|
throw new Error(`.toHaveDisplayValue() currently does not support input[type="${htmlElement.type}"], try with another matcher instead.`); |
|
} |
|
|
|
const values = getValues(tagName, htmlElement); |
|
const expectedValues = getExpectedValues(expectedValue); |
|
const numberOfMatchesWithValues = expectedValues.filter(expected => values.some(value => expected instanceof RegExp ? expected.test(value) : this.equals(value, String(expected)))).length; |
|
const matchedWithAllValues = numberOfMatchesWithValues === values.length; |
|
const matchedWithAllExpectedValues = numberOfMatchesWithValues === expectedValues.length; |
|
return { |
|
pass: matchedWithAllValues && matchedWithAllExpectedValues, |
|
message: () => (0, _utils.getMessage)(this, this.utils.matcherHint(`${this.isNot ? '.not' : ''}.toHaveDisplayValue`, 'element', ''), `Expected element ${this.isNot ? 'not ' : ''}to have display value`, expectedValue, 'Received', values) |
|
}; |
|
} |
|
|
|
function getValues(tagName, htmlElement) { |
|
return tagName === 'select' ? Array.from(htmlElement).filter(option => option.selected).map(option => option.textContent) : [htmlElement.value]; |
|
} |
|
|
|
function getExpectedValues(expectedValue) { |
|
return expectedValue instanceof Array ? expectedValue : [expectedValue]; |
|
} |