@orchestrator/ngx-testing
Version:
Testing utilities for Angular projects
125 lines • 17.2 kB
JavaScript
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==