"use strict";
const toHaveValue$1 = require("../../../../_virtual/to-have-value.cjs");
const interopRequireDefault = require("../../../@babel/runtime/helpers/interopRequireDefault.cjs");
const isEqualWith = require("../../../lodash/isEqualWith.cjs");
require("./utils.cjs");
const utils = require("../../../../_virtual/utils.cjs");
var _interopRequireDefault = interopRequireDefault.interopRequireDefaultExports;
Object.defineProperty(toHaveValue$1.__exports, "__esModule", {
  value: true
});
toHaveValue$1.__exports.toHaveValue = toHaveValue;
var _isEqualWith = _interopRequireDefault(isEqualWith.__require());
var _utils = utils.__exports;
function toHaveValue(htmlElement, expectedValue) {
  (0, _utils.checkHtmlElement)(htmlElement, toHaveValue, this);
  if (htmlElement.tagName.toLowerCase() === "input" && ["checkbox", "radio"].includes(htmlElement.type)) {
    throw new Error("input with type=checkbox or type=radio cannot be used with .toHaveValue(). Use .toBeChecked() for type=checkbox or .toHaveFormValues() instead");
  }
  const receivedValue = (0, _utils.getSingleElementValue)(htmlElement);
  const expectsValue = expectedValue !== void 0;
  let expectedTypedValue = expectedValue;
  let receivedTypedValue = receivedValue;
  if (expectedValue == receivedValue && expectedValue !== receivedValue) {
    expectedTypedValue = `${expectedValue} (${typeof expectedValue})`;
    receivedTypedValue = `${receivedValue} (${typeof receivedValue})`;
  }
  return {
    pass: expectsValue ? (0, _isEqualWith.default)(receivedValue, expectedValue, _utils.compareArraysAsSet) : Boolean(receivedValue),
    message: () => {
      const to = this.isNot ? "not to" : "to";
      const matcher = this.utils.matcherHint(`${this.isNot ? ".not" : ""}.toHaveValue`, "element", expectedValue);
      return (0, _utils.getMessage)(this, matcher, `Expected the element ${to} have value`, expectsValue ? expectedTypedValue : "(any)", "Received", receivedTypedValue);
    }
  };
}
module.exports = toHaveValue$1.__exports;
//# sourceMappingURL=to-have-value.cjs.map
