Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

domHook.js 3.3 KiB

há 3 anos
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.spyElementPrototypes = spyElementPrototypes;
  6. exports.spyElementPrototype = spyElementPrototype;
  7. function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
  8. function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
  9. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  10. /* eslint-disable no-param-reassign */
  11. var NO_EXIST = {
  12. __NOT_EXIST: true
  13. };
  14. function spyElementPrototypes(elementClass, properties) {
  15. var propNames = Object.keys(properties);
  16. var originDescriptors = {};
  17. propNames.forEach(function (propName) {
  18. var originDescriptor = Object.getOwnPropertyDescriptor(elementClass.prototype, propName);
  19. originDescriptors[propName] = originDescriptor || NO_EXIST;
  20. var spyProp = properties[propName];
  21. if (typeof spyProp === 'function') {
  22. // If is a function
  23. elementClass.prototype[propName] = function spyFunc() {
  24. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  25. args[_key] = arguments[_key];
  26. }
  27. return spyProp.call.apply(spyProp, [this, originDescriptor].concat(args));
  28. };
  29. } else {
  30. // Otherwise tread as a property
  31. Object.defineProperty(elementClass.prototype, propName, _objectSpread({}, spyProp, {
  32. set: function set(value) {
  33. if (spyProp.set) {
  34. return spyProp.set.call(this, originDescriptor, value);
  35. }
  36. return originDescriptor.set(value);
  37. },
  38. get: function get() {
  39. if (spyProp.get) {
  40. return spyProp.get.call(this, originDescriptor);
  41. }
  42. return originDescriptor.get();
  43. },
  44. configurable: true
  45. }));
  46. }
  47. });
  48. return {
  49. mockRestore: function mockRestore() {
  50. propNames.forEach(function (propName) {
  51. var originDescriptor = originDescriptors[propName];
  52. if (originDescriptor === NO_EXIST) {
  53. delete elementClass.prototype[propName];
  54. } else if (typeof originDescriptor === 'function') {
  55. elementClass.prototype[propName] = originDescriptor;
  56. } else {
  57. Object.defineProperty(elementClass.prototype, propName, originDescriptor);
  58. }
  59. });
  60. }
  61. };
  62. }
  63. function spyElementPrototype(Element, propName, property) {
  64. return spyElementPrototypes(Element, _defineProperty({}, propName, property));
  65. }
  66. /* eslint-enable */