ng-stubs
Version:
[](https://travis-ci.org/planser/ng-stubs)
110 lines (109 loc) • 5.98 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ComponentStub = void 0;
var stubbed_component_1 = require("./stubbed-component");
var control_value_accessors_1 = require("./control-value-accessors");
var util_1 = require("./util");
var core_1 = require("@angular/core");
var forms_1 = require("@angular/forms");
function ComponentStub(component, stubOptions) {
stubOptions = __assign({ template: "<ng-content></ng-content>" }, stubOptions);
var annotation = (0, util_1.annotationFor)(component);
if (annotation == null)
throw new Error("Given type is neither a component nor a directive");
var inputAnnotationsBindings = (0, util_1.inputAnnotationsBindingsFor)(component, annotation);
var inputPropMetadataBindings = (0, util_1.inputPropMetadataBindingsFor)(component);
var outputAnnotationsBindings = (0, util_1.outputAnnotationsBindingsFor)(component, annotation);
var outputPropMetadataBindings = (0, util_1.outputPropMetadataBindingsFor)(component);
var metadata = {
template: stubOptions ? (stubOptions.template || component.name) : component.name,
selector: annotation.selector,
inputs: inputAnnotationsBindings,
outputs: outputAnnotationsBindings,
exportAs: annotation.exportAs
};
var controlValueAccessors = new control_value_accessors_1.ControlValueAccessors();
if ((0, util_1.providesNgValueAccessor)(annotation)) {
metadata["providers"] = [{
provide: forms_1.NG_VALUE_ACCESSOR,
useFactory: function (comp) { return controlValueAccessors.get(comp, true); },
deps: [(0, core_1.forwardRef)(function () { return Comp; })],
multi: true
}];
}
var instances = [];
var Comp = /** @class */ (function () {
function Comp(__elementRef) {
this.__elementRef = __elementRef;
this.__index = instances.length;
instances.push(this);
}
Comp.prototype.ngOnDestroy = function () {
controlValueAccessors.destroy(this);
instances.splice(this.__index, 1);
};
Comp = __decorate([
__param(0, (0, core_1.Inject)(core_1.ElementRef)),
__metadata("design:paramtypes", [core_1.ElementRef])
], Comp);
return Comp;
}());
inputPropMetadataBindings.forEach(function (i) { return (0, core_1.Input)(i.templateName)(Comp.prototype, i.propName); });
outputPropMetadataBindings.forEach(function (i) { return (0, core_1.Output)(i.templateName)(Comp.prototype, i.propName); });
__spreadArray(__spreadArray([], outputAnnotationsBindings, true), (outputPropMetadataBindings.map(function (p) { return p.propName; })), true).forEach(function (propName) {
Object.defineProperty(Comp.prototype, propName, {
get: function () {
if (this["_" + propName] == null)
this["_" + propName] = new core_1.EventEmitter();
return this["_" + propName];
}
});
});
(0, util_1.contentChildPropMetadataQueriesFor)(component).forEach(function (q) { return (0, core_1.ContentChild)(q.query.selector, { read: q.query.read, static: q.query.static })(Comp.prototype, q.propName); });
(0, util_1.contentChildrenPropMetadataQueriesFor)(component).forEach(function (q) { return (0, core_1.ContentChildren)(q.query.selector, { read: q.query.read })(Comp.prototype, q.propName); });
Object.getOwnPropertyNames(component.prototype)
.filter(function (p) { return p != "constructor"; })
.filter(function (p) { return Comp.prototype.hasOwnProperty(p) == false; })
.forEach(function (p) {
;
if ((0, util_1.isMethod)(component.prototype, p)) {
// Is it correct to use the prototype here?
// What happens eg if we have 2 instances, for instance 1 something is called and I check to have been called on instance 2?
(0, util_1.spyOnMethod)(Comp.prototype, p);
}
});
return new stubbed_component_1.StubbedComponent(instances, (0, util_1.isComponent)(annotation) ? (0, core_1.Component)(metadata)(Comp) : (0, core_1.Directive)(metadata)(Comp), controlValueAccessors);
}
exports.ComponentStub = ComponentStub;
;