@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
173 lines • 17.4 kB
JavaScript
import { CommonModule, DOCUMENT } from '@angular/common';
import { NgModule, NgZone } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { NFC } from '@awesome-cordova-plugins/nfc/ngx';
import { Platform } from '@ionic/angular';
import { LibCommonModule, ProtocolFactoryService, TAP_BLE_SCANNER, TAP_CONNECTION_OPTIONS_PROVIDER, TAP_EXECUTE_TAP_ACTION_SERVICE, TAP_INFO_RESOLVER_CONFIG, TAP_NETWORK_SCANNER, TAP_WIFI_SCANNER, TapAdministrationService, TaskManagerUiModule, } from '@iotize/ionic';
import { defaultInfoResolverConfig } from '@iotize/ionic/config';
import { never, of } from 'rxjs';
import { BLEScannerTestingService } from './ble-scanner-testing.service';
import { ProtocolFactoryTestingService as ProtocolFactoryTestingServiceClass } from './protocol-factory-testing.service';
import * as i0 from "@angular/core";
class ScannerNotAvailable {
message;
scanning = of(false);
isScanning = false;
results = never();
constructor(message) {
this.message = message;
}
start(option) {
return Promise.reject(this.message);
}
stop() {
return Promise.reject(this.message);
}
}
export const ProtocolFactoryTestingServiceProvider = {
provide: ProtocolFactoryService,
useClass: ProtocolFactoryTestingServiceClass,
};
export function scannerNotAvailableFactory(name) {
const factory = () => {
const scanner = new ScannerNotAvailable(`${name} scanner is not available for this test`);
return scanner;
};
return factory;
}
class ExecuteTapActionTestingService {
async executeTapAction(callable) {
return await callable();
}
}
export class IotizeIonicTestingModule {
static forRoot(options) {
// const providers: Provider[] = [];
const overwritesProvides = [];
if (options?.platform) {
overwritesProvides.push({
provide: Platform,
useFactory: (doc, ngZone) => {
return new TestingPlatform(doc, ngZone, options?.platform);
},
deps: [DOCUMENT, NgZone],
});
}
return {
ngModule: IotizeIonicTestingModule,
providers: [
// ...providers,
...overwritesProvides,
],
};
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IotizeIonicTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
/** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: IotizeIonicTestingModule, exports: [CommonModule,
ReactiveFormsModule,
FormsModule,
RouterTestingModule,
TaskManagerUiModule,
LibCommonModule] });
/** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IotizeIonicTestingModule, providers: [
BLEScannerTestingService,
ProtocolFactoryTestingServiceProvider,
{
provide: TAP_INFO_RESOLVER_CONFIG,
useValue: defaultInfoResolverConfig,
},
NFC,
{
provide: TAP_CONNECTION_OPTIONS_PROVIDER,
useValue: {
encryption: undefined,
nfcPairing: false,
refreshSessionState: true,
switchProtocol: false,
},
},
{
provide: TAP_WIFI_SCANNER,
useFactory: scannerNotAvailableFactory('Wi-Fi'),
},
{
provide: TAP_BLE_SCANNER,
useClass: BLEScannerTestingService,
},
{
provide: TAP_NETWORK_SCANNER,
useFactory: scannerNotAvailableFactory('Network'),
},
{
provide: TAP_EXECUTE_TAP_ACTION_SERVICE,
useClass: ExecuteTapActionTestingService,
},
TapAdministrationService,
], imports: [CommonModule,
ReactiveFormsModule,
FormsModule,
RouterTestingModule,
TaskManagerUiModule,
LibCommonModule] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IotizeIonicTestingModule, decorators: [{
type: NgModule,
args: [{
declarations: [],
providers: [
BLEScannerTestingService,
ProtocolFactoryTestingServiceProvider,
{
provide: TAP_INFO_RESOLVER_CONFIG,
useValue: defaultInfoResolverConfig,
},
NFC,
{
provide: TAP_CONNECTION_OPTIONS_PROVIDER,
useValue: {
encryption: undefined,
nfcPairing: false,
refreshSessionState: true,
switchProtocol: false,
},
},
{
provide: TAP_WIFI_SCANNER,
useFactory: scannerNotAvailableFactory('Wi-Fi'),
},
{
provide: TAP_BLE_SCANNER,
useClass: BLEScannerTestingService,
},
{
provide: TAP_NETWORK_SCANNER,
useFactory: scannerNotAvailableFactory('Network'),
},
{
provide: TAP_EXECUTE_TAP_ACTION_SERVICE,
useClass: ExecuteTapActionTestingService,
},
TapAdministrationService,
],
imports: [],
exports: [
CommonModule,
ReactiveFormsModule,
FormsModule,
RouterTestingModule,
TaskManagerUiModule,
LibCommonModule,
],
}]
}] });
class TestingPlatform extends Platform {
platformName;
constructor(doc, zone, platformName) {
super(doc, zone);
this.platformName = platformName;
}
is(platformName) {
return platformName === this.platformName;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW90aXplLWlvbmljLXRlc3RpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW90aXplLWlvbmljL3Rlc3Rpbmcvc3JjL2xpYi9pb3RpemUtaW9uaWMtdGVzdGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUVMLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBRXhCLG1CQUFtQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsNkJBQTZCLElBQUksa0NBQWtDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFDekgsTUFBTSxtQkFBbUI7SUFLSjtJQUpuQixRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFD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QUFDO1FBRHdCLGlCQUFZLEdBQVosWUFBWSxDQUFRO0lBRS9ELENBQUM7SUFFRCxFQUFFLENBQUMsWUFBb0I7UUFDckIsT0FBTyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBOZ1pvbmUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlclRlc3RpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXIvdGVzdGluZyc7XG5pbXBvcnQgeyBORkMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmZjL25neCc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7XG4gIEV4ZWN1dGVUYXBBY3Rpb25TZXJ2aWNlSW50ZXJmYWNlLFxuICBMaWJDb21tb25Nb2R1bGUsXG4gIFByb3RvY29sRmFjdG9yeVNlcnZpY2UsXG4gIFRBUF9CTEVfU0NBTk5FUixcbiAgVEFQX0NPTk5FQ1RJT05fT1BUSU9OU19QUk9WSURFUixcbiAgVEFQX0VYRUNVVEVfVEFQX0FDVElPTl9TRVJWSUNFLFxuICBUQVBfSU5GT19SRVNPTFZFUl9DT05GSUcsXG4gIFRBUF9ORVRXT1JLX1NDQU5ORVIsXG4gIFRBUF9XSUZJX1NDQU5ORVIsXG4gIFRhcEFkbWluaXN0cmF0aW9uU2VydmljZSxcbiAgVGFwQ29ubmVjdGlvbk9wdGlvbnMsXG4gIFRhc2tNYW5hZ2VyVWlNb2R1bGUsXG59IGZyb20gJ0Bpb3RpemUvaW9uaWMnO1xuaW1wb3J0IHsgZGVmYXVsdEluZm9SZXNvbHZlckNvbmZpZyB9IGZyb20gJ0Bpb3RpemUvaW9uaWMvY29uZmlnJztcbmltcG9ydCB7IERldmljZVNjYW5uZXIsIERldmljZVNjYW5uZXJPcHRpb25zIH0gZnJvbSAnQGlvdGl6ZS90YXAvc2Nhbm5lci9hcGknO1xuaW1wb3J0IHsgbmV2ZXIsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCTEVTY2FubmVyVGVzdGluZ1NlcnZpY2UgfSBmcm9tICcuL2JsZS1zY2FubmVyLXRlc3Rpbmcuc2VydmljZSc7XG5cbmltcG9ydCB7IFByb3RvY29sRmFjdG9yeVRlc3RpbmdTZXJ2aWNlIGFzIFByb3RvY29sRmFjdG9yeVRlc3RpbmdTZXJ2aWNlQ2xhc3MgfSBmcm9tICcuL3Byb3RvY29sLWZhY3RvcnktdGVzdGluZy5zZXJ2aWNlJztcbmNsYXNzIFNjYW5uZXJOb3RBdmFpbGFibGUgaW1wbGVtZW50cyBEZXZpY2VTY2FubmVyPGFueT4ge1xuICBzY2FubmluZyA9IG9mKGZhbHNlKTtcbiAgaXNTY2FubmluZyA9IGZhbHNlO1xuICByZXN1bHRzID0gbmV2ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWVzc2FnZTogc3RyaW5nKSB7fVxuXG4gIHN0YXJ0KG9wdGlvbj86IERldmljZVNjYW5uZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMubWVzc2FnZSk7XG4gIH1cblxuICBzdG9wKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLm1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBQcm90b2NvbEZhY3RvcnlUZXN0aW5nU2VydmljZVByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBQcm90b2NvbEZhY3RvcnlTZXJ2aWNlLFxuICB1c2VDbGFzczogUHJvdG9jb2xGYWN0b3J5VGVzdGluZ1NlcnZpY2VDbGFzcyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FubmVyTm90QXZhaWxhYmxlRmFjdG9yeShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgZmFjdG9yeSA9ICgpID0+IHtcbiAgICBjb25zdCBzY2FubmVyID0gbmV3IFNjYW5uZXJOb3RBdmFpbGFibGUoXG4gICAgICBgJHtuYW1lfSBzY2FubmVyIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdGVzdGBcbiAgICApO1xuICAgIHJldHVybiBzY2FubmVyO1xuICB9O1xuICByZXR1cm4gZmFjdG9yeTtcbn1cblxuY2xhc3MgRXhlY3V0ZVRhcEFjdGlvblRlc3RpbmdTZXJ2aWNlXG4gIGltcGxlbWVudHMgRXhlY3V0ZVRhcEFjdGlvblNlcnZpY2VJbnRlcmZhY2VcbntcbiAgYXN5bmMgZXhlY3V0ZVRhcEFjdGlvbjxUPihjYWxsYWJsZTogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBhd2FpdCBjYWxsYWJsZSgpO1xuICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIHByb3ZpZGVyczogW1xuICAgIEJMRVNjYW5uZXJUZXN0aW5nU2VydmljZSxcbiAgICBQcm90b2NvbEZhY3RvcnlUZXN0aW5nU2VydmljZVByb3ZpZGVyLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRBUF9JTkZPX1JFU09MVkVSX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiBkZWZhdWx0SW5mb1Jlc29sdmVyQ29uZmlnLFxuICAgIH0sXG4gICAgTkZDLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRBUF9DT05ORUNUSU9OX09QVElPTlNfUFJPVklERVIsXG4gICAgICB1c2VWYWx1ZTogPFRhcENvbm5lY3Rpb25PcHRpb25zPntcbiAgICAgICAgZW5jcnlwdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBuZmNQYWlyaW5nOiBmYWxzZSxcbiAgICAgICAgcmVmcmVzaFNlc3Npb25TdGF0ZTogdHJ1ZSxcbiAgICAgICAgc3dpdGNoUHJvdG9jb2w6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRBUF9XSUZJX1NDQU5ORVIsXG4gICAgICB1c2VGYWN0b3J5OiBzY2FubmVyTm90QXZhaWxhYmxlRmFjdG9yeSgnV2ktRmknKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRBUF9CTEVfU0NBTk5FUixcbiAgICAgIHVzZUNsYXNzOiBCTEVTY2FubmVyVGVzdGluZ1NlcnZpY2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUQVBfTkVUV09SS19TQ0FOTkVSLFxuICAgICAgdXNlRmFjdG9yeTogc2Nhbm5lck5vdEF2YWlsYWJsZUZhY3RvcnkoJ05ldHdvcmsnKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRBUF9FWEVDVVRFX1RBUF9BQ1RJT05fU0VSVklDRSxcbiAgICAgIHVzZUNsYXNzOiBFeGVjdXRlVGFwQWN0aW9uVGVzdGluZ1NlcnZpY2UsXG4gICAgfSxcbiAgICBUYXBBZG1pbmlzdHJhdGlvblNlcnZpY2UsXG4gIF0sXG4gIGltcG9ydHM6IFtdLFxuICBleHBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUm91dGVyVGVzdGluZ01vZHVsZSxcbiAgICBUYXNrTWFuYWdlclVpTW9kdWxlLFxuICAgIExpYkNvbW1vbk1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW90aXplSW9uaWNUZXN0aW5nTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3Qob3B0aW9ucz86IHtcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICB9KTogTW9kdWxlV2l0aFByb3ZpZGVyczxJb3RpemVJb25pY1Rlc3RpbmdNb2R1bGU+IHtcbiAgICAvLyBjb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXTtcbiAgICBjb25zdCBvdmVyd3JpdGVzUHJvdmlkZXM6IFByb3ZpZGVyW10gPSBbXTtcbiAgICBpZiAob3B0aW9ucz8ucGxhdGZvcm0pIHtcbiAgICAgIG92ZXJ3cml0ZXNQcm92aWRlcy5wdXNoKHtcbiAgICAgICAgcHJvdmlkZTogUGxhdGZvcm0sXG4gICAgICAgIHVzZUZhY3Rvcnk6IChkb2M6IGFueSwgbmdab25lOiBOZ1pvbmUpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFRlc3RpbmdQbGF0Zm9ybShkb2MsIG5nWm9uZSwgb3B0aW9ucz8ucGxhdGZvcm0pO1xuICAgICAgICB9LFxuICAgICAgICBkZXBzOiBbRE9DVU1FTlQsIE5nWm9uZV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IElvdGl6ZUlvbmljVGVzdGluZ01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAvLyAuLi5wcm92aWRlcnMsXG4gICAgICAgIC4uLm92ZXJ3cml0ZXNQcm92aWRlcyxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBUZXN0aW5nUGxhdGZvcm0gZXh0ZW5kcyBQbGF0Zm9ybSB7XG4gIGNvbnN0cnVjdG9yKGRvYzogYW55LCB6b25lOiBOZ1pvbmUsIHB1YmxpYyBwbGF0Zm9ybU5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKGRvYywgem9uZSk7XG4gIH1cblxuICBpcyhwbGF0Zm9ybU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwbGF0Zm9ybU5hbWUgPT09IHRoaXMucGxhdGZvcm1OYW1lO1xuICB9XG59XG4iXX0=