UNPKG

@testing-library/angular

Version:
1 lines 122 kB
{"version":3,"file":"testing-library-angular.mjs","sources":["../tmp-esm2022/src/lib/models.js","../tmp-esm2022/src/lib/config.js","../tmp-esm2022/src/lib/testing-library.js","../tmp-esm2022/src/public_api.js","../tmp-esm2022/testing-library-angular.js"],"sourcesContent":["/**\n * @description\n * Creates an aliased input branded type with a value\n *\n */\nexport function aliasedInput(alias, value) {\n return { [alias]: value };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVzdGluZy1saWJyYXJ5L3NyYy9saWIvbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlIQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBMkIsS0FBYSxFQUFFLEtBQVE7SUFDNUUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFxQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBUeXBlLFxuICBEZWJ1Z0VsZW1lbnQsXG4gIE1vZHVsZVdpdGhQcm92aWRlcnMsXG4gIEV2ZW50RW1pdHRlcixcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIFByb3ZpZGVyLFxuICBTaWduYWwsXG4gIElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRGaXh0dXJlLCBEZWZlckJsb2NrQmVoYXZpb3IsIERlZmVyQmxvY2tTdGF0ZSwgVGVzdEJlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQm91bmRGdW5jdGlvbiwgUXVlcmllcywgcXVlcmllcywgQ29uZmlnIGFzIGR0bENvbmZpZywgUHJldHR5RE9NT3B0aW9ucyB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvZG9tJztcblxuLy8gVE9ETzogaW1wb3J0IGZyb20gQW5ndWxhciAoaXMgYSBicmVha2luZyBjaGFuZ2UpXG5pbnRlcmZhY2UgT3V0cHV0UmVmPFQ+IHtcbiAgc3Vic2NyaWJlKGNhbGxiYWNrOiAodmFsdWU6IFQpID0+IHZvaWQpOiBPdXRwdXRSZWZTdWJzY3JpcHRpb247XG59XG5pbnRlcmZhY2UgT3V0cHV0UmVmU3Vic2NyaXB0aW9uIHtcbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgT3V0cHV0UmVmS2V5c1dpdGhDYWxsYmFjazxUPiA9IHtcbiAgW2tleSBpbiBrZXlvZiBUXT86IFRba2V5XSBleHRlbmRzIEV2ZW50RW1pdHRlcjxpbmZlciBVPlxuICAgID8gKHZhbDogVSkgPT4gdm9pZFxuICAgIDogVFtrZXldIGV4dGVuZHMgT3V0cHV0UmVmPGluZmVyIFU+XG4gICAgPyAodmFsOiBVKSA9PiB2b2lkXG4gICAgOiBuZXZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlbmRlclJlc3VsdFF1ZXJpZXM8USBleHRlbmRzIFF1ZXJpZXMgPSB0eXBlb2YgcXVlcmllcz4gPSB7IFtQIGluIGtleW9mIFFdOiBCb3VuZEZ1bmN0aW9uPFFbUF0+IH07XG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclJlc3VsdDxDb21wb25lbnRUeXBlLCBXcmFwcGVyVHlwZSA9IENvbXBvbmVudFR5cGU+IGV4dGVuZHMgUmVuZGVyUmVzdWx0UXVlcmllcyB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGNvbnRhaW5pbmcgRE9NIG5vZGUgb2YgeW91ciByZW5kZXJlZCBBbmd1bGFyIENvbXBvbmVudC5cbiAgICogVGhpcyBpcyBhIHJlZ3VsYXIgRE9NIG5vZGUsIHNvIHlvdSBjYW4gY2FsbCBjb250YWluZXIucXVlcnlTZWxlY3RvciBldGMuIHRvIGluc3BlY3QgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgY29udGFpbmVyOiBFbGVtZW50O1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFByaW50cyBvdXQgdGhlIGNvbXBvbmVudCdzIERPTSB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcuXG4gICAqIEFjY2VwdHMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLCB0byBwcmludCBvdXQgYSBzcGVjaWZpYyBET00gbm9kZS5cbiAgICpcbiAgICogQHBhcmFtXG4gICAqIGVsZW1lbnQ6IFRoZSB0byBiZSBwcmludGVkIEhUTUwgZWxlbWVudCwgaWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgbG9nIHRoZSB3aG9sZSBjb21wb25lbnQncyBET01cbiAgICovXG4gIGRlYnVnOiAoXG4gICAgZWxlbWVudD86IEVsZW1lbnQgfCBEb2N1bWVudCB8IChFbGVtZW50IHwgRG9jdW1lbnQpW10sXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBQcmV0dHlET01PcHRpb25zLFxuICApID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVHJpZ2dlciBhIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29yZS90ZXN0aW5nL0NvbXBvbmVudEZpeHR1cmUjZGV0ZWN0Q2hhbmdlc1xuICAgKi9cbiAgZGV0ZWN0Q2hhbmdlczogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgQW5ndWxhciBgRGVidWdFbGVtZW50YCBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvRGVidWdFbGVtZW50XG4gICAqL1xuICBkZWJ1Z0VsZW1lbnQ6IERlYnVnRWxlbWVudDtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgQW5ndWxhciBgQ29tcG9uZW50Rml4dHVyZWAgb2YgdGhlIGNvbXBvbmVudCBvciB0aGUgd3JhcHBlci5cbiAgICogSWYgYSB0ZW1wbGF0ZSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB0aGUgZml4dHVyZSBvZiB0aGUgd3JhcHBlci5cbiAgICpcbiAgICogRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb3JlL3Rlc3RpbmcvQ29tcG9uZW50Rml4dHVyZVxuICAgKi9cbiAgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxXcmFwcGVyVHlwZT47XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTmF2aWdhdGVzIHRvIHRoZSBocmVmIG9mIHRoZSBlbGVtZW50IG9yIHRvIHRoZSBwYXRoLlxuICAgKlxuICAgKi9cbiAgbmF2aWdhdGU6IChlbGVtZW50T3JQYXRoOiBFbGVtZW50IHwgc3RyaW5nLCBiYXNlUGF0aD86IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZS1yZW5kZXIgdGhlIHNhbWUgY29tcG9uZW50IHdpdGggZGlmZmVyZW50IHByb3BlcnRpZXMuXG4gICAqIFByb3BlcnRpZXMgbm90IHBhc3NlZCBpbiBhZ2FpbiBhcmUgcmVtb3ZlZC5cbiAgICovXG4gIHJlcmVuZGVyOiAoXG4gICAgcHJvcGVydGllcz86IFBpY2s8XG4gICAgICBSZW5kZXJUZW1wbGF0ZU9wdGlvbnM8Q29tcG9uZW50VHlwZT4sXG4gICAgICAnY29tcG9uZW50UHJvcGVydGllcycgfCAnY29tcG9uZW50SW5wdXRzJyB8ICdpbnB1dHMnIHwgJ2NvbXBvbmVudE91dHB1dHMnIHwgJ29uJyB8ICdkZXRlY3RDaGFuZ2VzT25SZW5kZXInXG4gICAgPiAmIHsgcGFydGlhbFVwZGF0ZT86IGJvb2xlYW4gfSxcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldCB0aGUgc3RhdGUgb2YgYSBkZWZlcnJhYmxlIGJsb2NrLlxuICAgKi9cbiAgcmVuZGVyRGVmZXJCbG9jazogKGRlZmVyQmxvY2tTdGF0ZTogRGVmZXJCbG9ja1N0YXRlLCBkZWZlckJsb2NrSW5kZXg/OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmRlY2xhcmUgY29uc3QgQUxJQVNFRF9JTlBVVF9CUkFORDogdW5pcXVlIHN5bWJvbDtcbmV4cG9ydCB0eXBlIEFsaWFzZWRJbnB1dDxUPiA9IFQgJiB7XG4gIFtBTElBU0VEX0lOUFVUX0JSQU5EXTogVDtcbn07XG5leHBvcnQgdHlwZSBBbGlhc2VkSW5wdXRzID0gUmVjb3JkPHN0cmluZywgQWxpYXNlZElucHV0PHVua25vd24+PjtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50SW5wdXQ8VD4gPVxuICB8IHtcbiAgICAgIFtQIGluIGtleW9mIFRdPzogVFtQXSBleHRlbmRzIElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybTxhbnksIGluZmVyIFU+XG4gICAgICAgID8gVVxuICAgICAgICA6IFRbUF0gZXh0ZW5kcyBTaWduYWw8aW5mZXIgVT5cbiAgICAgICAgPyBVXG4gICAgICAgIDogVFtQXTtcbiAgICB9XG4gIHwgQWxpYXNlZElucHV0cztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgYW4gYWxpYXNlZCBpbnB1dCBicmFuZGVkIHR5cGUgd2l0aCBhIHZhbHVlXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNlZElucHV0PFRBbGlhcyBleHRlbmRzIHN0cmluZywgVD4oYWxpYXM6IFRBbGlhcywgdmFsdWU6IFQpOiBSZWNvcmQ8VEFsaWFzLCBBbGlhc2VkSW5wdXQ8VD4+IHtcbiAgcmV0dXJuIHsgW2FsaWFzXTogdmFsdWUgfSBhcyBSZWNvcmQ8VEFsaWFzLCBBbGlhc2VkSW5wdXQ8VD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckNvbXBvbmVudE9wdGlvbnM8Q29tcG9uZW50VHlwZSwgUSBleHRlbmRzIFF1ZXJpZXMgPSB0eXBlb2YgcXVlcmllcz4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF1dG9tYXRpY2FsbHkgZGV0ZWN0IGNoYW5nZXMgYXMgYSBcInJlYWxcIiBydW5uaW5nIGNvbXBvbmVudCB3b3VsZCBkby5cbiAgICpcbiAgICogQGRlZmF1bHRcbiAgICogdHJ1ZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhd2FpdCByZW5kZXIoQXBwQ29tcG9uZW50LCB7XG4gICAqICBhdXRvRGV0ZWN0Q2hhbmdlczogZmFsc2VcbiAgICogfSlcbiAgICovXG4gIGF1dG9EZXRlY3RDaGFuZ2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbnZva2VzIGBkZXRlY3RDaGFuZ2VzYCBhZnRlciB0aGUgY29tcG9uZW50IGlzIHJlbmRlcmVkXG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIHRydWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgZGV0ZWN0Q2hhbmdlc09uUmVuZGVyOiBmYWxzZVxuICAgKiB9KVxuICAgKi9cbiAgZGV0ZWN0Q2hhbmdlc09uUmVuZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLCBkaXJlY3RpdmVzIGFuZCBwaXBlcyBuZWVkZWQgdG8gcmVuZGVyIHRoZSBjb21wb25lbnQsIGZvciBleGFtcGxlLCBuZXN0ZWQgY29tcG9uZW50cyBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvTmdNb2R1bGUjZGVjbGFyYXRpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIFtdXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHJlbmRlcihBcHBDb21wb25lbnQsIHtcbiAgICogIGRlY2xhcmF0aW9uczogWyBDdXN0b21lckRldGFpbENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50IF1cbiAgICogfSlcbiAgICovXG4gIGRlY2xhcmF0aW9ucz86IChUeXBlPHVua25vd24+IHwgdW5rbm93bltdKVtdO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgY29sbGVjdGlvbiBvZiBwcm92aWRlcnMgbmVlZGVkIHRvIHJlbmRlciB0aGUgY29tcG9uZW50IHZpYSBEZXBlbmRlbmN5IEluamVjdGlvbiwgZm9yIGV4YW1wbGUsIGluamVjdGFibGUgc2VydmljZXMgb3IgdG9rZW5zLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvTmdNb2R1bGUjcHJvdmlkZXJzXG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIFtdXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHJlbmRlcihBcHBDb21wb25lbnQsIHtcbiAgICogIHByb3ZpZGVyczogW1xuICAgKiAgICBDdXN0b21lcnNTZXJ2aWNlLFxuICAgKiAgICB7XG4gICAqICAgICAgcHJvdmlkZTogTUFYX0NVU1RPTUVSU19UT0tFTixcbiAgICogICAgICB1c2VWYWx1ZTogMTBcbiAgICogICAgfVxuICAgKiAgXVxuICAgKiB9KVxuICAgKi9cbiAgcHJvdmlkZXJzPzogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW107XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBjb2xsZWN0aW9uIG9mIGltcG9ydHMgbmVlZGVkIHRvIHJlbmRlciB0aGUgY29tcG9uZW50LCBmb3IgZXhhbXBsZSwgc2hhcmVkIG1vZHVsZXMuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29yZS9OZ01vZHVsZSNpbXBvcnRzXG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIGBbXWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgaW1wb3J0czogW1xuICAgKiAgICBBcHBTaGFyZWRNb2R1bGUsXG4gICAqICAgIE1hdGVyaWFsTW9kdWxlLFxuICAgKiAgXVxuICAgKiB9KVxuICAgKi9cbiAgaW1wb3J0cz86IChUeXBlPHVua25vd24+IHwgTW9kdWxlV2l0aFByb3ZpZGVyczx1bmtub3duPilbXTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGNvbGxlY3Rpb24gb2Ygc2NoZW1hcyBuZWVkZWQgdG8gcmVuZGVyIHRoZSBjb21wb25lbnQuXG4gICAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgTk9fRVJST1JTX1NDSEVNQWAgYW5kIGBDVVNUT01fRUxFTUVOVFNfU0NIRU1BYC5cbiAgICpcbiAgICogRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb3JlL05nTW9kdWxlI3NjaGVtYXNcbiAgICpcbiAgICogQGRlZmF1bHRcbiAgICogW11cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgc2NoZW1hczogW1xuICAgKiAgICBOT19FUlJPUlNfU0NIRU1BLFxuICAgKiAgXVxuICAgKiB9KVxuICAgKi9cbiAgc2NoZW1hcz86IGFueVtdO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIG9iamVjdCB0byBzZXQgcHJvcGVydGllcyBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIHt9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHJlbmRlcihBcHBDb21wb25lbnQsIHtcbiAgICogIGNvbXBvbmVudFByb3BlcnRpZXM6IHtcbiAgICogICAgY291bnRlclZhbHVlOiAxMCxcbiAgICogICAgc2VuZDogKHZhbHVlKSA9PiB7IC4uLiB9XG4gICAqICB9XG4gICAqIH0pXG4gICAqL1xuICBjb21wb25lbnRQcm9wZXJ0aWVzPzogUGFydGlhbDxDb21wb25lbnRUeXBlPjtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBvYmplY3QgdG8gc2V0IGBASW5wdXRgIHByb3BlcnRpZXMgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgdGhlIGBpbnB1dHNgIG9wdGlvbiBpbnN0ZWFkLiBXaGVuIHlvdSBuZWVkIHRvIHVzZSBhbGlhc2VzLCB1c2UgdGhlIGBhbGlhc2VkSW5wdXQoLi4uKWAgaGVscGVyIGZ1bmN0aW9uLlxuICAgKiBAZGVmYXVsdFxuICAgKiB7fVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhd2FpdCByZW5kZXIoQXBwQ29tcG9uZW50LCB7XG4gICAqICBjb21wb25lbnRJbnB1dHM6IHtcbiAgICogICAgY291bnRlclZhbHVlOiAxMFxuICAgKiAgfVxuICAgKiB9KVxuICAgKi9cbiAgY29tcG9uZW50SW5wdXRzPzogUGFydGlhbDxDb21wb25lbnRUeXBlPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gb2JqZWN0IHRvIHNldCBgQElucHV0YCBvciBgaW5wdXQoKWAgcHJvcGVydGllcyBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIHt9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHJlbmRlcihBcHBDb21wb25lbnQsIHtcbiAgICogIGlucHV0czoge1xuICAgKiAgICBjb3VudGVyVmFsdWU6IDEwLFxuICAgKiAgICAvLyBleHBsaWNpdGx5IGRlZmluZSBhbGlhc2VzIHVzaW5nIGFsaWFzZWRJbnB1dFxuICAgKiAgICAuLi5hbGlhc2VkSW5wdXQoJ3NvbWVBbGlhcycsICdzb21lVmFsdWUnKVxuICAgKiAgfVxuICAgKiB9KVxuICAgKi9cbiAgaW5wdXRzPzogQ29tcG9uZW50SW5wdXQ8Q29tcG9uZW50VHlwZT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBvYmplY3QgdG8gc2V0IGBAT3V0cHV0YCBwcm9wZXJ0aWVzIG9mIHRoZSBjb21wb25lbnRcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHRoZSBgb25gIG9wdGlvbiBpbnN0ZWFkLiBXaGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBvdmVycmlkZSBwcm9wZXJ0aWVzLCB1c2UgdGhlIGBjb21wb25lbnRQcm9wZXJ0aWVzYCBvcHRpb24uXG4gICAqIEBkZWZhdWx0XG4gICAqIHt9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHNlbmRWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgKiBhd2FpdCByZW5kZXIoQXBwQ29tcG9uZW50LCB7XG4gICAqICBjb21wb25lbnRPdXRwdXRzOiB7XG4gICAqICAgIHNlbmQ6IHtcbiAgICogICAgICBlbWl0OiBzZW5kVmFsdWVcbiAgICogICAgfVxuICAgKiAgfVxuICAgKiB9KVxuICAgKi9cbiAgY29tcG9uZW50T3V0cHV0cz86IFBhcnRpYWw8Q29tcG9uZW50VHlwZT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBvYmplY3Qgd2l0aCBjYWxsYmFja3MgdG8gc3Vic2NyaWJlIHRvIEV2ZW50RW1pdHRlcnMvT2JzZXJ2YWJsZXMgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdFxuICAgKiB7fVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBzZW5kVmFsdWUgPSAodmFsdWUpID0+IHsgLi4uIH1cbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgb246IHtcbiAgICogICAgc2VuZDogKHZhbHVlKSA9PiBzZW5kVmFsdWUodmFsdWUpXG4gICAqICB9XG4gICAqIH0pXG4gICAqL1xuICBvbj86IE91dHB1dFJlZktleXNXaXRoQ2FsbGJhY2s8Q29tcG9uZW50VHlwZT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGNvbGxlY3Rpb24gb2YgcHJvdmlkZXJzIHRvIGluamVjdCBkZXBlbmRlbmNpZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb3JlL0RpcmVjdGl2ZSNwcm92aWRlcnNcbiAgICpcbiAgICogQGRlZmF1bHRcbiAgICogW11cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgY29tcG9uZW50UHJvdmlkZXJzOiBbXG4gICAqICAgIEFwcENvbXBvbmVudFNlcnZpY2VcbiAgICogIF1cbiAgICogfSlcbiAgICovXG4gIGNvbXBvbmVudFByb3ZpZGVycz86IFByb3ZpZGVyW107XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ29sbGVjdGlvbiBvZiBjaGlsZCBjb21wb25lbnQgc3BlY2lmaWVkIHByb3ZpZGVycyB0byBvdmVycmlkZSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIFtdXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHJlbmRlcihBcHBDb21wb25lbnQsIHtcbiAgICogIGNoaWxkQ29tcG9uZW50T3ZlcnJpZGVzOiBbXG4gICAqICAgIHtcbiAgICogICAgICBjb21wb25lbnQ6IENoaWxkT2ZBcHBDb21wb25lbnQsXG4gICAqICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNeVNlcnZpY2UsIHVzZVZhbHVlOiB7IGhlbGxvOiAnd29ybGQnIH0gfV1cbiAgICogICAgfVxuICAgKiAgXVxuICAgKiB9KVxuICAgKlxuICAgKi9cbiAgY2hpbGRDb21wb25lbnRPdmVycmlkZXM/OiBDb21wb25lbnRPdmVycmlkZTxhbnk+W107XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBjb2xsZWN0aW9uIG9mIGltcG9ydHMgdG8gb3ZlcnJpZGUgYSBzdGFuZGFsb25lIGNvbXBvbmVudCdzIGltcG9ydHMgd2l0aC5cbiAgICpcbiAgICogQGRlZmF1bHRcbiAgICogdW5kZWZpbmVkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHJlbmRlcihBcHBDb21wb25lbnQsIHtcbiAgICogICBjb21wb25lbnRJbXBvcnRzOiBbXG4gICAqICAgICBNb2NrQ2hpbGRDb21wb25lbnRcbiAgICogICBdXG4gICAqIH0pXG4gICAqL1xuICBjb21wb25lbnRJbXBvcnRzPzogKFR5cGU8dW5rbm93bj4gfCB1bmtub3duW10pW107XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUXVlcmllcyB0byBiaW5kLiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0IGZyb20gRE9NIFRlc3RpbmcgTGlicmFyeSB1bmxlc3MgbWVyZ2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdFxuICAgKiB1bmRlZmluZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW1wb3J0ICogYXMgY3VzdG9tUXVlcmllcyBmcm9tICdjdXN0b20tcXVlcmllcydcbiAgICogaW1wb3J0IHsgcXVlcmllcyB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvYW5ndWxhcidcbiAgICpcbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgcXVlcmllczogeyAuLi5xdWVyaWVzLCAuLi5jdXN0b21RdWVyaWVzIH1cbiAgICogfSlcbiAgICovXG4gIHF1ZXJpZXM/OiBRO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV4Y2x1ZGUgdGhlIGNvbXBvbmVudCB0byBiZSBhdXRvbWF0aWNhbGx5IGJlIGFkZGVkIGFzIGEgZGVjbGFyYXRpb24uXG4gICAqIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZWNsYXJlZCBpbiBhbiBpbXBvcnRlZCBtb2R1bGUuXG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIGZhbHNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHJlbmRlcihBcHBDb21wb25lbnQsIHtcbiAgICogIGltcG9ydHM6IFtBcHBNb2R1bGVdLCAvLyBhIG1vZHVsZSB0aGF0IGluY2x1ZGVzIEFwcENvbXBvbmVudFxuICAgKiAgZXhjbHVkZUNvbXBvbmVudERlY2xhcmF0aW9uOiB0cnVlXG4gICAqIH0pXG4gICAqL1xuICBleGNsdWRlQ29tcG9uZW50RGVjbGFyYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHJvdXRlIGNvbmZpZ3VyYXRpb24gdG8gc2V0IHVwIHRoZSByb3V0ZXIgc2VydmljZSB2aWEgYFJvdXRlclRlc3RpbmdNb2R1bGUud2l0aFJvdXRlc2AuXG4gICAqIEZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvcm91dGVyL1JvdXRlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgZGVjbGFyYXRpb25zOiBbQ2hpbGRDb21wb25lbnRdLFxuICAgKiAgcm91dGVzOiBbXG4gICAqICAgIHtcbiAgICogICAgICBwYXRoOiAnJyxcbiAgICogICAgICBjaGlsZHJlbjogW1xuICAgKiAgICAgICAgIHtcbiAgICogICAgICAgICAgICBwYXRoOiAnY2hpbGQvOmlkJyxcbiAgICogICAgICAgICAgICBjb21wb25lbnQ6IENoaWxkQ29tcG9uZW50XG4gICAqICAgICAgICAgIH1cbiAgICogICAgICBdXG4gICAqICAgIH1cbiAgICogIF1cbiAgICogfSlcbiAgICovXG4gIHJvdXRlcz86IFJvdXRlcztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNwZWNpZmllcyB3aGljaCByb3V0ZSBzaG91bGQgYmUgaW5pdGlhbGx5IG5hdmlnYXRlZCB0b1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhd2FpdCByZW5kZXIoQXBwQ29tcG9uZW50LCB7XG4gICAqICBpbml0aWFsUm91dGU6ICdteXJvdXRlJyxcbiAgICogIHJvdXRlczogW1xuICAgKiAgICB7IHBhdGg6ICcnLCBjb21wb25lbnQ6IEhvbWVDb21wb25lbnQgfSxcbiAgICogICAgeyBwYXRoOiAnbXlyb3V0ZScsIGNvbXBvbmVudDogU2Vjb25kYXJ5Q29tcG9uZW50IH1cbiAgICogIF1cbiAgICogfSlcbiAgICovXG4gIGluaXRpYWxSb3V0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJlbW92ZXMgdGhlIEFuZ3VsYXIgYXR0cmlidXRlcyAobmctdmVyc2lvbiwgYW5kIHJvb3QtaWQpIGZyb20gdGhlIGZpeHR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0XG4gICAqIGBmYWxzZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcmVuZGVyKEFwcENvbXBvbmVudCwge1xuICAgKiAgcmVtb3ZlQW5ndWxhckF0dHJpYnV0ZXM6IHRydWVcbiAgICogfSlcbiAgICovXG4gIHJlbW92ZUFuZ3VsYXJBdHRyaWJ1dGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENhbGxiYWNrIHRvIGNvbmZpZ3VyZSB0aGUgdGVzdGJlZCBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdFxuICAgKiAoKSA9PiB7fVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhd2FpdCByZW5kZXIoQXBwQ29tcG9uZW50LCB7XG4gICAqICBjb25maWd1cmVUZXN0QmVkOiAodGVzdEJlZCkgPT4geyB9XG4gICAqIH0pXG4gICAqL1xuICBjb25maWd1cmVUZXN0QmVkPzogKHRlc3RiZWQ6IFRlc3RCZWQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgYSBkZWZlcnJhYmxlIGJsb2NrLlxuICAgKi9cbiAgZGVmZXJCbG9ja1N0YXRlcz86IERlZmVyQmxvY2tTdGF0ZSB8IHsgZGVmZXJCbG9ja1N0YXRlOiBEZWZlckJsb2NrU3RhdGU7IGRlZmVyQmxvY2tJbmRleDogbnVtYmVyIH1bXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldCB0aGUgZGVmZXIgYmxvY2tzIGJlaGF2aW9yLlxuICAgKi9cbiAgZGVmZXJCbG9ja0JlaGF2aW9yPzogRGVmZXJCbG9ja0JlaGF2aW9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudE92ZXJyaWRlPFQ+IHtcbiAgY29tcG9uZW50OiBUeXBlPFQ+O1xuICBwcm92aWRlcnM6IFByb3ZpZGVyW107XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyVGVtcGxhdGVPcHRpb25zPFdyYXBwZXJUeXBlLCBQcm9wZXJ0aWVzIGV4dGVuZHMgb2JqZWN0ID0ge30sIFEgZXh0ZW5kcyBRdWVyaWVzID0gdHlwZW9mIHF1ZXJpZXM+XG4gIGV4dGVuZHMgUmVuZGVyQ29tcG9uZW50T3B0aW9uczxQcm9wZXJ0aWVzLCBRPiB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gQW5ndWxhciBjb21wb25lbnQgdG8gd3JhcCB0aGUgY29tcG9uZW50IGluLlxuICAgKiBUaGUgdGVtcGxhdGUgd2lsbCBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGB0ZW1wbGF0ZWAgb3B0aW9uLlxuICAgKiBOT1RFOiBBIHN0YW5kYWxvbmUgY29tcG9uZW50IGNhbm5vdCBiZSB1c2VkIGFzIGEgd3JhcHBlci5cbiAgICpcbiAgICogQGRlZmF1bHRcbiAgICogYFdyYXBwZXJDb21wb25lbnRgLCBhbiBlbXB0eSBjb21wb25lbnQgdGhhdCBzdHJpcHMgdGhlIGBuZy12ZXJzaW9uYCBhdHRyaWJ1dGVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcmVuZGVyKGA8ZGl2IHNwb2lsZXIgbWVzc2FnZT0nU1BPSUxFUic+PC9kaXY+YCwge1xuICAgKiAgZGVjbGFyYXRpb25zOiBbU3BvaWxlckRpcmVjdGl2ZV1cbiAgICogIHdyYXBwZXI6IEN1c3RvbVdyYXBwZXJDb21wb25lbnRcbiAgICogfSlcbiAgICovXG4gIHdyYXBwZXI/OiBUeXBlPFdyYXBwZXJUeXBlPjtcbiAgY29tcG9uZW50UHJvcGVydGllcz86IFBhcnRpYWw8V3JhcHBlclR5cGUgJiBQcm9wZXJ0aWVzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWcgZXh0ZW5kcyBQaWNrPFJlbmRlckNvbXBvbmVudE9wdGlvbnM8YW55PiwgJ2V4Y2x1ZGVDb21wb25lbnREZWNsYXJhdGlvbic+IHtcbiAgLyoqXG4gICAqIERPTSBUZXN0aW5nIExpYnJhcnkgY29uZmlnXG4gICAqIEBsaW5rIGh0dHBzOi8vdGVzdGluZy1saWJyYXJ5LmNvbS9kb2NzL2RvbS10ZXN0aW5nLWxpYnJhcnkvYXBpLWNvbmZpZ3VyYXRpb24vXG4gICAqL1xuICBkb206IFBhcnRpYWw8ZHRsQ29uZmlnPjtcbiAgLyoqXG4gICAqIEltcG9ydHMgdGhhdCBhcmUgYWRkZWQgdG8gdGhlIGltcG9ydHNcbiAgICovXG4gIGRlZmF1bHRJbXBvcnRzPzogKFR5cGU8dW5rbm93bj4gfCBNb2R1bGVXaXRoUHJvdmlkZXJzPHVua25vd24+KVtdO1xufVxuIl19","let config = {\n dom: {},\n defaultImports: [],\n};\nexport function configure(newConfig) {\n if (typeof newConfig === 'function') {\n newConfig = newConfig(config);\n }\n config = {\n ...config,\n ...newConfig,\n };\n}\nexport function getConfig() {\n return config;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVzdGluZy1saWJyYXJ5L3NyYy9saWIvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLElBQUksTUFBTSxHQUFXO0lBQ25CLEdBQUcsRUFBRSxFQUFFO0lBQ1AsY0FBYyxFQUFFLEVBQUU7Q0FDbkIsQ0FBQztBQUVGLE1BQU0sVUFBVSxTQUFTLENBQUMsU0FBMkU7SUFDbkcsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLEdBQUc7UUFDUCxHQUFHLE1BQU07UUFDVCxHQUFHLFNBQVM7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWcgfSBmcm9tICcuL21vZGVscyc7XG5cbmxldCBjb25maWc6IENvbmZpZyA9IHtcbiAgZG9tOiB7fSxcbiAgZGVmYXVsdEltcG9ydHM6IFtdLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZShuZXdDb25maWc6IFBhcnRpYWw8Q29uZmlnPiB8ICgoY29uZmlnOiBQYXJ0aWFsPENvbmZpZz4pID0+IFBhcnRpYWw8Q29uZmlnPikpIHtcbiAgaWYgKHR5cGVvZiBuZXdDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBuZXdDb25maWcgPSBuZXdDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIGNvbmZpZyA9IHtcbiAgICAuLi5jb25maWcsXG4gICAgLi4ubmV3Q29uZmlnLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnKCkge1xuICByZXR1cm4gY29uZmlnO1xufVxuIl19","import { ApplicationInitStatus, ChangeDetectorRef, Component, NgZone, SimpleChange, isStandalone, } from '@angular/core';\nimport { DeferBlockBehavior, TestBed, tick } from '@angular/core/testing';\nimport { Router } from '@angular/router';\nimport { RouterTestingModule } from '@angular/router/testing';\nimport { configure as dtlConfigure, getQueriesForElement as dtlGetQueriesForElement, prettyDOM as dtlPrettyDOM, screen as dtlScreen, waitFor as dtlWaitFor, waitForElementToBeRemoved as dtlWaitForElementToBeRemoved, within as dtlWithin, } from '@testing-library/dom';\nimport { getConfig } from './config';\nimport * as i0 from \"@angular/core\";\nconst mountedFixtures = new Set();\nexport async function render(sut, renderOptions = {}) {\n const { dom: domConfig, ...globalConfig } = getConfig();\n const { detectChangesOnRender = true, autoDetectChanges = true, declarations = [], imports = [], providers = [], schemas = [], queries, wrapper = WrapperComponent, componentProperties = {}, componentInputs = {}, componentOutputs = {}, inputs: newInputs = {}, on = {}, componentProviders = [], childComponentOverrides = [], componentImports, excludeComponentDeclaration = false, routes = [], removeAngularAttributes = false, defaultImports = [], initialRoute = '', deferBlockStates = undefined, deferBlockBehavior = undefined, configureTestBed = () => {\n /* noop*/\n }, } = { ...globalConfig, ...renderOptions };\n dtlConfigure({\n eventWrapper: (cb) => {\n const result = cb();\n if (autoDetectChanges) {\n detectChangesForMountedFixtures();\n }\n return result;\n },\n ...domConfig,\n });\n TestBed.configureTestingModule({\n declarations: addAutoDeclarations(sut, {\n declarations,\n excludeComponentDeclaration,\n wrapper,\n }),\n imports: addAutoImports(sut, {\n imports: imports.concat(defaultImports),\n routes,\n }),\n providers,\n schemas: [...schemas],\n deferBlockBehavior: deferBlockBehavior ?? DeferBlockBehavior.Manual,\n });\n overrideComponentImports(sut, componentImports);\n overrideChildComponentProviders(childComponentOverrides);\n configureTestBed(TestBed);\n await TestBed.compileComponents();\n // Angular supports nested arrays of providers, so we need to flatten them to emulate the same behavior.\n for (const { provide, ...provider } of componentProviders.flat(Infinity)) {\n TestBed.overrideProvider(provide, provider);\n }\n const componentContainer = createComponentFixture(sut, wrapper);\n const zone = TestBed.inject(NgZone);\n const router = TestBed.inject(Router);\n const _navigate = async (elementOrPath, basePath = '') => {\n const href = typeof elementOrPath === 'string' ? elementOrPath : elementOrPath.getAttribute('href');\n const [path, params] = (basePath + href).split('?');\n const queryParams = params\n ? params.split('&').reduce((qp, q) => {\n const [key, value] = q.split('=');\n const currentValue = qp[key];\n if (typeof currentValue === 'undefined') {\n qp[key] = value;\n }\n else if (Array.isArray(currentValue)) {\n qp[key] = [...currentValue, value];\n }\n else {\n qp[key] = [currentValue, value];\n }\n return qp;\n }, {})\n : undefined;\n const navigateOptions = queryParams\n ? {\n queryParams,\n }\n : undefined;\n const doNavigate = () => {\n return navigateOptions ? router?.navigate([path], navigateOptions) : router?.navigate([path]);\n };\n let result;\n if (zone) {\n await zone.run(() => {\n result = doNavigate();\n });\n }\n else {\n result = doNavigate();\n }\n return result ?? false;\n };\n if (initialRoute)\n await _navigate(initialRoute);\n if (typeof router?.initialNavigation === 'function') {\n if (zone) {\n zone.run(() => router.initialNavigation());\n }\n else {\n router.initialNavigation();\n }\n }\n let detectChanges;\n const allInputs = { ...componentInputs, ...newInputs };\n let renderedPropKeys = Object.keys(componentProperties);\n let renderedInputKeys = Object.keys(allInputs);\n let renderedOutputKeys = Object.keys(componentOutputs);\n let subscribedOutputs = [];\n const renderFixture = async (properties, inputs, outputs, subscribeTo) => {\n const createdFixture = await createComponent(componentContainer);\n setComponentProperties(createdFixture, properties);\n setComponentInputs(createdFixture, inputs);\n setComponentOutputs(createdFixture, outputs);\n subscribedOutputs = subscribeToComponentOutputs(createdFixture, subscribeTo);\n if (removeAngularAttributes) {\n createdFixture.nativeElement.removeAttribute('ng-version');\n const idAttribute = createdFixture.nativeElement.getAttribute('id');\n if (idAttribute?.startsWith('root')) {\n createdFixture.nativeElement.removeAttribute('id');\n }\n }\n mountedFixtures.add(createdFixture);\n let isAlive = true;\n createdFixture.componentRef.onDestroy(() => {\n isAlive = false;\n });\n if (hasOnChangesHook(createdFixture.componentInstance) && Object.keys(properties).length > 0) {\n const changes = getChangesObj(null, componentProperties);\n createdFixture.componentInstance.ngOnChanges(changes);\n }\n detectChanges = () => {\n if (isAlive) {\n createdFixture.detectChanges();\n }\n };\n if (detectChangesOnRender) {\n detectChanges();\n }\n return createdFixture;\n };\n const fixture = await renderFixture(componentProperties, allInputs, componentOutputs, on);\n if (deferBlockStates) {\n if (Array.isArray(deferBlockStates)) {\n for (const deferBlockState of deferBlockStates) {\n await renderDeferBlock(fixture, deferBlockState.deferBlockState, deferBlockState.deferBlockIndex);\n }\n }\n else {\n await renderDeferBlock(fixture, deferBlockStates);\n }\n }\n const rerender = async (properties) => {\n const newComponentInputs = { ...properties?.componentInputs, ...properties?.inputs };\n const changesInComponentInput = update(fixture, renderedInputKeys, newComponentInputs, setComponentInputs, properties?.partialUpdate ?? false);\n renderedInputKeys = Object.keys(newComponentInputs);\n const newComponentOutputs = properties?.componentOutputs ?? {};\n for (const outputKey of renderedOutputKeys) {\n if (!Object.prototype.hasOwnProperty.call(newComponentOutputs, outputKey)) {\n delete fixture.componentInstance[outputKey];\n }\n }\n setComponentOutputs(fixture, newComponentOutputs);\n renderedOutputKeys = Object.keys(newComponentOutputs);\n // first unsubscribe the no longer available or changed callback-fns\n const newObservableSubscriptions = properties?.on ?? {};\n for (const [key, cb, subscription] of subscribedOutputs) {\n // when no longer provided or when the callback has changed\n if (!(key in newObservableSubscriptions) || cb !== newObservableSubscriptions[key]) {\n subscription.unsubscribe();\n }\n }\n // then subscribe the new callback-fns\n subscribedOutputs = Object.entries(newObservableSubscriptions).map(([key, cb]) => {\n const existing = subscribedOutputs.find(([k]) => k === key);\n return existing && existing[1] === cb\n ? existing // nothing to do\n : subscribeToComponentOutput(fixture, key, cb);\n });\n const newComponentProps = properties?.componentProperties ?? {};\n const changesInComponentProps = update(fixture, renderedPropKeys, newComponentProps, setComponentProperties, properties?.partialUpdate ?? false);\n renderedPropKeys = Object.keys(newComponentProps);\n if (hasOnChangesHook(fixture.componentInstance)) {\n fixture.componentInstance.ngOnChanges({\n ...changesInComponentInput,\n ...changesInComponentProps,\n });\n }\n if (properties?.detectChangesOnRender !== false) {\n fixture.componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n };\n const navigate = async (elementOrPath, basePath = '') => {\n const result = await _navigate(elementOrPath, basePath);\n detectChanges();\n return result;\n };\n return {\n fixture,\n detectChanges: () => detectChanges(),\n navigate,\n rerender,\n renderDeferBlock: async (deferBlockState, deferBlockIndex) => {\n await renderDeferBlock(fixture, deferBlockState, deferBlockIndex);\n },\n debugElement: fixture.debugElement,\n container: fixture.nativeElement,\n debug: (element = fixture.nativeElement, maxLength, options) => {\n if (Array.isArray(element)) {\n for (const e of element) {\n console.log(dtlPrettyDOM(e, maxLength, options));\n }\n }\n else {\n console.log(dtlPrettyDOM(element, maxLength, options));\n }\n },\n ...replaceFindWithFindAndDetectChanges(dtlGetQueriesForElement(fixture.nativeElement, queries)),\n };\n}\nasync function createComponent(component) {\n /* Make sure angular application is initialized before creating component */\n await TestBed.inject(ApplicationInitStatus).donePromise;\n return TestBed.createComponent(component);\n}\nfunction createComponentFixture(sut, wrapper) {\n if (typeof sut === 'string') {\n TestBed.overrideTemplate(wrapper, sut);\n return wrapper;\n }\n return sut;\n}\nfunction setComponentProperties(fixture, componentProperties = {}) {\n for (const key of Object.keys(componentProperties)) {\n const descriptor = Object.getOwnPropertyDescriptor(fixture.componentInstance.constructor.prototype, key);\n let _value = componentProperties[key];\n const defaultGetter = () => _value;\n const extendedSetter = (value) => {\n _value = value;\n descriptor?.set?.call(fixture.componentInstance, _value);\n fixture.detectChanges();\n };\n Object.defineProperty(fixture.componentInstance, key, {\n get: descriptor?.get || defaultGetter,\n set: extendedSetter,\n // Allow the property to be defined again later.\n // This happens when the component properties are updated after initial render.\n // For Jest this is `true` by default, for Karma and a real browser the default is `false`\n configurable: true,\n });\n descriptor?.set?.call(fixture.componentInstance, _value);\n }\n return fixture;\n}\nfunction setComponentOutputs(fixture, componentOutputs = {}) {\n for (const [name, value] of Object.entries(componentOutputs)) {\n fixture.componentInstance[name] = value;\n }\n}\nfunction setComponentInputs(fixture, componentInputs = {}) {\n for (const [name, value] of Object.entries(componentInputs)) {\n fixture.componentRef.setInput(name, value);\n }\n}\nfunction subscribeToComponentOutputs(fixture, listeners) {\n // with Object.entries we lose the type information of the key and callback, therefore we need to cast them\n return Object.entries(listeners).map(([key, cb]) => subscribeToComponentOutput(fixture, key, cb));\n}\nfunction subscribeToComponentOutput(fixture, key, cb) {\n const eventEmitter = fixture.componentInstance[key];\n const subscription = eventEmitter.subscribe(cb);\n fixture.componentRef.onDestroy(subscription.unsubscribe.bind(subscription));\n return [key, cb, subscription];\n}\nfunction overrideComponentImports(sut, imports) {\n if (imports) {\n if (typeof sut === 'function' && isStandalone(sut)) {\n TestBed.overrideComponent(sut, { set: { imports } });\n }\n else {\n throw new Error(`Error while rendering ${sut}: Cannot specify componentImports on a template or non-standalone component.`);\n }\n }\n}\nfunction overrideChildComponentProviders(componentOverrides) {\n if (componentOverrides) {\n for (const { component, providers } of componentOverrides) {\n TestBed.overrideComponent(component, { set: { providers: providers } });\n }\n }\n}\nfunction hasOnChangesHook(componentInstance) {\n return (componentInstance !== null &&\n typeof componentInstance === 'object' &&\n 'ngOnChanges' in componentInstance &&\n typeof componentInstance.ngOnChanges === 'function');\n}\nfunction getChangesObj(oldProps, newProps) {\n const isFirstChange = oldProps === null;\n return Object.keys(newProps).reduce((changes, key) => {\n changes[key] = new SimpleChange(isFirstChange ? null : oldProps[key], newProps[key], isFirstChange);\n return changes;\n }, {});\n}\nfunction update(fixture, prevRenderedKeys, newValues, updateFunction, partialUpdate) {\n const componentInstance = fixture.componentInstance;\n const simpleChanges = {};\n if (!partialUpdate) {\n for (const key of prevRenderedKeys) {\n if (!Object.prototype.hasOwnProperty.call(newValues, key)) {\n simpleChanges[key] = new SimpleChange(componentInstance[key], undefined, false);\n delete componentInstance[key];\n }\n }\n }\n for (const [key, value] of Object.entries(newValues)) {\n if (value !== componentInstance[key]) {\n simpleChanges[key] = new SimpleChange(componentInstance[key], value, false);\n }\n }\n updateFunction(fixture, newValues);\n return simpleChanges;\n}\nfunction addAutoDeclarations(sut, { declarations = [], excludeComponentDeclaration, wrapper, }) {\n const nonStandaloneDeclarations = declarations.filter((d) => !isStandalone(d));\n if (typeof sut === 'string') {\n if (wrapper && isStandalone(wrapper)) {\n return nonStandaloneDeclarations;\n }\n return [...nonStandaloneDeclarations, wrapper];\n }\n const components = () => (excludeComponentDeclaration || isStandalone(sut) ? [] : [sut]);\n return [...nonStandaloneDeclarations, ...components()];\n}\nfunction addAutoImports(sut, { imports = [], routes }) {\n const routing = () => (routes ? [RouterTestingModule.withRoutes(routes)] : []);\n const components = () => (typeof sut !== 'string' && isStandalone(sut) ? [sut] : []);\n return [...imports, ...components(), ...routing()];\n}\nasync function renderDeferBlock(fixture, deferBlockState, deferBlockIndex) {\n const deferBlockFixtures = await fixture.getDeferBlocks();\n if (deferBlockIndex !== undefined) {\n if (deferBlockIndex < 0) {\n throw new Error('deferBlockIndex must be a positive number');\n }\n const deferBlockFixture = deferBlockFixtures[deferBlockIndex];\n if (!deferBlockFixture) {\n throw new Error(`Could not find a deferrable block with index '${deferBlockIndex}'`);\n }\n await deferBlockFixture.render(deferBlockState);\n }\n else {\n for (const deferBlockFixture of deferBlockFixtures) {\n await deferBlockFixture.render(deferBlockState);\n }\n }\n}\n/**\n * Wrap waitFor to invoke the Angular change detection cycle before invoking the callback\n */\nasync function waitForWrapper(detectChanges, callback, options) {\n let inFakeAsync = true;\n try {\n tick(0);\n }\n catch {\n inFakeAsync = false;\n }\n return await dtlWaitFor(() => {\n setTimeout(() => detectChanges(), 0);\n if (inFakeAsync) {\n tick(0);\n }\n return callback();\n }, options);\n}\n/**\n * Wrap waitForElementToBeRemovedWrapper to poke the Angular change detection cycle before invoking the callback\n */\nasync function waitForElementToBeRemovedWrapper(detectChanges, callback, options) {\n let cb;\n if (typeof callback !== 'function') {\n const elements = (Array.isArray(callback) ? callback : [callback]);\n const getRemainingElements = elements.map((element) => {\n let parent = element.parentElement;\n while (parent.parentElement) {\n parent = parent.parentElement;\n }\n return () => (parent.contains(element) ? element : null);\n });\n cb = () => getRemainingElements.map((c) => c()).find(Boolean);\n }\n else {\n cb = callback;\n }\n return await dtlWaitForElementToBeRemoved(() => {\n const result = cb();\n detectChanges();\n return result;\n }, options);\n}\nfunction cleanup() {\n mountedFixtures.forEach(cleanupAtFixture);\n}\nfunction cleanupAtFixture(fixture) {\n fixture.destroy();\n if (!fixture.nativeElement.getAttribute('ng-version') && fixture.nativeElement.parentNode === document.body) {\n document.body.removeChild(fixture.nativeElement);\n }\n else if (!fixture.nativeElement.getAttribute('id') && document.body.children?.[0] === fixture.nativeElement) {\n document.body.removeChild(fixture.nativeElement);\n }\n mountedFixtures.delete(fixture);\n}\n// if we're running in a test runner that supports afterEach\n// then we'll automatically run cleanup afterEach test\n// this ensures that tests run in isolation from each other\n// if you don't like this, set the ATL_SKIP_AUTO_CLEANUP env variable to 'true'\nif (typeof process === 'undefined' || !process.env?.ATL_SKIP_AUTO_CLEANUP) {\n if (typeof afterEach === 'function') {\n afterEach(() => {\n cleanup();\n });\n }\n}\nclass WrapperComponent {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: WrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.0\", type: WrapperComponent, isStandalone: false, selector: \"atl-wrapper-component\", ngImport: i0, template: '', isInline: true }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: WrapperComponent, decorators: [{\n type: Component,\n args: [{ selector: 'atl-wrapper-component', template: '', standalone: false }]\n }] });\n/**\n * Wrap findBy queries to poke the Angular change detection cycle\n */\nfunction replaceFindWithFindAndDetectChanges(originalQueriesForContainer) {\n return Object.keys(originalQueriesForContainer).reduce((newQueries, key) => {\n const getByQuery = originalQueriesForContainer[key.replace('find', 'get')];\n if (key.startsWith('find') && getByQuery) {\n newQueries[key] = async (...queryOptions) => {\n const waitOptions = queryOptions.length === 3 ? queryOptions.pop() : undefined;\n // original implementation at https://github.com/testing-library/dom-testing-library/blob/main/src/query-helpers.js\n return await waitForWrapper(detectChangesForMountedFixtures, () => getByQuery(...queryOptions), waitOptions);\n };\n }\n else {\n newQueries[key] = originalQueriesForContainer[key];\n }\n return newQueries;\n }, {});\n}\n/**\n * Call detectChanges for all fixtures\n */\nfunction detectChangesForMountedFixtures() {\n for (const fixture of mountedFixtures) {\n try {\n fixture.detectChanges();\n }\n catch (err) {\n if (!err.message.startsWith('ViewDestroyedError')) {\n throw err;\n }\n }\n }\n}\n/**\n * Re-export screen with patched queries\n */\nconst screen = replaceFindWithFindAndDetectChanges(dtlScreen);\n/**\n * Re-export within with patched queries\n */\nconst within = (element, queriesToBind) => {\n const container = dtlWithin(element, queriesToBind);\n return replaceFindWithFindAndDetectChanges(container);\n};\n/**\n * Re-export waitFor with patched waitFor\n */\nasync function waitFor(callback, options) {\n return waitForWrapper(detectChangesForMountedFixtures, callback, options);\n}\n/**\n * Re-export waitForElementToBeRemoved with patched waitForElementToBeRemoved\n */\nasync function waitForElementToBeRemoved(callback, options) {\n return waitForElementToBeRemovedWrapper(detectChangesForMountedFixtures, callback, options);\n}\n/**\n * Manually export otherwise we get the following error while running Jest tests\n * TypeError: Cannot set property fireEvent of [object Object] which has only a getter\n * exports.fireEvent = fireEvent\n */\nexport { fireEvent, buildQueries, getByLabelText, getAllByLabelText, queryByLabelText, queryAllByLabelText, findByLabelText, findAllByLabelText, getByPlaceholderText, getAllByPlaceholderText, queryByPlaceholderText, queryAllByPlaceholderText, findByPlaceholderText, findAllByPlaceholderText, getByText, getAllByText, queryByText, queryAllByText, findByText, findAllByText, getByAltText, getAllByAltText, queryByAltText, queryAllByAltText, findByAltText, findAllByAltText, getByTitle, getAllByTitle, queryByTitle, queryAllByTitle, findByTitle, findAllByTitle, getByDisplayValue, getAllByDisplayValue, queryByDisplayValue, queryAllByDisplayValue, findByDisplayValue, findAllByDisplayValue, getByRole, getAllByRole, queryByRole, queryAllByRole, findByRole, findAllByRole, getByTestId, getAllByTestId, queryByTestId, queryAllByTestId, findByTestId, findAllByTestId, createEvent, getDefaultNormalizer, getElementError, getNodeText, getQueriesForElement, getRoles, isInaccessible, logDOM, logRoles, prettyDOM, queries, queryAllByAttribute, queryByAttribute, queryHelpers, } from '@testing-library/dom';\n// export patched dtl\nexport { screen, waitFor, waitForElementToBeRemoved, within };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy1saWJyYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVzdGluZy1saWJyYXJ5L3NyYy9saWIvdGVzdGluZy1saWJyYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBS04sWUFBWSxFQUdaLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW9CLGtCQUFrQixFQUFtQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0csT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsU0FBUyxJQUFJLFlBQVksRUFDekIsb0JBQW9CLElBQUksdUJBQXVCLEVBQy9DLFNBQVMsSUFBSSxZQUFZLEVBRXpCLE1BQU0sSUFBSSxTQUFTLEVBQ25CLE9BQU8sSUFBSSxVQUFVLEVBQ3JCLHlCQUF5QixJQUFJLDRCQUE0QixFQUV6RCxNQUFNLElBQUksU0FBUyxHQUNwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBWXJDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0FBV3pELE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUMxQixHQUEyQixFQUMzQixnQkFBc0YsRUFBRTtJQUV4RixNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQ3hELE1BQU0sRUFDSixxQkFBcUIsR0FBRyxJQUFJLEVBQzVCLGlCQUFpQixHQUFHLElBQUksRUFDeEIsWUFBWSxHQUFHLEVBQUUsRUFD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