@skyux/lookup 11.7.0 → 11.9.0

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.
@@ -1,7 +1,6 @@
1
1
  import { SkyComponentHarness } from '@skyux/core/testing';
2
2
  /**
3
- * Harness for interacting with an search component in tests.
4
- * @internal
3
+ * Harness for interacting with a search component in tests.
5
4
  */
6
5
  export class SkySearchHarness extends SkyComponentHarness {
7
6
  /**
@@ -9,7 +8,10 @@ export class SkySearchHarness extends SkyComponentHarness {
9
8
  */
10
9
  static { this.hostSelector = 'sky-search'; }
11
10
  #getInput = this.locatorFor('input.sky-search-input');
11
+ #getClearButton = this.locatorFor('button.sky-search-btn-clear');
12
+ #getDismissButton = this.locatorForOptional('button.sky-search-btn-dismiss');
12
13
  #getSubmitButton = this.locatorFor('button.sky-search-btn-apply');
14
+ #getOpenButton = this.locatorFor('button.sky-search-btn-open');
13
15
  /**
14
16
  * Gets a `HarnessPredicate` that can be used to search for a
15
17
  * `SkySearchHarness` that meets certain criteria.
@@ -18,38 +20,76 @@ export class SkySearchHarness extends SkyComponentHarness {
18
20
  return this.getDataSkyIdPredicate(filters);
19
21
  }
20
22
  /**
21
- * Blurs the input.
23
+ * Blurs the search input.
22
24
  */
23
25
  async blur() {
26
+ await this.#assertIsExpanded('Failed to blur the search input.');
24
27
  await (await this.#getInput()).blur();
25
28
  }
26
29
  /**
27
- * Clears the input.
30
+ * Clears the search input.
28
31
  */
29
32
  async clear() {
33
+ await this.#assertIsExpanded('Failed to clear the search input.');
30
34
  const input = await this.#getInput();
31
35
  await input.focus();
32
36
  await input.clear();
33
- await this.#clickSubmitButton();
37
+ await this.clickSubmitButton();
34
38
  }
35
39
  /**
36
- * Enters text into the input and performs a search.
40
+ * Clicks the search input clear button.
41
+ */
42
+ async clickClearButton() {
43
+ await this.#assertIsExpanded('Failed to click clear button.');
44
+ return (await this.#getClearButton()).click();
45
+ }
46
+ /**
47
+ * Clicks search dismiss button to collapse search back to a button.
48
+ */
49
+ async clickDismissSearchButton() {
50
+ const button = await this.#getDismissButton();
51
+ if (!button) {
52
+ throw new Error('Cannot find dismiss search button. Is a collapsed search open?');
53
+ }
54
+ return button.click();
55
+ }
56
+ /**
57
+ * Clicks the search icon button that opens search input when it is collapsed.
58
+ */
59
+ async clickOpenSearchButton() {
60
+ const button = await this.#getOpenButton();
61
+ if (!(await this.isCollapsed())) {
62
+ throw new Error('Cannot click search open button as search is not collapsed');
63
+ }
64
+ return button.click();
65
+ }
66
+ /**
67
+ * Clicks the search submit button.
68
+ */
69
+ async clickSubmitButton() {
70
+ await this.#assertIsExpanded('Failed to click the submit button.');
71
+ return (await this.#getSubmitButton()).click();
72
+ }
73
+ /**
74
+ * Enters text into the search input and performs a search.
37
75
  */
38
76
  async enterText(value) {
77
+ await this.#assertIsExpanded('Failed to enter text into the search input.');
39
78
  const input = await this.#getInput();
40
79
  await input.clear();
41
80
  await input.focus();
42
81
  await input.sendKeys(value);
43
- await this.#clickSubmitButton();
82
+ await this.clickSubmitButton();
44
83
  }
45
84
  /**
46
- * Focuses the input.
85
+ * Focuses the search input.
47
86
  */
48
87
  async focus() {
88
+ await this.#assertIsExpanded('Failed to focus the search input.');
49
89
  await (await this.#getInput()).focus();
50
90
  }
51
91
  /**
52
- * Gets the search's aria-label.
92
+ * Gets the search input's `aria-label`.
53
93
  */
54
94
  async getAriaLabel() {
55
95
  return (await this.#getInput()).getAttribute('aria-label');
@@ -64,29 +104,40 @@ export class SkySearchHarness extends SkyComponentHarness {
64
104
  * Gets the value of the input's placeholder attribute.
65
105
  */
66
106
  async getPlaceholderText() {
107
+ await this.#assertIsExpanded('Failed to get the placeholder text.');
67
108
  return (await this.#getInput()).getAttribute('placeholder');
68
109
  }
69
110
  /**
70
- * Gets the value of the input.
111
+ * Gets the value of the search input.
71
112
  */
72
113
  async getValue() {
114
+ await this.#assertIsExpanded('Failed to get the value of the search input.');
73
115
  return (await this.#getInput()).getProperty('value');
74
116
  }
75
117
  /**
76
- * Whether the input is disabled.
118
+ * Whether the search input is collapsed.
119
+ */
120
+ async isCollapsed() {
121
+ return ((await (await this.#getOpenButton()).getAttribute('hidden')) === null);
122
+ }
123
+ /**
124
+ * Whether the search input is disabled.
77
125
  */
78
126
  async isDisabled() {
79
127
  const disabled = await (await this.#getInput()).getAttribute('disabled');
80
128
  return disabled !== null;
81
129
  }
82
130
  /**
83
- * Whether the input is focused.
131
+ * Whether the search input is focused.
84
132
  */
85
133
  async isFocused() {
134
+ await this.#assertIsExpanded('Failed to get the search input focus status.');
86
135
  return (await this.#getInput()).isFocused();
87
136
  }
88
- async #clickSubmitButton() {
89
- return (await this.#getSubmitButton()).click();
137
+ async #assertIsExpanded(errorMessage) {
138
+ if (await this.isCollapsed()) {
139
+ throw new Error(`${errorMessage} Search is collapsed.`);
140
+ }
90
141
  }
91
142
  }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3Rlc3Rpbmcvc3JjL3NlYXJjaC9zZWFyY2gtaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUkxRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBQ3ZEOztPQUVHO2FBQ1csaUJBQVksR0FBRyxZQUFZLENBQUM7SUFFMUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUV0RCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFFbEU7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsT0FBZ0M7UUFFaEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBYTtRQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQjtRQUM1QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsa0JBQWtCO1FBQzdCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsUUFBUTtRQUNuQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxLQUFLLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUztRQUNwQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQjtRQUN0QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXJuZXNzUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgU2t5Q29tcG9uZW50SGFybmVzcyB9IGZyb20gJ0Bza3l1eC9jb3JlL3Rlc3RpbmcnO1xuXG5pbXBvcnQgeyBTa3lTZWFyY2hIYXJuZXNzRmlsdGVycyB9IGZyb20gJy4vc2VhcmNoLWhhcm5lc3MtZmlsdGVycyc7XG5cbi8qKlxuICogSGFybmVzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhbiBzZWFyY2ggY29tcG9uZW50IGluIHRlc3RzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lTZWFyY2hIYXJuZXNzIGV4dGVuZHMgU2t5Q29tcG9uZW50SGFybmVzcyB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ3NreS1zZWFyY2gnO1xuXG4gICNnZXRJbnB1dCA9IHRoaXMubG9jYXRvckZvcignaW5wdXQuc2t5LXNlYXJjaC1pbnB1dCcpO1xuXG4gICNnZXRTdWJtaXRCdXR0b24gPSB0aGlzLmxvY2F0b3JGb3IoJ2J1dHRvbi5za3ktc2VhcmNoLWJ0bi1hcHBseScpO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhXG4gICAqIGBTa3lTZWFyY2hIYXJuZXNzYCB0aGF0IG1lZXRzIGNlcnRhaW4gY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGgoXG4gICAgZmlsdGVyczogU2t5U2VhcmNoSGFybmVzc0ZpbHRlcnMsXG4gICk6IEhhcm5lc3NQcmVkaWNhdGU8U2t5U2VhcmNoSGFybmVzcz4ge1xuICAgIHJldHVybiB0aGlzLmdldERhdGFTa3lJZFByZWRpY2F0ZShmaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCbHVycyB0aGUgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYmx1cigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuYmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLiNnZXRJbnB1dCgpO1xuICAgIGF3YWl0IGlucHV0LmZvY3VzKCk7XG4gICAgYXdhaXQgaW5wdXQuY2xlYXIoKTtcbiAgICBhd2FpdCB0aGlzLiNjbGlja1N1Ym1pdEJ1dHRvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycyB0ZXh0IGludG8gdGhlIGlucHV0IGFuZCBwZXJmb3JtcyBhIHNlYXJjaC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnRlclRleHQodmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKTtcbiAgICBhd2FpdCBpbnB1dC5jbGVhcigpO1xuICAgIGF3YWl0IGlucHV0LmZvY3VzKCk7XG4gICAgYXdhaXQgaW5wdXQuc2VuZEtleXModmFsdWUpO1xuICAgIGF3YWl0IHRoaXMuI2NsaWNrU3VibWl0QnV0dG9uKCk7XG4gIH1cblxuICAvKipcbiAgICogRm9jdXNlcyB0aGUgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9jdXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VhcmNoJ3MgYXJpYS1sYWJlbC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBcmlhTGFiZWwoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWFyY2gncyBhcmlhLWxhYmVsbGVkYnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QXJpYUxhYmVsbGVkYnkoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCdzIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQbGFjZWhvbGRlclRleHQoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5nZXRQcm9wZXJ0eSgndmFsdWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRpc2FibGVkID0gYXdhaXQgKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICByZXR1cm4gZGlzYWJsZWQgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5wdXQgaXMgZm9jdXNlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0ZvY3VzZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5pc0ZvY3VzZWQoKTtcbiAgfVxuXG4gIGFzeW5jICNjbGlja1N1Ym1pdEJ1dHRvbigpIHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldFN1Ym1pdEJ1dHRvbigpKS5jbGljaygpO1xuICB9XG59XG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3Rlc3Rpbmcvc3JjL3NlYXJjaC9zZWFyY2gtaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUkxRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxtQkFBbUI7SUFDdkQ7O09BRUc7YUFDVyxpQkFBWSxHQUFHLFlBQVksQ0FBQztJQUUxQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBRXRELGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDN0UsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2xFLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFFL0Q7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsT0FBZ0M7UUFFaEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1D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YW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lDb21wb25lbnRIYXJuZXNzIH0gZnJvbSAnQHNreXV4L2NvcmUvdGVzdGluZyc7XG5cbmltcG9ydCB7IFNreVNlYXJjaEhhcm5lc3NGaWx0ZXJzIH0gZnJvbSAnLi9zZWFyY2gtaGFybmVzcy1maWx0ZXJzJztcblxuLyoqXG4gKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgc2VhcmNoIGNvbXBvbmVudCBpbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNreVNlYXJjaEhhcm5lc3MgZXh0ZW5kcyBTa3lDb21wb25lbnRIYXJuZXNzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnc2t5LXNlYXJjaCc7XG5cbiAgI2dldElucHV0ID0gdGhpcy5sb2NhdG9yRm9yKCdpbnB1dC5za3ktc2VhcmNoLWlucHV0Jyk7XG5cbiAgI2dldENsZWFyQnV0dG9uID0gdGhpcy5sb2NhdG9yRm9yKCdidXR0b24uc2t5LXNlYXJjaC1idG4tY2xlYXInKTtcbiAgI2dldERpc21pc3NCdXR0b24gPSB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbCgnYnV0dG9uLnNreS1zZWFyY2gtYnRuLWRpc21pc3MnKTtcbiAgI2dldFN1Ym1pdEJ1dHRvbiA9IHRoaXMubG9jYXRvckZvcignYnV0dG9uLnNreS1zZWFyY2gtYnRuLWFwcGx5Jyk7XG4gICNnZXRPcGVuQnV0dG9uID0gdGhpcy5sb2NhdG9yRm9yKCdidXR0b24uc2t5LXNlYXJjaC1idG4tb3BlbicpO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhXG4gICAqIGBTa3lTZWFyY2hIYXJuZXNzYCB0aGF0IG1lZXRzIGNlcnRhaW4gY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGgoXG4gICAgZmlsdGVyczogU2t5U2VhcmNoSGFybmVzc0ZpbHRlcnMsXG4gICk6IEhhcm5lc3NQcmVkaWNhdGU8U2t5U2VhcmNoSGFybmVzcz4ge1xuICAgIHJldHVybiB0aGlzLmdldERhdGFTa3lJZFByZWRpY2F0ZShmaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCbHVycyB0aGUgc2VhcmNoIGlucHV0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJsdXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy4jYXNzZXJ0SXNFeHBhbmRlZCgnRmFpbGVkIHRvIGJsdXIgdGhlIHNlYXJjaCBpbnB1dC4nKTtcblxuICAgIGF3YWl0IChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5ibHVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzZWFyY2ggaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy4jYXNzZXJ0SXNFeHBhbmRlZCgnRmFpbGVkIHRvIGNsZWFyIHRoZSBzZWFyY2ggaW5wdXQuJyk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuI2dldElucHV0KCk7XG4gICAgYXdhaXQgaW5wdXQuZm9jdXMoKTtcbiAgICBhd2FpdCBpbnB1dC5jbGVhcigpO1xuICAgIGF3YWl0IHRoaXMuY2xpY2tTdWJtaXRCdXR0b24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIHNlYXJjaCBpbnB1dCBjbGVhciBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xpY2tDbGVhckJ1dHRvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLiNhc3NlcnRJc0V4cGFuZGVkKCdGYWlsZWQgdG8gY2xpY2sgY2xlYXIgYnV0dG9uLicpO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRDbGVhckJ1dHRvbigpKS5jbGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyBzZWFyY2ggZGlzbWlzcyBidXR0b24gdG8gY29sbGFwc2Ugc2VhcmNoIGJhY2sgdG8gYSBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xpY2tEaXNtaXNzU2VhcmNoQnV0dG9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IHRoaXMuI2dldERpc21pc3NCdXR0b24oKTtcblxuICAgIGlmICghYnV0dG9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCBkaXNtaXNzIHNlYXJjaCBidXR0b24uIElzIGEgY29sbGFwc2VkIHNlYXJjaCBvcGVuPycsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBidXR0b24uY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIHNlYXJjaCBpY29uIGJ1dHRvbiB0aGF0IG9wZW5zIHNlYXJjaCBpbnB1dCB3aGVuIGl0IGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbGlja09wZW5TZWFyY2hCdXR0b24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnV0dG9uID0gYXdhaXQgdGhpcy4jZ2V0T3BlbkJ1dHRvbigpO1xuXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5pc0NvbGxhcHNlZCgpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGNsaWNrIHNlYXJjaCBvcGVuIGJ1dHRvbiBhcyBzZWFyY2ggaXMgbm90IGNvbGxhcHNlZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBidXR0b24uY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIHNlYXJjaCBzdWJtaXQgYnV0dG9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsaWNrU3VibWl0QnV0dG9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuI2Fzc2VydElzRXhwYW5kZWQoJ0ZhaWxlZCB0byBjbGljayB0aGUgc3VibWl0IGJ1dHRvbi4nKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0U3VibWl0QnV0dG9uKCkpLmNsaWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJzIHRleHQgaW50byB0aGUgc2VhcmNoIGlucHV0IGFuZCBwZXJmb3JtcyBhIHNlYXJjaC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbnRlclRleHQodmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuI2Fzc2VydElzRXhwYW5kZWQoJ0ZhaWxlZCB0byBlbnRlciB0ZXh0IGludG8gdGhlIHNlYXJjaCBpbnB1dC4nKTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKTtcbiAgICBhd2FpdCBpbnB1dC5jbGVhcigpO1xuICAgIGF3YWl0IGlucHV0LmZvY3VzKCk7XG4gICAgYXdhaXQgaW5wdXQuc2VuZEtleXModmFsdWUpO1xuICAgIGF3YWl0IHRoaXMuY2xpY2tTdWJtaXRCdXR0b24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBzZWFyY2ggaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZm9jdXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy4jYXNzZXJ0SXNFeHBhbmRlZCgnRmFpbGVkIHRvIGZvY3VzIHRoZSBzZWFyY2ggaW5wdXQuJyk7XG5cbiAgICBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWFyY2ggaW5wdXQncyBgYXJpYS1sYWJlbGAuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QXJpYUxhYmVsKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VhcmNoJ3MgYXJpYS1sYWJlbGxlZGJ5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFyaWFMYWJlbGxlZGJ5KCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQncyBwbGFjZWhvbGRlciBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UGxhY2Vob2xkZXJUZXh0KCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMuI2Fzc2VydElzRXhwYW5kZWQoJ0ZhaWxlZCB0byBnZXQgdGhlIHBsYWNlaG9sZGVyIHRleHQuJyk7XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldElucHV0KCkpLmdldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc2VhcmNoIGlucHV0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy4jYXNzZXJ0SXNFeHBhbmRlZChcbiAgICAgICdGYWlsZWQgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgc2VhcmNoIGlucHV0LicsXG4gICAgKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy4jZ2V0SW5wdXQoKSkuZ2V0UHJvcGVydHkoJ3ZhbHVlJyk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VhcmNoIGlucHV0IGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0NvbGxhcHNlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgKGF3YWl0IChhd2FpdCB0aGlzLiNnZXRPcGVuQnV0dG9uKCkpLmdldEF0dHJpYnV0ZSgnaGlkZGVuJykpID09PSBudWxsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzZWFyY2ggaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNEaXNhYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IGF3YWl0IChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgcmV0dXJuIGRpc2FibGVkICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNlYXJjaCBpbnB1dCBpcyBmb2N1c2VkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGlzRm9jdXNlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLiNhc3NlcnRJc0V4cGFuZGVkKFxuICAgICAgJ0ZhaWxlZCB0byBnZXQgdGhlIHNlYXJjaCBpbnB1dCBmb2N1cyBzdGF0dXMuJyxcbiAgICApO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRJbnB1dCgpKS5pc0ZvY3VzZWQoKTtcbiAgfVxuXG4gIGFzeW5jICNhc3NlcnRJc0V4cGFuZGVkKGVycm9yTWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaXNDb2xsYXBzZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0gU2VhcmNoIGlzIGNvbGxhcHNlZC5gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -445,8 +445,7 @@ class SkyLookupSelectionsListHarness extends SkyTokensHarness {
445
445
  }
446
446
 
447
447
  /**
448
- * Harness for interacting with an search component in tests.
449
- * @internal
448
+ * Harness for interacting with a search component in tests.
450
449
  */
451
450
  class SkySearchHarness extends SkyComponentHarness {
452
451
  /**
@@ -454,7 +453,10 @@ class SkySearchHarness extends SkyComponentHarness {
454
453
  */
455
454
  static { this.hostSelector = 'sky-search'; }
456
455
  #getInput = this.locatorFor('input.sky-search-input');
456
+ #getClearButton = this.locatorFor('button.sky-search-btn-clear');
457
+ #getDismissButton = this.locatorForOptional('button.sky-search-btn-dismiss');
457
458
  #getSubmitButton = this.locatorFor('button.sky-search-btn-apply');
459
+ #getOpenButton = this.locatorFor('button.sky-search-btn-open');
458
460
  /**
459
461
  * Gets a `HarnessPredicate` that can be used to search for a
460
462
  * `SkySearchHarness` that meets certain criteria.
@@ -463,38 +465,76 @@ class SkySearchHarness extends SkyComponentHarness {
463
465
  return this.getDataSkyIdPredicate(filters);
464
466
  }
465
467
  /**
466
- * Blurs the input.
468
+ * Blurs the search input.
467
469
  */
468
470
  async blur() {
471
+ await this.#assertIsExpanded('Failed to blur the search input.');
469
472
  await (await this.#getInput()).blur();
470
473
  }
471
474
  /**
472
- * Clears the input.
475
+ * Clears the search input.
473
476
  */
474
477
  async clear() {
478
+ await this.#assertIsExpanded('Failed to clear the search input.');
475
479
  const input = await this.#getInput();
476
480
  await input.focus();
477
481
  await input.clear();
478
- await this.#clickSubmitButton();
482
+ await this.clickSubmitButton();
483
+ }
484
+ /**
485
+ * Clicks the search input clear button.
486
+ */
487
+ async clickClearButton() {
488
+ await this.#assertIsExpanded('Failed to click clear button.');
489
+ return (await this.#getClearButton()).click();
490
+ }
491
+ /**
492
+ * Clicks search dismiss button to collapse search back to a button.
493
+ */
494
+ async clickDismissSearchButton() {
495
+ const button = await this.#getDismissButton();
496
+ if (!button) {
497
+ throw new Error('Cannot find dismiss search button. Is a collapsed search open?');
498
+ }
499
+ return button.click();
500
+ }
501
+ /**
502
+ * Clicks the search icon button that opens search input when it is collapsed.
503
+ */
504
+ async clickOpenSearchButton() {
505
+ const button = await this.#getOpenButton();
506
+ if (!(await this.isCollapsed())) {
507
+ throw new Error('Cannot click search open button as search is not collapsed');
508
+ }
509
+ return button.click();
479
510
  }
480
511
  /**
481
- * Enters text into the input and performs a search.
512
+ * Clicks the search submit button.
513
+ */
514
+ async clickSubmitButton() {
515
+ await this.#assertIsExpanded('Failed to click the submit button.');
516
+ return (await this.#getSubmitButton()).click();
517
+ }
518
+ /**
519
+ * Enters text into the search input and performs a search.
482
520
  */
483
521
  async enterText(value) {
522
+ await this.#assertIsExpanded('Failed to enter text into the search input.');
484
523
  const input = await this.#getInput();
485
524
  await input.clear();
486
525
  await input.focus();
487
526
  await input.sendKeys(value);
488
- await this.#clickSubmitButton();
527
+ await this.clickSubmitButton();
489
528
  }
490
529
  /**
491
- * Focuses the input.
530
+ * Focuses the search input.
492
531
  */
493
532
  async focus() {
533
+ await this.#assertIsExpanded('Failed to focus the search input.');
494
534
  await (await this.#getInput()).focus();
495
535
  }
496
536
  /**
497
- * Gets the search's aria-label.
537
+ * Gets the search input's `aria-label`.
498
538
  */
499
539
  async getAriaLabel() {
500
540
  return (await this.#getInput()).getAttribute('aria-label');
@@ -509,29 +549,40 @@ class SkySearchHarness extends SkyComponentHarness {
509
549
  * Gets the value of the input's placeholder attribute.
510
550
  */
511
551
  async getPlaceholderText() {
552
+ await this.#assertIsExpanded('Failed to get the placeholder text.');
512
553
  return (await this.#getInput()).getAttribute('placeholder');
513
554
  }
514
555
  /**
515
- * Gets the value of the input.
556
+ * Gets the value of the search input.
516
557
  */
517
558
  async getValue() {
559
+ await this.#assertIsExpanded('Failed to get the value of the search input.');
518
560
  return (await this.#getInput()).getProperty('value');
519
561
  }
520
562
  /**
521
- * Whether the input is disabled.
563
+ * Whether the search input is collapsed.
564
+ */
565
+ async isCollapsed() {
566
+ return ((await (await this.#getOpenButton()).getAttribute('hidden')) === null);
567
+ }
568
+ /**
569
+ * Whether the search input is disabled.
522
570
  */
523
571
  async isDisabled() {
524
572
  const disabled = await (await this.#getInput()).getAttribute('disabled');
525
573
  return disabled !== null;
526
574
  }
527
575
  /**
528
- * Whether the input is focused.
576
+ * Whether the search input is focused.
529
577
  */
530
578
  async isFocused() {
579
+ await this.#assertIsExpanded('Failed to get the search input focus status.');
531
580
  return (await this.#getInput()).isFocused();
532
581
  }
533
- async #clickSubmitButton() {
534
- return (await this.#getSubmitButton()).click();
582
+ async #assertIsExpanded(errorMessage) {
583
+ if (await this.isCollapsed()) {
584
+ throw new Error(`${errorMessage} Search is collapsed.`);
585
+ }
535
586
  }
536
587
  }
537
588
 
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-lookup-testing.mjs","sources":["../../../../../libs/components/lookup/testing/src/autocomplete/autocomplete-input-harness.ts","../../../../../libs/components/lookup/testing/src/autocomplete/autocomplete-search-result-harness.ts","../../../../../libs/components/lookup/testing/src/autocomplete/autocomplete-harness.ts","../../../../../libs/components/lookup/testing/src/country-field/country-field-fixture.ts","../../../../../libs/components/lookup/testing/src/country-field/country-field-testing.module.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-selections-list-harness.ts","../../../../../libs/components/lookup/testing/src/search/search-harness.ts","../../../../../libs/components/lookup/testing/src/selection-modal/selection-modal-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-show-more-picker-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-selection-harness.ts","../../../../../libs/components/lookup/testing/src/selection-modal/selection-modal-search-result-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-show-more-picker-search-result-harness.ts","../../../../../libs/components/lookup/testing/src/search/search-fixture.ts","../../../../../libs/components/lookup/testing/src/search/search-testing.module.ts","../../../../../libs/components/lookup/testing/src/skyux-lookup-testing.ts"],"sourcesContent":["import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness to interact with the autocomplete input harness.\n *\n * This harness is marked as internal as all relevant functions are exposed to consumers through the `SkyAutocompleteHarness` functions.\n * @internal\n */\nexport class SkyAutocompleteInputHarness extends ComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = '[skyAutocomplete]';\n\n /**\n * Blurs the input.\n */\n public async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /**\n * Clears the input value.\n */\n public async clear(): Promise<void> {\n return (await this.host()).clear();\n }\n\n /**\n * Enters text into the input.\n */\n public async enterText(value: string): Promise<void> {\n const el = await this.host();\n await el.focus();\n await el.clear();\n await el.sendKeys(value);\n }\n\n /**\n * Focuses the input.\n */\n public async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /**\n * Gets the value of the input.\n */\n public async getValue(): Promise<string> {\n return (await this.host()).getProperty('value');\n }\n\n /**\n * Whether the input is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n const disabled = await (await this.host()).getAttribute('disabled');\n return disabled !== null;\n }\n\n /**\n * Whether the input is focused.\n */\n public async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /**\n * Returns the value of the input's `aria-controls` attribute.\n */\n public async getAriaControls(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-controls');\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyQueryableComponentHarness } from '@skyux/core/testing';\n\nimport { SkyAutocompleteSearchResultHarnessFilters } from './autocomplete-search-result-harness-filters';\n\n/**\n * Harness for interacting with an autocomplete search result in tests.\n */\nexport class SkyAutocompleteSearchResultHarness extends SkyQueryableComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = '.sky-autocomplete-result';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyAutocompleteSearchResultHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyAutocompleteSearchResultHarnessFilters,\n ): HarnessPredicate<SkyAutocompleteSearchResultHarness> {\n return new HarnessPredicate(\n SkyAutocompleteSearchResultHarness,\n filters,\n ).addOption('textContent', filters.text, async (harness, text) =>\n HarnessPredicate.stringMatches(await harness.getText(), text),\n );\n }\n\n /**\n * Returns the value of the search result's descriptor property.\n * This value is set by the autocomplete's `descriptorProperty` input.\n */\n public async getDescriptorValue(): Promise<string> {\n return (await (\n await this.host()\n ).getAttribute('data-descriptor-value')) as string;\n }\n\n /**\n * Selects the search result.\n */\n public async select(): Promise<void> {\n return (await this.host()).click();\n }\n\n /**\n * Returns the text of the search result.\n */\n public async getText(): Promise<string> {\n return (await this.host()).text();\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness, SkyOverlayHarness } from '@skyux/core/testing';\n\nimport { SkyAutocompleteHarnessFilters } from './autocomplete-harness-filters';\nimport { SkyAutocompleteInputHarness } from './autocomplete-input-harness';\nimport { SkyAutocompleteSearchResultHarness } from './autocomplete-search-result-harness';\nimport { SkyAutocompleteSearchResultHarnessFilters } from './autocomplete-search-result-harness-filters';\n\n/**\n * Harness for interacting with an autocomplete component in tests.\n */\nexport class SkyAutocompleteHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-autocomplete';\n\n #documentRootLocator = this.documentRootLocatorFactory();\n #getAutocomplete = this.locatorFor('.sky-autocomplete');\n #getInput = this.locatorFor(SkyAutocompleteInputHarness);\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyAutocompleteHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyAutocompleteHarnessFilters,\n ): HarnessPredicate<SkyAutocompleteHarness> {\n return SkyAutocompleteHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Blurs the autocomplete input.\n */\n public async blur(): Promise<void> {\n return (await this.#getInput()).blur();\n }\n\n /**\n * Clears the autocomplete input value.\n */\n public async clear(): Promise<void> {\n return (await this.#getInput()).clear();\n }\n\n /**\n * Enters text into the autocomplete input.\n */\n public async enterText(value: string): Promise<void> {\n return (await this.#getInput()).enterText(value);\n }\n\n /**\n * Focuses the autocomplete input.\n */\n public async focus(): Promise<void> {\n return (await this.#getInput()).focus();\n }\n\n /**\n * Gets the autocomplete `aria-labelledby` value.\n */\n public async getAriaLabelledby(): Promise<string | null> {\n return (await this.#getAutocomplete()).getAttribute('aria-labelledby');\n }\n\n /**\n * Returns autocomplete search result harnesses.\n */\n public async getSearchResults(\n filters?: SkyAutocompleteSearchResultHarnessFilters,\n ): Promise<SkyAutocompleteSearchResultHarness[]> {\n const overlay = await this.#getOverlay();\n\n if (!overlay) {\n throw new Error(\n 'Unable to retrieve search results. The autocomplete is closed.',\n );\n }\n\n const harnesses = await overlay.queryHarnesses(\n SkyAutocompleteSearchResultHarness.with(filters || {}),\n );\n\n if (filters && harnesses.length === 0) {\n // Stringify the regular expression so that it's readable in the console log.\n if (filters.text instanceof RegExp) {\n filters.text = filters.text.toString();\n }\n\n throw new Error(\n `Could not find search results matching filter(s): ${JSON.stringify(\n filters,\n )}`,\n );\n }\n\n return harnesses;\n }\n\n /**\n * Returns the text content for each autocomplete search result.\n */\n public async getSearchResultsText(\n filters?: SkyAutocompleteSearchResultHarnessFilters,\n ): Promise<string[]> {\n const harnesses = await this.getSearchResults(filters);\n\n const text: string[] = [];\n for (const harness of harnesses) {\n text.push(await harness.getText());\n }\n\n return text;\n }\n\n /**\n * Gets the value of the autocomplete input.\n */\n public async getValue(): Promise<string> {\n return (await this.#getInput()).getValue();\n }\n\n /**\n * Gets the text displayed when no search results are found.\n */\n public async getNoResultsFoundText(): Promise<string | undefined> {\n const overlay = await this.#getOverlay();\n\n if (!overlay) {\n throw new Error(\n 'Cannot find \"no results found\" text as the dropdown is closed.',\n );\n }\n\n try {\n const noResultFoundText =\n await overlay.querySelector('.sky-deemphasized');\n return (await noResultFoundText?.text())?.trim();\n } catch {\n throw new Error(\n 'Cannot find \"no results found\" text because there are search results.',\n );\n }\n }\n\n /**\n * Whether the autocomplete input is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n return (await this.#getInput()).isDisabled();\n }\n\n /**\n * Whether the autocomplete input is focused.\n */\n public async isFocused(): Promise<boolean> {\n return (await this.#getInput()).isFocused();\n }\n\n /**\n * Whether the autocomplete is open.\n */\n public async isOpen(): Promise<boolean> {\n const overlay = await this.#getOverlay();\n return !!overlay;\n }\n\n /**\n * Selects a search result.\n */\n public async selectSearchResult(\n filters: SkyAutocompleteSearchResultHarnessFilters,\n ): Promise<void> {\n const results = await this.getSearchResults(filters);\n if (results && results.length > 0) {\n await results[0].select();\n }\n }\n\n /**\n * Clicks the \"Add\" button in the autocomplete search results panel.\n * (The \"Add\" functionality is not included in the public API\n * of a \"vanilla\" autocomplete component, so this method is protected\n * to prevent consumers of the autocomplete harness from calling it.\n * The lookup harness, which extends the autocomplete harness, may\n * still access this feature, however.)\n * @internal\n */\n protected async clickAddButton(): Promise<void> {\n const overlay = await this.#getOverlay();\n if (!overlay) {\n throw new Error(\n 'Unable to find the \"Add\" button. The autocomplete is closed.',\n );\n }\n\n const button = await overlay.querySelectorOrNull(\n 'button.sky-autocomplete-action-add',\n );\n\n if (!button) {\n throw new Error(\n 'The \"Add\" button cannot be clicked because it does not exist.',\n );\n }\n\n await button.click();\n }\n\n /**\n * Clicks the \"Show more\" button.\n * (The \"Show more\" functionality is not included in the public API\n * of a \"vanilla\" autocomplete component, so this method is protected\n * to prevent consumers of the autocomplete harness from calling it.\n * The lookup harness, which extends the autocomplete harness, may\n * still access this feature, however.)\n * @internal\n */\n protected async clickShowMoreButton(): Promise<void> {\n const overlay = await this.#getOverlay();\n\n if (!overlay) {\n throw new Error(\n 'Unable to find the \"Show more\" button. ' +\n 'The autocomplete is closed.',\n );\n }\n\n const button = await overlay.querySelectorOrNull(\n 'button.sky-autocomplete-action-more',\n );\n\n if (!button) {\n throw new Error(\n 'The \"Show more\" button cannot be clicked because it does not exist.',\n );\n }\n\n await button.click();\n }\n\n async #getOverlay(): Promise<SkyOverlayHarness | null> {\n const overlayId = await (await this.#getInput()).getAriaControls();\n\n return overlayId\n ? this.#documentRootLocator.locatorForOptional(\n SkyOverlayHarness.with({ selector: `#${overlayId}` }),\n )()\n : null;\n }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX country field component.\n * @internal\n */\nexport class SkyCountryFieldFixture {\n #debugEl: DebugElement;\n\n /**\n * The value of the input field's autocomplete attribute.\n * @deprecated The country field component's `autocompleteAttribute` is deprecated.\n */\n public get autocompleteAttribute(): string | null {\n return this.#getInputElement().getAttribute('autocomplete');\n }\n\n /**\n * A flag indicating if the country flag is currently visible.\n * The flag will be visible only if a selection has been made\n * and if the hideSelectedCountryFlag option is false.\n */\n public get countryFlagIsVisible(): boolean {\n const flag = this.#getCountryFlag();\n return flag !== null;\n }\n\n /**\n * A flag indicating whether or not the input has been disabled.\n */\n public get disabled(): boolean {\n return this.#getInputElement().disabled;\n }\n\n /**\n * The value of the input field.\n */\n public get searchText(): string {\n return this.#getInputElement().value;\n }\n\n #fixture: ComponentFixture<any>;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#fixture = fixture;\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-country-field',\n );\n }\n\n /**\n * Enters the search text into the input field displaying search results, but making no selection.\n * @param searchText The name of the country to select.\n * @returns The list of country names matching the search text.\n */\n public async search(searchText: string): Promise<string[]> {\n const resultNodes = await this.#searchAndGetResults(\n searchText,\n this.#fixture,\n );\n const resultArray = Array.prototype.slice.call(resultNodes);\n const results = resultArray.map((result: HTMLElement) => {\n const countryNameEl = result.querySelector('.sky-highlight-mark');\n const countryName = SkyAppTestUtility.getText(countryNameEl)!;\n return countryName;\n });\n\n this.#fixture.detectChanges();\n await this.#fixture.whenStable();\n\n return results;\n }\n\n /**\n * Enters the search text into the input field and selects the first result (if any).\n * @param searchText The name of the country to select.\n */\n public async searchAndSelectFirstResult(searchText: string): Promise<void> {\n await this.#searchAndSelect(searchText, 0, this.#fixture);\n\n this.#fixture.detectChanges();\n return this.#fixture.whenStable();\n }\n\n /**\n * Clears the country selection and input field.\n */\n public clear(): Promise<void> {\n this.#enterSearch('', this.#fixture);\n\n this.#fixture.detectChanges();\n return this.#fixture.whenStable();\n }\n\n //#region helpers\n\n #getCountryFlag(): DebugElement {\n return this.#debugEl.query(By.css('.sky-country-field-flag'));\n }\n\n #getAutocompleteElement(): HTMLElement {\n return document.querySelector('.sky-autocomplete-results') as HTMLElement;\n }\n\n #getInputElement(): HTMLTextAreaElement {\n const debugEl = this.#debugEl.query(By.css('textarea'));\n return debugEl.nativeElement as HTMLTextAreaElement;\n }\n\n #blurInput(fixture: ComponentFixture<any>): Promise<void> {\n SkyAppTestUtility.fireDomEvent(this.#getInputElement(), 'blur');\n fixture.detectChanges();\n return fixture.whenStable();\n }\n\n #enterSearch(\n newValue: string,\n fixture: ComponentFixture<any>,\n ): Promise<void> {\n const inputElement = this.#getInputElement();\n inputElement.value = newValue;\n SkyAppTestUtility.fireDomEvent(inputElement, 'focus');\n SkyAppTestUtility.fireDomEvent(inputElement, 'keyup');\n SkyAppTestUtility.fireDomEvent(inputElement, 'input');\n fixture.detectChanges();\n return fixture.whenStable();\n }\n\n async #searchAndGetResults(\n newValue: string,\n fixture: ComponentFixture<any>,\n ): Promise<NodeListOf<HTMLElement>> {\n await this.#enterSearch(newValue, fixture);\n fixture.detectChanges();\n await fixture.whenStable();\n return this.#getAutocompleteElement().querySelectorAll(\n '.sky-autocomplete-result',\n );\n }\n\n async #searchAndSelect(\n newValue: string,\n index: number,\n fixture: ComponentFixture<any>,\n ): Promise<void> {\n const inputElement = this.#getInputElement();\n const searchResults = await this.#searchAndGetResults(newValue, fixture);\n\n if (searchResults.length < index + 1) {\n throw new Error('Index out of range for results');\n }\n\n // Note: the ordering of these events is important!\n SkyAppTestUtility.fireDomEvent(inputElement, 'change');\n SkyAppTestUtility.fireDomEvent(searchResults[index], 'click');\n this.#blurInput(fixture);\n }\n\n //#endregion helpers\n}\n","import { NgModule } from '@angular/core';\nimport { SkyCountryFieldModule } from '@skyux/lookup';\n\n/**\n * @internal\n */\n@NgModule({\n exports: [SkyCountryFieldModule],\n})\nexport class SkyCountryFieldTestingModule {}\n","import { SkyTokensHarness } from '@skyux/indicators/testing';\n\nimport { SkyLookupSelectionHarness } from './lookup-selection-harness';\n\n/**\n * Harness for interacting with multiselect lookup selections in tests.\n * @internal\n */\nexport class SkyLookupSelectionsListHarness extends SkyTokensHarness {\n /**\n * Gets a list of selections.\n */\n public async getSelections(): Promise<SkyLookupSelectionHarness[]> {\n return super.getTokens();\n }\n\n /**\n * Dismisses the selections in the list.\n */\n public async dismissSelections(): Promise<void> {\n return super.dismissTokens();\n }\n\n /**\n * Gets the text content of all selections in the list.\n */\n public async getSelectionsText(): Promise<string[]> {\n return super.getTokensText();\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkySearchHarnessFilters } from './search-harness-filters';\n\n/**\n * Harness for interacting with an search component in tests.\n * @internal\n */\nexport class SkySearchHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-search';\n\n #getInput = this.locatorFor('input.sky-search-input');\n\n #getSubmitButton = this.locatorFor('button.sky-search-btn-apply');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkySearchHarness` that meets certain criteria.\n */\n public static with(\n filters: SkySearchHarnessFilters,\n ): HarnessPredicate<SkySearchHarness> {\n return this.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Blurs the input.\n */\n public async blur(): Promise<void> {\n await (await this.#getInput()).blur();\n }\n\n /**\n * Clears the input.\n */\n public async clear(): Promise<void> {\n const input = await this.#getInput();\n await input.focus();\n await input.clear();\n await this.#clickSubmitButton();\n }\n\n /**\n * Enters text into the input and performs a search.\n */\n public async enterText(value: string): Promise<void> {\n const input = await this.#getInput();\n await input.clear();\n await input.focus();\n await input.sendKeys(value);\n await this.#clickSubmitButton();\n }\n\n /**\n * Focuses the input.\n */\n public async focus(): Promise<void> {\n await (await this.#getInput()).focus();\n }\n\n /**\n * Gets the search's aria-label.\n */\n public async getAriaLabel(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-label');\n }\n\n /**\n * Gets the search's aria-labelledby.\n */\n public async getAriaLabelledby(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-labelledby');\n }\n\n /**\n * Gets the value of the input's placeholder attribute.\n */\n public async getPlaceholderText(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('placeholder');\n }\n\n /**\n * Gets the value of the input.\n */\n public async getValue(): Promise<string> {\n return (await this.#getInput()).getProperty('value');\n }\n\n /**\n * Whether the input is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n const disabled = await (await this.#getInput()).getAttribute('disabled');\n return disabled !== null;\n }\n\n /**\n * Whether the input is focused.\n */\n public async isFocused(): Promise<boolean> {\n return (await this.#getInput()).isFocused();\n }\n\n async #clickSubmitButton() {\n return (await this.#getSubmitButton()).click();\n }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\nimport { SkyCheckboxHarness } from '@skyux/forms/testing';\nimport {\n SkyInfiniteScrollHarness,\n SkyRepeaterItemHarness,\n} from '@skyux/lists/testing';\n\nimport { SkySearchHarness } from '../search/search-harness';\n\nimport { SkySelectionModalSearchResultHarness } from './selection-modal-search-result-harness';\nimport { SkySelectionModalSearchResultHarnessFilters } from './selection-modal-search-result-harness-filters';\n\n/**\n * Harness for interacting with a selection modal in tests.\n */\nexport class SkySelectionModalHarness extends ComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = '.sky-lookup-show-more-modal';\n\n #getCancelButton = this.locatorFor('button.sky-lookup-show-more-modal-close');\n\n #getClearAllButton = this.locatorForOptional(\n 'button.sky-lookup-show-more-modal-clear-all-btn',\n );\n\n #getCheckboxHarness = this.locatorFor(SkyCheckboxHarness);\n\n #getInfiniteScroll = this.locatorFor(SkyInfiniteScrollHarness);\n\n #getSaveButton = this.locatorFor('button.sky-lookup-show-more-modal-save');\n\n #getSearchHarness = this.locatorFor(SkySearchHarness);\n\n #getSelectAllButton = this.locatorForOptional(\n 'button.sky-lookup-show-more-modal-select-all-btn',\n );\n\n #getAddButton = this.locatorForOptional(\n 'button.sky-lookup-show-more-modal-add',\n );\n\n /**\n * Clears the text of the search input.\n */\n public async clearSearchText(): Promise<void> {\n return (await this.#getSearchHarness()).clear();\n }\n\n /**\n * Enters text into the search input and performs a search.\n */\n public async enterSearchText(value: string): Promise<void> {\n return (await this.#getSearchHarness()).enterText(value);\n }\n\n /**\n *\n * Gets the search input's aria-label.\n */\n public async getSearchAriaLabel(): Promise<string | null> {\n return (await this.#getSearchHarness()).getAriaLabel();\n }\n\n /**\n * Selects multiple search results based on a set of criteria.\n */\n public async selectSearchResult(\n filters?: SkySelectionModalSearchResultHarnessFilters,\n ): Promise<void> {\n const harnesses = await this.getSearchResults(filters);\n\n if (await this.isMultiselect()) {\n for (const harness of harnesses) {\n await harness.select();\n }\n } else {\n // Click on the item directly because we've added a custom click event in the picker's template.\n await (await harnesses[0].host()).click();\n }\n }\n\n /**\n * Saves any selections made and closes the modal.\n */\n public async saveAndClose(): Promise<void> {\n return (await this.#getSaveButton()).click();\n }\n\n /**\n *\n * Gets the save button's aria-label.\n */\n public async getSaveButtonAriaLabel(): Promise<string | null> {\n return (await this.#getSaveButton()).getAttribute('aria-label');\n }\n\n /**\n * Closes the picker without saving any selections made.\n */\n public async cancel(): Promise<void> {\n return (await this.#getCancelButton()).click();\n }\n\n /**\n * Gets a list of search results.\n */\n public async getSearchResults(\n filters?: SkySelectionModalSearchResultHarnessFilters,\n ): Promise<SkySelectionModalSearchResultHarness[]> {\n const pickerId = (await (await this.host()).getAttribute('id')) as string;\n\n const harnesses = await this.locatorForAll(\n SkyRepeaterItemHarness.with({\n ...(filters || {}),\n ancestor: `#${pickerId}`,\n }),\n )();\n\n if (filters && harnesses.length === 0) {\n throw new Error(\n `Could not find search results in the picker matching filter(s): ${JSON.stringify(\n filters,\n )}`,\n );\n }\n\n return harnesses;\n }\n\n /**\n * Clears all selections made.\n */\n public async clearAll(): Promise<void> {\n const button = await this.#getClearAllButton();\n if (!button) {\n throw new Error(\n 'Could not clear all selections because the \"Clear all\" button could not be found.',\n );\n }\n\n await button.click();\n }\n\n /**\n *\n * Gets the clear all button's aria-label.\n */\n public async getClearAllButtonAriaLabel(): Promise<string | null> {\n const button = await this.#getClearAllButton();\n\n if (!button) {\n throw new Error(\n 'Could not get the aria-label for the clear all button because the \"Clear all\" button could not be found.',\n );\n }\n\n return button.getAttribute('aria-label');\n }\n\n /**\n * Whether the selection modal is configured to allow multiple selections.\n */\n public async isMultiselect(): Promise<boolean> {\n return !(await (\n await this.host()\n ).hasClass('sky-lookup-show-more-modal-single'));\n }\n\n /**\n * Selects all search results.\n */\n public async selectAll(): Promise<void> {\n const button = await this.#getSelectAllButton();\n if (!button) {\n throw new Error(\n 'Could not select all selections because the \"Select all\" button could not be found.',\n );\n }\n\n await button.click();\n }\n\n /**\n *\n * Gets the select all button's aria-label.\n */\n public async getSelectAllButtonAriaLabel(): Promise<string | null> {\n const button = await this.#getSelectAllButton();\n\n if (!button) {\n throw new Error(\n 'Could not get the aria-label for the select all button because the \"Select all\" button could not be found.',\n );\n }\n\n return button.getAttribute('aria-label');\n }\n\n /**\n * Loads more results in the picker.\n */\n public async loadMore(): Promise<void> {\n return (await this.#getInfiniteScroll()).loadMore();\n }\n\n /**\n * Whether the selection modal is configured to show the add button.\n */\n public async hasAddButton(): Promise<boolean> {\n const button = await this.#getAddButton();\n return !!button;\n }\n\n /**\n * Clicks the add button.\n */\n public async clickAddButton(): Promise<void> {\n const button = await this.#getAddButton();\n if (!button) {\n throw new Error(\n 'Could not click the add button because the button could not be found.',\n );\n }\n\n await button.click();\n }\n\n /**\n * Gets the \"Only show selected\" checkbox's aria-label\n */\n public async getOnlyShowSelectedAriaLabel(): Promise<string | null> {\n try {\n return (await this.#getCheckboxHarness()).getAriaLabel();\n } catch {\n throw new Error(\n 'Could not get the \"Show only selected items\" checkbox because it could not be found.',\n );\n }\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\n\nimport { SkySelectionModalHarness } from '../selection-modal/selection-modal-harness';\n\nimport { SkyLookupShowMorePickerHarnessFilters } from './lookup-show-more-picker-harness-filters';\nimport { SkyLookupShowMorePickerSearchResultHarness } from './lookup-show-more-picker-search-result-harness';\nimport { SkyLookupShowMorePickerSearchResultHarnessFilters } from './lookup-show-more-picker-search-result-harness-filters';\n\n/**\n * Harness for interacting with a lookup's \"Show more\" picker in tests.\n * @internal\n */\nexport class SkyLookupShowMorePickerHarness extends SkySelectionModalHarness {\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyLookupShowMorePickerHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyLookupShowMorePickerHarnessFilters,\n ): HarnessPredicate<SkyLookupShowMorePickerHarness> {\n return new HarnessPredicate(SkyLookupShowMorePickerHarness, filters);\n }\n\n /**\n * Selects multiple search results based on a set of criteria.\n */\n public override async selectSearchResult(\n filters?: SkyLookupShowMorePickerSearchResultHarnessFilters,\n ): Promise<void> {\n return super.selectSearchResult(filters);\n }\n\n /**\n * Gets a list of search results.\n */\n public override async getSearchResults(\n filters?: SkyLookupShowMorePickerSearchResultHarnessFilters,\n ): Promise<SkyLookupShowMorePickerSearchResultHarness[]> {\n return super.getSearchResults(filters);\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\n\nimport { SkyAutocompleteHarness } from '../autocomplete/autocomplete-harness';\n\nimport { SkyLookupHarnessFilters } from './lookup-harness-filters';\nimport { SkyLookupSelectionHarness } from './lookup-selection-harness';\nimport { SkyLookupSelectionsListHarness } from './lookup-selections-list-harness';\nimport { SkyLookupShowMorePickerHarness } from './lookup-show-more-picker-harness';\n\n/**\n * Harness for interacting with a lookup component in tests.\n */\nexport class SkyLookupHarness extends SkyAutocompleteHarness {\n /**\n * Finds a standard lookup component, or a lookup component that is wrapped by an input box component.\n * For input box implementations, we need to use the `.sky-input-box` selector since the `sky-lookup`\n * element is removed from the DOM.\n * @internal\n */\n public static override hostSelector = 'sky-lookup,.sky-input-box';\n\n #documentRootLocator = this.documentRootLocatorFactory();\n\n #getAutocompleteHarness = this.locatorFor(SkyAutocompleteHarness);\n\n #getSelectionsListHarness = this.locatorFor(SkyLookupSelectionsListHarness);\n\n #getWrapper = this.locatorFor('.sky-lookup');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyLookupHarness` that meets certain criteria.\n */\n public static override with(\n filters: SkyLookupHarnessFilters,\n ): HarnessPredicate<SkyLookupHarness> {\n return SkyLookupHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Clicks the \"Add\" button on the search results panel.\n */\n public override async clickAddButton(): Promise<void> {\n await this.focus();\n await super.clickAddButton();\n }\n\n /**\n * Clicks the \"Show more\" button on the search results panel.\n */\n public override async clickShowMoreButton(): Promise<void> {\n await this.focus();\n await super.clickShowMoreButton();\n }\n\n /**\n * Dismisses the selections made with a multiselect lookup.\n */\n public async dismissSelections(): Promise<void> {\n return (await this.#getSelectionsListHarness()).dismissSelections();\n }\n\n /**\n * Gets the \"Show more\" picker harness.\n */\n public async getShowMorePicker(): Promise<SkyLookupShowMorePickerHarness> {\n const pickerId = await (\n await (await this.#getAutocompleteHarness()).host()\n ).getAttribute('data-sky-lookup-show-more-picker-id');\n\n const defaultPicker = await this.#documentRootLocator.locatorForOptional(\n SkyLookupShowMorePickerHarness.with({ selector: `#${pickerId}` }),\n )();\n\n if (!defaultPicker) {\n throw new Error(\n 'Cannot get the \"Show more\" picker because it is not open.',\n );\n }\n\n return defaultPicker;\n }\n\n /**\n * Gets a list of selections made with a multiselect lookup.\n */\n public async getSelections(): Promise<SkyLookupSelectionHarness[]> {\n return (await this.#getSelectionsListHarness()).getSelections();\n }\n\n /**\n * Gets the text content of all selections made with a multiselect lookup.\n */\n public async getSelectionsText(): Promise<string[]> {\n return (await this.#getSelectionsListHarness()).getSelectionsText();\n }\n\n /**\n * Whether the lookup allows for multiple selections.\n */\n public async isMultiselect(): Promise<boolean> {\n return !(await (await this.#getWrapper()).hasClass('sky-lookup-single'));\n }\n}\n","import { SkyTokenHarness } from '@skyux/indicators/testing';\n\n/**\n * Harness for interacting with a multiselect lookup selection in tests.\n * @internal\n */\nexport class SkyLookupSelectionHarness extends SkyTokenHarness {}\n","import { SkyRepeaterItemHarness } from '@skyux/lists/testing';\n\n/**\n * Harness for interacting with a selection modal's search results in tests.\n */\nexport class SkySelectionModalSearchResultHarness extends SkyRepeaterItemHarness {}\n","import { SkySelectionModalSearchResultHarness } from '../selection-modal/selection-modal-search-result-harness';\n\n/**\n * Harness for interacting with a lookup's \"Show more\" picker search results in tests.\n * @internal\n */\nexport class SkyLookupShowMorePickerSearchResultHarness extends SkySelectionModalSearchResultHarness {}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX search component.\n * @deprecated Use `SkySearchHarness` instead.\n * @internal\n */\nexport class SkySearchFixture {\n /**\n * Gets the search's current text.\n */\n public get searchText(): string {\n return this.#getInputEl().nativeElement.value;\n }\n\n /**\n * Gets the search's current placeholder text.\n */\n public get placeholderText(): string {\n return this.#getInputEl().nativeElement.placeholder;\n }\n\n #debugEl: DebugElement;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-search',\n );\n }\n\n /**\n * Applies the specified search text, invoking the search.\n * @param searchText The search text to apply. If none is specified, the search's\n * current search text will be applied.\n */\n public apply(searchText?: string) {\n if (searchText) {\n SkyAppTestUtility.setInputValue(\n this.#getInputEl().nativeElement,\n searchText,\n );\n }\n\n const btnEl = this.#getApplyBtnEl();\n\n btnEl.triggerEventHandler('click', {});\n }\n\n /**\n * Clears the current search text. If there is no search text or the search text is\n * not currently applied, an error is thrown.\n */\n public clear() {\n const clearEl = this.#debugEl.query(By.css('.sky-input-group-clear'));\n\n if (!SkyAppTestUtility.isVisible(clearEl)) {\n throw new Error(\n 'There currently is no search text or the current search text has not been applied, ' +\n 'so the clear button is not visible.',\n );\n }\n\n const btnEl = this.#getClearBtnEl();\n\n btnEl.triggerEventHandler('click', {});\n }\n\n #getApplyBtnEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-search-btn-apply'));\n }\n\n #getClearBtnEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-search-btn-clear'));\n }\n\n #getInputEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-search-input'));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { SkySearchModule } from '@skyux/lookup';\n\n/**\n * @internal\n */\n@NgModule({\n exports: [NoopAnimationsModule, SkySearchModule],\n})\nexport class SkySearchTestingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skyux-lookup-testing.mjs","sources":["../../../../../libs/components/lookup/testing/src/autocomplete/autocomplete-input-harness.ts","../../../../../libs/components/lookup/testing/src/autocomplete/autocomplete-search-result-harness.ts","../../../../../libs/components/lookup/testing/src/autocomplete/autocomplete-harness.ts","../../../../../libs/components/lookup/testing/src/country-field/country-field-fixture.ts","../../../../../libs/components/lookup/testing/src/country-field/country-field-testing.module.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-selections-list-harness.ts","../../../../../libs/components/lookup/testing/src/search/search-harness.ts","../../../../../libs/components/lookup/testing/src/selection-modal/selection-modal-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-show-more-picker-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-selection-harness.ts","../../../../../libs/components/lookup/testing/src/selection-modal/selection-modal-search-result-harness.ts","../../../../../libs/components/lookup/testing/src/lookup/lookup-show-more-picker-search-result-harness.ts","../../../../../libs/components/lookup/testing/src/search/search-fixture.ts","../../../../../libs/components/lookup/testing/src/search/search-testing.module.ts","../../../../../libs/components/lookup/testing/src/skyux-lookup-testing.ts"],"sourcesContent":["import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness to interact with the autocomplete input harness.\n *\n * This harness is marked as internal as all relevant functions are exposed to consumers through the `SkyAutocompleteHarness` functions.\n * @internal\n */\nexport class SkyAutocompleteInputHarness extends ComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = '[skyAutocomplete]';\n\n /**\n * Blurs the input.\n */\n public async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /**\n * Clears the input value.\n */\n public async clear(): Promise<void> {\n return (await this.host()).clear();\n }\n\n /**\n * Enters text into the input.\n */\n public async enterText(value: string): Promise<void> {\n const el = await this.host();\n await el.focus();\n await el.clear();\n await el.sendKeys(value);\n }\n\n /**\n * Focuses the input.\n */\n public async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /**\n * Gets the value of the input.\n */\n public async getValue(): Promise<string> {\n return (await this.host()).getProperty('value');\n }\n\n /**\n * Whether the input is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n const disabled = await (await this.host()).getAttribute('disabled');\n return disabled !== null;\n }\n\n /**\n * Whether the input is focused.\n */\n public async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /**\n * Returns the value of the input's `aria-controls` attribute.\n */\n public async getAriaControls(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-controls');\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyQueryableComponentHarness } from '@skyux/core/testing';\n\nimport { SkyAutocompleteSearchResultHarnessFilters } from './autocomplete-search-result-harness-filters';\n\n/**\n * Harness for interacting with an autocomplete search result in tests.\n */\nexport class SkyAutocompleteSearchResultHarness extends SkyQueryableComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = '.sky-autocomplete-result';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyAutocompleteSearchResultHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyAutocompleteSearchResultHarnessFilters,\n ): HarnessPredicate<SkyAutocompleteSearchResultHarness> {\n return new HarnessPredicate(\n SkyAutocompleteSearchResultHarness,\n filters,\n ).addOption('textContent', filters.text, async (harness, text) =>\n HarnessPredicate.stringMatches(await harness.getText(), text),\n );\n }\n\n /**\n * Returns the value of the search result's descriptor property.\n * This value is set by the autocomplete's `descriptorProperty` input.\n */\n public async getDescriptorValue(): Promise<string> {\n return (await (\n await this.host()\n ).getAttribute('data-descriptor-value')) as string;\n }\n\n /**\n * Selects the search result.\n */\n public async select(): Promise<void> {\n return (await this.host()).click();\n }\n\n /**\n * Returns the text of the search result.\n */\n public async getText(): Promise<string> {\n return (await this.host()).text();\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness, SkyOverlayHarness } from '@skyux/core/testing';\n\nimport { SkyAutocompleteHarnessFilters } from './autocomplete-harness-filters';\nimport { SkyAutocompleteInputHarness } from './autocomplete-input-harness';\nimport { SkyAutocompleteSearchResultHarness } from './autocomplete-search-result-harness';\nimport { SkyAutocompleteSearchResultHarnessFilters } from './autocomplete-search-result-harness-filters';\n\n/**\n * Harness for interacting with an autocomplete component in tests.\n */\nexport class SkyAutocompleteHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-autocomplete';\n\n #documentRootLocator = this.documentRootLocatorFactory();\n #getAutocomplete = this.locatorFor('.sky-autocomplete');\n #getInput = this.locatorFor(SkyAutocompleteInputHarness);\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyAutocompleteHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyAutocompleteHarnessFilters,\n ): HarnessPredicate<SkyAutocompleteHarness> {\n return SkyAutocompleteHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Blurs the autocomplete input.\n */\n public async blur(): Promise<void> {\n return (await this.#getInput()).blur();\n }\n\n /**\n * Clears the autocomplete input value.\n */\n public async clear(): Promise<void> {\n return (await this.#getInput()).clear();\n }\n\n /**\n * Enters text into the autocomplete input.\n */\n public async enterText(value: string): Promise<void> {\n return (await this.#getInput()).enterText(value);\n }\n\n /**\n * Focuses the autocomplete input.\n */\n public async focus(): Promise<void> {\n return (await this.#getInput()).focus();\n }\n\n /**\n * Gets the autocomplete `aria-labelledby` value.\n */\n public async getAriaLabelledby(): Promise<string | null> {\n return (await this.#getAutocomplete()).getAttribute('aria-labelledby');\n }\n\n /**\n * Returns autocomplete search result harnesses.\n */\n public async getSearchResults(\n filters?: SkyAutocompleteSearchResultHarnessFilters,\n ): Promise<SkyAutocompleteSearchResultHarness[]> {\n const overlay = await this.#getOverlay();\n\n if (!overlay) {\n throw new Error(\n 'Unable to retrieve search results. The autocomplete is closed.',\n );\n }\n\n const harnesses = await overlay.queryHarnesses(\n SkyAutocompleteSearchResultHarness.with(filters || {}),\n );\n\n if (filters && harnesses.length === 0) {\n // Stringify the regular expression so that it's readable in the console log.\n if (filters.text instanceof RegExp) {\n filters.text = filters.text.toString();\n }\n\n throw new Error(\n `Could not find search results matching filter(s): ${JSON.stringify(\n filters,\n )}`,\n );\n }\n\n return harnesses;\n }\n\n /**\n * Returns the text content for each autocomplete search result.\n */\n public async getSearchResultsText(\n filters?: SkyAutocompleteSearchResultHarnessFilters,\n ): Promise<string[]> {\n const harnesses = await this.getSearchResults(filters);\n\n const text: string[] = [];\n for (const harness of harnesses) {\n text.push(await harness.getText());\n }\n\n return text;\n }\n\n /**\n * Gets the value of the autocomplete input.\n */\n public async getValue(): Promise<string> {\n return (await this.#getInput()).getValue();\n }\n\n /**\n * Gets the text displayed when no search results are found.\n */\n public async getNoResultsFoundText(): Promise<string | undefined> {\n const overlay = await this.#getOverlay();\n\n if (!overlay) {\n throw new Error(\n 'Cannot find \"no results found\" text as the dropdown is closed.',\n );\n }\n\n try {\n const noResultFoundText =\n await overlay.querySelector('.sky-deemphasized');\n return (await noResultFoundText?.text())?.trim();\n } catch {\n throw new Error(\n 'Cannot find \"no results found\" text because there are search results.',\n );\n }\n }\n\n /**\n * Whether the autocomplete input is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n return (await this.#getInput()).isDisabled();\n }\n\n /**\n * Whether the autocomplete input is focused.\n */\n public async isFocused(): Promise<boolean> {\n return (await this.#getInput()).isFocused();\n }\n\n /**\n * Whether the autocomplete is open.\n */\n public async isOpen(): Promise<boolean> {\n const overlay = await this.#getOverlay();\n return !!overlay;\n }\n\n /**\n * Selects a search result.\n */\n public async selectSearchResult(\n filters: SkyAutocompleteSearchResultHarnessFilters,\n ): Promise<void> {\n const results = await this.getSearchResults(filters);\n if (results && results.length > 0) {\n await results[0].select();\n }\n }\n\n /**\n * Clicks the \"Add\" button in the autocomplete search results panel.\n * (The \"Add\" functionality is not included in the public API\n * of a \"vanilla\" autocomplete component, so this method is protected\n * to prevent consumers of the autocomplete harness from calling it.\n * The lookup harness, which extends the autocomplete harness, may\n * still access this feature, however.)\n * @internal\n */\n protected async clickAddButton(): Promise<void> {\n const overlay = await this.#getOverlay();\n if (!overlay) {\n throw new Error(\n 'Unable to find the \"Add\" button. The autocomplete is closed.',\n );\n }\n\n const button = await overlay.querySelectorOrNull(\n 'button.sky-autocomplete-action-add',\n );\n\n if (!button) {\n throw new Error(\n 'The \"Add\" button cannot be clicked because it does not exist.',\n );\n }\n\n await button.click();\n }\n\n /**\n * Clicks the \"Show more\" button.\n * (The \"Show more\" functionality is not included in the public API\n * of a \"vanilla\" autocomplete component, so this method is protected\n * to prevent consumers of the autocomplete harness from calling it.\n * The lookup harness, which extends the autocomplete harness, may\n * still access this feature, however.)\n * @internal\n */\n protected async clickShowMoreButton(): Promise<void> {\n const overlay = await this.#getOverlay();\n\n if (!overlay) {\n throw new Error(\n 'Unable to find the \"Show more\" button. ' +\n 'The autocomplete is closed.',\n );\n }\n\n const button = await overlay.querySelectorOrNull(\n 'button.sky-autocomplete-action-more',\n );\n\n if (!button) {\n throw new Error(\n 'The \"Show more\" button cannot be clicked because it does not exist.',\n );\n }\n\n await button.click();\n }\n\n async #getOverlay(): Promise<SkyOverlayHarness | null> {\n const overlayId = await (await this.#getInput()).getAriaControls();\n\n return overlayId\n ? this.#documentRootLocator.locatorForOptional(\n SkyOverlayHarness.with({ selector: `#${overlayId}` }),\n )()\n : null;\n }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX country field component.\n * @internal\n */\nexport class SkyCountryFieldFixture {\n #debugEl: DebugElement;\n\n /**\n * The value of the input field's autocomplete attribute.\n * @deprecated The country field component's `autocompleteAttribute` is deprecated.\n */\n public get autocompleteAttribute(): string | null {\n return this.#getInputElement().getAttribute('autocomplete');\n }\n\n /**\n * A flag indicating if the country flag is currently visible.\n * The flag will be visible only if a selection has been made\n * and if the hideSelectedCountryFlag option is false.\n */\n public get countryFlagIsVisible(): boolean {\n const flag = this.#getCountryFlag();\n return flag !== null;\n }\n\n /**\n * A flag indicating whether or not the input has been disabled.\n */\n public get disabled(): boolean {\n return this.#getInputElement().disabled;\n }\n\n /**\n * The value of the input field.\n */\n public get searchText(): string {\n return this.#getInputElement().value;\n }\n\n #fixture: ComponentFixture<any>;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#fixture = fixture;\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-country-field',\n );\n }\n\n /**\n * Enters the search text into the input field displaying search results, but making no selection.\n * @param searchText The name of the country to select.\n * @returns The list of country names matching the search text.\n */\n public async search(searchText: string): Promise<string[]> {\n const resultNodes = await this.#searchAndGetResults(\n searchText,\n this.#fixture,\n );\n const resultArray = Array.prototype.slice.call(resultNodes);\n const results = resultArray.map((result: HTMLElement) => {\n const countryNameEl = result.querySelector('.sky-highlight-mark');\n const countryName = SkyAppTestUtility.getText(countryNameEl)!;\n return countryName;\n });\n\n this.#fixture.detectChanges();\n await this.#fixture.whenStable();\n\n return results;\n }\n\n /**\n * Enters the search text into the input field and selects the first result (if any).\n * @param searchText The name of the country to select.\n */\n public async searchAndSelectFirstResult(searchText: string): Promise<void> {\n await this.#searchAndSelect(searchText, 0, this.#fixture);\n\n this.#fixture.detectChanges();\n return this.#fixture.whenStable();\n }\n\n /**\n * Clears the country selection and input field.\n */\n public clear(): Promise<void> {\n this.#enterSearch('', this.#fixture);\n\n this.#fixture.detectChanges();\n return this.#fixture.whenStable();\n }\n\n //#region helpers\n\n #getCountryFlag(): DebugElement {\n return this.#debugEl.query(By.css('.sky-country-field-flag'));\n }\n\n #getAutocompleteElement(): HTMLElement {\n return document.querySelector('.sky-autocomplete-results') as HTMLElement;\n }\n\n #getInputElement(): HTMLTextAreaElement {\n const debugEl = this.#debugEl.query(By.css('textarea'));\n return debugEl.nativeElement as HTMLTextAreaElement;\n }\n\n #blurInput(fixture: ComponentFixture<any>): Promise<void> {\n SkyAppTestUtility.fireDomEvent(this.#getInputElement(), 'blur');\n fixture.detectChanges();\n return fixture.whenStable();\n }\n\n #enterSearch(\n newValue: string,\n fixture: ComponentFixture<any>,\n ): Promise<void> {\n const inputElement = this.#getInputElement();\n inputElement.value = newValue;\n SkyAppTestUtility.fireDomEvent(inputElement, 'focus');\n SkyAppTestUtility.fireDomEvent(inputElement, 'keyup');\n SkyAppTestUtility.fireDomEvent(inputElement, 'input');\n fixture.detectChanges();\n return fixture.whenStable();\n }\n\n async #searchAndGetResults(\n newValue: string,\n fixture: ComponentFixture<any>,\n ): Promise<NodeListOf<HTMLElement>> {\n await this.#enterSearch(newValue, fixture);\n fixture.detectChanges();\n await fixture.whenStable();\n return this.#getAutocompleteElement().querySelectorAll(\n '.sky-autocomplete-result',\n );\n }\n\n async #searchAndSelect(\n newValue: string,\n index: number,\n fixture: ComponentFixture<any>,\n ): Promise<void> {\n const inputElement = this.#getInputElement();\n const searchResults = await this.#searchAndGetResults(newValue, fixture);\n\n if (searchResults.length < index + 1) {\n throw new Error('Index out of range for results');\n }\n\n // Note: the ordering of these events is important!\n SkyAppTestUtility.fireDomEvent(inputElement, 'change');\n SkyAppTestUtility.fireDomEvent(searchResults[index], 'click');\n this.#blurInput(fixture);\n }\n\n //#endregion helpers\n}\n","import { NgModule } from '@angular/core';\nimport { SkyCountryFieldModule } from '@skyux/lookup';\n\n/**\n * @internal\n */\n@NgModule({\n exports: [SkyCountryFieldModule],\n})\nexport class SkyCountryFieldTestingModule {}\n","import { SkyTokensHarness } from '@skyux/indicators/testing';\n\nimport { SkyLookupSelectionHarness } from './lookup-selection-harness';\n\n/**\n * Harness for interacting with multiselect lookup selections in tests.\n * @internal\n */\nexport class SkyLookupSelectionsListHarness extends SkyTokensHarness {\n /**\n * Gets a list of selections.\n */\n public async getSelections(): Promise<SkyLookupSelectionHarness[]> {\n return super.getTokens();\n }\n\n /**\n * Dismisses the selections in the list.\n */\n public async dismissSelections(): Promise<void> {\n return super.dismissTokens();\n }\n\n /**\n * Gets the text content of all selections in the list.\n */\n public async getSelectionsText(): Promise<string[]> {\n return super.getTokensText();\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkySearchHarnessFilters } from './search-harness-filters';\n\n/**\n * Harness for interacting with a search component in tests.\n */\nexport class SkySearchHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = 'sky-search';\n\n #getInput = this.locatorFor('input.sky-search-input');\n\n #getClearButton = this.locatorFor('button.sky-search-btn-clear');\n #getDismissButton = this.locatorForOptional('button.sky-search-btn-dismiss');\n #getSubmitButton = this.locatorFor('button.sky-search-btn-apply');\n #getOpenButton = this.locatorFor('button.sky-search-btn-open');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkySearchHarness` that meets certain criteria.\n */\n public static with(\n filters: SkySearchHarnessFilters,\n ): HarnessPredicate<SkySearchHarness> {\n return this.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Blurs the search input.\n */\n public async blur(): Promise<void> {\n await this.#assertIsExpanded('Failed to blur the search input.');\n\n await (await this.#getInput()).blur();\n }\n\n /**\n * Clears the search input.\n */\n public async clear(): Promise<void> {\n await this.#assertIsExpanded('Failed to clear the search input.');\n\n const input = await this.#getInput();\n await input.focus();\n await input.clear();\n await this.clickSubmitButton();\n }\n\n /**\n * Clicks the search input clear button.\n */\n public async clickClearButton(): Promise<void> {\n await this.#assertIsExpanded('Failed to click clear button.');\n\n return (await this.#getClearButton()).click();\n }\n\n /**\n * Clicks search dismiss button to collapse search back to a button.\n */\n public async clickDismissSearchButton(): Promise<void> {\n const button = await this.#getDismissButton();\n\n if (!button) {\n throw new Error(\n 'Cannot find dismiss search button. Is a collapsed search open?',\n );\n }\n\n return button.click();\n }\n\n /**\n * Clicks the search icon button that opens search input when it is collapsed.\n */\n public async clickOpenSearchButton(): Promise<void> {\n const button = await this.#getOpenButton();\n\n if (!(await this.isCollapsed())) {\n throw new Error(\n 'Cannot click search open button as search is not collapsed',\n );\n }\n\n return button.click();\n }\n\n /**\n * Clicks the search submit button.\n */\n public async clickSubmitButton(): Promise<void> {\n await this.#assertIsExpanded('Failed to click the submit button.');\n\n return (await this.#getSubmitButton()).click();\n }\n\n /**\n * Enters text into the search input and performs a search.\n */\n public async enterText(value: string): Promise<void> {\n await this.#assertIsExpanded('Failed to enter text into the search input.');\n\n const input = await this.#getInput();\n await input.clear();\n await input.focus();\n await input.sendKeys(value);\n await this.clickSubmitButton();\n }\n\n /**\n * Focuses the search input.\n */\n public async focus(): Promise<void> {\n await this.#assertIsExpanded('Failed to focus the search input.');\n\n await (await this.#getInput()).focus();\n }\n\n /**\n * Gets the search input's `aria-label`.\n */\n public async getAriaLabel(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-label');\n }\n\n /**\n * Gets the search's aria-labelledby.\n */\n public async getAriaLabelledby(): Promise<string | null> {\n return (await this.#getInput()).getAttribute('aria-labelledby');\n }\n\n /**\n * Gets the value of the input's placeholder attribute.\n */\n public async getPlaceholderText(): Promise<string | null> {\n await this.#assertIsExpanded('Failed to get the placeholder text.');\n\n return (await this.#getInput()).getAttribute('placeholder');\n }\n\n /**\n * Gets the value of the search input.\n */\n public async getValue(): Promise<string> {\n await this.#assertIsExpanded(\n 'Failed to get the value of the search input.',\n );\n\n return (await this.#getInput()).getProperty('value');\n }\n\n /**\n * Whether the search input is collapsed.\n */\n public async isCollapsed(): Promise<boolean> {\n return (\n (await (await this.#getOpenButton()).getAttribute('hidden')) === null\n );\n }\n\n /**\n * Whether the search input is disabled.\n */\n public async isDisabled(): Promise<boolean> {\n const disabled = await (await this.#getInput()).getAttribute('disabled');\n return disabled !== null;\n }\n\n /**\n * Whether the search input is focused.\n */\n public async isFocused(): Promise<boolean> {\n await this.#assertIsExpanded(\n 'Failed to get the search input focus status.',\n );\n\n return (await this.#getInput()).isFocused();\n }\n\n async #assertIsExpanded(errorMessage: string): Promise<void> {\n if (await this.isCollapsed()) {\n throw new Error(`${errorMessage} Search is collapsed.`);\n }\n }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\nimport { SkyCheckboxHarness } from '@skyux/forms/testing';\nimport {\n SkyInfiniteScrollHarness,\n SkyRepeaterItemHarness,\n} from '@skyux/lists/testing';\n\nimport { SkySearchHarness } from '../search/search-harness';\n\nimport { SkySelectionModalSearchResultHarness } from './selection-modal-search-result-harness';\nimport { SkySelectionModalSearchResultHarnessFilters } from './selection-modal-search-result-harness-filters';\n\n/**\n * Harness for interacting with a selection modal in tests.\n */\nexport class SkySelectionModalHarness extends ComponentHarness {\n /**\n * @internal\n */\n public static hostSelector = '.sky-lookup-show-more-modal';\n\n #getCancelButton = this.locatorFor('button.sky-lookup-show-more-modal-close');\n\n #getClearAllButton = this.locatorForOptional(\n 'button.sky-lookup-show-more-modal-clear-all-btn',\n );\n\n #getCheckboxHarness = this.locatorFor(SkyCheckboxHarness);\n\n #getInfiniteScroll = this.locatorFor(SkyInfiniteScrollHarness);\n\n #getSaveButton = this.locatorFor('button.sky-lookup-show-more-modal-save');\n\n #getSearchHarness = this.locatorFor(SkySearchHarness);\n\n #getSelectAllButton = this.locatorForOptional(\n 'button.sky-lookup-show-more-modal-select-all-btn',\n );\n\n #getAddButton = this.locatorForOptional(\n 'button.sky-lookup-show-more-modal-add',\n );\n\n /**\n * Clears the text of the search input.\n */\n public async clearSearchText(): Promise<void> {\n return (await this.#getSearchHarness()).clear();\n }\n\n /**\n * Enters text into the search input and performs a search.\n */\n public async enterSearchText(value: string): Promise<void> {\n return (await this.#getSearchHarness()).enterText(value);\n }\n\n /**\n *\n * Gets the search input's aria-label.\n */\n public async getSearchAriaLabel(): Promise<string | null> {\n return (await this.#getSearchHarness()).getAriaLabel();\n }\n\n /**\n * Selects multiple search results based on a set of criteria.\n */\n public async selectSearchResult(\n filters?: SkySelectionModalSearchResultHarnessFilters,\n ): Promise<void> {\n const harnesses = await this.getSearchResults(filters);\n\n if (await this.isMultiselect()) {\n for (const harness of harnesses) {\n await harness.select();\n }\n } else {\n // Click on the item directly because we've added a custom click event in the picker's template.\n await (await harnesses[0].host()).click();\n }\n }\n\n /**\n * Saves any selections made and closes the modal.\n */\n public async saveAndClose(): Promise<void> {\n return (await this.#getSaveButton()).click();\n }\n\n /**\n *\n * Gets the save button's aria-label.\n */\n public async getSaveButtonAriaLabel(): Promise<string | null> {\n return (await this.#getSaveButton()).getAttribute('aria-label');\n }\n\n /**\n * Closes the picker without saving any selections made.\n */\n public async cancel(): Promise<void> {\n return (await this.#getCancelButton()).click();\n }\n\n /**\n * Gets a list of search results.\n */\n public async getSearchResults(\n filters?: SkySelectionModalSearchResultHarnessFilters,\n ): Promise<SkySelectionModalSearchResultHarness[]> {\n const pickerId = (await (await this.host()).getAttribute('id')) as string;\n\n const harnesses = await this.locatorForAll(\n SkyRepeaterItemHarness.with({\n ...(filters || {}),\n ancestor: `#${pickerId}`,\n }),\n )();\n\n if (filters && harnesses.length === 0) {\n throw new Error(\n `Could not find search results in the picker matching filter(s): ${JSON.stringify(\n filters,\n )}`,\n );\n }\n\n return harnesses;\n }\n\n /**\n * Clears all selections made.\n */\n public async clearAll(): Promise<void> {\n const button = await this.#getClearAllButton();\n if (!button) {\n throw new Error(\n 'Could not clear all selections because the \"Clear all\" button could not be found.',\n );\n }\n\n await button.click();\n }\n\n /**\n *\n * Gets the clear all button's aria-label.\n */\n public async getClearAllButtonAriaLabel(): Promise<string | null> {\n const button = await this.#getClearAllButton();\n\n if (!button) {\n throw new Error(\n 'Could not get the aria-label for the clear all button because the \"Clear all\" button could not be found.',\n );\n }\n\n return button.getAttribute('aria-label');\n }\n\n /**\n * Whether the selection modal is configured to allow multiple selections.\n */\n public async isMultiselect(): Promise<boolean> {\n return !(await (\n await this.host()\n ).hasClass('sky-lookup-show-more-modal-single'));\n }\n\n /**\n * Selects all search results.\n */\n public async selectAll(): Promise<void> {\n const button = await this.#getSelectAllButton();\n if (!button) {\n throw new Error(\n 'Could not select all selections because the \"Select all\" button could not be found.',\n );\n }\n\n await button.click();\n }\n\n /**\n *\n * Gets the select all button's aria-label.\n */\n public async getSelectAllButtonAriaLabel(): Promise<string | null> {\n const button = await this.#getSelectAllButton();\n\n if (!button) {\n throw new Error(\n 'Could not get the aria-label for the select all button because the \"Select all\" button could not be found.',\n );\n }\n\n return button.getAttribute('aria-label');\n }\n\n /**\n * Loads more results in the picker.\n */\n public async loadMore(): Promise<void> {\n return (await this.#getInfiniteScroll()).loadMore();\n }\n\n /**\n * Whether the selection modal is configured to show the add button.\n */\n public async hasAddButton(): Promise<boolean> {\n const button = await this.#getAddButton();\n return !!button;\n }\n\n /**\n * Clicks the add button.\n */\n public async clickAddButton(): Promise<void> {\n const button = await this.#getAddButton();\n if (!button) {\n throw new Error(\n 'Could not click the add button because the button could not be found.',\n );\n }\n\n await button.click();\n }\n\n /**\n * Gets the \"Only show selected\" checkbox's aria-label\n */\n public async getOnlyShowSelectedAriaLabel(): Promise<string | null> {\n try {\n return (await this.#getCheckboxHarness()).getAriaLabel();\n } catch {\n throw new Error(\n 'Could not get the \"Show only selected items\" checkbox because it could not be found.',\n );\n }\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\n\nimport { SkySelectionModalHarness } from '../selection-modal/selection-modal-harness';\n\nimport { SkyLookupShowMorePickerHarnessFilters } from './lookup-show-more-picker-harness-filters';\nimport { SkyLookupShowMorePickerSearchResultHarness } from './lookup-show-more-picker-search-result-harness';\nimport { SkyLookupShowMorePickerSearchResultHarnessFilters } from './lookup-show-more-picker-search-result-harness-filters';\n\n/**\n * Harness for interacting with a lookup's \"Show more\" picker in tests.\n * @internal\n */\nexport class SkyLookupShowMorePickerHarness extends SkySelectionModalHarness {\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyLookupShowMorePickerHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyLookupShowMorePickerHarnessFilters,\n ): HarnessPredicate<SkyLookupShowMorePickerHarness> {\n return new HarnessPredicate(SkyLookupShowMorePickerHarness, filters);\n }\n\n /**\n * Selects multiple search results based on a set of criteria.\n */\n public override async selectSearchResult(\n filters?: SkyLookupShowMorePickerSearchResultHarnessFilters,\n ): Promise<void> {\n return super.selectSearchResult(filters);\n }\n\n /**\n * Gets a list of search results.\n */\n public override async getSearchResults(\n filters?: SkyLookupShowMorePickerSearchResultHarnessFilters,\n ): Promise<SkyLookupShowMorePickerSearchResultHarness[]> {\n return super.getSearchResults(filters);\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\n\nimport { SkyAutocompleteHarness } from '../autocomplete/autocomplete-harness';\n\nimport { SkyLookupHarnessFilters } from './lookup-harness-filters';\nimport { SkyLookupSelectionHarness } from './lookup-selection-harness';\nimport { SkyLookupSelectionsListHarness } from './lookup-selections-list-harness';\nimport { SkyLookupShowMorePickerHarness } from './lookup-show-more-picker-harness';\n\n/**\n * Harness for interacting with a lookup component in tests.\n */\nexport class SkyLookupHarness extends SkyAutocompleteHarness {\n /**\n * Finds a standard lookup component, or a lookup component that is wrapped by an input box component.\n * For input box implementations, we need to use the `.sky-input-box` selector since the `sky-lookup`\n * element is removed from the DOM.\n * @internal\n */\n public static override hostSelector = 'sky-lookup,.sky-input-box';\n\n #documentRootLocator = this.documentRootLocatorFactory();\n\n #getAutocompleteHarness = this.locatorFor(SkyAutocompleteHarness);\n\n #getSelectionsListHarness = this.locatorFor(SkyLookupSelectionsListHarness);\n\n #getWrapper = this.locatorFor('.sky-lookup');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyLookupHarness` that meets certain criteria.\n */\n public static override with(\n filters: SkyLookupHarnessFilters,\n ): HarnessPredicate<SkyLookupHarness> {\n return SkyLookupHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Clicks the \"Add\" button on the search results panel.\n */\n public override async clickAddButton(): Promise<void> {\n await this.focus();\n await super.clickAddButton();\n }\n\n /**\n * Clicks the \"Show more\" button on the search results panel.\n */\n public override async clickShowMoreButton(): Promise<void> {\n await this.focus();\n await super.clickShowMoreButton();\n }\n\n /**\n * Dismisses the selections made with a multiselect lookup.\n */\n public async dismissSelections(): Promise<void> {\n return (await this.#getSelectionsListHarness()).dismissSelections();\n }\n\n /**\n * Gets the \"Show more\" picker harness.\n */\n public async getShowMorePicker(): Promise<SkyLookupShowMorePickerHarness> {\n const pickerId = await (\n await (await this.#getAutocompleteHarness()).host()\n ).getAttribute('data-sky-lookup-show-more-picker-id');\n\n const defaultPicker = await this.#documentRootLocator.locatorForOptional(\n SkyLookupShowMorePickerHarness.with({ selector: `#${pickerId}` }),\n )();\n\n if (!defaultPicker) {\n throw new Error(\n 'Cannot get the \"Show more\" picker because it is not open.',\n );\n }\n\n return defaultPicker;\n }\n\n /**\n * Gets a list of selections made with a multiselect lookup.\n */\n public async getSelections(): Promise<SkyLookupSelectionHarness[]> {\n return (await this.#getSelectionsListHarness()).getSelections();\n }\n\n /**\n * Gets the text content of all selections made with a multiselect lookup.\n */\n public async getSelectionsText(): Promise<string[]> {\n return (await this.#getSelectionsListHarness()).getSelectionsText();\n }\n\n /**\n * Whether the lookup allows for multiple selections.\n */\n public async isMultiselect(): Promise<boolean> {\n return !(await (await this.#getWrapper()).hasClass('sky-lookup-single'));\n }\n}\n","import { SkyTokenHarness } from '@skyux/indicators/testing';\n\n/**\n * Harness for interacting with a multiselect lookup selection in tests.\n * @internal\n */\nexport class SkyLookupSelectionHarness extends SkyTokenHarness {}\n","import { SkyRepeaterItemHarness } from '@skyux/lists/testing';\n\n/**\n * Harness for interacting with a selection modal's search results in tests.\n */\nexport class SkySelectionModalSearchResultHarness extends SkyRepeaterItemHarness {}\n","import { SkySelectionModalSearchResultHarness } from '../selection-modal/selection-modal-search-result-harness';\n\n/**\n * Harness for interacting with a lookup's \"Show more\" picker search results in tests.\n * @internal\n */\nexport class SkyLookupShowMorePickerSearchResultHarness extends SkySelectionModalSearchResultHarness {}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX search component.\n * @deprecated Use `SkySearchHarness` instead.\n * @internal\n */\nexport class SkySearchFixture {\n /**\n * Gets the search's current text.\n */\n public get searchText(): string {\n return this.#getInputEl().nativeElement.value;\n }\n\n /**\n * Gets the search's current placeholder text.\n */\n public get placeholderText(): string {\n return this.#getInputEl().nativeElement.placeholder;\n }\n\n #debugEl: DebugElement;\n\n constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n fixture,\n skyTestId,\n 'sky-search',\n );\n }\n\n /**\n * Applies the specified search text, invoking the search.\n * @param searchText The search text to apply. If none is specified, the search's\n * current search text will be applied.\n */\n public apply(searchText?: string) {\n if (searchText) {\n SkyAppTestUtility.setInputValue(\n this.#getInputEl().nativeElement,\n searchText,\n );\n }\n\n const btnEl = this.#getApplyBtnEl();\n\n btnEl.triggerEventHandler('click', {});\n }\n\n /**\n * Clears the current search text. If there is no search text or the search text is\n * not currently applied, an error is thrown.\n */\n public clear() {\n const clearEl = this.#debugEl.query(By.css('.sky-input-group-clear'));\n\n if (!SkyAppTestUtility.isVisible(clearEl)) {\n throw new Error(\n 'There currently is no search text or the current search text has not been applied, ' +\n 'so the clear button is not visible.',\n );\n }\n\n const btnEl = this.#getClearBtnEl();\n\n btnEl.triggerEventHandler('click', {});\n }\n\n #getApplyBtnEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-search-btn-apply'));\n }\n\n #getClearBtnEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-search-btn-clear'));\n }\n\n #getInputEl(): DebugElement {\n return this.#debugEl.query(By.css('.sky-search-input'));\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { SkySearchModule } from '@skyux/lookup';\n\n/**\n * @internal\n */\n@NgModule({\n exports: [NoopAnimationsModule, SkySearchModule],\n})\nexport class SkySearchTestingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}