@skyux/charts 15.0.0-alpha.2 → 15.0.0-alpha.3

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.
@@ -0,0 +1,214 @@
1
+ import { SkyComponentHarness, SkyQueryableComponentHarness } from '@skyux/core/testing';
2
+ import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
3
+ import { SkyHelpInlineHarness } from '@skyux/help-inline/testing';
4
+ import { SkyDropdownHarness } from '@skyux/popovers/testing';
5
+
6
+ /**
7
+ * Harness for interacting with a bar chart component in tests.
8
+ * @preview
9
+ */
10
+ class SkyChartBarHarness extends SkyComponentHarness {
11
+ /**
12
+ * @internal
13
+ */
14
+ static { this.hostSelector = 'sky-chart-bar'; }
15
+ #getCanvas = this.locatorForOptional('canvas');
16
+ /**
17
+ * Gets a `HarnessPredicate` that can be used to search for a
18
+ * `SkyChartBarHarness` that meets certain criteria.
19
+ */
20
+ static with(filters) {
21
+ return SkyChartBarHarness.getDataSkyIdPredicate(filters);
22
+ }
23
+ /**
24
+ * Whether the bar chart has rendered its plot. The plot renders once the
25
+ * chart is given a category axis, a value axis, and at least one series.
26
+ */
27
+ async isChartRendered() {
28
+ return (await this.#getCanvas()) !== null;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Harness for interacting with a chart's data table modal in tests. Open the
34
+ * modal with `SkyChartHarness.openDataTableModal`.
35
+ * @preview
36
+ */
37
+ class SkyChartTableModalHarness extends ComponentHarness {
38
+ /**
39
+ * @internal
40
+ */
41
+ static { this.hostSelector = 'sky-chart-table-modal'; }
42
+ #getBodyCells = this.locatorForAll('.sky-chart-data-table tbody td');
43
+ #getCloseButton = this.locatorFor('button.sky-chart-table-modal-close');
44
+ #getColumnHeaders = this.locatorForAll('.sky-chart-data-table thead th');
45
+ #getRowHeaders = this.locatorForAll('.sky-chart-data-table tbody th');
46
+ /**
47
+ * Closes the data table modal.
48
+ */
49
+ async close() {
50
+ await (await this.#getCloseButton()).click();
51
+ }
52
+ /**
53
+ * Gets the categories, shown as the table's row headers.
54
+ */
55
+ async getCategories() {
56
+ const rowHeaders = await this.#getRowHeaders();
57
+ return await Promise.all(rowHeaders.map((header) => header.text()));
58
+ }
59
+ /**
60
+ * Gets the category axis label, shown as the table's corner header.
61
+ */
62
+ async getCategoryLabel() {
63
+ const [cornerHeader] = await this.#getColumnHeaders();
64
+ return await cornerHeader.text();
65
+ }
66
+ /**
67
+ * Gets the series labels, shown as the table's column headers.
68
+ */
69
+ async getSeriesLabels() {
70
+ const [, ...seriesHeaders] = await this.#getColumnHeaders();
71
+ return await Promise.all(seriesHeaders.map((header) => header.text()));
72
+ }
73
+ /**
74
+ * Gets the formatted values of the table's body as one array per category
75
+ * row, ordered to match the series labels.
76
+ */
77
+ async getValues() {
78
+ const seriesCount = (await this.getSeriesLabels()).length;
79
+ const cells = await this.#getBodyCells();
80
+ const cellText = await Promise.all(cells.map((cell) => cell.text()));
81
+ const rows = [];
82
+ for (let i = 0; i < cellText.length; i += seriesCount) {
83
+ rows.push(cellText.slice(i, i + seriesCount));
84
+ }
85
+ return rows;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Harness for interacting with a chart component in tests. Query the plot's
91
+ * harness (for example, `SkyChartBarHarness`) with `queryHarness`.
92
+ * @preview
93
+ */
94
+ class SkyChartHarness extends SkyQueryableComponentHarness {
95
+ /**
96
+ * @internal
97
+ */
98
+ static { this.hostSelector = 'sky-chart'; }
99
+ #getContent = this.locatorFor('.sky-chart-content');
100
+ #documentRootLocator = this.documentRootLocatorFactory();
101
+ #getDropdown = this.locatorForOptional(SkyDropdownHarness);
102
+ #getHeading = this.locatorForOptional('sky-chart-heading h2, sky-chart-heading h3, sky-chart-heading h4, sky-chart-heading h5');
103
+ #getHelpInline = this.locatorForOptional(SkyHelpInlineHarness);
104
+ #getSubheading = this.locatorForOptional('sky-chart-subheading');
105
+ /**
106
+ * Gets a `HarnessPredicate` that can be used to search for a
107
+ * `SkyChartHarness` that meets certain criteria.
108
+ */
109
+ static with(filters) {
110
+ return SkyChartHarness.getDataSkyIdPredicate(filters).addOption('headingText', filters.headingText, async (harness, text) => await HarnessPredicate.stringMatches((await harness.getHeadingText()) ?? null, text));
111
+ }
112
+ /**
113
+ * Clicks the help inline button.
114
+ */
115
+ async clickHelpInline() {
116
+ await (await this.#getHelpInlineOrThrow()).click();
117
+ }
118
+ /**
119
+ * Whether the chart's heading is hidden.
120
+ */
121
+ async getHeadingHidden() {
122
+ return (await this.#getHeading()) === null;
123
+ }
124
+ /**
125
+ * Gets the semantic heading level of the chart's heading, or `undefined`
126
+ * when the heading is hidden.
127
+ */
128
+ async getHeadingLevel() {
129
+ const heading = await this.#getHeading();
130
+ if (!heading) {
131
+ return undefined;
132
+ }
133
+ const tagName = await heading.getProperty('tagName');
134
+ return Number(tagName.charAt(1));
135
+ }
136
+ /**
137
+ * Gets the font style of the chart's heading, or `undefined` when the
138
+ * heading is hidden.
139
+ */
140
+ async getHeadingStyle() {
141
+ const heading = await this.#getHeading();
142
+ if (!heading) {
143
+ return undefined;
144
+ }
145
+ return (await heading.hasClass('sky-font-heading-2'))
146
+ ? 2
147
+ : (await heading.hasClass('sky-font-heading-3'))
148
+ ? 3
149
+ : (await heading.hasClass('sky-font-heading-4'))
150
+ ? 4
151
+ : 5;
152
+ }
153
+ /**
154
+ * Gets the chart's heading text, or `undefined` when the heading is hidden.
155
+ */
156
+ async getHeadingText() {
157
+ return await (await this.#getHeading())?.text();
158
+ }
159
+ /**
160
+ * Gets the help popover content.
161
+ */
162
+ async getHelpPopoverContent() {
163
+ return await (await this.#getHelpInlineOrThrow()).getPopoverContent();
164
+ }
165
+ /**
166
+ * Gets the help popover title.
167
+ */
168
+ async getHelpPopoverTitle() {
169
+ return await (await this.#getHelpInlineOrThrow()).getPopoverTitle();
170
+ }
171
+ /**
172
+ * Gets the chart's subheading text, or `undefined` when no subheading is
173
+ * displayed.
174
+ */
175
+ async getSubheadingText() {
176
+ return await (await this.#getSubheading())?.text();
177
+ }
178
+ /**
179
+ * Whether the chart displays its loading wait indicator.
180
+ */
181
+ async isLoading() {
182
+ return await (await this.#getContent()).hasClass('sky-chart-content-loading');
183
+ }
184
+ /**
185
+ * Opens the chart's data table modal from the chart's context menu and
186
+ * returns a harness for interacting with it. The context menu is available
187
+ * once the chart's plot has data to display.
188
+ */
189
+ async openDataTableModal() {
190
+ const dropdown = await this.#getDropdown();
191
+ if (!dropdown) {
192
+ throw new Error('No chart context menu found. The context menu is available once ' +
193
+ "the chart's plot has data to display.");
194
+ }
195
+ await dropdown.clickDropdownButton();
196
+ const menu = await dropdown.getDropdownMenu();
197
+ await (await menu.getItem({})).click();
198
+ return await this.#documentRootLocator.locatorFor(SkyChartTableModalHarness)();
199
+ }
200
+ async #getHelpInlineOrThrow() {
201
+ const helpInline = await this.#getHelpInline();
202
+ if (!helpInline) {
203
+ throw new Error('No help inline found.');
204
+ }
205
+ return helpInline;
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Generated bundle index. Do not edit.
211
+ */
212
+
213
+ export { SkyChartBarHarness, SkyChartHarness, SkyChartTableModalHarness };
214
+ //# sourceMappingURL=skyux-charts-testing.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skyux-charts-testing.mjs","sources":["../../../../../libs/components/charts/testing/src/modules/chart-bar/chart-bar-harness.ts","../../../../../libs/components/charts/testing/src/modules/chart-table/chart-table-modal-harness.ts","../../../../../libs/components/charts/testing/src/modules/chart/chart-harness.ts","../../../../../libs/components/charts/testing/src/skyux-charts-testing.ts"],"sourcesContent":["import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyChartBarHarnessFilters } from './chart-bar-harness-filters';\n\n/**\n * Harness for interacting with a bar chart component in tests.\n * @preview\n */\nexport class SkyChartBarHarness extends SkyComponentHarness {\n /**\n * @internal\n */\n public static readonly hostSelector = 'sky-chart-bar';\n\n readonly #getCanvas = this.locatorForOptional('canvas');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyChartBarHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyChartBarHarnessFilters,\n ): HarnessPredicate<SkyChartBarHarness> {\n return SkyChartBarHarness.getDataSkyIdPredicate(filters);\n }\n\n /**\n * Whether the bar chart has rendered its plot. The plot renders once the\n * chart is given a category axis, a value axis, and at least one series.\n */\n public async isChartRendered(): Promise<boolean> {\n return (await this.#getCanvas()) !== null;\n }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with a chart's data table modal in tests. Open the\n * modal with `SkyChartHarness.openDataTableModal`.\n * @preview\n */\nexport class SkyChartTableModalHarness extends ComponentHarness {\n /**\n * @internal\n */\n public static readonly hostSelector = 'sky-chart-table-modal';\n\n readonly #getBodyCells = this.locatorForAll('.sky-chart-data-table tbody td');\n readonly #getCloseButton = this.locatorFor(\n 'button.sky-chart-table-modal-close',\n );\n readonly #getColumnHeaders = this.locatorForAll(\n '.sky-chart-data-table thead th',\n );\n readonly #getRowHeaders = this.locatorForAll(\n '.sky-chart-data-table tbody th',\n );\n\n /**\n * Closes the data table modal.\n */\n public async close(): Promise<void> {\n await (await this.#getCloseButton()).click();\n }\n\n /**\n * Gets the categories, shown as the table's row headers.\n */\n public async getCategories(): Promise<string[]> {\n const rowHeaders = await this.#getRowHeaders();\n\n return await Promise.all(rowHeaders.map((header) => header.text()));\n }\n\n /**\n * Gets the category axis label, shown as the table's corner header.\n */\n public async getCategoryLabel(): Promise<string> {\n const [cornerHeader] = await this.#getColumnHeaders();\n\n return await cornerHeader.text();\n }\n\n /**\n * Gets the series labels, shown as the table's column headers.\n */\n public async getSeriesLabels(): Promise<string[]> {\n const [, ...seriesHeaders] = await this.#getColumnHeaders();\n\n return await Promise.all(seriesHeaders.map((header) => header.text()));\n }\n\n /**\n * Gets the formatted values of the table's body as one array per category\n * row, ordered to match the series labels.\n */\n public async getValues(): Promise<string[][]> {\n const seriesCount = (await this.getSeriesLabels()).length;\n const cells = await this.#getBodyCells();\n const cellText = await Promise.all(cells.map((cell) => cell.text()));\n\n const rows: string[][] = [];\n\n for (let i = 0; i < cellText.length; i += seriesCount) {\n rows.push(cellText.slice(i, i + seriesCount));\n }\n\n return rows;\n }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyChartHeadingLevel, SkyChartHeadingStyle } from '@skyux/charts';\nimport { SkyQueryableComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\nimport { SkyDropdownHarness } from '@skyux/popovers/testing';\n\nimport { SkyChartTableModalHarness } from '../chart-table/chart-table-modal-harness';\n\nimport { SkyChartHarnessFilters } from './chart-harness-filters';\n\n/**\n * Harness for interacting with a chart component in tests. Query the plot's\n * harness (for example, `SkyChartBarHarness`) with `queryHarness`.\n * @preview\n */\nexport class SkyChartHarness extends SkyQueryableComponentHarness {\n /**\n * @internal\n */\n public static readonly hostSelector = 'sky-chart';\n\n readonly #getContent = this.locatorFor('.sky-chart-content');\n readonly #documentRootLocator = this.documentRootLocatorFactory();\n readonly #getDropdown = this.locatorForOptional(SkyDropdownHarness);\n readonly #getHeading = this.locatorForOptional(\n 'sky-chart-heading h2, sky-chart-heading h3, sky-chart-heading h4, sky-chart-heading h5',\n );\n readonly #getHelpInline = this.locatorForOptional(SkyHelpInlineHarness);\n readonly #getSubheading = this.locatorForOptional('sky-chart-subheading');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a\n * `SkyChartHarness` that meets certain criteria.\n */\n public static with(\n filters: SkyChartHarnessFilters,\n ): HarnessPredicate<SkyChartHarness> {\n return SkyChartHarness.getDataSkyIdPredicate(filters).addOption(\n 'headingText',\n filters.headingText,\n async (harness, text) =>\n await HarnessPredicate.stringMatches(\n (await harness.getHeadingText()) ?? null,\n text,\n ),\n );\n }\n\n /**\n * Clicks the help inline button.\n */\n public async clickHelpInline(): Promise<void> {\n await (await this.#getHelpInlineOrThrow()).click();\n }\n\n /**\n * Whether the chart's heading is hidden.\n */\n public async getHeadingHidden(): Promise<boolean> {\n return (await this.#getHeading()) === null;\n }\n\n /**\n * Gets the semantic heading level of the chart's heading, or `undefined`\n * when the heading is hidden.\n */\n public async getHeadingLevel(): Promise<SkyChartHeadingLevel | undefined> {\n const heading = await this.#getHeading();\n\n if (!heading) {\n return undefined;\n }\n\n const tagName = await heading.getProperty<string>('tagName');\n\n return Number(tagName.charAt(1)) as SkyChartHeadingLevel;\n }\n\n /**\n * Gets the font style of the chart's heading, or `undefined` when the\n * heading is hidden.\n */\n public async getHeadingStyle(): Promise<SkyChartHeadingStyle | undefined> {\n const heading = await this.#getHeading();\n\n if (!heading) {\n return undefined;\n }\n\n return (await heading.hasClass('sky-font-heading-2'))\n ? 2\n : (await heading.hasClass('sky-font-heading-3'))\n ? 3\n : (await heading.hasClass('sky-font-heading-4'))\n ? 4\n : 5;\n }\n\n /**\n * Gets the chart's heading text, or `undefined` when the heading is hidden.\n */\n public async getHeadingText(): Promise<string | undefined> {\n return await (await this.#getHeading())?.text();\n }\n\n /**\n * Gets the help popover content.\n */\n public async getHelpPopoverContent(): Promise<string | undefined> {\n return await (await this.#getHelpInlineOrThrow()).getPopoverContent();\n }\n\n /**\n * Gets the help popover title.\n */\n public async getHelpPopoverTitle(): Promise<string | undefined> {\n return await (await this.#getHelpInlineOrThrow()).getPopoverTitle();\n }\n\n /**\n * Gets the chart's subheading text, or `undefined` when no subheading is\n * displayed.\n */\n public async getSubheadingText(): Promise<string | undefined> {\n return await (await this.#getSubheading())?.text();\n }\n\n /**\n * Whether the chart displays its loading wait indicator.\n */\n public async isLoading(): Promise<boolean> {\n return await (\n await this.#getContent()\n ).hasClass('sky-chart-content-loading');\n }\n\n /**\n * Opens the chart's data table modal from the chart's context menu and\n * returns a harness for interacting with it. The context menu is available\n * once the chart's plot has data to display.\n */\n public async openDataTableModal(): Promise<SkyChartTableModalHarness> {\n const dropdown = await this.#getDropdown();\n\n if (!dropdown) {\n throw new Error(\n 'No chart context menu found. The context menu is available once ' +\n \"the chart's plot has data to display.\",\n );\n }\n\n await dropdown.clickDropdownButton();\n\n const menu = await dropdown.getDropdownMenu();\n\n await (await menu.getItem({})).click();\n\n return await this.#documentRootLocator.locatorFor(\n SkyChartTableModalHarness,\n )();\n }\n\n async #getHelpInlineOrThrow(): Promise<SkyHelpInlineHarness> {\n const helpInline = await this.#getHelpInline();\n\n if (!helpInline) {\n throw new Error('No help inline found.');\n }\n\n return helpInline;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}