@angular/cdk 19.0.0-next.0 → 19.0.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/a11y/_index.scss +12 -54
- package/a11y/index.d.ts +24 -38
- package/accordion/index.d.ts +5 -4
- package/bidi/index.d.ts +2 -2
- package/clipboard/index.d.ts +3 -4
- package/dialog/index.d.ts +12 -12
- package/drag-drop/index.d.ts +17 -37
- package/fesm2022/a11y.mjs +134 -181
- package/fesm2022/a11y.mjs.map +1 -1
- package/fesm2022/accordion.mjs +20 -27
- package/fesm2022/accordion.mjs.map +1 -1
- package/fesm2022/bidi.mjs +14 -19
- package/fesm2022/bidi.mjs.map +1 -1
- package/fesm2022/cdk.mjs +1 -1
- package/fesm2022/cdk.mjs.map +1 -1
- package/fesm2022/clipboard.mjs +19 -27
- package/fesm2022/clipboard.mjs.map +1 -1
- package/fesm2022/coercion/private.mjs.map +1 -1
- package/fesm2022/coercion.mjs.map +1 -1
- package/fesm2022/collections.mjs +3 -3
- package/fesm2022/collections.mjs.map +1 -1
- package/fesm2022/dialog.mjs +36 -56
- package/fesm2022/dialog.mjs.map +1 -1
- package/fesm2022/drag-drop.mjs +107 -181
- package/fesm2022/drag-drop.mjs.map +1 -1
- package/fesm2022/keycodes.mjs.map +1 -1
- package/fesm2022/layout.mjs +21 -26
- package/fesm2022/layout.mjs.map +1 -1
- package/fesm2022/listbox.mjs +17 -13
- package/fesm2022/listbox.mjs.map +1 -1
- package/fesm2022/menu.mjs +49 -61
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/observers/private.mjs +3 -3
- package/fesm2022/observers/private.mjs.map +1 -1
- package/fesm2022/observers.mjs +21 -22
- package/fesm2022/observers.mjs.map +1 -1
- package/fesm2022/overlay.mjs +120 -149
- package/fesm2022/overlay.mjs.map +1 -1
- package/fesm2022/platform.mjs +11 -14
- package/fesm2022/platform.mjs.map +1 -1
- package/fesm2022/portal.mjs +60 -63
- package/fesm2022/portal.mjs.map +1 -1
- package/fesm2022/private.mjs +65 -0
- package/fesm2022/private.mjs.map +1 -0
- package/fesm2022/scrolling.mjs +90 -132
- package/fesm2022/scrolling.mjs.map +1 -1
- package/fesm2022/stepper.mjs +69 -63
- package/fesm2022/stepper.mjs.map +1 -1
- package/fesm2022/table.mjs +171 -250
- package/fesm2022/table.mjs.map +1 -1
- package/fesm2022/testing/selenium-webdriver.mjs.map +1 -1
- package/fesm2022/testing/testbed.mjs +3 -2
- package/fesm2022/testing/testbed.mjs.map +1 -1
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/text-field.mjs +46 -40
- package/fesm2022/text-field.mjs.map +1 -1
- package/fesm2022/tree.mjs +90 -80
- package/fesm2022/tree.mjs.map +1 -1
- package/layout/index.d.ts +5 -7
- package/observers/index.d.ts +2 -2
- package/overlay/_index.scss +56 -21
- package/overlay/index.d.ts +24 -36
- package/overlay-prebuilt.css +1 -1
- package/package.json +5 -55
- package/platform/index.d.ts +2 -1
- package/portal/index.d.ts +22 -19
- package/private/index.d.ts +30 -0
- package/schematics/index.d.ts +1 -1
- package/schematics/index.js +2 -2
- package/schematics/index.mjs +2 -2
- package/schematics/ng-add/index.d.ts +1 -1
- package/schematics/ng-add/index.js +3 -3
- package/schematics/ng-add/index.mjs +3 -3
- package/schematics/ng-add/package-config.d.ts +1 -1
- package/schematics/ng-add/package-config.js +2 -2
- package/schematics/ng-add/package-config.mjs +2 -2
- package/schematics/ng-add/schema.d.ts +1 -1
- package/schematics/ng-add/schema.js +2 -2
- package/schematics/ng-add/schema.mjs +2 -2
- package/schematics/ng-generate/drag-drop/index.d.ts +1 -1
- package/schematics/ng-generate/drag-drop/index.js +2 -2
- package/schematics/ng-generate/drag-drop/index.mjs +2 -2
- package/schematics/ng-generate/drag-drop/schema.d.ts +1 -1
- package/schematics/ng-generate/drag-drop/schema.js +2 -2
- package/schematics/ng-generate/drag-drop/schema.mjs +2 -2
- package/schematics/ng-update/data/attribute-selectors.d.ts +1 -1
- package/schematics/ng-update/data/attribute-selectors.js +2 -2
- package/schematics/ng-update/data/attribute-selectors.mjs +2 -2
- package/schematics/ng-update/data/class-names.d.ts +1 -1
- package/schematics/ng-update/data/class-names.js +2 -2
- package/schematics/ng-update/data/class-names.mjs +2 -2
- package/schematics/ng-update/data/constructor-checks.d.ts +1 -1
- package/schematics/ng-update/data/constructor-checks.js +2 -2
- package/schematics/ng-update/data/constructor-checks.mjs +2 -2
- package/schematics/ng-update/data/css-selectors.d.ts +1 -1
- package/schematics/ng-update/data/css-selectors.js +2 -2
- package/schematics/ng-update/data/css-selectors.mjs +2 -2
- package/schematics/ng-update/data/css-tokens.d.ts +1 -1
- package/schematics/ng-update/data/css-tokens.js +2 -2
- package/schematics/ng-update/data/css-tokens.mjs +2 -2
- package/schematics/ng-update/data/element-selectors.d.ts +1 -1
- package/schematics/ng-update/data/element-selectors.js +2 -2
- package/schematics/ng-update/data/element-selectors.mjs +2 -2
- package/schematics/ng-update/data/index.d.ts +1 -1
- package/schematics/ng-update/data/index.js +2 -2
- package/schematics/ng-update/data/index.mjs +2 -2
- package/schematics/ng-update/data/input-names.d.ts +1 -1
- package/schematics/ng-update/data/input-names.js +2 -2
- package/schematics/ng-update/data/input-names.mjs +2 -2
- package/schematics/ng-update/data/method-call-checks.d.ts +1 -1
- package/schematics/ng-update/data/method-call-checks.js +2 -2
- package/schematics/ng-update/data/method-call-checks.mjs +2 -2
- package/schematics/ng-update/data/output-names.d.ts +1 -1
- package/schematics/ng-update/data/output-names.js +2 -2
- package/schematics/ng-update/data/output-names.mjs +2 -2
- package/schematics/ng-update/data/property-names.d.ts +1 -1
- package/schematics/ng-update/data/property-names.js +2 -2
- package/schematics/ng-update/data/property-names.mjs +2 -2
- package/schematics/ng-update/data/symbol-removal.d.ts +1 -1
- package/schematics/ng-update/data/symbol-removal.js +2 -2
- package/schematics/ng-update/data/symbol-removal.mjs +2 -2
- package/schematics/ng-update/devkit-file-system.d.ts +1 -1
- package/schematics/ng-update/devkit-file-system.js +2 -2
- package/schematics/ng-update/devkit-file-system.mjs +2 -2
- package/schematics/ng-update/devkit-migration-rule.d.ts +1 -1
- package/schematics/ng-update/devkit-migration-rule.js +2 -2
- package/schematics/ng-update/devkit-migration-rule.mjs +2 -2
- package/schematics/ng-update/devkit-migration.d.ts +1 -1
- package/schematics/ng-update/devkit-migration.js +2 -2
- package/schematics/ng-update/devkit-migration.mjs +2 -2
- package/schematics/ng-update/find-stylesheets.d.ts +1 -1
- package/schematics/ng-update/find-stylesheets.js +2 -2
- package/schematics/ng-update/find-stylesheets.mjs +2 -2
- package/schematics/ng-update/html-parsing/angular.d.ts +1 -1
- package/schematics/ng-update/html-parsing/angular.js +2 -2
- package/schematics/ng-update/html-parsing/angular.mjs +2 -2
- package/schematics/ng-update/html-parsing/elements.d.ts +1 -1
- package/schematics/ng-update/html-parsing/elements.js +2 -2
- package/schematics/ng-update/html-parsing/elements.mjs +2 -2
- package/schematics/ng-update/index.d.ts +1 -1
- package/schematics/ng-update/index.js +2 -2
- package/schematics/ng-update/index.mjs +2 -2
- package/schematics/ng-update/migrations/attribute-selectors.d.ts +1 -1
- package/schematics/ng-update/migrations/attribute-selectors.js +2 -2
- package/schematics/ng-update/migrations/attribute-selectors.mjs +2 -2
- package/schematics/ng-update/migrations/class-inheritance.d.ts +1 -1
- package/schematics/ng-update/migrations/class-inheritance.js +2 -2
- package/schematics/ng-update/migrations/class-inheritance.mjs +2 -2
- package/schematics/ng-update/migrations/class-names.d.ts +1 -1
- package/schematics/ng-update/migrations/class-names.js +2 -2
- package/schematics/ng-update/migrations/class-names.mjs +2 -2
- package/schematics/ng-update/migrations/constructor-signature.d.ts +1 -1
- package/schematics/ng-update/migrations/constructor-signature.js +2 -2
- package/schematics/ng-update/migrations/constructor-signature.mjs +2 -2
- package/schematics/ng-update/migrations/css-selectors.d.ts +1 -1
- package/schematics/ng-update/migrations/css-selectors.js +2 -2
- package/schematics/ng-update/migrations/css-selectors.mjs +2 -2
- package/schematics/ng-update/migrations/css-tokens.d.ts +1 -1
- package/schematics/ng-update/migrations/css-tokens.js +2 -2
- package/schematics/ng-update/migrations/css-tokens.mjs +2 -2
- package/schematics/ng-update/migrations/element-selectors.d.ts +1 -1
- package/schematics/ng-update/migrations/element-selectors.js +2 -2
- package/schematics/ng-update/migrations/element-selectors.mjs +2 -2
- package/schematics/ng-update/migrations/input-names.d.ts +1 -1
- package/schematics/ng-update/migrations/input-names.js +2 -2
- package/schematics/ng-update/migrations/input-names.mjs +2 -2
- package/schematics/ng-update/migrations/method-call-arguments.d.ts +1 -1
- package/schematics/ng-update/migrations/method-call-arguments.js +2 -2
- package/schematics/ng-update/migrations/method-call-arguments.mjs +2 -2
- package/schematics/ng-update/migrations/misc-template.d.ts +1 -1
- package/schematics/ng-update/migrations/misc-template.js +2 -2
- package/schematics/ng-update/migrations/misc-template.mjs +2 -2
- package/schematics/ng-update/migrations/output-names.d.ts +1 -1
- package/schematics/ng-update/migrations/output-names.js +2 -2
- package/schematics/ng-update/migrations/output-names.mjs +2 -2
- package/schematics/ng-update/migrations/property-names.d.ts +1 -1
- package/schematics/ng-update/migrations/property-names.js +2 -2
- package/schematics/ng-update/migrations/property-names.mjs +2 -2
- package/schematics/ng-update/migrations/symbol-removal.d.ts +1 -1
- package/schematics/ng-update/migrations/symbol-removal.js +2 -2
- package/schematics/ng-update/migrations/symbol-removal.mjs +2 -2
- package/schematics/ng-update/public-api.d.ts +1 -1
- package/schematics/ng-update/public-api.js +2 -2
- package/schematics/ng-update/public-api.mjs +2 -2
- package/schematics/ng-update/typescript/base-types.d.ts +1 -1
- package/schematics/ng-update/typescript/base-types.js +2 -2
- package/schematics/ng-update/typescript/base-types.mjs +2 -2
- package/schematics/ng-update/typescript/imports.d.ts +1 -1
- package/schematics/ng-update/typescript/imports.js +2 -2
- package/schematics/ng-update/typescript/imports.mjs +2 -2
- package/schematics/ng-update/typescript/literal.d.ts +1 -1
- package/schematics/ng-update/typescript/literal.js +2 -2
- package/schematics/ng-update/typescript/literal.mjs +2 -2
- package/schematics/ng-update/typescript/module-specifiers.d.ts +1 -1
- package/schematics/ng-update/typescript/module-specifiers.js +2 -2
- package/schematics/ng-update/typescript/module-specifiers.mjs +2 -2
- package/schematics/ng-update/upgrade-data.d.ts +1 -1
- package/schematics/ng-update/upgrade-data.js +2 -2
- package/schematics/ng-update/upgrade-data.mjs +2 -2
- package/schematics/paths.d.ts +1 -1
- package/schematics/paths.js +2 -2
- package/schematics/paths.mjs +2 -2
- package/schematics/update-tool/component-resource-collector.d.ts +1 -1
- package/schematics/update-tool/component-resource-collector.js +2 -2
- package/schematics/update-tool/component-resource-collector.mjs +2 -2
- package/schematics/update-tool/file-system.d.ts +1 -1
- package/schematics/update-tool/file-system.js +2 -2
- package/schematics/update-tool/file-system.mjs +2 -2
- package/schematics/update-tool/index.d.ts +1 -1
- package/schematics/update-tool/index.js +2 -2
- package/schematics/update-tool/index.mjs +2 -2
- package/schematics/update-tool/logger.d.ts +1 -1
- package/schematics/update-tool/logger.js +2 -2
- package/schematics/update-tool/logger.mjs +2 -2
- package/schematics/update-tool/migration.d.ts +1 -1
- package/schematics/update-tool/migration.js +2 -2
- package/schematics/update-tool/migration.mjs +2 -2
- package/schematics/update-tool/public-api.d.ts +1 -1
- package/schematics/update-tool/public-api.js +2 -2
- package/schematics/update-tool/public-api.mjs +2 -2
- package/schematics/update-tool/target-version.d.ts +1 -1
- package/schematics/update-tool/target-version.js +2 -2
- package/schematics/update-tool/target-version.mjs +2 -2
- package/schematics/update-tool/update-recorder.d.ts +1 -1
- package/schematics/update-tool/update-recorder.js +2 -2
- package/schematics/update-tool/update-recorder.mjs +2 -2
- package/schematics/update-tool/utils/decorators.d.ts +1 -1
- package/schematics/update-tool/utils/decorators.js +2 -2
- package/schematics/update-tool/utils/decorators.mjs +2 -2
- package/schematics/update-tool/utils/diagnostics.d.ts +1 -1
- package/schematics/update-tool/utils/diagnostics.js +2 -2
- package/schematics/update-tool/utils/diagnostics.mjs +2 -2
- package/schematics/update-tool/utils/functions.d.ts +1 -1
- package/schematics/update-tool/utils/functions.js +2 -2
- package/schematics/update-tool/utils/functions.mjs +2 -2
- package/schematics/update-tool/utils/imports.d.ts +1 -1
- package/schematics/update-tool/utils/imports.js +2 -2
- package/schematics/update-tool/utils/imports.mjs +2 -2
- package/schematics/update-tool/utils/line-mappings.d.ts +1 -1
- package/schematics/update-tool/utils/line-mappings.js +2 -2
- package/schematics/update-tool/utils/line-mappings.mjs +2 -2
- package/schematics/update-tool/utils/parse-tsconfig.d.ts +1 -1
- package/schematics/update-tool/utils/parse-tsconfig.js +2 -2
- package/schematics/update-tool/utils/parse-tsconfig.mjs +2 -2
- package/schematics/update-tool/utils/property-name.d.ts +1 -1
- package/schematics/update-tool/utils/property-name.js +2 -2
- package/schematics/update-tool/utils/property-name.mjs +2 -2
- package/schematics/update-tool/utils/virtual-host.d.ts +1 -1
- package/schematics/update-tool/utils/virtual-host.js +2 -2
- package/schematics/update-tool/utils/virtual-host.mjs +2 -2
- package/schematics/update-tool/version-changes.d.ts +1 -1
- package/schematics/update-tool/version-changes.js +2 -2
- package/schematics/update-tool/version-changes.mjs +2 -2
- package/schematics/utils/ast/ng-module-imports.d.ts +1 -1
- package/schematics/utils/ast/ng-module-imports.js +2 -2
- package/schematics/utils/ast/ng-module-imports.mjs +2 -2
- package/schematics/utils/ast.d.ts +1 -1
- package/schematics/utils/ast.js +2 -2
- package/schematics/utils/ast.mjs +2 -2
- package/schematics/utils/build-component.d.ts +1 -1
- package/schematics/utils/build-component.js +2 -2
- package/schematics/utils/build-component.mjs +2 -2
- package/schematics/utils/get-project.d.ts +1 -1
- package/schematics/utils/get-project.js +2 -2
- package/schematics/utils/get-project.mjs +2 -2
- package/schematics/utils/html-manipulation.d.ts +1 -1
- package/schematics/utils/html-manipulation.js +2 -2
- package/schematics/utils/html-manipulation.mjs +2 -2
- package/schematics/utils/index.d.ts +1 -1
- package/schematics/utils/index.js +2 -2
- package/schematics/utils/index.mjs +2 -2
- package/schematics/utils/parse5-element.d.ts +1 -1
- package/schematics/utils/parse5-element.js +2 -2
- package/schematics/utils/parse5-element.mjs +2 -2
- package/schematics/utils/project-index-file.d.ts +1 -1
- package/schematics/utils/project-index-file.js +2 -2
- package/schematics/utils/project-index-file.mjs +2 -2
- package/schematics/utils/project-main-file.d.ts +1 -1
- package/schematics/utils/project-main-file.js +2 -2
- package/schematics/utils/project-main-file.mjs +2 -2
- package/schematics/utils/project-style-file.d.ts +1 -1
- package/schematics/utils/project-style-file.js +2 -2
- package/schematics/utils/project-style-file.mjs +2 -2
- package/schematics/utils/project-targets.d.ts +1 -1
- package/schematics/utils/project-targets.js +4 -3
- package/schematics/utils/project-targets.mjs +4 -3
- package/schematics/utils/project-tsconfig-paths.d.ts +1 -1
- package/schematics/utils/project-tsconfig-paths.js +2 -2
- package/schematics/utils/project-tsconfig-paths.mjs +2 -2
- package/schematics/utils/schematic-options.d.ts +1 -1
- package/schematics/utils/schematic-options.js +2 -2
- package/schematics/utils/schematic-options.mjs +2 -2
- package/scrolling/index.d.ts +19 -38
- package/stepper/index.d.ts +16 -69
- package/table/index.d.ts +41 -56
- package/text-field/index.d.ts +6 -9
- package/tree/index.d.ts +17 -16
- package/esm2022/a11y/a11y-module.mjs +0 -31
- package/esm2022/a11y/a11y_public_index.mjs +0 -5
- package/esm2022/a11y/aria-describer/aria-describer.mjs +0 -232
- package/esm2022/a11y/aria-describer/aria-reference.mjs +0 -47
- package/esm2022/a11y/fake-event-detection.mjs +0 -29
- package/esm2022/a11y/focus-monitor/focus-monitor.mjs +0 -468
- package/esm2022/a11y/focus-trap/configurable-focus-trap-config.mjs +0 -9
- package/esm2022/a11y/focus-trap/configurable-focus-trap-factory.mjs +0 -54
- package/esm2022/a11y/focus-trap/configurable-focus-trap.mjs +0 -51
- package/esm2022/a11y/focus-trap/event-listener-inert-strategy.mjs +0 -61
- package/esm2022/a11y/focus-trap/focus-trap-inert-strategy.mjs +0 -11
- package/esm2022/a11y/focus-trap/focus-trap-manager.mjs +0 -53
- package/esm2022/a11y/focus-trap/focus-trap.mjs +0 -396
- package/esm2022/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +0 -116
- package/esm2022/a11y/index.mjs +0 -9
- package/esm2022/a11y/input-modality/input-modality-detector.mjs +0 -176
- package/esm2022/a11y/interactivity-checker/interactivity-checker.mjs +0 -238
- package/esm2022/a11y/key-manager/activedescendant-key-manager.mjs +0 -20
- package/esm2022/a11y/key-manager/focus-key-manager.mjs +0 -29
- package/esm2022/a11y/key-manager/list-key-manager.mjs +0 -357
- package/esm2022/a11y/key-manager/noop-tree-key-manager.mjs +0 -94
- package/esm2022/a11y/key-manager/tree-key-manager-strategy.mjs +0 -9
- package/esm2022/a11y/key-manager/tree-key-manager.mjs +0 -345
- package/esm2022/a11y/key-manager/typeahead.mjs +0 -91
- package/esm2022/a11y/live-announcer/live-announcer-tokens.mjs +0 -19
- package/esm2022/a11y/live-announcer/live-announcer.mjs +0 -210
- package/esm2022/a11y/public-api.mjs +0 -30
- package/esm2022/accordion/accordion-item.mjs +0 -162
- package/esm2022/accordion/accordion-module.mjs +0 -24
- package/esm2022/accordion/accordion.mjs +0 -65
- package/esm2022/accordion/accordion_public_index.mjs +0 -5
- package/esm2022/accordion/index.mjs +0 -9
- package/esm2022/accordion/public-api.mjs +0 -11
- package/esm2022/bidi/bidi-module.mjs +0 -23
- package/esm2022/bidi/bidi_public_index.mjs +0 -5
- package/esm2022/bidi/dir-document-token.mjs +0 -33
- package/esm2022/bidi/dir.mjs +0 -70
- package/esm2022/bidi/directionality.mjs +0 -52
- package/esm2022/bidi/index.mjs +0 -9
- package/esm2022/bidi/public-api.mjs +0 -12
- package/esm2022/clipboard/clipboard-module.mjs +0 -23
- package/esm2022/clipboard/clipboard.mjs +0 -53
- package/esm2022/clipboard/clipboard_public_index.mjs +0 -5
- package/esm2022/clipboard/copy-to-clipboard.mjs +0 -100
- package/esm2022/clipboard/index.mjs +0 -9
- package/esm2022/clipboard/pending-copy.mjs +0 -71
- package/esm2022/clipboard/public-api.mjs +0 -12
- package/esm2022/coercion/array.mjs +0 -11
- package/esm2022/coercion/boolean-property.mjs +0 -12
- package/esm2022/coercion/css-pixel-value.mjs +0 -15
- package/esm2022/coercion/element.mjs +0 -16
- package/esm2022/coercion/index.mjs +0 -9
- package/esm2022/coercion/number-property.mjs +0 -24
- package/esm2022/coercion/private/index.mjs +0 -9
- package/esm2022/coercion/private/observable.mjs +0 -19
- package/esm2022/coercion/private/private_public_index.mjs +0 -5
- package/esm2022/coercion/public-api.mjs +0 -14
- package/esm2022/coercion/string-array.mjs +0 -38
- package/esm2022/collections/array-data-source.mjs +0 -21
- package/esm2022/collections/collection-viewer.mjs +0 -9
- package/esm2022/collections/collections_public_index.mjs +0 -5
- package/esm2022/collections/data-source.mjs +0 -19
- package/esm2022/collections/dispose-view-repeater-strategy.mjs +0 -48
- package/esm2022/collections/index.mjs +0 -9
- package/esm2022/collections/public-api.mjs +0 -17
- package/esm2022/collections/recycle-view-repeater-strategy.mjs +0 -129
- package/esm2022/collections/selection-model.mjs +0 -225
- package/esm2022/collections/tree-adapter.mjs +0 -9
- package/esm2022/collections/unique-selection-dispatcher.mjs +0 -55
- package/esm2022/collections/view-repeater.mjs +0 -26
- package/esm2022/dialog/dialog-config.mjs +0 -70
- package/esm2022/dialog/dialog-container.mjs +0 -308
- package/esm2022/dialog/dialog-injectors.mjs +0 -40
- package/esm2022/dialog/dialog-module.mjs +0 -40
- package/esm2022/dialog/dialog-ref.mjs +0 -85
- package/esm2022/dialog/dialog.mjs +0 -303
- package/esm2022/dialog/dialog_public_index.mjs +0 -5
- package/esm2022/dialog/index.mjs +0 -9
- package/esm2022/dialog/public-api.mjs +0 -14
- package/esm2022/drag-drop/directives/assertions.mjs +0 -18
- package/esm2022/drag-drop/directives/config.mjs +0 -14
- package/esm2022/drag-drop/directives/drag-handle.mjs +0 -68
- package/esm2022/drag-drop/directives/drag-placeholder.mjs +0 -43
- package/esm2022/drag-drop/directives/drag-preview.mjs +0 -48
- package/esm2022/drag-drop/directives/drag.mjs +0 -520
- package/esm2022/drag-drop/directives/drop-list-group.mjs +0 -47
- package/esm2022/drag-drop/directives/drop-list.mjs +0 -352
- package/esm2022/drag-drop/dom/clone-node.mjs +0 -65
- package/esm2022/drag-drop/dom/dom-rect.mjs +0 -64
- package/esm2022/drag-drop/dom/parent-position-tracker.mjs +0 -76
- package/esm2022/drag-drop/dom/root-node.mjs +0 -21
- package/esm2022/drag-drop/dom/styling.mjs +0 -89
- package/esm2022/drag-drop/dom/transition-duration.mjs +0 -36
- package/esm2022/drag-drop/drag-drop-module.mjs +0 -49
- package/esm2022/drag-drop/drag-drop-registry.mjs +0 -266
- package/esm2022/drag-drop/drag-drop.mjs +0 -57
- package/esm2022/drag-drop/drag-drop_public_index.mjs +0 -5
- package/esm2022/drag-drop/drag-events.mjs +0 -9
- package/esm2022/drag-drop/drag-parent.mjs +0 -16
- package/esm2022/drag-drop/drag-ref.mjs +0 -1097
- package/esm2022/drag-drop/drag-utils.mjs +0 -60
- package/esm2022/drag-drop/drop-list-ref.mjs +0 -672
- package/esm2022/drag-drop/index.mjs +0 -9
- package/esm2022/drag-drop/preview-ref.mjs +0 -117
- package/esm2022/drag-drop/public-api.mjs +0 -23
- package/esm2022/drag-drop/sorting/drop-list-sort-strategy.mjs +0 -9
- package/esm2022/drag-drop/sorting/mixed-sort-strategy.mjs +0 -246
- package/esm2022/drag-drop/sorting/single-axis-sort-strategy.mjs +0 -343
- package/esm2022/index.mjs +0 -9
- package/esm2022/keycodes/index.mjs +0 -9
- package/esm2022/keycodes/keycodes.mjs +0 -127
- package/esm2022/keycodes/keycodes_public_index.mjs +0 -5
- package/esm2022/keycodes/modifiers.mjs +0 -18
- package/esm2022/keycodes/public-api.mjs +0 -10
- package/esm2022/layout/breakpoints-observer.mjs +0 -105
- package/esm2022/layout/breakpoints.mjs +0 -29
- package/esm2022/layout/index.mjs +0 -9
- package/esm2022/layout/layout-module.mjs +0 -19
- package/esm2022/layout/layout_public_index.mjs +0 -5
- package/esm2022/layout/media-matcher.mjs +0 -94
- package/esm2022/layout/public-api.mjs +0 -12
- package/esm2022/listbox/index.mjs +0 -9
- package/esm2022/listbox/listbox-module.mjs +0 -24
- package/esm2022/listbox/listbox.mjs +0 -888
- package/esm2022/listbox/listbox_public_index.mjs +0 -5
- package/esm2022/listbox/public-api.mjs +0 -10
- package/esm2022/menu/context-menu-trigger.mjs +0 -221
- package/esm2022/menu/event-detection.mjs +0 -28
- package/esm2022/menu/index.mjs +0 -9
- package/esm2022/menu/menu-aim.mjs +0 -204
- package/esm2022/menu/menu-bar.mjs +0 -134
- package/esm2022/menu/menu-base.mjs +0 -192
- package/esm2022/menu/menu-errors.mjs +0 -22
- package/esm2022/menu/menu-group.mjs +0 -31
- package/esm2022/menu/menu-interface.mjs +0 -11
- package/esm2022/menu/menu-item-checkbox.mjs +0 -50
- package/esm2022/menu/menu-item-radio.mjs +0 -72
- package/esm2022/menu/menu-item-selectable.mjs +0 -36
- package/esm2022/menu/menu-item.mjs +0 -270
- package/esm2022/menu/menu-module.mjs +0 -60
- package/esm2022/menu/menu-stack.mjs +0 -163
- package/esm2022/menu/menu-trigger-base.mjs +0 -119
- package/esm2022/menu/menu-trigger.mjs +0 -313
- package/esm2022/menu/menu.mjs +0 -135
- package/esm2022/menu/menu_public_index.mjs +0 -5
- package/esm2022/menu/pointer-focus-tracker.mjs +0 -51
- package/esm2022/menu/public-api.mjs +0 -24
- package/esm2022/observers/index.mjs +0 -9
- package/esm2022/observers/observe-content.mjs +0 -216
- package/esm2022/observers/observers_public_index.mjs +0 -5
- package/esm2022/observers/private/index.mjs +0 -9
- package/esm2022/observers/private/private_public_index.mjs +0 -5
- package/esm2022/observers/private/shared-resize-observer.mjs +0 -125
- package/esm2022/observers/public-api.mjs +0 -9
- package/esm2022/overlay/dispatchers/base-overlay-dispatcher.mjs +0 -52
- package/esm2022/overlay/dispatchers/index.mjs +0 -10
- package/esm2022/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +0 -81
- package/esm2022/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +0 -151
- package/esm2022/overlay/fullscreen-overlay-container.mjs +0 -94
- package/esm2022/overlay/index.mjs +0 -9
- package/esm2022/overlay/overlay-config.mjs +0 -45
- package/esm2022/overlay/overlay-container.mjs +0 -81
- package/esm2022/overlay/overlay-directives.mjs +0 -432
- package/esm2022/overlay/overlay-module.mjs +0 -28
- package/esm2022/overlay/overlay-ref.mjs +0 -437
- package/esm2022/overlay/overlay.mjs +0 -126
- package/esm2022/overlay/overlay_public_index.mjs +0 -5
- package/esm2022/overlay/position/connected-position.mjs +0 -88
- package/esm2022/overlay/position/flexible-connected-position-strategy.mjs +0 -1002
- package/esm2022/overlay/position/global-position-strategy.mjs +0 -237
- package/esm2022/overlay/position/overlay-position-builder.mjs +0 -50
- package/esm2022/overlay/position/position-strategy.mjs +0 -9
- package/esm2022/overlay/position/scroll-clip.mjs +0 -40
- package/esm2022/overlay/public-api.mjs +0 -22
- package/esm2022/overlay/scroll/block-scroll-strategy.mjs +0 -80
- package/esm2022/overlay/scroll/close-scroll-strategy.mjs +0 -65
- package/esm2022/overlay/scroll/index.mjs +0 -14
- package/esm2022/overlay/scroll/noop-scroll-strategy.mjs +0 -17
- package/esm2022/overlay/scroll/reposition-scroll-strategy.mjs +0 -61
- package/esm2022/overlay/scroll/scroll-strategy-options.mjs +0 -55
- package/esm2022/overlay/scroll/scroll-strategy.mjs +0 -14
- package/esm2022/platform/features/input-types.mjs +0 -59
- package/esm2022/platform/features/passive-listeners.mjs +0 -36
- package/esm2022/platform/features/scrolling.mjs +0 -104
- package/esm2022/platform/features/shadow-dom.mjs +0 -54
- package/esm2022/platform/features/test-environment.mjs +0 -24
- package/esm2022/platform/index.mjs +0 -9
- package/esm2022/platform/platform-module.mjs +0 -19
- package/esm2022/platform/platform.mjs +0 -85
- package/esm2022/platform/platform_public_index.mjs +0 -5
- package/esm2022/platform/public-api.mjs +0 -15
- package/esm2022/portal/dom-portal-outlet.mjs +0 -158
- package/esm2022/portal/index.mjs +0 -9
- package/esm2022/portal/portal-directives.mjs +0 -251
- package/esm2022/portal/portal-errors.mjs +0 -51
- package/esm2022/portal/portal-injector.mjs +0 -28
- package/esm2022/portal/portal.mjs +0 -189
- package/esm2022/portal/portal_public_index.mjs +0 -5
- package/esm2022/portal/public-api.mjs +0 -12
- package/esm2022/public-api.mjs +0 -9
- package/esm2022/scrolling/fixed-size-virtual-scroll.mjs +0 -218
- package/esm2022/scrolling/index.mjs +0 -9
- package/esm2022/scrolling/public-api.mjs +0 -20
- package/esm2022/scrolling/scroll-dispatcher.mjs +0 -163
- package/esm2022/scrolling/scrollable.mjs +0 -177
- package/esm2022/scrolling/scrolling-module.mjs +0 -69
- package/esm2022/scrolling/scrolling_public_index.mjs +0 -5
- package/esm2022/scrolling/viewport-ruler.mjs +0 -146
- package/esm2022/scrolling/virtual-for-of.mjs +0 -299
- package/esm2022/scrolling/virtual-scroll-repeater.mjs +0 -9
- package/esm2022/scrolling/virtual-scroll-strategy.mjs +0 -11
- package/esm2022/scrolling/virtual-scroll-viewport.mjs +0 -445
- package/esm2022/scrolling/virtual-scrollable-element.mjs +0 -42
- package/esm2022/scrolling/virtual-scrollable-window.mjs +0 -41
- package/esm2022/scrolling/virtual-scrollable.mjs +0 -40
- package/esm2022/stepper/index.mjs +0 -9
- package/esm2022/stepper/public-api.mjs +0 -13
- package/esm2022/stepper/step-header.mjs +0 -31
- package/esm2022/stepper/step-label.mjs +0 -24
- package/esm2022/stepper/stepper-button.mjs +0 -58
- package/esm2022/stepper/stepper-module.mjs +0 -41
- package/esm2022/stepper/stepper.mjs +0 -452
- package/esm2022/stepper/stepper_public_index.mjs +0 -5
- package/esm2022/table/can-stick.mjs +0 -46
- package/esm2022/table/cell.mjs +0 -245
- package/esm2022/table/coalesced-style-scheduler.mjs +0 -79
- package/esm2022/table/index.mjs +0 -9
- package/esm2022/table/public-api.mjs +0 -20
- package/esm2022/table/row.mjs +0 -317
- package/esm2022/table/sticky-position-listener.mjs +0 -11
- package/esm2022/table/sticky-styler.mjs +0 -347
- package/esm2022/table/table-errors.mjs +0 -67
- package/esm2022/table/table-module.mjs +0 -93
- package/esm2022/table/table.mjs +0 -1148
- package/esm2022/table/table_public_index.mjs +0 -5
- package/esm2022/table/text-column.mjs +0 -154
- package/esm2022/table/tokens.mjs +0 -16
- package/esm2022/testing/change-detection.mjs +0 -102
- package/esm2022/testing/component-harness.mjs +0 -328
- package/esm2022/testing/element-dimensions.mjs +0 -9
- package/esm2022/testing/harness-environment.mjs +0 -220
- package/esm2022/testing/index.mjs +0 -9
- package/esm2022/testing/public-api.mjs +0 -15
- package/esm2022/testing/selenium-webdriver/index.mjs +0 -9
- package/esm2022/testing/selenium-webdriver/public-api.mjs +0 -10
- package/esm2022/testing/selenium-webdriver/selenium-web-driver-element.mjs +0 -216
- package/esm2022/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +0 -88
- package/esm2022/testing/selenium-webdriver/selenium-webdriver-keys.mjs +0 -64
- package/esm2022/testing/test-element-errors.mjs +0 -15
- package/esm2022/testing/test-element.mjs +0 -49
- package/esm2022/testing/testbed/fake-events/dispatch-events.mjs +0 -53
- package/esm2022/testing/testbed/fake-events/element-focus.mjs +0 -39
- package/esm2022/testing/testbed/fake-events/event-objects.mjs +0 -127
- package/esm2022/testing/testbed/fake-events/index.mjs +0 -14
- package/esm2022/testing/testbed/fake-events/type-in-element.mjs +0 -97
- package/esm2022/testing/testbed/index.mjs +0 -9
- package/esm2022/testing/testbed/public-api.mjs +0 -10
- package/esm2022/testing/testbed/task-state-zone-interceptor.mjs +0 -82
- package/esm2022/testing/testbed/testbed-harness-environment.mjs +0 -165
- package/esm2022/testing/testbed/unit-test-element.mjs +0 -258
- package/esm2022/testing/text-filtering.mjs +0 -21
- package/esm2022/text-field/autofill.mjs +0 -114
- package/esm2022/text-field/autosize.mjs +0 -309
- package/esm2022/text-field/index.mjs +0 -9
- package/esm2022/text-field/public-api.mjs +0 -11
- package/esm2022/text-field/text-field-module.mjs +0 -24
- package/esm2022/text-field/text-field_public_index.mjs +0 -5
- package/esm2022/tree/control/base-tree-control.mjs +0 -62
- package/esm2022/tree/control/flat-tree-control.mjs +0 -57
- package/esm2022/tree/control/nested-tree-control.mjs +0 -67
- package/esm2022/tree/control/tree-control.mjs +0 -2
- package/esm2022/tree/index.mjs +0 -9
- package/esm2022/tree/nested-node.mjs +0 -103
- package/esm2022/tree/node.mjs +0 -36
- package/esm2022/tree/outlet.mjs +0 -40
- package/esm2022/tree/padding.mjs +0 -129
- package/esm2022/tree/public-api.mjs +0 -20
- package/esm2022/tree/toggle.mjs +0 -51
- package/esm2022/tree/tree-errors.mjs +0 -44
- package/esm2022/tree/tree-module.mjs +0 -49
- package/esm2022/tree/tree.mjs +0 -1123
- package/esm2022/tree/tree_public_index.mjs +0 -5
- package/esm2022/version.mjs +0 -11
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { getNoKeysSpecifiedError } from '@angular/cdk/testing';
|
|
9
|
-
import { PERIOD } from '@angular/cdk/keycodes';
|
|
10
|
-
import { dispatchFakeEvent, dispatchKeyboardEvent } from './dispatch-events';
|
|
11
|
-
import { triggerFocus } from './element-focus';
|
|
12
|
-
/** Input types for which the value can be entered incrementally. */
|
|
13
|
-
const incrementalInputTypes = new Set([
|
|
14
|
-
'text',
|
|
15
|
-
'email',
|
|
16
|
-
'hidden',
|
|
17
|
-
'password',
|
|
18
|
-
'search',
|
|
19
|
-
'tel',
|
|
20
|
-
'url',
|
|
21
|
-
]);
|
|
22
|
-
/**
|
|
23
|
-
* Checks whether the given Element is a text input element.
|
|
24
|
-
* @docs-private
|
|
25
|
-
*/
|
|
26
|
-
export function isTextInput(element) {
|
|
27
|
-
const nodeName = element.nodeName.toLowerCase();
|
|
28
|
-
return nodeName === 'input' || nodeName === 'textarea';
|
|
29
|
-
}
|
|
30
|
-
export function typeInElement(element, ...modifiersAndKeys) {
|
|
31
|
-
const first = modifiersAndKeys[0];
|
|
32
|
-
let modifiers;
|
|
33
|
-
let rest;
|
|
34
|
-
if (first !== undefined &&
|
|
35
|
-
typeof first !== 'string' &&
|
|
36
|
-
first.keyCode === undefined &&
|
|
37
|
-
first.key === undefined) {
|
|
38
|
-
modifiers = first;
|
|
39
|
-
rest = modifiersAndKeys.slice(1);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
modifiers = {};
|
|
43
|
-
rest = modifiersAndKeys;
|
|
44
|
-
}
|
|
45
|
-
const isInput = isTextInput(element);
|
|
46
|
-
const inputType = element.getAttribute('type') || 'text';
|
|
47
|
-
const keys = rest
|
|
48
|
-
.map(k => typeof k === 'string'
|
|
49
|
-
? k.split('').map(c => ({ keyCode: c.toUpperCase().charCodeAt(0), key: c }))
|
|
50
|
-
: [k])
|
|
51
|
-
.reduce((arr, k) => arr.concat(k), []);
|
|
52
|
-
// Throw an error if no keys have been specified. Calling this function with no
|
|
53
|
-
// keys should not result in a focus event being dispatched unexpectedly.
|
|
54
|
-
if (keys.length === 0) {
|
|
55
|
-
throw getNoKeysSpecifiedError();
|
|
56
|
-
}
|
|
57
|
-
// We simulate the user typing in a value by incrementally assigning the value below. The problem
|
|
58
|
-
// is that for some input types, the browser won't allow for an invalid value to be set via the
|
|
59
|
-
// `value` property which will always be the case when going character-by-character. If we detect
|
|
60
|
-
// such an input, we have to set the value all at once or listeners to the `input` event (e.g.
|
|
61
|
-
// the `ReactiveFormsModule` uses such an approach) won't receive the correct value.
|
|
62
|
-
const enterValueIncrementally = inputType === 'number'
|
|
63
|
-
? // The value can be set character by character in number inputs if it doesn't have any decimals.
|
|
64
|
-
keys.every(key => key.key !== '.' && key.key !== '-' && key.keyCode !== PERIOD)
|
|
65
|
-
: incrementalInputTypes.has(inputType);
|
|
66
|
-
triggerFocus(element);
|
|
67
|
-
// When we aren't entering the value incrementally, assign it all at once ahead
|
|
68
|
-
// of time so that any listeners to the key events below will have access to it.
|
|
69
|
-
if (!enterValueIncrementally) {
|
|
70
|
-
element.value = keys.reduce((value, key) => value + (key.key || ''), '');
|
|
71
|
-
}
|
|
72
|
-
for (const key of keys) {
|
|
73
|
-
dispatchKeyboardEvent(element, 'keydown', key.keyCode, key.key, modifiers);
|
|
74
|
-
dispatchKeyboardEvent(element, 'keypress', key.keyCode, key.key, modifiers);
|
|
75
|
-
if (isInput && key.key && key.key.length === 1) {
|
|
76
|
-
if (enterValueIncrementally) {
|
|
77
|
-
element.value += key.key;
|
|
78
|
-
dispatchFakeEvent(element, 'input');
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
dispatchKeyboardEvent(element, 'keyup', key.keyCode, key.key, modifiers);
|
|
82
|
-
}
|
|
83
|
-
// Since we weren't dispatching `input` events while sending the keys, we have to do it now.
|
|
84
|
-
if (!enterValueIncrementally) {
|
|
85
|
-
dispatchFakeEvent(element, 'input');
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Clears the text in an input or textarea element.
|
|
90
|
-
* @docs-private
|
|
91
|
-
*/
|
|
92
|
-
export function clearElement(element) {
|
|
93
|
-
triggerFocus(element);
|
|
94
|
-
element.value = '';
|
|
95
|
-
dispatchFakeEvent(element, 'input');
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1pbi1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Rlc3RiZWQvZmFrZS1ldmVudHMvdHlwZS1pbi1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyx1QkFBdUIsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0Msb0VBQW9FO0FBQ3BFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEMsTUFBTTtJQUNOLE9BQU87SUFDUCxRQUFRO0lBQ1IsVUFBVTtJQUNWLFFBQVE7SUFDUixLQUFLO0lBQ0wsS0FBSztDQUNOLENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoRCxPQUFPLFFBQVEsS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLFVBQVUsQ0FBQztBQUN6RCxDQUFDO0FBNEJELE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBb0IsRUFBRSxHQUFHLGdCQUF1QjtJQUM1RSxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLFNBQXVCLENBQUM7SUFDNUIsSUFBSSxJQUFtRCxDQUFDO0lBQ3hELElBQ0UsS0FBSyxLQUFLLFNBQVM7UUFDbkIsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7UUFD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QUUsT0FBTyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFDRCxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsNEZBQTRGO0lBQzVGLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQzdCLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBK0M7SUFDMUUsWUFBWSxDQUFDLE9BQXNCLENBQUMsQ0FBQztJQUNyQyxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNuQixpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2dldE5vS2V5c1NwZWNpZmllZEVycm9yLCBNb2RpZmllcktleXN9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7UEVSSU9EfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtkaXNwYXRjaEZha2VFdmVudCwgZGlzcGF0Y2hLZXlib2FyZEV2ZW50fSBmcm9tICcuL2Rpc3BhdGNoLWV2ZW50cyc7XG5pbXBvcnQge3RyaWdnZXJGb2N1c30gZnJvbSAnLi9lbGVtZW50LWZvY3VzJztcblxuLyoqIElucHV0IHR5cGVzIGZvciB3aGljaCB0aGUgdmFsdWUgY2FuIGJlIGVudGVyZWQgaW5jcmVtZW50YWxseS4gKi9cbmNvbnN0IGluY3JlbWVudGFsSW5wdXRUeXBlcyA9IG5ldyBTZXQoW1xuICAndGV4dCcsXG4gICdlbWFpbCcsXG4gICdoaWRkZW4nLFxuICAncGFzc3dvcmQnLFxuICAnc2VhcmNoJyxcbiAgJ3RlbCcsXG4gICd1cmwnLFxuXSk7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIEVsZW1lbnQgaXMgYSB0ZXh0IGlucHV0IGVsZW1lbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RleHRJbnB1dChlbGVtZW50OiBFbGVtZW50KTogZWxlbWVudCBpcyBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB7XG4gIGNvbnN0IG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdpbnB1dCcgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYSc7XG59XG5cbi8qKlxuICogSWYga2V5cyBoYXZlIGJlZW4gc3BlY2lmaWVkLCBmb2N1c2VzIGFuIGlucHV0LCBzZXRzIGl0cyB2YWx1ZSBhbmQgZGlzcGF0Y2hlc1xuICogdGhlIGBpbnB1dGAgZXZlbnQsIHNpbXVsYXRpbmcgdGhlIHVzZXIgdHlwaW5nLlxuICogQHBhcmFtIGVsZW1lbnQgRWxlbWVudCBvbnRvIHdoaWNoIHRvIHNldCB0aGUgdmFsdWUuXG4gKiBAcGFyYW0ga2V5cyBUaGUga2V5cyB0byBzZW5kIHRvIHRoZSBlbGVtZW50LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUluRWxlbWVudChcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIC4uLmtleXM6IChzdHJpbmcgfCB7a2V5Q29kZT86IG51bWJlcjsga2V5Pzogc3RyaW5nfSlbXVxuKTogdm9pZDtcblxuLyoqXG4gKiBJZiBrZXlzIGhhdmUgYmVlbiBzcGVjaWZpZWQsIGZvY3VzZXMgYW4gaW5wdXQsIHNldHMgaXRzIHZhbHVlIGFuZCBkaXNwYXRjaGVzXG4gKiB0aGUgYGlucHV0YCBldmVudCwgc2ltdWxhdGluZyB0aGUgdXNlciB0eXBpbmcuXG4gKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IG9udG8gd2hpY2ggdG8gc2V0IHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBtb2RpZmllcnMgTW9kaWZpZXIga2V5cyB0aGF0IGFyZSBoZWxkIHdoaWxlIHR5cGluZy5cbiAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIHNlbmQgdG8gdGhlIGVsZW1lbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlSW5FbGVtZW50KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgbW9kaWZpZXJzOiBNb2RpZmllcktleXMsXG4gIC4uLmtleXM6IChzdHJpbmcgfCB7a2V5Q29kZT86IG51bWJlcjsga2V5Pzogc3RyaW5nfSlbXVxuKTogdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVJbkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIC4uLm1vZGlmaWVyc0FuZEtleXM6IGFueVtdKSB7XG4gIGNvbnN0IGZpcnN0ID0gbW9kaWZpZXJzQW5kS2V5c1swXTtcbiAgbGV0IG1vZGlmaWVyczogTW9kaWZpZXJLZXlzO1xuICBsZXQgcmVzdDogKHN0cmluZyB8IHtrZXlDb2RlPzogbnVtYmVyOyBrZXk/OiBzdHJpbmd9KVtdO1xuICBpZiAoXG4gICAgZmlyc3QgIT09IHVuZGVmaW5lZCAmJlxuICAgIHR5cGVvZiBmaXJzdCAhPT0gJ3N0cmluZycgJiZcbiAgICBmaXJzdC5rZXlDb2RlID09PSB1bmRlZmluZWQgJiZcbiAgICBmaXJzdC5rZXkgPT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBtb2RpZmllcnMgPSBmaXJzdDtcbiAgICByZXN0ID0gbW9kaWZpZXJzQW5kS2V5cy5zbGljZSgxKTtcbiAgfSBlbHNlIHtcbiAgICBtb2RpZmllcnMgPSB7fTtcbiAgICByZXN0ID0gbW9kaWZpZXJzQW5kS2V5cztcbiAgfVxuICBjb25zdCBpc0lucHV0ID0gaXNUZXh0SW5wdXQoZWxlbWVudCk7XG4gIGNvbnN0IGlucHV0VHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0eXBlJykgfHwgJ3RleHQnO1xuICBjb25zdCBrZXlzOiB7a2V5Q29kZT86IG51bWJlcjsga2V5Pzogc3RyaW5nfVtdID0gcmVzdFxuICAgIC5tYXAoayA9PlxuICAgICAgdHlwZW9mIGsgPT09ICdzdHJpbmcnXG4gICAgICAgID8gay5zcGxpdCgnJykubWFwKGMgPT4gKHtrZXlDb2RlOiBjLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSwga2V5OiBjfSkpXG4gICAgICAgIDogW2tdLFxuICAgIClcbiAgICAucmVkdWNlKChhcnIsIGspID0+IGFyci5jb25jYXQoayksIFtdKTtcblxuICAvLyBUaHJvdyBhbiBlcnJvciBpZiBubyBrZXlzIGhhdmUgYmVlbiBzcGVjaWZpZWQuIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIG5vXG4gIC8vIGtleXMgc2hvdWxkIG5vdCByZXN1bHQgaW4gYSBmb2N1cyBldmVudCBiZWluZyBkaXNwYXRjaGVkIHVuZXhwZWN0ZWRseS5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgZ2V0Tm9LZXlzU3BlY2lmaWVkRXJyb3IoKTtcbiAgfVxuXG4gIC8vIFdlIHNpbXVsYXRlIHRoZSB1c2VyIHR5cGluZyBpbiBhIHZhbHVlIGJ5IGluY3JlbWVudGFsbHkgYXNzaWduaW5nIHRoZSB2YWx1ZSBiZWxvdy4gVGhlIHByb2JsZW1cbiAgLy8gaXMgdGhhdCBmb3Igc29tZSBpbnB1dCB0eXBlcywgdGhlIGJyb3dzZXIgd29uJ3QgYWxsb3cgZm9yIGFuIGludmFsaWQgdmFsdWUgdG8gYmUgc2V0IHZpYSB0aGVcbiAgLy8gYHZhbHVlYCBwcm9wZXJ0eSB3aGljaCB3aWxsIGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVuIGdvaW5nIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIuIElmIHdlIGRldGVjdFxuICAvLyBzdWNoIGFuIGlucHV0LCB3ZSBoYXZlIHRvIHNldCB0aGUgdmFsdWUgYWxsIGF0IG9uY2Ugb3IgbGlzdGVuZXJzIHRvIHRoZSBgaW5wdXRgIGV2ZW50IChlLmcuXG4gIC8vIHRoZSBgUmVhY3RpdmVGb3Jtc01vZHVsZWAgdXNlcyBzdWNoIGFuIGFwcHJvYWNoKSB3b24ndCByZWNlaXZlIHRoZSBjb3JyZWN0IHZhbHVlLlxuICBjb25zdCBlbnRlclZhbHVlSW5jcmVtZW50YWxseSA9XG4gICAgaW5wdXRUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgPyAvLyBUaGUgdmFsdWUgY2FuIGJlIHNldCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyIGluIG51bWJlciBpbnB1dHMgaWYgaXQgZG9lc24ndCBoYXZlIGFueSBkZWNpbWFscy5cbiAgICAgICAga2V5cy5ldmVyeShrZXkgPT4ga2V5LmtleSAhPT0gJy4nICYmIGtleS5rZXkgIT09ICctJyAmJiBrZXkua2V5Q29kZSAhPT0gUEVSSU9EKVxuICAgICAgOiBpbmNyZW1lbnRhbElucHV0VHlwZXMuaGFzKGlucHV0VHlwZSk7XG5cbiAgdHJpZ2dlckZvY3VzKGVsZW1lbnQpO1xuXG4gIC8vIFdoZW4gd2UgYXJlbid0IGVudGVyaW5nIHRoZSB2YWx1ZSBpbmNyZW1lbnRhbGx5LCBhc3NpZ24gaXQgYWxsIGF0IG9uY2UgYWhlYWRcbiAgLy8gb2YgdGltZSBzbyB0aGF0IGFueSBsaXN0ZW5lcnMgdG8gdGhlIGtleSBldmVudHMgYmVsb3cgd2lsbCBoYXZlIGFjY2VzcyB0byBpdC5cbiAgaWYgKCFlbnRlclZhbHVlSW5jcmVtZW50YWxseSkge1xuICAgIChlbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0ga2V5cy5yZWR1Y2UoKHZhbHVlLCBrZXkpID0+IHZhbHVlICsgKGtleS5rZXkgfHwgJycpLCAnJyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgZGlzcGF0Y2hLZXlib2FyZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywga2V5LmtleUNvZGUsIGtleS5rZXksIG1vZGlmaWVycyk7XG4gICAgZGlzcGF0Y2hLZXlib2FyZEV2ZW50KGVsZW1lbnQsICdrZXlwcmVzcycsIGtleS5rZXlDb2RlLCBrZXkua2V5LCBtb2RpZmllcnMpO1xuICAgIGlmIChpc0lucHV0ICYmIGtleS5rZXkgJiYga2V5LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChlbnRlclZhbHVlSW5jcmVtZW50YWxseSkge1xuICAgICAgICAoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUgKz0ga2V5LmtleTtcbiAgICAgICAgZGlzcGF0Y2hGYWtlRXZlbnQoZWxlbWVudCwgJ2lucHV0Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGRpc3BhdGNoS2V5Ym9hcmRFdmVudChlbGVtZW50LCAna2V5dXAnLCBrZXkua2V5Q29kZSwga2V5LmtleSwgbW9kaWZpZXJzKTtcbiAgfVxuXG4gIC8vIFNpbmNlIHdlIHdlcmVuJ3QgZGlzcGF0Y2hpbmcgYGlucHV0YCBldmVudHMgd2hpbGUgc2VuZGluZyB0aGUga2V5cywgd2UgaGF2ZSB0byBkbyBpdCBub3cuXG4gIGlmICghZW50ZXJWYWx1ZUluY3JlbWVudGFsbHkpIHtcbiAgICBkaXNwYXRjaEZha2VFdmVudChlbGVtZW50LCAnaW5wdXQnKTtcbiAgfVxufVxuXG4vKipcbiAqIENsZWFycyB0aGUgdGV4dCBpbiBhbiBpbnB1dCBvciB0ZXh0YXJlYSBlbGVtZW50LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFbGVtZW50KGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gIHRyaWdnZXJGb2N1cyhlbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICBkaXNwYXRjaEZha2VFdmVudChlbGVtZW50LCAnaW5wdXQnKTtcbn1cbiJdfQ==
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
export * from './public-api';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3Rlc3RpbmcvdGVzdGJlZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
export * from './testbed-harness-environment';
|
|
9
|
-
export * from './unit-test-element';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvdGVzdGluZy90ZXN0YmVkL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vdGVzdGJlZC1oYXJuZXNzLWVudmlyb25tZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdW5pdC10ZXN0LWVsZW1lbnQnO1xuIl19
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { BehaviorSubject } from 'rxjs';
|
|
9
|
-
/** Unique symbol that is used to patch a property to a proxy zone. */
|
|
10
|
-
const stateObservableSymbol = Symbol('ProxyZone_PATCHED#stateObservable');
|
|
11
|
-
/**
|
|
12
|
-
* Interceptor that can be set up in a `ProxyZone` instance. The interceptor
|
|
13
|
-
* will keep track of the task state and emit whenever the state changes.
|
|
14
|
-
*
|
|
15
|
-
* This serves as a workaround for https://github.com/angular/angular/issues/32896.
|
|
16
|
-
*/
|
|
17
|
-
export class TaskStateZoneInterceptor {
|
|
18
|
-
constructor(_lastState) {
|
|
19
|
-
this._lastState = _lastState;
|
|
20
|
-
/** Subject that can be used to emit a new state change. */
|
|
21
|
-
this._stateSubject = new BehaviorSubject(this._lastState ? this._getTaskStateFromInternalZoneState(this._lastState) : { stable: true });
|
|
22
|
-
/** Public observable that emits whenever the task state changes. */
|
|
23
|
-
this.state = this._stateSubject;
|
|
24
|
-
}
|
|
25
|
-
/** This will be called whenever the task state changes in the intercepted zone. */
|
|
26
|
-
onHasTask(delegate, current, target, hasTaskState) {
|
|
27
|
-
if (current === target) {
|
|
28
|
-
this._stateSubject.next(this._getTaskStateFromInternalZoneState(hasTaskState));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/** Gets the task state from the internal ZoneJS task state. */
|
|
32
|
-
_getTaskStateFromInternalZoneState(state) {
|
|
33
|
-
return { stable: !state.macroTask && !state.microTask };
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Sets up the custom task state Zone interceptor in the `ProxyZone`. Throws if
|
|
37
|
-
* no `ProxyZone` could be found.
|
|
38
|
-
* @returns an observable that emits whenever the task state changes.
|
|
39
|
-
*/
|
|
40
|
-
static setup() {
|
|
41
|
-
if (Zone === undefined) {
|
|
42
|
-
throw Error('Could not find ZoneJS. For test harnesses running in TestBed, ' +
|
|
43
|
-
'ZoneJS needs to be installed.');
|
|
44
|
-
}
|
|
45
|
-
// tslint:disable-next-line:variable-name
|
|
46
|
-
const ProxyZoneSpec = Zone['ProxyZoneSpec'];
|
|
47
|
-
// If there is no "ProxyZoneSpec" installed, we throw an error and recommend
|
|
48
|
-
// setting up the proxy zone by pulling in the testing bundle.
|
|
49
|
-
if (!ProxyZoneSpec) {
|
|
50
|
-
throw Error('ProxyZoneSpec is needed for the test harnesses but could not be found. ' +
|
|
51
|
-
'Please make sure that your environment includes zone.js/dist/zone-testing.js');
|
|
52
|
-
}
|
|
53
|
-
// Ensure that there is a proxy zone instance set up, and get
|
|
54
|
-
// a reference to the instance if present.
|
|
55
|
-
const zoneSpec = ProxyZoneSpec.assertPresent();
|
|
56
|
-
// If there already is a delegate registered in the proxy zone, and it
|
|
57
|
-
// is type of the custom task state interceptor, we just use that state
|
|
58
|
-
// observable. This allows us to only intercept Zone once per test
|
|
59
|
-
// (similar to how `fakeAsync` or `async` work).
|
|
60
|
-
if (zoneSpec[stateObservableSymbol]) {
|
|
61
|
-
return zoneSpec[stateObservableSymbol];
|
|
62
|
-
}
|
|
63
|
-
// Since we intercept on environment creation and the fixture has been
|
|
64
|
-
// created before, we might have missed tasks scheduled before. Fortunately
|
|
65
|
-
// the proxy zone keeps track of the previous task state, so we can just pass
|
|
66
|
-
// this as initial state to the task zone interceptor.
|
|
67
|
-
const interceptor = new TaskStateZoneInterceptor(zoneSpec.lastTaskState);
|
|
68
|
-
const zoneSpecOnHasTask = zoneSpec.onHasTask.bind(zoneSpec);
|
|
69
|
-
// We setup the task state interceptor in the `ProxyZone`. Note that we cannot register
|
|
70
|
-
// the interceptor as a new proxy zone delegate because it would mean that other zone
|
|
71
|
-
// delegates (e.g. `FakeAsyncTestZone` or `AsyncTestZone`) can accidentally overwrite/disable
|
|
72
|
-
// our interceptor. Since we just intend to monitor the task state of the proxy zone, it is
|
|
73
|
-
// sufficient to just patch the proxy zone. This also avoids that we interfere with the task
|
|
74
|
-
// queue scheduling logic.
|
|
75
|
-
zoneSpec.onHasTask = function (...args) {
|
|
76
|
-
zoneSpecOnHasTask(...args);
|
|
77
|
-
interceptor.onHasTask(...args);
|
|
78
|
-
};
|
|
79
|
-
return (zoneSpec[stateObservableSymbol] = interceptor.state);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1zdGF0ZS16b25lLWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Rlc3RiZWQvdGFzay1zdGF0ZS16b25lLWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFTakQsc0VBQXNFO0FBQ3RFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFPMUU7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBU25DLFlBQW9CLFVBQStCO1FBQS9CLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBUm5ELDJEQUEyRDtRQUMxQyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FDNUYsQ0FBQztRQUVGLG9FQUFvRTtRQUMzRCxVQUFLLEdBQTBCLElBQUksQ0FBQyxhQUFhLENBQUM7SUFFTCxDQUFDO0lBRXZELG1GQUFtRjtJQUNuRixTQUFTLENBQUMsUUFBc0IsRUFBRSxPQUFhLEVBQUUsTUFBWSxFQUFFLFlBQTBCO1FBQ3ZGLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRUQsK0RBQStEO0lBQ3ZELGtDQUFrQyxDQUFDLEtBQW1CO1FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUs7UUFDVixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixNQUFNLEtBQUssQ0FDVCxnRUFBZ0U7Z0JBQzlELCtCQUErQixDQUNsQyxDQUFDO1FBQ0osQ0FBQztRQUVELHlDQUF5QztRQUN6QyxNQUFNLGFBQWEsR0FBSSxJQUFZLENBQUMsZUFBZSxDQUFnQyxDQUFDO1FBRXBGLDRFQUE0RTtRQUM1RSw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sS0FBSyxDQUNULHlFQUF5RTtnQkFDdkUsOEVBQThFLENBQ2pGLENBQUM7UUFDSixDQUFDO1FBRUQsNkRBQTZEO1FBQzdELDBDQUEwQztRQUMxQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsYUFBYSxFQUFzQixDQUFDO1FBRW5FLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsa0VBQWtFO1FBQ2xFLGdEQUFnRDtRQUNoRCxJQUFJLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxRQUFRLENBQUMscUJBQXFCLENBQUUsQ0FBQztRQUMxQyxDQUFDO1FBRUQsc0VBQXNFO1FBQ3RFLDJFQUEyRTtRQUMzRSw2RUFBNkU7UUFDN0Usc0RBQXNEO1FBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUQsdUZBQXVGO1FBQ3ZGLHFGQUFxRjtRQUNyRiw2RkFBNkY7UUFDN0YsMkZBQTJGO1FBQzNGLDRGQUE0RjtRQUM1RiwwQkFBMEI7UUFDMUIsUUFBUSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsSUFBOEM7WUFDOUUsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzQixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtQcm94eVpvbmUsIFByb3h5Wm9uZVN0YXRpY30gZnJvbSAnLi9wcm94eS16b25lLXR5cGVzJztcblxuLyoqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGludGVyY2VwdGVkIHpvbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tTdGF0ZSB7XG4gIC8qKiBXaGV0aGVyIHRoZSB6b25lIGlzIHN0YWJsZSAoaS5lLiBubyBtaWNyb3Rhc2tzIGFuZCBtYWNyb3Rhc2tzKS4gKi9cbiAgc3RhYmxlOiBib29sZWFuO1xufVxuXG4vKiogVW5pcXVlIHN5bWJvbCB0aGF0IGlzIHVzZWQgdG8gcGF0Y2ggYSBwcm9wZXJ0eSB0byBhIHByb3h5IHpvbmUuICovXG5jb25zdCBzdGF0ZU9ic2VydmFibGVTeW1ib2wgPSBTeW1ib2woJ1Byb3h5Wm9uZV9QQVRDSEVEI3N0YXRlT2JzZXJ2YWJsZScpO1xuXG4vKiogVHlwZSB0aGF0IGRlc2NyaWJlcyBhIHBvdGVudGlhbGx5IHBhdGNoZWQgcHJveHkgem9uZSBpbnN0YW5jZS4gKi9cbnR5cGUgUGF0Y2hlZFByb3h5Wm9uZSA9IFByb3h5Wm9uZSAmIHtcbiAgW3N0YXRlT2JzZXJ2YWJsZVN5bWJvbF06IHVuZGVmaW5lZCB8IE9ic2VydmFibGU8VGFza1N0YXRlPjtcbn07XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgdGhhdCBjYW4gYmUgc2V0IHVwIGluIGEgYFByb3h5Wm9uZWAgaW5zdGFuY2UuIFRoZSBpbnRlcmNlcHRvclxuICogd2lsbCBrZWVwIHRyYWNrIG9mIHRoZSB0YXNrIHN0YXRlIGFuZCBlbWl0IHdoZW5ldmVyIHRoZSBzdGF0ZSBjaGFuZ2VzLlxuICpcbiAqIFRoaXMgc2VydmVzIGFzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMzI4OTYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXNrU3RhdGVab25lSW50ZXJjZXB0b3Ige1xuICAvKiogU3ViamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGVtaXQgYSBuZXcgc3RhdGUgY2hhbmdlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhc2tTdGF0ZT4oXG4gICAgdGhpcy5fbGFzdFN0YXRlID8gdGhpcy5fZ2V0VGFza1N0YXRlRnJvbUludGVybmFsWm9uZVN0YXRlKHRoaXMuX2xhc3RTdGF0ZSkgOiB7c3RhYmxlOiB0cnVlfSxcbiAgKTtcblxuICAvKiogUHVibGljIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuZXZlciB0aGUgdGFzayBzdGF0ZSBjaGFuZ2VzLiAqL1xuICByZWFkb25seSBzdGF0ZTogT2JzZXJ2YWJsZTxUYXNrU3RhdGU+ID0gdGhpcy5fc3RhdGVTdWJqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xhc3RTdGF0ZTogSGFzVGFza1N0YXRlIHwgbnVsbCkge31cblxuICAvKiogVGhpcyB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgdGFzayBzdGF0ZSBjaGFuZ2VzIGluIHRoZSBpbnRlcmNlcHRlZCB6b25lLiAqL1xuICBvbkhhc1Rhc2soZGVsZWdhdGU6IFpvbmVEZWxlZ2F0ZSwgY3VycmVudDogWm9uZSwgdGFyZ2V0OiBab25lLCBoYXNUYXNrU3RhdGU6IEhhc1Rhc2tTdGF0ZSkge1xuICAgIGlmIChjdXJyZW50ID09PSB0YXJnZXQpIHtcbiAgICAgIHRoaXMuX3N0YXRlU3ViamVjdC5uZXh0KHRoaXMuX2dldFRhc2tTdGF0ZUZyb21JbnRlcm5hbFpvbmVTdGF0ZShoYXNUYXNrU3RhdGUpKTtcbiAgICB9XG4gIH1cblxuICAvKiogR2V0cyB0aGUgdGFzayBzdGF0ZSBmcm9tIHRoZSBpbnRlcm5hbCBab25lSlMgdGFzayBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSBfZ2V0VGFza1N0YXRlRnJvbUludGVybmFsWm9uZVN0YXRlKHN0YXRlOiBIYXNUYXNrU3RhdGUpOiBUYXNrU3RhdGUge1xuICAgIHJldHVybiB7c3RhYmxlOiAhc3RhdGUubWFjcm9UYXNrICYmICFzdGF0ZS5taWNyb1Rhc2t9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGN1c3RvbSB0YXNrIHN0YXRlIFpvbmUgaW50ZXJjZXB0b3IgaW4gdGhlICBgUHJveHlab25lYC4gVGhyb3dzIGlmXG4gICAqIG5vIGBQcm94eVpvbmVgIGNvdWxkIGJlIGZvdW5kLlxuICAgKiBAcmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIHRhc2sgc3RhdGUgY2hhbmdlcy5cbiAgICovXG4gIHN0YXRpYyBzZXR1cCgpOiBPYnNlcnZhYmxlPFRhc2tTdGF0ZT4ge1xuICAgIGlmIChab25lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgWm9uZUpTLiBGb3IgdGVzdCBoYXJuZXNzZXMgcnVubmluZyBpbiBUZXN0QmVkLCAnICtcbiAgICAgICAgICAnWm9uZUpTIG5lZWRzIHRvIGJlIGluc3RhbGxlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIGNvbnN0IFByb3h5Wm9uZVNwZWMgPSAoWm9uZSBhcyBhbnkpWydQcm94eVpvbmVTcGVjJ10gYXMgUHJveHlab25lU3RhdGljIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gXCJQcm94eVpvbmVTcGVjXCIgaW5zdGFsbGVkLCB3ZSB0aHJvdyBhbiBlcnJvciBhbmQgcmVjb21tZW5kXG4gICAgLy8gc2V0dGluZyB1cCB0aGUgcHJveHkgem9uZSBieSBwdWxsaW5nIGluIHRoZSB0ZXN0aW5nIGJ1bmRsZS5cbiAgICBpZiAoIVByb3h5Wm9uZVNwZWMpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnUHJveHlab25lU3BlYyBpcyBuZWVkZWQgZm9yIHRoZSB0ZXN0IGhhcm5lc3NlcyBidXQgY291bGQgbm90IGJlIGZvdW5kLiAnICtcbiAgICAgICAgICAnUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdXIgZW52aXJvbm1lbnQgaW5jbHVkZXMgem9uZS5qcy9kaXN0L3pvbmUtdGVzdGluZy5qcycsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgcHJveHkgem9uZSBpbnN0YW5jZSBzZXQgdXAsIGFuZCBnZXRcbiAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2UgaWYgcHJlc2VudC5cbiAgICBjb25zdCB6b25lU3BlYyA9IFByb3h5Wm9uZVNwZWMuYXNzZXJ0UHJlc2VudCgpIGFzIFBhdGNoZWRQcm94eVpvbmU7XG5cbiAgICAvLyBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgZGVsZWdhdGUgcmVnaXN0ZXJlZCBpbiB0aGUgcHJveHkgem9uZSwgYW5kIGl0XG4gICAgLy8gaXMgdHlwZSBvZiB0aGUgY3VzdG9tIHRhc2sgc3RhdGUgaW50ZXJjZXB0b3IsIHdlIGp1c3QgdXNlIHRoYXQgc3RhdGVcbiAgICAvLyBvYnNlcnZhYmxlLiBUaGlzIGFsbG93cyB1cyB0byBvbmx5IGludGVyY2VwdCBab25lIG9uY2UgcGVyIHRlc3RcbiAgICAvLyAoc2ltaWxhciB0byBob3cgYGZha2VBc3luY2Agb3IgYGFzeW5jYCB3b3JrKS5cbiAgICBpZiAoem9uZVNwZWNbc3RhdGVPYnNlcnZhYmxlU3ltYm9sXSkge1xuICAgICAgcmV0dXJuIHpvbmVTcGVjW3N0YXRlT2JzZXJ2YWJsZVN5bWJvbF0hO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHdlIGludGVyY2VwdCBvbiBlbnZpcm9ubWVudCBjcmVhdGlvbiBhbmQgdGhlIGZpeHR1cmUgaGFzIGJlZW5cbiAgICAvLyBjcmVhdGVkIGJlZm9yZSwgd2UgbWlnaHQgaGF2ZSBtaXNzZWQgdGFza3Mgc2NoZWR1bGVkIGJlZm9yZS4gRm9ydHVuYXRlbHlcbiAgICAvLyB0aGUgcHJveHkgem9uZSBrZWVwcyB0cmFjayBvZiB0aGUgcHJldmlvdXMgdGFzayBzdGF0ZSwgc28gd2UgY2FuIGp1c3QgcGFzc1xuICAgIC8vIHRoaXMgYXMgaW5pdGlhbCBzdGF0ZSB0byB0aGUgdGFzayB6b25lIGludGVyY2VwdG9yLlxuICAgIGNvbnN0IGludGVyY2VwdG9yID0gbmV3IFRhc2tTdGF0ZVpvbmVJbnRlcmNlcHRvcih6b25lU3BlYy5sYXN0VGFza1N0YXRlKTtcbiAgICBjb25zdCB6b25lU3BlY09uSGFzVGFzayA9IHpvbmVTcGVjLm9uSGFzVGFzay5iaW5kKHpvbmVTcGVjKTtcblxuICAgIC8vIFdlIHNldHVwIHRoZSB0YXNrIHN0YXRlIGludGVyY2VwdG9yIGluIHRoZSBgUHJveHlab25lYC4gTm90ZSB0aGF0IHdlIGNhbm5vdCByZWdpc3RlclxuICAgIC8vIHRoZSBpbnRlcmNlcHRvciBhcyBhIG5ldyBwcm94eSB6b25lIGRlbGVnYXRlIGJlY2F1c2UgaXQgd291bGQgbWVhbiB0aGF0IG90aGVyIHpvbmVcbiAgICAvLyBkZWxlZ2F0ZXMgKGUuZy4gYEZha2VBc3luY1Rlc3Rab25lYCBvciBgQXN5bmNUZXN0Wm9uZWApIGNhbiBhY2NpZGVudGFsbHkgb3ZlcndyaXRlL2Rpc2FibGVcbiAgICAvLyBvdXIgaW50ZXJjZXB0b3IuIFNpbmNlIHdlIGp1c3QgaW50ZW5kIHRvIG1vbml0b3IgdGhlIHRhc2sgc3RhdGUgb2YgdGhlIHByb3h5IHpvbmUsIGl0IGlzXG4gICAgLy8gc3VmZmljaWVudCB0byBqdXN0IHBhdGNoIHRoZSBwcm94eSB6b25lLiBUaGlzIGFsc28gYXZvaWRzIHRoYXQgd2UgaW50ZXJmZXJlIHdpdGggdGhlIHRhc2tcbiAgICAvLyBxdWV1ZSBzY2hlZHVsaW5nIGxvZ2ljLlxuICAgIHpvbmVTcGVjLm9uSGFzVGFzayA9IGZ1bmN0aW9uICguLi5hcmdzOiBbWm9uZURlbGVnYXRlLCBab25lLCBab25lLCBIYXNUYXNrU3RhdGVdKSB7XG4gICAgICB6b25lU3BlY09uSGFzVGFzayguLi5hcmdzKTtcbiAgICAgIGludGVyY2VwdG9yLm9uSGFzVGFzayguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuICh6b25lU3BlY1tzdGF0ZU9ic2VydmFibGVTeW1ib2xdID0gaW50ZXJjZXB0b3Iuc3RhdGUpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { handleAutoChangeDetectionStatus, HarnessEnvironment, stopHandlingAutoChangeDetectionStatus, } from '@angular/cdk/testing';
|
|
9
|
-
import { flush } from '@angular/core/testing';
|
|
10
|
-
import { takeWhile } from 'rxjs/operators';
|
|
11
|
-
import { TaskStateZoneInterceptor } from './task-state-zone-interceptor';
|
|
12
|
-
import { UnitTestElement } from './unit-test-element';
|
|
13
|
-
/** The default environment options. */
|
|
14
|
-
const defaultEnvironmentOptions = {
|
|
15
|
-
queryFn: (selector, root) => root.querySelectorAll(selector),
|
|
16
|
-
};
|
|
17
|
-
/** Whether auto change detection is currently disabled. */
|
|
18
|
-
let disableAutoChangeDetection = false;
|
|
19
|
-
/**
|
|
20
|
-
* The set of non-destroyed fixtures currently being used by `TestbedHarnessEnvironment` instances.
|
|
21
|
-
*/
|
|
22
|
-
const activeFixtures = new Set();
|
|
23
|
-
/**
|
|
24
|
-
* Installs a handler for change detection batching status changes for a specific fixture.
|
|
25
|
-
* @param fixture The fixture to handle change detection batching for.
|
|
26
|
-
*/
|
|
27
|
-
function installAutoChangeDetectionStatusHandler(fixture) {
|
|
28
|
-
if (!activeFixtures.size) {
|
|
29
|
-
handleAutoChangeDetectionStatus(({ isDisabled, onDetectChangesNow }) => {
|
|
30
|
-
disableAutoChangeDetection = isDisabled;
|
|
31
|
-
if (onDetectChangesNow) {
|
|
32
|
-
Promise.all(Array.from(activeFixtures).map(detectChanges)).then(onDetectChangesNow);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
activeFixtures.add(fixture);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Uninstalls a handler for change detection batching status changes for a specific fixture.
|
|
40
|
-
* @param fixture The fixture to stop handling change detection batching for.
|
|
41
|
-
*/
|
|
42
|
-
function uninstallAutoChangeDetectionStatusHandler(fixture) {
|
|
43
|
-
activeFixtures.delete(fixture);
|
|
44
|
-
if (!activeFixtures.size) {
|
|
45
|
-
stopHandlingAutoChangeDetectionStatus();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/** Whether we are currently in the fake async zone. */
|
|
49
|
-
function isInFakeAsyncZone() {
|
|
50
|
-
return typeof Zone !== 'undefined' && Zone.current.get('FakeAsyncTestZoneSpec') != null;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Triggers change detection for a specific fixture.
|
|
54
|
-
* @param fixture The fixture to trigger change detection for.
|
|
55
|
-
*/
|
|
56
|
-
async function detectChanges(fixture) {
|
|
57
|
-
fixture.detectChanges();
|
|
58
|
-
if (isInFakeAsyncZone()) {
|
|
59
|
-
flush();
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
await fixture.whenStable();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/** A `HarnessEnvironment` implementation for Angular's Testbed. */
|
|
66
|
-
export class TestbedHarnessEnvironment extends HarnessEnvironment {
|
|
67
|
-
constructor(rawRootElement, _fixture, options) {
|
|
68
|
-
super(rawRootElement);
|
|
69
|
-
this._fixture = _fixture;
|
|
70
|
-
/** Whether the environment has been destroyed. */
|
|
71
|
-
this._destroyed = false;
|
|
72
|
-
this._options = { ...defaultEnvironmentOptions, ...options };
|
|
73
|
-
if (typeof Zone !== 'undefined') {
|
|
74
|
-
this._taskState = TaskStateZoneInterceptor.setup();
|
|
75
|
-
}
|
|
76
|
-
this._stabilizeCallback = () => this.forceStabilize();
|
|
77
|
-
installAutoChangeDetectionStatusHandler(_fixture);
|
|
78
|
-
_fixture.componentRef.onDestroy(() => {
|
|
79
|
-
uninstallAutoChangeDetectionStatusHandler(_fixture);
|
|
80
|
-
this._destroyed = true;
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
/** Creates a `HarnessLoader` rooted at the given fixture's root element. */
|
|
84
|
-
static loader(fixture, options) {
|
|
85
|
-
return new TestbedHarnessEnvironment(fixture.nativeElement, fixture, options);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Creates a `HarnessLoader` at the document root. This can be used if harnesses are
|
|
89
|
-
* located outside of a fixture (e.g. overlays appended to the document body).
|
|
90
|
-
*/
|
|
91
|
-
static documentRootLoader(fixture, options) {
|
|
92
|
-
return new TestbedHarnessEnvironment(document.body, fixture, options);
|
|
93
|
-
}
|
|
94
|
-
/** Gets the native DOM element corresponding to the given TestElement. */
|
|
95
|
-
static getNativeElement(el) {
|
|
96
|
-
if (el instanceof UnitTestElement) {
|
|
97
|
-
return el.element;
|
|
98
|
-
}
|
|
99
|
-
throw Error('This TestElement was not created by the TestbedHarnessEnvironment');
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Creates an instance of the given harness type, using the fixture's root element as the
|
|
103
|
-
* harness's host element. This method should be used when creating a harness for the root element
|
|
104
|
-
* of a fixture, as components do not have the correct selector when they are created as the root
|
|
105
|
-
* of the fixture.
|
|
106
|
-
*/
|
|
107
|
-
static async harnessForFixture(fixture, harnessType, options) {
|
|
108
|
-
const environment = new TestbedHarnessEnvironment(fixture.nativeElement, fixture, options);
|
|
109
|
-
await environment.forceStabilize();
|
|
110
|
-
return environment.createComponentHarness(harnessType, fixture.nativeElement);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Flushes change detection and async tasks captured in the Angular zone.
|
|
114
|
-
* In most cases it should not be necessary to call this manually. However, there may be some edge
|
|
115
|
-
* cases where it is needed to fully flush animation events.
|
|
116
|
-
*/
|
|
117
|
-
async forceStabilize() {
|
|
118
|
-
if (!disableAutoChangeDetection) {
|
|
119
|
-
if (this._destroyed) {
|
|
120
|
-
throw Error('Harness is attempting to use a fixture that has already been destroyed.');
|
|
121
|
-
}
|
|
122
|
-
await detectChanges(this._fixture);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Waits for all scheduled or running async tasks to complete. This allows harness
|
|
127
|
-
* authors to wait for async tasks outside of the Angular zone.
|
|
128
|
-
*/
|
|
129
|
-
async waitForTasksOutsideAngular() {
|
|
130
|
-
// If we run in the fake async zone, we run "flush" to run any scheduled tasks. This
|
|
131
|
-
// ensures that the harnesses behave inside of the FakeAsyncTestZone similar to the
|
|
132
|
-
// "AsyncTestZone" and the root zone (i.e. neither fakeAsync or async). Note that we
|
|
133
|
-
// cannot just rely on the task state observable to become stable because the state will
|
|
134
|
-
// never change. This is because the task queue will be only drained if the fake async
|
|
135
|
-
// zone is being flushed.
|
|
136
|
-
if (isInFakeAsyncZone()) {
|
|
137
|
-
flush();
|
|
138
|
-
}
|
|
139
|
-
// Wait until the task queue has been drained and the zone is stable. Note that
|
|
140
|
-
// we cannot rely on "fixture.whenStable" since it does not catch tasks scheduled
|
|
141
|
-
// outside of the Angular zone. For test harnesses, we want to ensure that the
|
|
142
|
-
// app is fully stabilized and therefore need to use our own zone interceptor.
|
|
143
|
-
await this._taskState?.pipe(takeWhile(state => !state.stable)).toPromise();
|
|
144
|
-
}
|
|
145
|
-
/** Gets the root element for the document. */
|
|
146
|
-
getDocumentRoot() {
|
|
147
|
-
return document.body;
|
|
148
|
-
}
|
|
149
|
-
/** Creates a `TestElement` from a raw element. */
|
|
150
|
-
createTestElement(element) {
|
|
151
|
-
return new UnitTestElement(element, this._stabilizeCallback);
|
|
152
|
-
}
|
|
153
|
-
/** Creates a `HarnessLoader` rooted at the given raw element. */
|
|
154
|
-
createEnvironment(element) {
|
|
155
|
-
return new TestbedHarnessEnvironment(element, this._fixture, this._options);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Gets a list of all elements matching the given selector under this environment's root element.
|
|
159
|
-
*/
|
|
160
|
-
async getAllRawElements(selector) {
|
|
161
|
-
await this.forceStabilize();
|
|
162
|
-
return Array.from(this._options.queryFn(selector, this.rawRootElement));
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGJlZC1oYXJuZXNzLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Rlc3RiZWQvdGVzdGJlZC1oYXJuZXNzLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFHTCwrQkFBK0IsRUFDL0Isa0JBQWtCLEVBRWxCLHFDQUFxQyxHQUV0QyxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBbUIsS0FBSyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBWSx3QkFBd0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQVFwRCx1Q0FBdUM7QUFDdkMsTUFBTSx5QkFBeUIsR0FBcUM7SUFDbEUsT0FBTyxFQUFFLENBQUMsUUFBZ0IsRUFBRSxJQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Q0FDOUUsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUV2Qzs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0FBRTVEOzs7R0FHRztBQUNILFNBQVMsdUNBQXVDLENBQUMsT0FBa0M7SUFDakYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QiwrQkFBK0IsQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFDLEVBQUUsRUFBRTtZQUNuRSwwQkFBMEIsR0FBRyxVQUFVLENBQUM7WUFDeEMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLEtB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UUFDMUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGlFQUFpRTtJQUN2RCxpQkFBaUIsQ0FBQyxPQUFnQjtRQUMxQyxPQUFPLElBQUkseUJBQXlCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFnQjtRQUNoRCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnRIYXJuZXNzLFxuICBDb21wb25lbnRIYXJuZXNzQ29uc3RydWN0b3IsXG4gIGhhbmRsZUF1dG9DaGFuZ2VEZXRlY3Rpb25TdGF0dXMsXG4gIEhhcm5lc3NFbnZpcm9ubWVudCxcbiAgSGFybmVzc0xvYWRlcixcbiAgc3RvcEhhbmRsaW5nQXV0b0NoYW5nZURldGVjdGlvblN0YXR1cyxcbiAgVGVzdEVsZW1lbnQsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7Q29tcG9uZW50Rml4dHVyZSwgZmx1c2h9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlV2hpbGV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VGFza1N0YXRlLCBUYXNrU3RhdGVab25lSW50ZXJjZXB0b3J9IGZyb20gJy4vdGFzay1zdGF0ZS16b25lLWludGVyY2VwdG9yJztcbmltcG9ydCB7VW5pdFRlc3RFbGVtZW50fSBmcm9tICcuL3VuaXQtdGVzdC1lbGVtZW50JztcblxuLyoqIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBlbnZpcm9ubWVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdGJlZEhhcm5lc3NFbnZpcm9ubWVudE9wdGlvbnMge1xuICAvKiogVGhlIHF1ZXJ5IGZ1bmN0aW9uIHVzZWQgdG8gZmluZCBET00gZWxlbWVudHMuICovXG4gIHF1ZXJ5Rm46IChzZWxlY3Rvcjogc3RyaW5nLCByb290OiBFbGVtZW50KSA9PiBJdGVyYWJsZTxFbGVtZW50PiB8IEFycmF5TGlrZTxFbGVtZW50Pjtcbn1cblxuLyoqIFRoZSBkZWZhdWx0IGVudmlyb25tZW50IG9wdGlvbnMuICovXG5jb25zdCBkZWZhdWx0RW52aXJvbm1lbnRPcHRpb25zOiBUZXN0YmVkSGFybmVzc0Vudmlyb25tZW50T3B0aW9ucyA9IHtcbiAgcXVlcnlGbjogKHNlbGVjdG9yOiBzdHJpbmcsIHJvb3Q6IEVsZW1lbnQpID0+IHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciksXG59O1xuXG4vKiogV2hldGhlciBhdXRvIGNoYW5nZSBkZXRlY3Rpb24gaXMgY3VycmVudGx5IGRpc2FibGVkLiAqL1xubGV0IGRpc2FibGVBdXRvQ2hhbmdlRGV0ZWN0aW9uID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIHNldCBvZiBub24tZGVzdHJveWVkIGZpeHR1cmVzIGN1cnJlbnRseSBiZWluZyB1c2VkIGJ5IGBUZXN0YmVkSGFybmVzc0Vudmlyb25tZW50YCBpbnN0YW5jZXMuXG4gKi9cbmNvbnN0IGFjdGl2ZUZpeHR1cmVzID0gbmV3IFNldDxDb21wb25lbnRGaXh0dXJlPHVua25vd24+PigpO1xuXG4vKipcbiAqIEluc3RhbGxzIGEgaGFuZGxlciBmb3IgY2hhbmdlIGRldGVjdGlvbiBiYXRjaGluZyBzdGF0dXMgY2hhbmdlcyBmb3IgYSBzcGVjaWZpYyBmaXh0dXJlLlxuICogQHBhcmFtIGZpeHR1cmUgVGhlIGZpeHR1cmUgdG8gaGFuZGxlIGNoYW5nZSBkZXRlY3Rpb24gYmF0Y2hpbmcgZm9yLlxuICovXG5mdW5jdGlvbiBpbnN0YWxsQXV0b0NoYW5nZURldGVjdGlvblN0YXR1c0hhbmRsZXIoZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTx1bmtub3duPikge1xuICBpZiAoIWFjdGl2ZUZpeHR1cmVzLnNpemUpIHtcbiAgICBoYW5kbGVBdXRvQ2hhbmdlRGV0ZWN0aW9uU3RhdHVzKCh7aXNEaXNhYmxlZCwgb25EZXRlY3RDaGFuZ2VzTm93fSkgPT4ge1xuICAgICAgZGlzYWJsZUF1dG9DaGFuZ2VEZXRlY3Rpb24gPSBpc0Rpc2FibGVkO1xuICAgICAgaWYgKG9uRGV0ZWN0Q2hhbmdlc05vdykge1xuICAgICAgICBQcm9taXNlLmFsbChBcnJheS5mcm9tKGFjdGl2ZUZpeHR1cmVzKS5tYXAoZGV0ZWN0Q2hhbmdlcykpLnRoZW4ob25EZXRlY3RDaGFuZ2VzTm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhY3RpdmVGaXh0dXJlcy5hZGQoZml4dHVyZSk7XG59XG5cbi8qKlxuICogVW5pbnN0YWxscyBhIGhhbmRsZXIgZm9yIGNoYW5nZSBkZXRlY3Rpb24gYmF0Y2hpbmcgc3RhdHVzIGNoYW5nZXMgZm9yIGEgc3BlY2lmaWMgZml4dHVyZS5cbiAqIEBwYXJhbSBmaXh0dXJlIFRoZSBmaXh0dXJlIHRvIHN0b3AgaGFuZGxpbmcgY2hhbmdlIGRldGVjdGlvbiBiYXRjaGluZyBmb3IuXG4gKi9cbmZ1bmN0aW9uIHVuaW5zdGFsbEF1dG9DaGFuZ2VEZXRlY3Rpb25TdGF0dXNIYW5kbGVyKGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8dW5rbm93bj4pIHtcbiAgYWN0aXZlRml4dHVyZXMuZGVsZXRlKGZpeHR1cmUpO1xuICBpZiAoIWFjdGl2ZUZpeHR1cmVzLnNpemUpIHtcbiAgICBzdG9wSGFuZGxpbmdBdXRvQ2hhbmdlRGV0ZWN0aW9uU3RhdHVzKCk7XG4gIH1cbn1cblxuLyoqIFdoZXRoZXIgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgZmFrZSBhc3luYyB6b25lLiAqL1xuZnVuY3Rpb24gaXNJbkZha2VBc3luY1pvbmUoKSB7XG4gIHJldHVybiB0eXBlb2YgWm9uZSAhPT0gJ3VuZGVmaW5lZCcgJiYgWm9uZSEuY3VycmVudC5nZXQoJ0Zha2VBc3luY1Rlc3Rab25lU3BlYycpICE9IG51bGw7XG59XG5cbi8qKlxuICogVHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiBmb3IgYSBzcGVjaWZpYyBmaXh0dXJlLlxuICogQHBhcmFtIGZpeHR1cmUgVGhlIGZpeHR1cmUgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGZvci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0Q2hhbmdlcyhmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPHVua25vd24+KSB7XG4gIGZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICBpZiAoaXNJbkZha2VBc3luY1pvbmUoKSkge1xuICAgIGZsdXNoKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gIH1cbn1cblxuLyoqIEEgYEhhcm5lc3NFbnZpcm9ubWVudGAgaW1wbGVtZW50YXRpb24gZm9yIEFuZ3VsYXIncyBUZXN0YmVkLiAqL1xuZXhwb3J0IGNsYXNzIFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnQgZXh0ZW5kcyBIYXJuZXNzRW52aXJvbm1lbnQ8RWxlbWVudD4ge1xuICAvKiogV2hldGhlciB0aGUgZW52aXJvbm1lbnQgaGFzIGJlZW4gZGVzdHJveWVkLiAqL1xuICBwcml2YXRlIF9kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvKiogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSB0ZXN0IHRhc2sgc3RhdGUgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfdGFza1N0YXRlPzogT2JzZXJ2YWJsZTxUYXNrU3RhdGU+O1xuXG4gIC8qKiBUaGUgb3B0aW9ucyBmb3IgdGhpcyBlbnZpcm9ubWVudC4gKi9cbiAgcHJpdmF0ZSBfb3B0aW9uczogVGVzdGJlZEhhcm5lc3NFbnZpcm9ubWVudE9wdGlvbnM7XG5cbiAgLyoqIEVudmlyb25tZW50IHN0YWJpbGl6YXRpb24gY2FsbGJhY2sgcGFzc2VkIHRvIHRoZSBjcmVhdGVkIHRlc3QgZWxlbWVudHMuICovXG4gIHByaXZhdGUgX3N0YWJpbGl6ZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICByYXdSb290RWxlbWVudDogRWxlbWVudCxcbiAgICBwcml2YXRlIF9maXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPHVua25vd24+LFxuICAgIG9wdGlvbnM/OiBUZXN0YmVkSGFybmVzc0Vudmlyb25tZW50T3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocmF3Um9vdEVsZW1lbnQpO1xuICAgIHRoaXMuX29wdGlvbnMgPSB7Li4uZGVmYXVsdEVudmlyb25tZW50T3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgaWYgKHR5cGVvZiBab25lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5fdGFza1N0YXRlID0gVGFza1N0YXRlWm9uZUludGVyY2VwdG9yLnNldHVwKCk7XG4gICAgfVxuICAgIHRoaXMuX3N0YWJpbGl6ZUNhbGxiYWNrID0gKCkgPT4gdGhpcy5mb3JjZVN0YWJpbGl6ZSgpO1xuICAgIGluc3RhbGxBdXRvQ2hhbmdlRGV0ZWN0aW9uU3RhdHVzSGFuZGxlcihfZml4dHVyZSk7XG4gICAgX2ZpeHR1cmUuY29tcG9uZW50UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICB1bmluc3RhbGxBdXRvQ2hhbmdlRGV0ZWN0aW9uU3RhdHVzSGFuZGxlcihfZml4dHVyZSk7XG4gICAgICB0aGlzLl9kZXN0cm95ZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBgSGFybmVzc0xvYWRlcmAgcm9vdGVkIGF0IHRoZSBnaXZlbiBmaXh0dXJlJ3Mgcm9vdCBlbGVtZW50LiAqL1xuICBzdGF0aWMgbG9hZGVyKFxuICAgIGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8dW5rbm93bj4sXG4gICAgb3B0aW9ucz86IFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zLFxuICApOiBIYXJuZXNzTG9hZGVyIHtcbiAgICByZXR1cm4gbmV3IFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnQoZml4dHVyZS5uYXRpdmVFbGVtZW50LCBmaXh0dXJlLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYEhhcm5lc3NMb2FkZXJgIGF0IHRoZSBkb2N1bWVudCByb290LiBUaGlzIGNhbiBiZSB1c2VkIGlmIGhhcm5lc3NlcyBhcmVcbiAgICogbG9jYXRlZCBvdXRzaWRlIG9mIGEgZml4dHVyZSAoZS5nLiBvdmVybGF5cyBhcHBlbmRlZCB0byB0aGUgZG9jdW1lbnQgYm9keSkuXG4gICAqL1xuICBzdGF0aWMgZG9jdW1lbnRSb290TG9hZGVyKFxuICAgIGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8dW5rbm93bj4sXG4gICAgb3B0aW9ucz86IFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zLFxuICApOiBIYXJuZXNzTG9hZGVyIHtcbiAgICByZXR1cm4gbmV3IFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnQoZG9jdW1lbnQuYm9keSwgZml4dHVyZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgbmF0aXZlIERPTSBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFRlc3RFbGVtZW50LiAqL1xuICBzdGF0aWMgZ2V0TmF0aXZlRWxlbWVudChlbDogVGVzdEVsZW1lbnQpOiBFbGVtZW50IHtcbiAgICBpZiAoZWwgaW5zdGFuY2VvZiBVbml0VGVzdEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbC5lbGVtZW50O1xuICAgIH1cbiAgICB0aHJvdyBFcnJvcignVGhpcyBUZXN0RWxlbWVudCB3YXMgbm90IGNyZWF0ZWQgYnkgdGhlIFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBoYXJuZXNzIHR5cGUsIHVzaW5nIHRoZSBmaXh0dXJlJ3Mgcm9vdCBlbGVtZW50IGFzIHRoZVxuICAgKiBoYXJuZXNzJ3MgaG9zdCBlbGVtZW50LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgaGFybmVzcyBmb3IgdGhlIHJvb3QgZWxlbWVudFxuICAgKiBvZiBhIGZpeHR1cmUsIGFzIGNvbXBvbmVudHMgZG8gbm90IGhhdmUgdGhlIGNvcnJlY3Qgc2VsZWN0b3Igd2hlbiB0aGV5IGFyZSBjcmVhdGVkIGFzIHRoZSByb290XG4gICAqIG9mIHRoZSBmaXh0dXJlLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGhhcm5lc3NGb3JGaXh0dXJlPFQgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzPihcbiAgICBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPHVua25vd24+LFxuICAgIGhhcm5lc3NUeXBlOiBDb21wb25lbnRIYXJuZXNzQ29uc3RydWN0b3I8VD4sXG4gICAgb3B0aW9ucz86IFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG5ldyBUZXN0YmVkSGFybmVzc0Vudmlyb25tZW50KGZpeHR1cmUubmF0aXZlRWxlbWVudCwgZml4dHVyZSwgb3B0aW9ucyk7XG4gICAgYXdhaXQgZW52aXJvbm1lbnQuZm9yY2VTdGFiaWxpemUoKTtcbiAgICByZXR1cm4gZW52aXJvbm1lbnQuY3JlYXRlQ29tcG9uZW50SGFybmVzcyhoYXJuZXNzVHlwZSwgZml4dHVyZS5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaGVzIGNoYW5nZSBkZXRlY3Rpb24gYW5kIGFzeW5jIHRhc2tzIGNhcHR1cmVkIGluIHRoZSBBbmd1bGFyIHpvbmUuXG4gICAqIEluIG1vc3QgY2FzZXMgaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgdG8gY2FsbCB0aGlzIG1hbnVhbGx5LiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgc29tZSBlZGdlXG4gICAqIGNhc2VzIHdoZXJlIGl0IGlzIG5lZWRlZCB0byBmdWxseSBmbHVzaCBhbmltYXRpb24gZXZlbnRzLlxuICAgKi9cbiAgYXN5bmMgZm9yY2VTdGFiaWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFkaXNhYmxlQXV0b0NoYW5nZURldGVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkge1xuICAgICAgICB0aHJvdyBFcnJvcignSGFybmVzcyBpcyBhdHRlbXB0aW5nIHRvIHVzZSBhIGZpeHR1cmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4nKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZGV0ZWN0Q2hhbmdlcyh0aGlzLl9maXh0dXJlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIGFsbCBzY2hlZHVsZWQgb3IgcnVubmluZyBhc3luYyB0YXNrcyB0byBjb21wbGV0ZS4gVGhpcyBhbGxvd3MgaGFybmVzc1xuICAgKiBhdXRob3JzIHRvIHdhaXQgZm9yIGFzeW5jIHRhc2tzIG91dHNpZGUgb2YgdGhlIEFuZ3VsYXIgem9uZS5cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JUYXNrc091dHNpZGVBbmd1bGFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIHdlIHJ1biBpbiB0aGUgZmFrZSBhc3luYyB6b25lLCB3ZSBydW4gXCJmbHVzaFwiIHRvIHJ1biBhbnkgc2NoZWR1bGVkIHRhc2tzLiBUaGlzXG4gICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBoYXJuZXNzZXMgYmVoYXZlIGluc2lkZSBvZiB0aGUgRmFrZUFzeW5jVGVzdFpvbmUgc2ltaWxhciB0byB0aGVcbiAgICAvLyBcIkFzeW5jVGVzdFpvbmVcIiBhbmQgdGhlIHJvb3Qgem9uZSAoaS5lLiBuZWl0aGVyIGZha2VBc3luYyBvciBhc3luYykuIE5vdGUgdGhhdCB3ZVxuICAgIC8vIGNhbm5vdCBqdXN0IHJlbHkgb24gdGhlIHRhc2sgc3RhdGUgb2JzZXJ2YWJsZSB0byBiZWNvbWUgc3RhYmxlIGJlY2F1c2UgdGhlIHN0YXRlIHdpbGxcbiAgICAvLyBuZXZlciBjaGFuZ2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUgdGFzayBxdWV1ZSB3aWxsIGJlIG9ubHkgZHJhaW5lZCBpZiB0aGUgZmFrZSBhc3luY1xuICAgIC8vIHpvbmUgaXMgYmVpbmcgZmx1c2hlZC5cbiAgICBpZiAoaXNJbkZha2VBc3luY1pvbmUoKSkge1xuICAgICAgZmx1c2goKTtcbiAgICB9XG5cbiAgICAvLyBXYWl0IHVudGlsIHRoZSB0YXNrIHF1ZXVlIGhhcyBiZWVuIGRyYWluZWQgYW5kIHRoZSB6b25lIGlzIHN0YWJsZS4gTm90ZSB0aGF0XG4gICAgLy8gd2UgY2Fubm90IHJlbHkgb24gXCJmaXh0dXJlLndoZW5TdGFibGVcIiBzaW5jZSBpdCBkb2VzIG5vdCBjYXRjaCB0YXNrcyBzY2hlZHVsZWRcbiAgICAvLyBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIHpvbmUuIEZvciB0ZXN0IGhhcm5lc3Nlcywgd2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGVcbiAgICAvLyBhcHAgaXMgZnVsbHkgc3RhYmlsaXplZCBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gdXNlIG91ciBvd24gem9uZSBpbnRlcmNlcHRvci5cbiAgICBhd2FpdCB0aGlzLl90YXNrU3RhdGU/LnBpcGUodGFrZVdoaWxlKHN0YXRlID0+ICFzdGF0ZS5zdGFibGUpKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoZSBkb2N1bWVudC4gKi9cbiAgcHJvdGVjdGVkIGdldERvY3VtZW50Um9vdCgpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgYFRlc3RFbGVtZW50YCBmcm9tIGEgcmF3IGVsZW1lbnQuICovXG4gIHByb3RlY3RlZCBjcmVhdGVUZXN0RWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogVGVzdEVsZW1lbnQge1xuICAgIHJldHVybiBuZXcgVW5pdFRlc3RFbGVtZW50KGVsZW1lbnQsIHRoaXMuX3N0YWJpbGl6ZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgYEhhcm5lc3NMb2FkZXJgIHJvb3RlZCBhdCB0aGUgZ2l2ZW4gcmF3IGVsZW1lbnQuICovXG4gIHByb3RlY3RlZCBjcmVhdGVFbnZpcm9ubWVudChlbGVtZW50OiBFbGVtZW50KTogSGFybmVzc0Vudmlyb25tZW50PEVsZW1lbnQ+IHtcbiAgICByZXR1cm4gbmV3IFRlc3RiZWRIYXJuZXNzRW52aXJvbm1lbnQoZWxlbWVudCwgdGhpcy5fZml4dHVyZSwgdGhpcy5fb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIG1hdGNoaW5nIHRoZSBnaXZlbiBzZWxlY3RvciB1bmRlciB0aGlzIGVudmlyb25tZW50J3Mgcm9vdCBlbGVtZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFsbFJhd0VsZW1lbnRzKHNlbGVjdG9yOiBzdHJpbmcpOiBQcm9taXNlPEVsZW1lbnRbXT4ge1xuICAgIGF3YWl0IHRoaXMuZm9yY2VTdGFiaWxpemUoKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25zLnF1ZXJ5Rm4oc2VsZWN0b3IsIHRoaXMucmF3Um9vdEVsZW1lbnQpKTtcbiAgfVxufVxuIl19
|