UNPKG

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