domHook.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.spyElementPrototype = spyElementPrototype;
  7. exports.spyElementPrototypes = spyElementPrototypes;
  8. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  9. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  10. var __NULL__ = {
  11. notExist: true
  12. };
  13. function spyElementPrototypes(Element, properties) {
  14. var propNames = Object.keys(properties);
  15. var originDescriptors = {};
  16. propNames.forEach(function (propName) {
  17. var originDescriptor = Object.getOwnPropertyDescriptor(Element.prototype, propName);
  18. originDescriptors[propName] = originDescriptor || __NULL__;
  19. var spyProp = properties[propName];
  20. if (typeof spyProp === 'function') {
  21. // If is a function
  22. Element.prototype[propName] = function spyFunc() {
  23. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  24. args[_key] = arguments[_key];
  25. }
  26. return spyProp.call.apply(spyProp, [this, originDescriptor].concat(args));
  27. };
  28. } else {
  29. // Otherwise tread as a property
  30. Object.defineProperty(Element.prototype, propName, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, spyProp), {}, {
  31. set: function set(value) {
  32. if (spyProp.set) {
  33. return spyProp.set.call(this, originDescriptor, value);
  34. }
  35. return originDescriptor.set(value);
  36. },
  37. get: function get() {
  38. if (spyProp.get) {
  39. return spyProp.get.call(this, originDescriptor);
  40. }
  41. return originDescriptor.get();
  42. }
  43. }));
  44. }
  45. });
  46. return {
  47. mockRestore: function mockRestore() {
  48. propNames.forEach(function (propName) {
  49. var originDescriptor = originDescriptors[propName];
  50. if (originDescriptor === __NULL__) {
  51. delete Element.prototype[propName];
  52. } else if (typeof originDescriptor === 'function') {
  53. Element.prototype[propName] = originDescriptor;
  54. } else {
  55. Object.defineProperty(Element.prototype, propName, originDescriptor);
  56. }
  57. });
  58. }
  59. };
  60. }
  61. function spyElementPrototype(Element, propName, property) {
  62. return spyElementPrototypes(Element, (0, _defineProperty2.default)({}, propName, property));
  63. }