@skyux/lookup 8.7.2 → 9.0.0-alpha.1
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/documentation.json +244 -244
- package/esm2022/lib/modules/autocomplete/autocomplete-adapter.service.mjs +61 -0
- package/esm2022/lib/modules/autocomplete/autocomplete-input.directive.mjs +237 -0
- package/{esm2020 → esm2022}/lib/modules/autocomplete/autocomplete-search-async-disabled.pipe.mjs +4 -4
- package/esm2022/lib/modules/autocomplete/autocomplete.component.mjs +817 -0
- package/{esm2020 → esm2022}/lib/modules/autocomplete/autocomplete.module.mjs +27 -27
- package/esm2022/lib/modules/country-field/country-field.component.mjs +444 -0
- package/{esm2020 → esm2022}/lib/modules/country-field/country-field.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/modules/lookup/lookup-adapter.service.mjs +4 -4
- package/esm2022/lib/modules/lookup/lookup-autocomplete-adapter.mjs +114 -0
- package/esm2022/lib/modules/lookup/lookup-show-more-modal.component.mjs +270 -0
- package/{esm2020 → esm2022}/lib/modules/lookup/lookup.component.mjs +299 -280
- package/{esm2020 → esm2022}/lib/modules/lookup/lookup.module.mjs +37 -37
- package/esm2022/lib/modules/search/search-adapter.service.mjs +46 -0
- package/esm2022/lib/modules/search/search.component.mjs +285 -0
- package/{esm2020 → esm2022}/lib/modules/search/search.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/modules/selection-modal/selection-modal-item-selected.pipe.mjs +4 -4
- package/esm2022/lib/modules/selection-modal/selection-modal.component.mjs +201 -0
- package/{esm2020 → esm2022}/lib/modules/selection-modal/selection-modal.module.mjs +27 -27
- package/esm2022/lib/modules/selection-modal/selection-modal.service.mjs +89 -0
- package/esm2022/lib/modules/selection-modal/types/selection-modal-instance.mjs +45 -0
- package/esm2022/lib/modules/shared/sky-lookup-resources.module.mjs +71 -0
- package/esm2022/testing/autocomplete/autocomplete-harness.mjs +155 -0
- package/esm2022/testing/autocomplete/autocomplete-input-harness.mjs +63 -0
- package/esm2022/testing/autocomplete/autocomplete-search-result-harness.mjs +44 -0
- package/esm2022/testing/country-field/country-field-fixture.mjs +118 -0
- package/{esm2020 → esm2022}/testing/country-field/country-field-testing.module.mjs +5 -5
- package/esm2022/testing/lookup/lookup-harness.mjs +76 -0
- package/{esm2020 → esm2022}/testing/search/search-fixture.mjs +18 -19
- package/esm2022/testing/search/search-harness.mjs +80 -0
- package/{esm2020 → esm2022}/testing/search/search-testing.module.mjs +5 -5
- package/esm2022/testing/selection-modal/selection-modal-harness.mjs +122 -0
- package/{fesm2020 → fesm2022}/skyux-lookup-testing.mjs +171 -187
- package/{fesm2020 → fesm2022}/skyux-lookup-testing.mjs.map +1 -1
- package/fesm2022/skyux-lookup.mjs +3707 -0
- package/{fesm2015 → fesm2022}/skyux-lookup.mjs.map +1 -1
- package/lib/modules/autocomplete/autocomplete-input.directive.d.ts +1 -1
- package/lib/modules/autocomplete/autocomplete.component.d.ts +1 -1
- package/lib/modules/country-field/country-field.component.d.ts +1 -1
- package/lib/modules/lookup/lookup-autocomplete-adapter.d.ts +1 -1
- package/lib/modules/lookup/lookup.component.d.ts +1 -1
- package/lib/modules/search/search.component.d.ts +1 -1
- package/package.json +23 -31
- package/esm2020/lib/modules/autocomplete/autocomplete-adapter.service.mjs +0 -64
- package/esm2020/lib/modules/autocomplete/autocomplete-input.directive.mjs +0 -235
- package/esm2020/lib/modules/autocomplete/autocomplete.component.mjs +0 -775
- package/esm2020/lib/modules/country-field/country-field.component.mjs +0 -433
- package/esm2020/lib/modules/lookup/lookup-autocomplete-adapter.mjs +0 -115
- package/esm2020/lib/modules/lookup/lookup-show-more-modal.component.mjs +0 -271
- package/esm2020/lib/modules/search/search-adapter.service.mjs +0 -46
- package/esm2020/lib/modules/search/search.component.mjs +0 -279
- package/esm2020/lib/modules/selection-modal/selection-modal.component.mjs +0 -199
- package/esm2020/lib/modules/selection-modal/selection-modal.service.mjs +0 -92
- package/esm2020/lib/modules/selection-modal/types/selection-modal-instance.mjs +0 -48
- package/esm2020/lib/modules/shared/sky-lookup-resources.module.mjs +0 -71
- package/esm2020/testing/autocomplete/autocomplete-harness.mjs +0 -161
- package/esm2020/testing/autocomplete/autocomplete-input-harness.mjs +0 -63
- package/esm2020/testing/autocomplete/autocomplete-search-result-harness.mjs +0 -44
- package/esm2020/testing/country-field/country-field-fixture.mjs +0 -114
- package/esm2020/testing/lookup/lookup-harness.mjs +0 -82
- package/esm2020/testing/search/search-harness.mjs +0 -86
- package/esm2020/testing/selection-modal/selection-modal-harness.mjs +0 -128
- package/fesm2015/skyux-lookup-testing.mjs +0 -980
- package/fesm2015/skyux-lookup-testing.mjs.map +0 -1
- package/fesm2015/skyux-lookup.mjs +0 -3642
- package/fesm2020/skyux-lookup.mjs +0 -3625
- package/fesm2020/skyux-lookup.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/autocomplete-default-search-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-default-search-function-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-input-text-change.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-message-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-message.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-async-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-async-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-async-result-display-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-async-result.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-function-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-function-response.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-search-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-selection-change.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autocomplete/types/autocomplete-show-more-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/country-field/types/country-field-context-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/country-field/types/country-field-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/country-field/types/country.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-add-click-callback-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-add-click-event-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-select-mode-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-select-mode.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-show-more-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-show-more-custom-picker-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-show-more-custom-picker.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-show-more-native-picker-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/lookup/types/lookup-show-more-native-picker-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-add-click-callback-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-add-click-event-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-close-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-open-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-result.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-search-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/selection-modal/types/selection-modal-search-result.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/shared/sky-lookup-string-utils.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-lookup.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/autocomplete/autocomplete-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/autocomplete/autocomplete-search-result-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-selection-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-selection-harness.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-selections-list-harness.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-show-more-picker-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-show-more-picker-harness.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-show-more-picker-search-result-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/lookup/lookup-show-more-picker-search-result-harness.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/search/search-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/selection-modal/selection-modal-search-result-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/selection-modal/selection-modal-search-result-harness.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-lookup-testing.mjs +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { SkyComponentHarness, SkyOverlayHarness } from '@skyux/core/testing';
|
|
2
|
+
import { SkyAutocompleteInputHarness } from './autocomplete-input-harness';
|
|
3
|
+
import { SkyAutocompleteSearchResultHarness } from './autocomplete-search-result-harness';
|
|
4
|
+
/**
|
|
5
|
+
* Harness for interacting with an autocomplete component in tests.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export class SkyAutocompleteHarness extends SkyComponentHarness {
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
static { this.hostSelector = 'sky-autocomplete'; }
|
|
13
|
+
#documentRootLocator = this.documentRootLocatorFactory();
|
|
14
|
+
#getInput = this.locatorFor(SkyAutocompleteInputHarness);
|
|
15
|
+
/**
|
|
16
|
+
* Gets a `HarnessPredicate` that can be used to search for a
|
|
17
|
+
* `SkyAutocompleteHarness` that meets certain criteria.
|
|
18
|
+
*/
|
|
19
|
+
static with(filters) {
|
|
20
|
+
return SkyAutocompleteHarness.getDataSkyIdPredicate(filters);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Blurs the autocomplete input.
|
|
24
|
+
*/
|
|
25
|
+
async blur() {
|
|
26
|
+
return (await this.#getInput()).blur();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Clears the input value.
|
|
30
|
+
*/
|
|
31
|
+
async clear() {
|
|
32
|
+
return (await this.#getInput()).clear();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Enters text into the autocomplete input.
|
|
36
|
+
*/
|
|
37
|
+
async enterText(value) {
|
|
38
|
+
return (await this.#getInput()).enterText(value);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Focuses the autocomplete input.
|
|
42
|
+
*/
|
|
43
|
+
async focus() {
|
|
44
|
+
return (await this.#getInput()).focus();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns search result harnesses.
|
|
48
|
+
*/
|
|
49
|
+
async getSearchResults(filters) {
|
|
50
|
+
const overlay = await this.#getOverlay();
|
|
51
|
+
if (!overlay) {
|
|
52
|
+
throw new Error('Unable to retrieve search results. The autocomplete is closed.');
|
|
53
|
+
}
|
|
54
|
+
const harnesses = await overlay.queryHarnesses(SkyAutocompleteSearchResultHarness.with(filters || {}));
|
|
55
|
+
if (filters && harnesses.length === 0) {
|
|
56
|
+
// Stringify the regular expression so that it's readable in the console log.
|
|
57
|
+
if (filters.text instanceof RegExp) {
|
|
58
|
+
filters.text = filters.text.toString();
|
|
59
|
+
}
|
|
60
|
+
throw new Error(`Could not find search results matching filter(s): ${JSON.stringify(filters)}`);
|
|
61
|
+
}
|
|
62
|
+
return harnesses;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Returns the text content for each search result.
|
|
66
|
+
*/
|
|
67
|
+
async getSearchResultsText(filters) {
|
|
68
|
+
const harnesses = await this.getSearchResults(filters);
|
|
69
|
+
const text = [];
|
|
70
|
+
for (const harness of harnesses) {
|
|
71
|
+
text.push(await harness.getText());
|
|
72
|
+
}
|
|
73
|
+
return text;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Gets the value of the autocomplete input.
|
|
77
|
+
*/
|
|
78
|
+
async getValue() {
|
|
79
|
+
return (await this.#getInput()).getValue();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Whether the autocomplete input is disabled.
|
|
83
|
+
*/
|
|
84
|
+
async isDisabled() {
|
|
85
|
+
return (await this.#getInput()).isDisabled();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Whether the autocomplete input is focused.
|
|
89
|
+
*/
|
|
90
|
+
async isFocused() {
|
|
91
|
+
return (await this.#getInput()).isFocused();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Whether the autocomplete is open.
|
|
95
|
+
*/
|
|
96
|
+
async isOpen() {
|
|
97
|
+
const overlay = await this.#getOverlay();
|
|
98
|
+
return !!overlay;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Selects a search result.
|
|
102
|
+
*/
|
|
103
|
+
async selectSearchResult(filters) {
|
|
104
|
+
const results = await this.getSearchResults(filters);
|
|
105
|
+
if (results && results.length > 0) {
|
|
106
|
+
await results[0].select();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Clicks the "Add" button in the autocomplete search results panel.
|
|
111
|
+
* (The "Add" functionality is not included in the public API
|
|
112
|
+
* of a "vanilla" autocomplete component, so this method is protected
|
|
113
|
+
* to prevent consumers of the autocomplete harness from calling it.
|
|
114
|
+
* The lookup harness, which extends the autocomplete harness, may
|
|
115
|
+
* still access this feature, however.)
|
|
116
|
+
*/
|
|
117
|
+
async clickAddButton() {
|
|
118
|
+
const overlay = await this.#getOverlay();
|
|
119
|
+
if (!overlay) {
|
|
120
|
+
throw new Error('Unable to find the "Add" button. The autocomplete is closed.');
|
|
121
|
+
}
|
|
122
|
+
const button = await overlay.querySelector('button.sky-autocomplete-action-add');
|
|
123
|
+
if (!button) {
|
|
124
|
+
throw new Error('The "Add" button cannot be clicked because it does not exist.');
|
|
125
|
+
}
|
|
126
|
+
await button.click();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Clicks the "Show more" button.
|
|
130
|
+
* (The "Show more" functionality is not included in the public API
|
|
131
|
+
* of a "vanilla" autocomplete component, so this method is protected
|
|
132
|
+
* to prevent consumers of the autocomplete harness from calling it.
|
|
133
|
+
* The lookup harness, which extends the autocomplete harness, may
|
|
134
|
+
* still access this feature, however.)
|
|
135
|
+
*/
|
|
136
|
+
async clickShowMoreButton() {
|
|
137
|
+
const overlay = await this.#getOverlay();
|
|
138
|
+
if (!overlay) {
|
|
139
|
+
throw new Error('Unable to find the "Show more" button. ' +
|
|
140
|
+
'The autocomplete is closed.');
|
|
141
|
+
}
|
|
142
|
+
const button = await overlay.querySelector('button.sky-autocomplete-action-more');
|
|
143
|
+
if (!button) {
|
|
144
|
+
throw new Error('The "Show more" button cannot be clicked because it does not exist.');
|
|
145
|
+
}
|
|
146
|
+
await button.click();
|
|
147
|
+
}
|
|
148
|
+
async #getOverlay() {
|
|
149
|
+
const overlayId = await (await this.#getInput()).getAriaOwns();
|
|
150
|
+
return overlayId
|
|
151
|
+
? this.#documentRootLocator.locatorForOptional(SkyOverlayHarness.with({ selector: `#${overlayId}` }))()
|
|
152
|
+
: null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3Rlc3Rpbmcvc3JjL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUtaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUc3RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUcxRjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsbUJBQW1CO0lBQzdEOztPQUVHO2FBQ1csaUJBQVksR0FBRyxrQkFBa0IsQ0FBQztJQUVoRCxvQkFBb0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUV6RCxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBRXpEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLE9BQXNDO1FBRXRDLE9BQU8sc0JBQXNCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWE7UUFDbEMsT0FBTyxDQUFD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Y2F0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7IFNreUNvbXBvbmVudEhhcm5lc3MsIFNreU92ZXJsYXlIYXJuZXNzIH0gZnJvbSAnQHNreXV4L2NvcmUvdGVzdGluZyc7XG5cbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZUhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9hdXRvY29tcGxldGUtaGFybmVzcy1maWx0ZXJzJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZUlucHV0SGFybmVzcyB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWlucHV0LWhhcm5lc3MnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0SGFybmVzcyB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLXNlYXJjaC1yZXN1bHQtaGFybmVzcyc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRIYXJuZXNzRmlsdGVycyB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLXNlYXJjaC1yZXN1bHQtaGFybmVzcy1maWx0ZXJzJztcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuIGF1dG9jb21wbGV0ZSBjb21wb25lbnQgaW4gdGVzdHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreUF1dG9jb21wbGV0ZUhhcm5lc3MgZXh0ZW5kcyBTa3lDb21wb25lbnRIYXJuZXNzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnc2t5LWF1dG9jb21wbGV0ZSc7XG5cbiAgI2RvY3VtZW50Um9vdExvY2F0b3IgPSB0aGlzLmRvY3VtZW50Um9vdExvY2F0b3JGYWN0b3J5KCk7XG5cbiAgI2dldElucHV0ID0gdGhpcy5sb2NhdG9yRm9yKFNreUF1dG9jb21wbGV0ZUlucHV0SGFybmVzcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGFcbiAgICogYFNreUF1dG9jb21wbGV0ZUhhcm5lc3NgIHRoYXQgbWVldHMgY2VydGFpbiBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChcbiAgICBmaWx0ZXJzOiBTa3lBdXRvY29tcGxldGVIYXJuZXNzRmlsdGVyc1xuICApOiBIYXJuZXNzUHJlZGljYXRlPFNreUF1dG9jb21wbGV0ZUhhcm5lc3M+IHtcbiAgICByZXR1cm4gU2t5QXV0b2NvbXBsZXRlSGFybmVzcy5nZXREYXRhU2t5SWRQcmVkaWNhdGUoZmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogQmx1cnMgdGhlIGF1dG9jb21wbGV0ZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBibHVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuYmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycyB0ZXh0IGludG8gdGhlIGF1dG9jb21wbGV0ZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnRlclRleHQodmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZW50ZXJUZXh0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBhdXRvY29tcGxldGUgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9jdXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc2VhcmNoIHJlc3VsdCBoYXJuZXNzZXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0cyhcbiAgICBmaWx0ZXJzPzogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0SGFybmVzc0ZpbHRlcnNcbiAgKTogUHJvbWlzZTxTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRIYXJuZXNzW10+IHtcbiAgICBjb25zdCBvdmVybGF5ID0gYXdhaXQgdGhpcy4jZ2V0T3ZlcmxheSgpO1xuXG4gICAgaWYgKCFvdmVybGF5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gcmV0cmlldmUgc2VhcmNoIHJlc3VsdHMuIFRoZSBhdXRvY29tcGxldGUgaXMgY2xvc2VkLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFybmVzc2VzID0gYXdhaXQgb3ZlcmxheS5xdWVyeUhhcm5lc3NlcyhcbiAgICAgIFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdEhhcm5lc3Mud2l0aChmaWx0ZXJzIHx8IHt9KVxuICAgICk7XG5cbiAgICBpZiAoZmlsdGVycyAmJiBoYXJuZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTdHJpbmdpZnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzbyB0aGF0IGl0J3MgcmVhZGFibGUgaW4gdGhlIGNvbnNvbGUgbG9nLlxuICAgICAgaWYgKGZpbHRlcnMudGV4dCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBmaWx0ZXJzLnRleHQgPSBmaWx0ZXJzLnRleHQudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgc2VhcmNoIHJlc3VsdHMgbWF0Y2hpbmcgZmlsdGVyKHMpOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBoYXJuZXNzZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGV4dCBjb250ZW50IGZvciBlYWNoIHNlYXJjaCByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2VhcmNoUmVzdWx0c1RleHQoXG4gICAgZmlsdGVycz86IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdEhhcm5lc3NGaWx0ZXJzXG4gICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBoYXJuZXNzZXMgPSBhd2FpdCB0aGlzLmdldFNlYXJjaFJlc3VsdHMoZmlsdGVycyk7XG5cbiAgICBjb25zdCB0ZXh0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaGFybmVzcyBvZiBoYXJuZXNzZXMpIHtcbiAgICAgIHRleHQucHVzaChhd2FpdCBoYXJuZXNzLmdldFRleHQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGF1dG9jb21wbGV0ZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNEaXNhYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmlzRGlzYWJsZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgaW5wdXQgaXMgZm9jdXNlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0ZvY3VzZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5pc0ZvY3VzZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgaXMgb3Blbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc09wZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGF3YWl0IHRoaXMuI2dldE92ZXJsYXkoKTtcbiAgICByZXR1cm4gISFvdmVybGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBzZWFyY2ggcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlbGVjdFNlYXJjaFJlc3VsdChcbiAgICBmaWx0ZXJzOiBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRIYXJuZXNzRmlsdGVyc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRTZWFyY2hSZXN1bHRzKGZpbHRlcnMpO1xuICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgcmVzdWx0c1swXS5zZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIHRoZSBcIkFkZFwiIGJ1dHRvbiBpbiB0aGUgYXV0b2NvbXBsZXRlIHNlYXJjaCByZXN1bHRzIHBhbmVsLlxuICAgKiAoVGhlIFwiQWRkXCIgZnVuY3Rpb25hbGl0eSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHB1YmxpYyBBUElcbiAgICogb2YgYSBcInZhbmlsbGFcIiBhdXRvY29tcGxldGUgY29tcG9uZW50LCBzbyB0aGlzIG1ldGhvZCBpcyBwcm90ZWN0ZWRcbiAgICogdG8gcHJldmVudCBjb25zdW1lcnMgb2YgdGhlIGF1dG9jb21wbGV0ZSBoYXJuZXNzIGZyb20gY2FsbGluZyBpdC5cbiAgICogVGhlIGxvb2t1cCBoYXJuZXNzLCB3aGljaCBleHRlbmRzIHRoZSBhdXRvY29tcGxldGUgaGFybmVzcywgbWF5XG4gICAqIHN0aWxsIGFjY2VzcyB0aGlzIGZlYXR1cmUsIGhvd2V2ZXIuKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNsaWNrQWRkQnV0dG9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG92ZXJsYXkgPSBhd2FpdCB0aGlzLiNnZXRPdmVybGF5KCk7XG4gICAgaWYgKCFvdmVybGF5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gZmluZCB0aGUgXCJBZGRcIiBidXR0b24uIFRoZSBhdXRvY29tcGxldGUgaXMgY2xvc2VkLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYnV0dG9uID0gYXdhaXQgb3ZlcmxheS5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ2J1dHRvbi5za3ktYXV0b2NvbXBsZXRlLWFjdGlvbi1hZGQnXG4gICAgKTtcblxuICAgIGlmICghYnV0dG9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgXCJBZGRcIiBidXR0b24gY2Fubm90IGJlIGNsaWNrZWQgYmVjYXVzZSBpdCBkb2VzIG5vdCBleGlzdC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IGJ1dHRvbi5jbGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyB0aGUgXCJTaG93IG1vcmVcIiBidXR0b24uXG4gICAqIChUaGUgXCJTaG93IG1vcmVcIiBmdW5jdGlvbmFsaXR5IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcHVibGljIEFQSVxuICAgKiBvZiBhIFwidmFuaWxsYVwiIGF1dG9jb21wbGV0ZSBjb21wb25lbnQsIHNvIHRoaXMgbWV0aG9kIGlzIHByb3RlY3RlZFxuICAgKiB0byBwcmV2ZW50IGNvbnN1bWVycyBvZiB0aGUgYXV0b2NvbXBsZXRlIGhhcm5lc3MgZnJvbSBjYWxsaW5nIGl0LlxuICAgKiBUaGUgbG9va3VwIGhhcm5lc3MsIHdoaWNoIGV4dGVuZHMgdGhlIGF1dG9jb21wbGV0ZSBoYXJuZXNzLCBtYXlcbiAgICogc3RpbGwgYWNjZXNzIHRoaXMgZmVhdHVyZSwgaG93ZXZlci4pXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY2xpY2tTaG93TW9yZUJ1dHRvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvdmVybGF5ID0gYXdhaXQgdGhpcy4jZ2V0T3ZlcmxheSgpO1xuXG4gICAgaWYgKCFvdmVybGF5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gZmluZCB0aGUgXCJTaG93IG1vcmVcIiBidXR0b24uICcgK1xuICAgICAgICAgICdUaGUgYXV0b2NvbXBsZXRlIGlzIGNsb3NlZC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IG92ZXJsYXkucXVlcnlTZWxlY3RvcihcbiAgICAgICdidXR0b24uc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24tbW9yZSdcbiAgICApO1xuXG4gICAgaWYgKCFidXR0b24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBcIlNob3cgbW9yZVwiIGJ1dHRvbiBjYW5ub3QgYmUgY2xpY2tlZCBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgYnV0dG9uLmNsaWNrKCk7XG4gIH1cblxuICBhc3luYyAjZ2V0T3ZlcmxheSgpOiBQcm9taXNlPFNreU92ZXJsYXlIYXJuZXNzIHwgbnVsbD4ge1xuICAgIGNvbnN0IG92ZXJsYXlJZCA9IGF3YWl0IChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5nZXRBcmlhT3ducygpO1xuXG4gICAgcmV0dXJuIG92ZXJsYXlJZFxuICAgICAgPyB0aGlzLiNkb2N1bWVudFJvb3RMb2NhdG9yLmxvY2F0b3JGb3JPcHRpb25hbChcbiAgICAgICAgICBTa3lPdmVybGF5SGFybmVzcy53aXRoKHsgc2VsZWN0b3I6IGAjJHtvdmVybGF5SWR9YCB9KVxuICAgICAgICApKClcbiAgICAgIDogbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ComponentHarness } from '@angular/cdk/testing';
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export class SkyAutocompleteInputHarness extends ComponentHarness {
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
static { this.hostSelector = '[skyAutocomplete]'; }
|
|
10
|
+
/**
|
|
11
|
+
* Blurs the input.
|
|
12
|
+
*/
|
|
13
|
+
async blur() {
|
|
14
|
+
return (await this.host()).blur();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Clears the input value.
|
|
18
|
+
*/
|
|
19
|
+
async clear() {
|
|
20
|
+
return (await this.host()).clear();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Enters text into the input.
|
|
24
|
+
*/
|
|
25
|
+
async enterText(value) {
|
|
26
|
+
const el = await this.host();
|
|
27
|
+
await el.focus();
|
|
28
|
+
await el.clear();
|
|
29
|
+
await el.sendKeys(value);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Focuses the input.
|
|
33
|
+
*/
|
|
34
|
+
async focus() {
|
|
35
|
+
return (await this.host()).focus();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Gets the value of the input.
|
|
39
|
+
*/
|
|
40
|
+
async getValue() {
|
|
41
|
+
return (await this.host()).getProperty('value');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Whether the input is disabled.
|
|
45
|
+
*/
|
|
46
|
+
async isDisabled() {
|
|
47
|
+
const disabled = await (await this.host()).getAttribute('disabled');
|
|
48
|
+
return disabled !== null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Whether the input is focused.
|
|
52
|
+
*/
|
|
53
|
+
async isFocused() {
|
|
54
|
+
return (await this.host()).isFocused();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Returns the value of the input's `aria-owns` attribute.
|
|
58
|
+
*/
|
|
59
|
+
async getAriaOwns() {
|
|
60
|
+
return (await this.host()).getAttribute('aria-owns');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWlucHV0LWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3Rlc3Rpbmcvc3JjL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUtaW5wdXQtaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RDs7R0FFRztBQUNILE1BQU0sT0FBTywyQkFBNEIsU0FBUSxnQkFBZ0I7SUFDL0Q7O09BRUc7YUFDVyxpQkFBWSxHQUFHLG1CQUFtQixDQUFDO0lBRWpEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWE7UUFDbEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxRQUFRO1FBQ25CLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEUsT0FBTyxRQUFRLEtBQUssSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxXQUFXO1FBQ3RCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50SGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreUF1dG9jb21wbGV0ZUlucHV0SGFybmVzcyBleHRlbmRzIENvbXBvbmVudEhhcm5lc3Mge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhvc3RTZWxlY3RvciA9ICdbc2t5QXV0b2NvbXBsZXRlXSc7XG5cbiAgLyoqXG4gICAqIEJsdXJzIHRoZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBibHVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ob3N0KCkpLmJsdXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ob3N0KCkpLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJzIHRleHQgaW50byB0aGUgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW50ZXJUZXh0KHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbCA9IGF3YWl0IHRoaXMuaG9zdCgpO1xuICAgIGF3YWl0IGVsLmZvY3VzKCk7XG4gICAgYXdhaXQgZWwuY2xlYXIoKTtcbiAgICBhd2FpdCBlbC5zZW5kS2V5cyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRm9jdXNlcyB0aGUgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9jdXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmhvc3QoKSkuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS5nZXRQcm9wZXJ0eSgndmFsdWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRpc2FibGVkID0gYXdhaXQgKGF3YWl0IHRoaXMuaG9zdCgpKS5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgcmV0dXJuIGRpc2FibGVkICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGlucHV0IGlzIGZvY3VzZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNGb2N1c2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ob3N0KCkpLmlzRm9jdXNlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCdzIGBhcmlhLW93bnNgIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBcmlhT3ducygpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS5nZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ComponentHarness, HarnessPredicate, } from '@angular/cdk/testing';
|
|
2
|
+
/**
|
|
3
|
+
* Harness for interacting with an autocomplete search results in tests.
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export class SkyAutocompleteSearchResultHarness extends ComponentHarness {
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
static { this.hostSelector = '.sky-autocomplete-result'; }
|
|
11
|
+
/**
|
|
12
|
+
* Gets a `HarnessPredicate` that can be used to search for a
|
|
13
|
+
* `SkyAutocompleteSearchResultHarness` that meets certain criteria.
|
|
14
|
+
*/
|
|
15
|
+
static with(filters) {
|
|
16
|
+
return new HarnessPredicate(SkyAutocompleteSearchResultHarness, filters).addOption('textContent', filters.text, async (harness, text) => HarnessPredicate.stringMatches(await harness.getText(), text));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns the value of the search result's descriptor property.
|
|
20
|
+
* This value is set by the autocomplete's `descriptorProperty` input.
|
|
21
|
+
*/
|
|
22
|
+
async getDescriptorValue() {
|
|
23
|
+
return (await (await this.host()).getAttribute('data-descriptor-value'));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Returns a child harness.
|
|
27
|
+
*/
|
|
28
|
+
async queryHarness(query) {
|
|
29
|
+
return this.locatorForOptional(query)();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Selects the search result.
|
|
33
|
+
*/
|
|
34
|
+
async select() {
|
|
35
|
+
return (await this.host()).click();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Returns the text of the search result.
|
|
39
|
+
*/
|
|
40
|
+
async getText() {
|
|
41
|
+
return (await this.host()).text();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXNlYXJjaC1yZXN1bHQtaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvdGVzdGluZy9zcmMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1zZWFyY2gtcmVzdWx0LWhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsR0FFakIsTUFBTSxzQkFBc0IsQ0FBQztBQUk5Qjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0NBQW1DLFNBQVEsZ0JBQWdCO0lBQ3RFOztPQUVHO2FBQ1csaUJBQVksR0FBRywwQkFBMEIsQ0FBQztJQUV4RDs7O09BR0c7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUNoQixPQUFrRDtRQUVsRCxPQUFPLElBQUksZ0JBQWdCLENBQ3pCLGtDQUFrQyxFQUNsQyxPQUFPLENBQ1IsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUMvRCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQzlELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGtCQUFrQjtRQUM3QixPQUFPLENBQUMsTUFBTSxDQUNaLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUNsQixDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFXLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFlBQVksQ0FDdkIsS0FBc0I7UUFFdEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsTUFBTTtRQUNqQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsT0FBTztRQUNsQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50SGFybmVzcyxcbiAgSGFybmVzc1ByZWRpY2F0ZSxcbiAgSGFybmVzc1F1ZXJ5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5cbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdEhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9hdXRvY29tcGxldGUtc2VhcmNoLXJlc3VsdC1oYXJuZXNzLWZpbHRlcnMnO1xuXG4vKipcbiAqIEhhcm5lc3MgZm9yIGludGVyYWN0aW5nIHdpdGggYW4gYXV0b2NvbXBsZXRlIHNlYXJjaCByZXN1bHRzIGluIHRlc3RzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRIYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJy5za3ktYXV0b2NvbXBsZXRlLXJlc3VsdCc7XG5cbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGFcbiAgICogYFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdEhhcm5lc3NgIHRoYXQgbWVldHMgY2VydGFpbiBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChcbiAgICBmaWx0ZXJzOiBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRIYXJuZXNzRmlsdGVyc1xuICApOiBIYXJuZXNzUHJlZGljYXRlPFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdEhhcm5lc3M+IHtcbiAgICByZXR1cm4gbmV3IEhhcm5lc3NQcmVkaWNhdGUoXG4gICAgICBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRIYXJuZXNzLFxuICAgICAgZmlsdGVyc1xuICAgICkuYWRkT3B0aW9uKCd0ZXh0Q29udGVudCcsIGZpbHRlcnMudGV4dCwgYXN5bmMgKGhhcm5lc3MsIHRleHQpID0+XG4gICAgICBIYXJuZXNzUHJlZGljYXRlLnN0cmluZ01hdGNoZXMoYXdhaXQgaGFybmVzcy5nZXRUZXh0KCksIHRleHQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2VhcmNoIHJlc3VsdCdzIGRlc2NyaXB0b3IgcHJvcGVydHkuXG4gICAqIFRoaXMgdmFsdWUgaXMgc2V0IGJ5IHRoZSBhdXRvY29tcGxldGUncyBgZGVzY3JpcHRvclByb3BlcnR5YCBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXNjcmlwdG9yVmFsdWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IChcbiAgICAgIGF3YWl0IHRoaXMuaG9zdCgpXG4gICAgKS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVzY3JpcHRvci12YWx1ZScpKSBhcyBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNoaWxkIGhhcm5lc3MuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlIYXJuZXNzPFQgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzPihcbiAgICBxdWVyeTogSGFybmVzc1F1ZXJ5PFQ+XG4gICk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwocXVlcnkpKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgc2VhcmNoIHJlc3VsdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWxlY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmhvc3QoKSkuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IG9mIHRoZSBzZWFyY2ggcmVzdWx0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS50ZXh0KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { By } from '@angular/platform-browser';
|
|
2
|
+
import { SkyAppTestUtility } from '@skyux-sdk/testing';
|
|
3
|
+
/**
|
|
4
|
+
* Allows interaction with a SKY UX country field component.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export class SkyCountryFieldFixture {
|
|
8
|
+
#debugEl;
|
|
9
|
+
/**
|
|
10
|
+
* The value of the input field's autocomplete attribute.
|
|
11
|
+
*/
|
|
12
|
+
get autocompleteAttribute() {
|
|
13
|
+
return this.#getInputElement().getAttribute('autocomplete');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A flag indicating if the country flag is currently visible.
|
|
17
|
+
* The flag will be visible only if a selection has been made
|
|
18
|
+
* and if the hideSelectedCountryFlag option is false.
|
|
19
|
+
*/
|
|
20
|
+
get countryFlagIsVisible() {
|
|
21
|
+
const flag = this.#getCountryFlag();
|
|
22
|
+
return flag !== null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A flag indicating whether or not the input has been disabled.
|
|
26
|
+
*/
|
|
27
|
+
get disabled() {
|
|
28
|
+
return this.#getInputElement().disabled;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The value of the input field.
|
|
32
|
+
*/
|
|
33
|
+
get searchText() {
|
|
34
|
+
return this.#getInputElement().value;
|
|
35
|
+
}
|
|
36
|
+
#fixture;
|
|
37
|
+
constructor(fixture, skyTestId) {
|
|
38
|
+
this.#fixture = fixture;
|
|
39
|
+
this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-country-field');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Enters the search text into the input field displaying search results, but making no selection.
|
|
43
|
+
* @param searchText The name of the country to select.
|
|
44
|
+
* @returns The list of country names matching the search text.
|
|
45
|
+
*/
|
|
46
|
+
async search(searchText) {
|
|
47
|
+
const resultNodes = await this.#searchAndGetResults(searchText, this.#fixture);
|
|
48
|
+
const resultArray = Array.prototype.slice.call(resultNodes);
|
|
49
|
+
const results = resultArray.map((result) => {
|
|
50
|
+
const countryNameEl = result.querySelector('.sky-highlight-mark');
|
|
51
|
+
const countryName = SkyAppTestUtility.getText(countryNameEl);
|
|
52
|
+
return countryName;
|
|
53
|
+
});
|
|
54
|
+
this.#fixture.detectChanges();
|
|
55
|
+
await this.#fixture.whenStable();
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Enters the search text into the input field and selects the first result (if any).
|
|
60
|
+
* @param searchText The name of the country to select.
|
|
61
|
+
*/
|
|
62
|
+
async searchAndSelectFirstResult(searchText) {
|
|
63
|
+
await this.#searchAndSelect(searchText, 0, this.#fixture);
|
|
64
|
+
this.#fixture.detectChanges();
|
|
65
|
+
return this.#fixture.whenStable();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Clears the country selection and input field.
|
|
69
|
+
*/
|
|
70
|
+
clear() {
|
|
71
|
+
this.#enterSearch('', this.#fixture);
|
|
72
|
+
this.#fixture.detectChanges();
|
|
73
|
+
return this.#fixture.whenStable();
|
|
74
|
+
}
|
|
75
|
+
//#region helpers
|
|
76
|
+
#getCountryFlag() {
|
|
77
|
+
return this.#debugEl.query(By.css('.sky-country-field-flag'));
|
|
78
|
+
}
|
|
79
|
+
#getAutocompleteElement() {
|
|
80
|
+
return document.querySelector('.sky-autocomplete-results');
|
|
81
|
+
}
|
|
82
|
+
#getInputElement() {
|
|
83
|
+
const debugEl = this.#debugEl.query(By.css('textarea'));
|
|
84
|
+
return debugEl.nativeElement;
|
|
85
|
+
}
|
|
86
|
+
#blurInput(fixture) {
|
|
87
|
+
SkyAppTestUtility.fireDomEvent(this.#getInputElement(), 'blur');
|
|
88
|
+
fixture.detectChanges();
|
|
89
|
+
return fixture.whenStable();
|
|
90
|
+
}
|
|
91
|
+
#enterSearch(newValue, fixture) {
|
|
92
|
+
const inputElement = this.#getInputElement();
|
|
93
|
+
inputElement.value = newValue;
|
|
94
|
+
SkyAppTestUtility.fireDomEvent(inputElement, 'focus');
|
|
95
|
+
SkyAppTestUtility.fireDomEvent(inputElement, 'keyup');
|
|
96
|
+
SkyAppTestUtility.fireDomEvent(inputElement, 'input');
|
|
97
|
+
fixture.detectChanges();
|
|
98
|
+
return fixture.whenStable();
|
|
99
|
+
}
|
|
100
|
+
async #searchAndGetResults(newValue, fixture) {
|
|
101
|
+
await this.#enterSearch(newValue, fixture);
|
|
102
|
+
fixture.detectChanges();
|
|
103
|
+
await fixture.whenStable();
|
|
104
|
+
return this.#getAutocompleteElement().querySelectorAll('.sky-autocomplete-result');
|
|
105
|
+
}
|
|
106
|
+
async #searchAndSelect(newValue, index, fixture) {
|
|
107
|
+
const inputElement = this.#getInputElement();
|
|
108
|
+
const searchResults = await this.#searchAndGetResults(newValue, fixture);
|
|
109
|
+
if (searchResults.length < index + 1) {
|
|
110
|
+
throw new Error('Index out of range for results');
|
|
111
|
+
}
|
|
112
|
+
// Note: the ordering of these events is important!
|
|
113
|
+
SkyAppTestUtility.fireDomEvent(inputElement, 'change');
|
|
114
|
+
SkyAppTestUtility.fireDomEvent(searchResults[index], 'mousedown');
|
|
115
|
+
this.#blurInput(fixture);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC1maXh0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC90ZXN0aW5nL3NyYy9jb3VudHJ5LWZpZWxkL2NvdW50cnktZmllbGQtZml4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxRQUFRLENBQWU7SUFFdkI7O09BRUc7SUFDSCxJQUFXLHFCQUFxQjtRQUM5QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsb0JBQW9CO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQyxPQUFPLElBQUksS0FBSyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUSxDQUF3QjtJQUVoQyxZQUFZLE9BQThCLEVBQUUsU0FBaUI7UUFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FDdkQsT0FBTyxFQUNQLFNBQVMsRUFDVCxtQkFBbUIsQ0FDcEIsQ0FBQztJQUNKLENB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SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQ3hCLFFBQWdCLEVBQ2hCLE9BQThCO1FBRTlCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsZ0JBQWdCLENBQ3BELDBCQUEwQixDQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsUUFBZ0IsRUFDaEIsS0FBYSxFQUNiLE9BQThCO1FBRTlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV6RSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkQ7UUFFRCxtREFBbUQ7UUFDbkQsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVidWdFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEJ5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTa3lBcHBUZXN0VXRpbGl0eSB9IGZyb20gJ0Bza3l1eC1zZGsvdGVzdGluZyc7XG5cbi8qKlxuICogQWxsb3dzIGludGVyYWN0aW9uIHdpdGggYSBTS1kgVVggY291bnRyeSBmaWVsZCBjb21wb25lbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreUNvdW50cnlGaWVsZEZpeHR1cmUge1xuICAjZGVidWdFbDogRGVidWdFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGlucHV0IGZpZWxkJ3MgYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlQXR0cmlidXRlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLiNnZXRJbnB1dEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoJ2F1dG9jb21wbGV0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBjb3VudHJ5IGZsYWcgaXMgY3VycmVudGx5IHZpc2libGUuXG4gICAqIFRoZSBmbGFnIHdpbGwgYmUgdmlzaWJsZSBvbmx5IGlmIGEgc2VsZWN0aW9uIGhhcyBiZWVuIG1hZGVcbiAgICogYW5kIGlmIHRoZSBoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZyBvcHRpb24gaXMgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvdW50cnlGbGFnSXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZsYWcgPSB0aGlzLiNnZXRDb3VudHJ5RmxhZygpO1xuICAgIHJldHVybiBmbGFnICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCBoYXMgYmVlbiBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2dldElucHV0RWxlbWVudCgpLmRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlYXJjaFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZ2V0SW5wdXRFbGVtZW50KCkudmFsdWU7XG4gIH1cblxuICAjZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55Piwgc2t5VGVzdElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLiNmaXh0dXJlID0gZml4dHVyZTtcbiAgICB0aGlzLiNkZWJ1Z0VsID0gU2t5QXBwVGVzdFV0aWxpdHkuZ2V0RGVidWdFbGVtZW50QnlUZXN0SWQoXG4gICAgICBmaXh0dXJlLFxuICAgICAgc2t5VGVzdElkLFxuICAgICAgJ3NreS1jb3VudHJ5LWZpZWxkJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJzIHRoZSBzZWFyY2ggdGV4dCBpbnRvIHRoZSBpbnB1dCBmaWVsZCBkaXNwbGF5aW5nIHNlYXJjaCByZXN1bHRzLCBidXQgbWFraW5nIG5vIHNlbGVjdGlvbi5cbiAgICogQHBhcmFtIHNlYXJjaFRleHQgVGhlIG5hbWUgb2YgdGhlIGNvdW50cnkgdG8gc2VsZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBjb3VudHJ5IG5hbWVzIG1hdGNoaW5nIHRoZSBzZWFyY2ggdGV4dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWFyY2goc2VhcmNoVGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJlc3VsdE5vZGVzID0gYXdhaXQgdGhpcy4jc2VhcmNoQW5kR2V0UmVzdWx0cyhcbiAgICAgIHNlYXJjaFRleHQsXG4gICAgICB0aGlzLiNmaXh0dXJlXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHRBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHJlc3VsdE5vZGVzKTtcbiAgICBjb25zdCByZXN1bHRzID0gcmVzdWx0QXJyYXkubWFwKChyZXN1bHQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBjb3VudHJ5TmFtZUVsID0gcmVzdWx0LnF1ZXJ5U2VsZWN0b3IoJy5za3ktaGlnaGxpZ2h0LW1hcmsnKTtcbiAgICAgIGNvbnN0IGNvdW50cnlOYW1lID0gU2t5QXBwVGVzdFV0aWxpdHkuZ2V0VGV4dChjb3VudHJ5TmFtZUVsKSE7XG4gICAgICByZXR1cm4gY291bnRyeU5hbWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICBhd2FpdCB0aGlzLiNmaXh0dXJlLndoZW5TdGFibGUoKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycyB0aGUgc2VhcmNoIHRleHQgaW50byB0aGUgaW5wdXQgZmllbGQgYW5kIHNlbGVjdHMgdGhlIGZpcnN0IHJlc3VsdCAoaWYgYW55KS5cbiAgICogQHBhcmFtIHNlYXJjaFRleHQgVGhlIG5hbWUgb2YgdGhlIGNvdW50cnkgdG8gc2VsZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlYXJjaEFuZFNlbGVjdEZpcnN0UmVzdWx0KHNlYXJjaFRleHQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuI3NlYXJjaEFuZFNlbGVjdChzZWFyY2hUZXh0LCAwLCB0aGlzLiNmaXh0dXJlKTtcblxuICAgIHRoaXMuI2ZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0aGlzLiNmaXh0dXJlLndoZW5TdGFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGNvdW50cnkgc2VsZWN0aW9uIGFuZCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiNlbnRlclNlYXJjaCgnJywgdGhpcy4jZml4dHVyZSk7XG5cbiAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gdGhpcy4jZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gIH1cblxuICAvLyNyZWdpb24gaGVscGVyc1xuXG4gICNnZXRDb3VudHJ5RmxhZygpOiBEZWJ1Z0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLiNkZWJ1Z0VsLnF1ZXJ5KEJ5LmNzcygnLnNreS1jb3VudHJ5LWZpZWxkLWZsYWcnKSk7XG4gIH1cblxuICAjZ2V0QXV0b2NvbXBsZXRlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktYXV0b2NvbXBsZXRlLXJlc3VsdHMnKSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gICNnZXRJbnB1dEVsZW1lbnQoKTogSFRNTFRleHRBcmVhRWxlbWVudCB7XG4gICAgY29uc3QgZGVidWdFbCA9IHRoaXMuI2RlYnVnRWwucXVlcnkoQnkuY3NzKCd0ZXh0YXJlYScpKTtcbiAgICByZXR1cm4gZGVidWdFbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIH1cblxuICAjYmx1cklucHV0KGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIFNreUFwcFRlc3RVdGlsaXR5LmZpcmVEb21FdmVudCh0aGlzLiNnZXRJbnB1dEVsZW1lbnQoKSwgJ2JsdXInKTtcbiAgICBmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gIH1cblxuICAjZW50ZXJTZWFyY2goXG4gICAgbmV3VmFsdWU6IHN0cmluZyxcbiAgICBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy4jZ2V0SW5wdXRFbGVtZW50KCk7XG4gICAgaW5wdXRFbGVtZW50LnZhbHVlID0gbmV3VmFsdWU7XG4gICAgU2t5QXBwVGVzdFV0aWxpdHkuZmlyZURvbUV2ZW50KGlucHV0RWxlbWVudCwgJ2ZvY3VzJyk7XG4gICAgU2t5QXBwVGVzdFV0aWxpdHkuZmlyZURvbUV2ZW50KGlucHV0RWxlbWVudCwgJ2tleXVwJyk7XG4gICAgU2t5QXBwVGVzdFV0aWxpdHkuZmlyZURvbUV2ZW50KGlucHV0RWxlbWVudCwgJ2lucHV0Jyk7XG4gICAgZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIGZpeHR1cmUud2hlblN0YWJsZSgpO1xuICB9XG5cbiAgYXN5bmMgI3NlYXJjaEFuZEdldFJlc3VsdHMoXG4gICAgbmV3VmFsdWU6IHN0cmluZyxcbiAgICBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT5cbiAgKTogUHJvbWlzZTxOb2RlTGlzdE9mPEhUTUxFbGVtZW50Pj4ge1xuICAgIGF3YWl0IHRoaXMuI2VudGVyU2VhcmNoKG5ld1ZhbHVlLCBmaXh0dXJlKTtcbiAgICBmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICBhd2FpdCBmaXh0dXJlLndoZW5TdGFibGUoKTtcbiAgICByZXR1cm4gdGhpcy4jZ2V0QXV0b2NvbXBsZXRlRWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnLnNreS1hdXRvY29tcGxldGUtcmVzdWx0J1xuICAgICk7XG4gIH1cblxuICBhc3luYyAjc2VhcmNoQW5kU2VsZWN0KFxuICAgIG5ld1ZhbHVlOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy4jZ2V0SW5wdXRFbGVtZW50KCk7XG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGF3YWl0IHRoaXMuI3NlYXJjaEFuZEdldFJlc3VsdHMobmV3VmFsdWUsIGZpeHR1cmUpO1xuXG4gICAgaWYgKHNlYXJjaFJlc3VsdHMubGVuZ3RoIDwgaW5kZXggKyAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZSBmb3IgcmVzdWx0cycpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHRoZSBvcmRlcmluZyBvZiB0aGVzZSBldmVudHMgaXMgaW1wb3J0YW50IVxuICAgIFNreUFwcFRlc3RVdGlsaXR5LmZpcmVEb21FdmVudChpbnB1dEVsZW1lbnQsICdjaGFuZ2UnKTtcbiAgICBTa3lBcHBUZXN0VXRpbGl0eS5maXJlRG9tRXZlbnQoc2VhcmNoUmVzdWx0c1tpbmRleF0sICdtb3VzZWRvd24nKTtcbiAgICB0aGlzLiNibHVySW5wdXQoZml4dHVyZSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb24gaGVscGVyc1xufVxuIl19
|
|
@@ -5,14 +5,14 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
7
7
|
export class SkyCountryFieldTestingModule {
|
|
8
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyCountryFieldTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SkyCountryFieldTestingModule, exports: [SkyCountryFieldModule] }); }
|
|
10
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyCountryFieldTestingModule, imports: [SkyCountryFieldModule] }); }
|
|
8
11
|
}
|
|
9
|
-
|
|
10
|
-
SkyCountryFieldTestingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SkyCountryFieldTestingModule, exports: [SkyCountryFieldModule] });
|
|
11
|
-
SkyCountryFieldTestingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyCountryFieldTestingModule, imports: [SkyCountryFieldModule] });
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyCountryFieldTestingModule, decorators: [{
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyCountryFieldTestingModule, decorators: [{
|
|
13
13
|
type: NgModule,
|
|
14
14
|
args: [{
|
|
15
15
|
exports: [SkyCountryFieldModule],
|
|
16
16
|
}]
|
|
17
17
|
}] });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC10ZXN0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvdGVzdGluZy9zcmMvY291bnRyeS1maWVsZC9jb3VudHJ5LWZpZWxkLXRlc3RpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUV0RDs7R0FFRztBQUlILE1BQU0sT0FBTyw0QkFBNEI7OEdBQTVCLDRCQUE0QjsrR0FBNUIsNEJBQTRCLFlBRjdCLHFCQUFxQjsrR0FFcEIsNEJBQTRCLFlBRjdCLHFCQUFxQjs7MkZBRXBCLDRCQUE0QjtrQkFIeEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5Q291bnRyeUZpZWxkTW9kdWxlIH0gZnJvbSAnQHNreXV4L2xvb2t1cCc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtTa3lDb3VudHJ5RmllbGRNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lDb3VudHJ5RmllbGRUZXN0aW5nTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { SkyAutocompleteHarness } from '../autocomplete/autocomplete-harness';
|
|
2
|
+
import { SkyLookupSelectionsListHarness } from './lookup-selections-list-harness';
|
|
3
|
+
import { SkyLookupShowMorePickerHarness } from './lookup-show-more-picker-harness';
|
|
4
|
+
/**
|
|
5
|
+
* Harness for interacting with a lookup component in tests.
|
|
6
|
+
*/
|
|
7
|
+
export class SkyLookupHarness extends SkyAutocompleteHarness {
|
|
8
|
+
/**
|
|
9
|
+
* Finds a standard lookup component, or a lookup component that is wrapped by an input box component.
|
|
10
|
+
* For input box implementations, we need to use the `.sky-input-box` selector since the `sky-lookup`
|
|
11
|
+
* element is removed from the DOM.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
static { this.hostSelector = 'sky-lookup,.sky-input-box'; }
|
|
15
|
+
#documentRootLocator = this.documentRootLocatorFactory();
|
|
16
|
+
#getAutocompleteHarness = this.locatorFor(SkyAutocompleteHarness);
|
|
17
|
+
#getSelectionsListHarness = this.locatorFor(SkyLookupSelectionsListHarness);
|
|
18
|
+
#getWrapper = this.locatorFor('.sky-lookup');
|
|
19
|
+
/**
|
|
20
|
+
* Gets a `HarnessPredicate` that can be used to search for a
|
|
21
|
+
* `SkyLookupHarness` that meets certain criteria.
|
|
22
|
+
*/
|
|
23
|
+
static with(filters) {
|
|
24
|
+
return SkyLookupHarness.getDataSkyIdPredicate(filters);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Clicks the "Add" button on the search results panel.
|
|
28
|
+
*/
|
|
29
|
+
async clickAddButton() {
|
|
30
|
+
await this.focus();
|
|
31
|
+
await super.clickAddButton();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Clicks the "Show more" button on the search results panel.
|
|
35
|
+
*/
|
|
36
|
+
async clickShowMoreButton() {
|
|
37
|
+
await this.focus();
|
|
38
|
+
await super.clickShowMoreButton();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Dismisses the selections made with a multiselect lookup.
|
|
42
|
+
*/
|
|
43
|
+
async dismissSelections() {
|
|
44
|
+
return (await this.#getSelectionsListHarness()).dismissSelections();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Gets the "Show more" picker harness.
|
|
48
|
+
*/
|
|
49
|
+
async getShowMorePicker() {
|
|
50
|
+
const pickerId = await (await (await this.#getAutocompleteHarness()).host()).getAttribute('data-sky-lookup-show-more-picker-id');
|
|
51
|
+
const defaultPicker = await this.#documentRootLocator.locatorForOptional(SkyLookupShowMorePickerHarness.with({ selector: `#${pickerId}` }))();
|
|
52
|
+
if (!defaultPicker) {
|
|
53
|
+
throw new Error('Cannot get the "Show more" picker because it is not open.');
|
|
54
|
+
}
|
|
55
|
+
return defaultPicker;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Gets a list of selections made with a multiselect lookup.
|
|
59
|
+
*/
|
|
60
|
+
async getSelections() {
|
|
61
|
+
return (await this.#getSelectionsListHarness()).getSelections();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Gets the text content of all selections made with a multiselect lookup.
|
|
65
|
+
*/
|
|
66
|
+
async getSelectionsText() {
|
|
67
|
+
return (await this.#getSelectionsListHarness()).getSelectionsText();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Whether the lookup allows for multiple selections.
|
|
71
|
+
*/
|
|
72
|
+
async isMultiselect() {
|
|
73
|
+
return !(await (await this.#getWrapper()).hasClass('sky-lookup-single'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3Rlc3Rpbmcvc3JjL2xvb2t1cC9sb29rdXAtaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUk5RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVuRjs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxzQkFBc0I7SUFDMUQ7Ozs7O09BS0c7YUFDb0IsaUJBQVksR0FBRywyQkFBMkIsQ0FBQztJQUVsRSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUV6RCx1QkFBdUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFbEUseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBRTVFLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTdDOzs7T0FHRztJQUNJLE1BQU0sQ0FBVSxJQUFJLENBQ3pCLE9BQWdDO1FBRWhDLE9BQU8sZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ2EsS0FBSyxDQUFDLGNBQWM7UUFDbEMsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsTUFBTSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ2EsS0FBSyxDQUFDLG1CQUFtQjtRQUN2QyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixNQUFNLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxpQkFBaUI7UUFDNUIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxpQkFBaUI7UUFDNUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUNwRCxDQUFDLFlBQVksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUN0RSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQ2xFLEVBQUUsQ0FBQztRQUVKLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztTQUNIO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFDeEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsYUFBYTtRQUN4QixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXJuZXNzUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuXG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVIYXJuZXNzIH0gZnJvbSAnLi4vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1oYXJuZXNzJztcblxuaW1wb3J0IHsgU2t5TG9va3VwSGFybmVzc0ZpbHRlcnMgfSBmcm9tICcuL2xvb2t1cC1oYXJuZXNzLWZpbHRlcnMnO1xuaW1wb3J0IHsgU2t5TG9va3VwU2VsZWN0aW9uSGFybmVzcyB9IGZyb20gJy4vbG9va3VwLXNlbGVjdGlvbi1oYXJuZXNzJztcbmltcG9ydCB7IFNreUxvb2t1cFNlbGVjdGlvbnNMaXN0SGFybmVzcyB9IGZyb20gJy4vbG9va3VwLXNlbGVjdGlvbnMtbGlzdC1oYXJuZXNzJztcbmltcG9ydCB7IFNreUxvb2t1cFNob3dNb3JlUGlja2VySGFybmVzcyB9IGZyb20gJy4vbG9va3VwLXNob3ctbW9yZS1waWNrZXItaGFybmVzcyc7XG5cbi8qKlxuICogSGFybmVzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhIGxvb2t1cCBjb21wb25lbnQgaW4gdGVzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lMb29rdXBIYXJuZXNzIGV4dGVuZHMgU2t5QXV0b2NvbXBsZXRlSGFybmVzcyB7XG4gIC8qKlxuICAgKiBGaW5kcyBhIHN0YW5kYXJkIGxvb2t1cCBjb21wb25lbnQsIG9yIGEgbG9va3VwIGNvbXBvbmVudCB0aGF0IGlzIHdyYXBwZWQgYnkgYW4gaW5wdXQgYm94IGNvbXBvbmVudC5cbiAgICogRm9yIGlucHV0IGJveCBpbXBsZW1lbnRhdGlvbnMsIHdlIG5lZWQgdG8gdXNlIHRoZSBgLnNreS1pbnB1dC1ib3hgIHNlbGVjdG9yIHNpbmNlIHRoZSBgc2t5LWxvb2t1cGBcbiAgICogZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIGhvc3RTZWxlY3RvciA9ICdza3ktbG9va3VwLC5za3ktaW5wdXQtYm94JztcblxuICAjZG9jdW1lbnRSb290TG9jYXRvciA9IHRoaXMuZG9jdW1lbnRSb290TG9jYXRvckZhY3RvcnkoKTtcblxuICAjZ2V0QXV0b2NvbXBsZXRlSGFybmVzcyA9IHRoaXMubG9jYXRvckZvcihTa3lBdXRvY29tcGxldGVIYXJuZXNzKTtcblxuICAjZ2V0U2VsZWN0aW9uc0xpc3RIYXJuZXNzID0gdGhpcy5sb2NhdG9yRm9yKFNreUxvb2t1cFNlbGVjdGlvbnNMaXN0SGFybmVzcyk7XG5cbiAgI2dldFdyYXBwZXIgPSB0aGlzLmxvY2F0b3JGb3IoJy5za3ktbG9va3VwJyk7XG5cbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGFcbiAgICogYFNreUxvb2t1cEhhcm5lc3NgIHRoYXQgbWVldHMgY2VydGFpbiBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgd2l0aChcbiAgICBmaWx0ZXJzOiBTa3lMb29rdXBIYXJuZXNzRmlsdGVyc1xuICApOiBIYXJuZXNzUHJlZGljYXRlPFNreUxvb2t1cEhhcm5lc3M+IHtcbiAgICByZXR1cm4gU2t5TG9va3VwSGFybmVzcy5nZXREYXRhU2t5SWRQcmVkaWNhdGUoZmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIHRoZSBcIkFkZFwiIGJ1dHRvbiBvbiB0aGUgc2VhcmNoIHJlc3VsdHMgcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgY2xpY2tBZGRCdXR0b24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5mb2N1cygpO1xuICAgIGF3YWl0IHN1cGVyLmNsaWNrQWRkQnV0dG9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIHRoZSBcIlNob3cgbW9yZVwiIGJ1dHRvbiBvbiB0aGUgc2VhcmNoIHJlc3VsdHMgcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgY2xpY2tTaG93TW9yZUJ1dHRvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmZvY3VzKCk7XG4gICAgYXdhaXQgc3VwZXIuY2xpY2tTaG93TW9yZUJ1dHRvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgc2VsZWN0aW9ucyBtYWRlIHdpdGggYSBtdWx0aXNlbGVjdCBsb29rdXAuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzbWlzc1NlbGVjdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRTZWxlY3Rpb25zTGlzdEhhcm5lc3MoKSkuZGlzbWlzc1NlbGVjdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBcIlNob3cgbW9yZVwiIHBpY2tlciBoYXJuZXNzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNob3dNb3JlUGlja2VyKCk6IFByb21pc2U8U2t5TG9va3VwU2hvd01vcmVQaWNrZXJIYXJuZXNzPiB7XG4gICAgY29uc3QgcGlja2VySWQgPSBhd2FpdCAoXG4gICAgICBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0QXV0b2NvbXBsZXRlSGFybmVzcygpKS5ob3N0KClcbiAgICApLmdldEF0dHJpYnV0ZSgnZGF0YS1za3ktbG9va3VwLXNob3ctbW9yZS1waWNrZXItaWQnKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQaWNrZXIgPSBhd2FpdCB0aGlzLiNkb2N1bWVudFJvb3RMb2NhdG9yLmxvY2F0b3JGb3JPcHRpb25hbChcbiAgICAgIFNreUxvb2t1cFNob3dNb3JlUGlja2VySGFybmVzcy53aXRoKHsgc2VsZWN0b3I6IGAjJHtwaWNrZXJJZH1gIH0pXG4gICAgKSgpO1xuXG4gICAgaWYgKCFkZWZhdWx0UGlja2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZ2V0IHRoZSBcIlNob3cgbW9yZVwiIHBpY2tlciBiZWNhdXNlIGl0IGlzIG5vdCBvcGVuLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRQaWNrZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2Ygc2VsZWN0aW9ucyBtYWRlIHdpdGggYSBtdWx0aXNlbGVjdCBsb29rdXAuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2VsZWN0aW9ucygpOiBQcm9taXNlPFNreUxvb2t1cFNlbGVjdGlvbkhhcm5lc3NbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0U2VsZWN0aW9uc0xpc3RIYXJuZXNzKCkpLmdldFNlbGVjdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYWxsIHNlbGVjdGlvbnMgbWFkZSB3aXRoIGEgbXVsdGlzZWxlY3QgbG9va3VwLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNlbGVjdGlvbnNUZXh0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldFNlbGVjdGlvbnNMaXN0SGFybmVzcygpKS5nZXRTZWxlY3Rpb25zVGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGxvb2t1cCBhbGxvd3MgZm9yIG11bHRpcGxlIHNlbGVjdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNNdWx0aXNlbGVjdCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gIShhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0V3JhcHBlcigpKS5oYXNDbGFzcygnc2t5LWxvb2t1cC1zaW5nbGUnKSk7XG4gIH1cbn1cbiJdfQ==
|