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.
35 lines
1.6 KiB
35 lines
1.6 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.toHaveAttribute = toHaveAttribute; |
|
|
|
var _utils = require("./utils"); |
|
|
|
function printAttribute(stringify, name, value) { |
|
return value === undefined ? name : `${name}=${stringify(value)}`; |
|
} |
|
|
|
function getAttributeComment(stringify, name, value) { |
|
return value === undefined ? `element.hasAttribute(${stringify(name)})` : `element.getAttribute(${stringify(name)}) === ${stringify(value)}`; |
|
} |
|
|
|
function toHaveAttribute(htmlElement, name, expectedValue) { |
|
(0, _utils.checkHtmlElement)(htmlElement, toHaveAttribute, this); |
|
const isExpectedValuePresent = expectedValue !== undefined; |
|
const hasAttribute = htmlElement.hasAttribute(name); |
|
const receivedValue = htmlElement.getAttribute(name); |
|
return { |
|
pass: isExpectedValuePresent ? hasAttribute && this.equals(receivedValue, expectedValue) : hasAttribute, |
|
message: () => { |
|
const to = this.isNot ? 'not to' : 'to'; |
|
const receivedAttribute = hasAttribute ? printAttribute(this.utils.stringify, name, receivedValue) : null; |
|
const matcher = this.utils.matcherHint(`${this.isNot ? '.not' : ''}.toHaveAttribute`, 'element', this.utils.printExpected(name), { |
|
secondArgument: isExpectedValuePresent ? this.utils.printExpected(expectedValue) : undefined, |
|
comment: getAttributeComment(this.utils.stringify, name, expectedValue) |
|
}); |
|
return (0, _utils.getMessage)(this, matcher, `Expected the element ${to} have attribute`, printAttribute(this.utils.stringify, name, expectedValue), 'Received', receivedAttribute); |
|
} |
|
}; |
|
} |