domHook.js 2.1 KB

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