UNPKG

ng-stubs

Version:

[![Build Status](https://travis-ci.org/planser/ng-stubs.svg?branch=master)](https://travis-ci.org/planser/ng-stubs)

110 lines (109 loc) 5.98 kB
"use strict"; 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;