UNPKG

@orchestrator/ngx-testing

Version:
125 lines 17.2 kB
import { __decorate, __metadata } from "tslib"; import { Component, ComponentFactoryResolver, Injectable, Injector, NgModule, Type, ViewChild, } from '@angular/core'; import { getOutputMock } from './output-mock'; import { genHostCompTpl, genHostCompTplStar } from './template-gen'; import { ExtraConfigToken, TestModuleToken, TestTypeKindToken, TestTypeToken, } from './tokens'; import { TestTypeKind, } from './types'; import { getDirectiveIO } from './util'; import * as i0 from "@angular/core"; /** * @internal */ var HostGeneratorService = /** @class */ (function () { function HostGeneratorService(cfr, injector) { this.cfr = cfr; this.injector = injector; this.testModule = this.injector.get(TestModuleToken); this.typeToken = this.injector.get(TestTypeToken); this.typeKind = this.injector.get(TestTypeKindToken); this.extraConfig = this.injector.get(ExtraConfigToken); } HostGeneratorService.prototype.generateModuleFor = function (host) { var testModule = this.testModule; var ngModule = this.extraConfig.ngModule; var TestModule = /** @class */ (function () { function TestModule() { } TestModule = __decorate([ NgModule({ imports: [testModule], declarations: [host], exports: [host], entryComponents: [host], schemas: ngModule ? ngModule.schemas : [], }) ], TestModule); return TestModule; }()); return TestModule; }; HostGeneratorService.prototype.generate = function () { switch (this.typeKind) { case TestTypeKind.Component: return this.generateForComponent(); case TestTypeKind.Directive: return this.generateForDirective(); default: throw Error("HostGeneratorService: Cannot generate host component for unknown kind: " + this.typeKind); } }; HostGeneratorService.prototype.generateForComponent = function () { return this.genForComponent(this.typeToken); }; HostGeneratorService.prototype.generateForDirective = function () { return this.genForDirective(this.typeToken); }; HostGeneratorService.prototype.genForComponent = function (compType) { var factory = this.cfr.resolveComponentFactory(compType); var selector = "host-" + factory.selector; var template = this.extraConfig.template || genHostCompTpl(factory.selector, factory, this.extraConfig.projectContent); return this.genComponent({ selector: selector, template: template }, compType, factory); }; HostGeneratorService.prototype.genForDirective = function (dirType) { var io = getDirectiveIO(dirType); var selector = 'host-directive'; var templateTag = this.extraConfig.template ? '' : this.extraConfig.hostComponent ? this.cfr.resolveComponentFactory(this.extraConfig.hostComponent) .selector : this.extraConfig.hostTag; var template = this.extraConfig.template || (templateTag ? this.genDirectiveTemplate(templateTag, io) : ''); return this.genComponent({ selector: selector, template: template }, dirType, io); }; HostGeneratorService.prototype.genDirectiveTemplate = function (tag, io) { return this.extraConfig.useStarSyntax ? genHostCompTplStar(io.inputs[0].templateName, tag, io, this.extraConfig.projectContent, this.extraConfig.templateBindings) : genHostCompTpl(tag, io, this.extraConfig.projectContent, this.extraConfig.templateBindings); }; HostGeneratorService.prototype.genComponent = function (meta, type, io) { // eslint-disable-next-line @typescript-eslint/no-this-alias var hostGeneratorService = this; var TestHostComponent = /** @class */ (function () { function TestHostComponent() { hostGeneratorService.initComponent(type, this, io); } __decorate([ ViewChild(type), __metadata("design:type", Object) ], TestHostComponent.prototype, "instance", void 0); TestHostComponent = __decorate([ Component(meta), __metadata("design:paramtypes", []) ], TestHostComponent); return TestHostComponent; }()); return TestHostComponent; }; HostGeneratorService.prototype.initComponent = function (compType, hostComp, io) { io.inputs.forEach(function (_a) { var propName = _a.propName; return (hostComp[propName] = undefined); }); io.outputs.forEach(function (_a) { var propName = _a.propName; return (hostComp[propName] = getOutputMock()(propName, compType.name, compType, function () { return hostComp.instance; })); }); }; HostGeneratorService.ctorParameters = function () { return [ { type: ComponentFactoryResolver }, { type: Injector } ]; }; HostGeneratorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function HostGeneratorService_Factory() { return new HostGeneratorService(i0.ɵɵinject(i0.ComponentFactoryResolver), i0.ɵɵinject(i0.INJECTOR)); }, token: HostGeneratorService, providedIn: "root" }); HostGeneratorService = __decorate([ Injectable({ providedIn: 'root', }), __metadata("design:paramtypes", [ComponentFactoryResolver, Injector]) ], HostGeneratorService); return HostGeneratorService; }()); export { HostGeneratorService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC1nZW5lcmF0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BvcmNoZXN0cmF0b3Ivbmd4LXRlc3RpbmcvIiwic291cmNlcyI6WyJsaWIvaG9zdC1nZW5lcmF0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFJTCxZQUFZLEdBQ2IsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFFeEM7O0dBRUc7QUFJSDtJQU1FLDhCQUNVLEdBQTZCLEVBQzdCLFFBQWtCO1FBRGxCLFFBQUcsR0FBSCxHQUFHLENBQTBCO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFQcEIsZUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRCxnQkFBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFLdkQsQ0FBQztJQUVKLGdEQUFpQixHQUFqQixV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QUMsQ0FBQztRQUN0RSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDaEIsVUFBQyxFQUFZO2dCQUFWLHNCQUFRO1lBQ1QsT0FBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FDbkMsUUFBUSxFQUNSLFFBQVEsQ0FBQyxJQUFJLEVBQ2IsUUFBUSxFQUNSLGNBQU0sT0FBQSxRQUFRLENBQUMsUUFBUSxFQUFqQixDQUFpQixDQUN4QixDQUFDO1FBTEYsQ0FLRSxDQUNMLENBQUM7SUFDSixDQUFDOztnQkEvSGMsd0JBQXdCO2dCQUNuQixRQUFROzs7SUFSakIsb0JBQW9CO1FBSGhDLFVBQVUsQ0FBQztZQUNWLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7eUNBUWUsd0JBQXdCO1lBQ25CLFFBQVE7T0FSakIsb0JBQW9CLENBdUloQzsrQkF2S0Q7Q0F1S0MsQUF2SUQsSUF1SUM7U0F2SVksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEluamVjdGFibGUsXG4gIEluamVjdG9yLFxuICBOZ01vZHVsZSxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZ2V0T3V0cHV0TW9jayB9IGZyb20gJy4vb3V0cHV0LW1vY2snO1xuaW1wb3J0IHsgZ2VuSG9zdENvbXBUcGwsIGdlbkhvc3RDb21wVHBsU3RhciB9IGZyb20gJy4vdGVtcGxhdGUtZ2VuJztcbmltcG9ydCB7XG4gIEV4dHJhQ29uZmlnVG9rZW4sXG4gIFRlc3RNb2R1bGVUb2tlbixcbiAgVGVzdFR5cGVLaW5kVG9rZW4sXG4gIFRlc3RUeXBlVG9rZW4sXG59IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7XG4gIEFzSG9zdENvbXBvbmVudCxcbiAgRGlyZWN0aXZlSU8sXG4gIEhvc3RDb21wb25lbnQsXG4gIFRlc3RUeXBlS2luZCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXREaXJlY3RpdmVJTyB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBIb3N0R2VuZXJhdG9yU2VydmljZSB7XG4gIHByaXZhdGUgdGVzdE1vZHVsZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRlc3RNb2R1bGVUb2tlbik7XG4gIHByaXZhdGUgdHlwZVRva2VuID0gdGhpcy5pbmplY3Rvci5nZXQoVGVzdFR5cGVUb2tlbik7XG4gIHByaXZhdGUgdHlwZUtpbmQgPSB0aGlzLmluamVjdG9yLmdldChUZXN0VHlwZUtpbmRUb2tlbik7XG4gIHByaXZhdGUgZXh0cmFDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChFeHRyYUNvbmZpZ1Rva2VuKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHt9XG5cbiAgZ2VuZXJhdGVNb2R1bGVGb3IoaG9zdDogVHlwZTxhbnk+KTogVHlwZTxhbnk+IHtcbiAgICBjb25zdCB0ZXN0TW9kdWxlID0gdGhpcy50ZXN0TW9kdWxlO1xuICAgIGNvbnN0IG5nTW9kdWxlID0gdGhpcy5leHRyYUNvbmZpZy5uZ01vZHVsZTtcblxuICAgIEBOZ01vZHVsZSh7XG4gICAgICBpbXBvcnRzOiBbdGVzdE1vZHVsZV0sXG4gICAgICBkZWNsYXJhdGlvbnM6IFtob3N0XSxcbiAgICAgIGV4cG9ydHM6IFtob3N0XSxcbiAgICAgIGVudHJ5Q29tcG9uZW50czogW2hvc3RdLFxuICAgICAgc2NoZW1hczogbmdNb2R1bGUgPyBuZ01vZHVsZS5zY2hlbWFzIDogW10sXG4gICAgfSlcbiAgICBjbGFzcyBUZXN0TW9kdWxlIHt9XG5cbiAgICByZXR1cm4gVGVzdE1vZHVsZTtcbiAgfVxuXG4gIGdlbmVyYXRlPFQgPSBhbnk+KCk6IFR5cGU8QXNIb3N0Q29tcG9uZW50PFQ+PiB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGVLaW5kKSB7XG4gICAgICBjYXNlIFRlc3RUeXBlS2luZC5Db21wb25lbnQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRm9yQ29tcG9uZW50PFQ+KCk7XG4gICAgICBjYXNlIFRlc3RUeXBlS2luZC5EaXJlY3RpdmU6XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRm9yRGlyZWN0aXZlPFQ+KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgSG9zdEdlbmVyYXRvclNlcnZpY2U6IENhbm5vdCBnZW5lcmF0ZSBob3N0IGNvbXBvbmVudCBmb3IgdW5rbm93biBraW5kOiAke3RoaXMudHlwZUtpbmR9YCxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUZvckNvbXBvbmVudDxUID0gYW55PigpOiBUeXBlPEFzSG9zdENvbXBvbmVudDxUPj4ge1xuICAgIHJldHVybiB0aGlzLmdlbkZvckNvbXBvbmVudDxUPih0aGlzLnR5cGVUb2tlbik7XG4gIH1cblxuICBnZW5lcmF0ZUZvckRpcmVjdGl2ZTxUID0gYW55PigpOiBUeXBlPEFzSG9zdENvbXBvbmVudDxUPj4ge1xuICAgIHJldHVybiB0aGlzLmdlbkZvckRpcmVjdGl2ZTxUPih0aGlzLnR5cGVUb2tlbik7XG4gIH1cblxuICBnZW5Gb3JDb21wb25lbnQ8VD4oY29tcFR5cGU6IFR5cGU8VD4pOiBUeXBlPEFzSG9zdENvbXBvbmVudDxUPj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wVHlwZSk7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgaG9zdC0ke2ZhY3Rvcnkuc2VsZWN0b3J9YDtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9XG4gICAgICB0aGlzLmV4dHJhQ29uZmlnLnRlbXBsYXRlIHx8XG4gICAgICBnZW5Ib3N0Q29tcFRwbChcbiAgICAgICAgZmFjdG9yeS5zZWxlY3RvcixcbiAgICAgICAgZmFjdG9yeSxcbiAgICAgICAgdGhpcy5leHRyYUNvbmZpZy5wcm9qZWN0Q29udGVudCxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5nZW5Db21wb25lbnQoeyBzZWxlY3RvciwgdGVtcGxhdGUgfSwgY29tcFR5cGUsIGZhY3RvcnkpO1xuICB9XG5cbiAgZ2VuRm9yRGlyZWN0aXZlPFQ+KGRpclR5cGU6IFR5cGU8VD4pOiBUeXBlPEFzSG9zdENvbXBvbmVudDxUPj4ge1xuICAgIGNvbnN0IGlvID0gZ2V0RGlyZWN0aXZlSU8oZGlyVHlwZSk7XG5cbiAgICBjb25zdCBzZWxlY3RvciA9ICdob3N0LWRpcmVjdGl2ZSc7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZVRhZyA9IHRoaXMuZXh0cmFDb25maWcudGVtcGxhdGVcbiAgICAgID8gJydcbiAgICAgIDogdGhpcy5leHRyYUNvbmZpZy5ob3N0Q29tcG9uZW50XG4gICAgICA/IHRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuZXh0cmFDb25maWcuaG9zdENvbXBvbmVudClcbiAgICAgICAgICAuc2VsZWN0b3JcbiAgICAgIDogdGhpcy5leHRyYUNvbmZpZy5ob3N0VGFnO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPVxuICAgICAgdGhpcy5leHRyYUNvbmZpZy50ZW1wbGF0ZSB8fFxuICAgICAgKHRlbXBsYXRlVGFnID8gdGhpcy5nZW5EaXJlY3RpdmVUZW1wbGF0ZSh0ZW1wbGF0ZVRhZywgaW8pIDogJycpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2VuQ29tcG9uZW50KHsgc2VsZWN0b3IsIHRlbXBsYXRlIH0sIGRpclR5cGUsIGlvKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuRGlyZWN0aXZlVGVtcGxhdGUodGFnOiBzdHJpbmcsIGlvOiBEaXJlY3RpdmVJTyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXh0cmFDb25maWcudXNlU3RhclN5bnRheFxuICAgICAgPyBnZW5Ib3N0Q29tcFRwbFN0YXIoXG4gICAgICAgICAgaW8uaW5wdXRzWzBdLnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICB0YWcsXG4gICAgICAgICAgaW8sXG4gICAgICAgICAgdGhpcy5leHRyYUNvbmZpZy5wcm9qZWN0Q29udGVudCxcbiAgICAgICAgICB0aGlzLmV4dHJhQ29uZmlnLnRlbXBsYXRlQmluZGluZ3MsXG4gICAgICAgIClcbiAgICAgIDogZ2VuSG9zdENvbXBUcGwoXG4gICAgICAgICAgdGFnLFxuICAgICAgICAgIGlvLFxuICAgICAgICAgIHRoaXMuZXh0cmFDb25maWcucHJvamVjdENvbnRlbnQsXG4gICAgICAgICAgdGhpcy5leHRyYUNvbmZpZy50ZW1wbGF0ZUJpbmRpbmdzLFxuICAgICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5Db21wb25lbnQ8VD4oXG4gICAgbWV0YTogQ29tcG9uZW50LFxuICAgIHR5cGU6IFR5cGU8VD4sXG4gICAgaW86IERpcmVjdGl2ZUlPLFxuICApOiBUeXBlPEFzSG9zdENvbXBvbmVudDxUPj4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGNvbnN0IGhvc3RHZW5lcmF0b3JTZXJ2aWNlID0gdGhpcztcblxuICAgIEBDb21wb25lbnQobWV0YSlcbiAgICBjbGFzcyBUZXN0SG9zdENvbXBvbmVudCBpbXBsZW1lbnRzIEhvc3RDb21wb25lbnQ8VD4ge1xuICAgICAgQFZpZXdDaGlsZCh0eXBlKVxuICAgICAgaW5zdGFuY2U6IFQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBob3N0R2VuZXJhdG9yU2VydmljZS5pbml0Q29tcG9uZW50KHR5cGUsIHRoaXMsIGlvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVGVzdEhvc3RDb21wb25lbnQgYXMgVHlwZTxBc0hvc3RDb21wb25lbnQ8VD4+O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29tcG9uZW50PFQ+KFxuICAgIGNvbXBUeXBlOiBUeXBlPGFueT4sXG4gICAgaG9zdENvbXA6IEhvc3RDb21wb25lbnQ8YW55PixcbiAgICBpbzogRGlyZWN0aXZlSU8sXG4gICkge1xuICAgIGlvLmlucHV0cy5mb3JFYWNoKCh7IHByb3BOYW1lIH0pID0+IChob3N0Q29tcFtwcm9wTmFtZV0gPSB1bmRlZmluZWQpKTtcbiAgICBpby5vdXRwdXRzLmZvckVhY2goXG4gICAgICAoeyBwcm9wTmFtZSB9KSA9PlxuICAgICAgICAoaG9zdENvbXBbcHJvcE5hbWVdID0gZ2V0T3V0cHV0TW9jaygpKFxuICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgIGNvbXBUeXBlLm5hbWUsXG4gICAgICAgICAgY29tcFR5cGUsXG4gICAgICAgICAgKCkgPT4gaG9zdENvbXAuaW5zdGFuY2UsXG4gICAgICAgICkpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==