UNPKG

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