xmlui 0.10.13 → 0.10.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/{index-Db5iQkFp.mjs → index-axjeT2uJ.mjs} +1626 -1080
- package/dist/lib/index.css +1 -1
- package/dist/lib/{initMock-B9LtmFJG.mjs → initMock-BoTWMs19.mjs} +1 -1
- package/dist/lib/language-server-web-worker.mjs +1 -1
- package/dist/lib/language-server.mjs +1 -1
- package/dist/lib/{metadata-utils-D90qqMGc.mjs → metadata-utils-CtY0QcvH.mjs} +2 -1
- package/dist/lib/{server-common-lmBDLpUh.mjs → server-common-Cine5nRR.mjs} +1 -1
- package/dist/lib/xmlui.d.ts +99 -6
- package/dist/lib/xmlui.mjs +78 -42
- package/dist/metadata/{collectedComponentMetadata-BN8eg9Gr.mjs → collectedComponentMetadata-CQywuPDB.mjs} +17448 -16984
- package/dist/metadata/{initMock-J7pN8owj.mjs → initMock-Bi5kF5Af.mjs} +1 -1
- package/dist/metadata/style.css +1 -1
- package/dist/metadata/xmlui-metadata.mjs +1 -1
- package/dist/metadata/xmlui-metadata.umd.js +3 -3
- package/dist/scripts/bin/build-lib.js +21 -13
- package/dist/scripts/bin/viteConfig.js +3 -1
- package/dist/scripts/package.json +2 -3
- package/dist/scripts/src/abstractions/scripting/Token.js +2 -0
- package/dist/scripts/src/abstractions/scripting/TryScope.js +2 -0
- package/dist/scripts/src/abstractions/scripting/modules.js +2 -0
- package/dist/scripts/src/components/APICall/APICall.spec.js +910 -0
- package/dist/scripts/src/components/Accordion/Accordion.spec.js +969 -0
- package/dist/scripts/src/components/Animation/Animation.js +50 -0
- package/dist/scripts/src/components/App/App.spec.js +219 -0
- package/dist/scripts/src/components/AppHeader/AppHeader.spec.js +169 -0
- package/dist/scripts/src/components/AppState/AppState.js +32 -2
- package/dist/scripts/src/components/AppState/AppState.spec.js +268 -0
- package/dist/scripts/src/components/AppState/AppStateNative.js +27 -3
- package/dist/scripts/src/components/AutoComplete/AutoComplete.spec.js +383 -0
- package/dist/scripts/src/components/Avatar/Avatar.spec.js +1543 -0
- package/dist/scripts/src/components/Backdrop/Backdrop.spec.js +131 -0
- package/dist/scripts/src/components/Badge/Badge.spec.js +2214 -0
- package/dist/scripts/src/components/Bookmark/Bookmark.spec.js +230 -0
- package/dist/scripts/src/components/Breakout/Breakout.spec.js +56 -0
- package/dist/scripts/src/components/Button/Button-style.spec.js +274 -0
- package/dist/scripts/src/components/Button/Button.js +5 -1
- package/dist/scripts/src/components/Button/Button.spec.js +454 -0
- package/dist/scripts/src/components/Card/Card.spec.js +150 -0
- package/dist/scripts/src/components/Carousel/Carousel.spec.js +343 -0
- package/dist/scripts/src/components/Carousel/CarouselNative.js +2 -2
- package/dist/scripts/src/components/ChangeListener/ChangeListener.spec.js +169 -0
- package/dist/scripts/src/components/Charts/AreaChart/AreaChart.spec.js +999 -0
- package/dist/scripts/src/components/Charts/BarChart/BarChart.spec.js +597 -0
- package/dist/scripts/src/components/Charts/DonutChart/DonutChart.spec.js +608 -0
- package/dist/scripts/src/components/Charts/LabelList/LabelList.spec.js +539 -0
- package/dist/scripts/src/components/Charts/Legend/Legend.spec.js +558 -0
- package/dist/scripts/src/components/Charts/LineChart/LineChart.spec.js +450 -0
- package/dist/scripts/src/components/Charts/PieChart/PieChart.spec.js +584 -0
- package/dist/scripts/src/components/Charts/PieChart/PieChartNative.js +41 -2
- package/dist/scripts/src/components/Charts/RadarChart/RadarChart.spec.js +571 -0
- package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.spec.js +449 -0
- package/dist/scripts/src/components/Checkbox/Checkbox.spec.js +964 -0
- package/dist/scripts/src/components/CodeBlock/CodeBlock.spec.js +196 -0
- package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +283 -0
- package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +9 -26
- package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +53 -0
- package/dist/scripts/src/components/ComponentProvider.js +6 -2
- package/dist/scripts/src/components/ContentSeparator/ContentSeparator.spec.js +338 -0
- package/dist/scripts/src/components/DateInput/DateInput.spec.js +918 -0
- package/dist/scripts/src/components/DatePicker/DatePicker.spec.js +362 -0
- package/dist/scripts/src/components/DatePicker/DatePickerNative.js +3 -3
- package/dist/scripts/src/components/DropdownMenu/DropdownMenu.spec.js +331 -0
- package/dist/scripts/src/components/DropdownMenu/DropdownMenuNative.js +7 -9
- package/dist/scripts/src/components/EmojiSelector/EmojiSelector.spec.js +29 -0
- package/dist/scripts/src/components/ExpandableItem/ExpandableItem.spec.js +435 -0
- package/dist/scripts/src/components/FileInput/FileInput.spec.js +249 -0
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +296 -0
- package/dist/scripts/src/components/FlowLayout/FlowLayout.spec.js +518 -0
- package/dist/scripts/src/components/Footer/Footer.spec.js +991 -0
- package/dist/scripts/src/components/Form/Form.spec.js +1257 -0
- package/dist/scripts/src/components/FormItem/FormItem.spec.js +723 -0
- package/dist/scripts/src/components/FormItem/ItemWithLabel.js +3 -3
- package/dist/scripts/src/components/FormSection/FormSection.js +6 -31
- package/dist/scripts/src/components/Fragment/Fragment.spec.js +50 -0
- package/dist/scripts/src/components/Heading/H1.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H2.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H3.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H4.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H5.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H6.spec.js +66 -0
- package/dist/scripts/src/components/Heading/Heading.spec.js +897 -0
- package/dist/scripts/src/components/HtmlTags/HtmlTags.spec.js +69 -0
- package/dist/scripts/src/components/IFrame/IFrame.spec.js +527 -0
- package/dist/scripts/src/components/Icon/ArrowDropDown.js +11 -0
- package/dist/scripts/src/components/Icon/ArrowDropUp.js +11 -0
- package/dist/scripts/src/components/Icon/ArrowLeft.js +11 -0
- package/dist/scripts/src/components/Icon/ArrowRight.js +11 -0
- package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
- package/dist/scripts/src/components/Icon/Icon.spec.js +527 -0
- package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
- package/dist/scripts/src/components/Image/Image.js +2 -1
- package/dist/scripts/src/components/Image/Image.spec.js +198 -0
- package/dist/scripts/src/components/Image/ImageNative.js +30 -2
- package/dist/scripts/src/components/Input/InputLabel.js +25 -0
- package/dist/scripts/src/components/Input/index.js +5 -0
- package/dist/scripts/src/components/Items/Items.spec.js +397 -0
- package/dist/scripts/src/components/Link/Link.spec.js +894 -0
- package/dist/scripts/src/components/List/List.spec.js +927 -0
- package/dist/scripts/src/components/List/doc-resources/list-component-data.js +53 -0
- package/dist/scripts/src/components/Markdown/Markdown.spec.js +188 -0
- package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +162 -0
- package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +212 -0
- package/dist/scripts/src/components/NavGroup/NavGroupNative.js +15 -7
- package/dist/scripts/src/components/NavLink/NavLink.spec.js +864 -0
- package/dist/scripts/src/components/NavPanel/NavPanel.spec.js +864 -0
- package/dist/scripts/src/components/NoResult/NoResult.spec.js +863 -0
- package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +1237 -0
- package/dist/scripts/src/components/Option/Option.spec.js +472 -0
- package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.spec.js +80 -0
- package/dist/scripts/src/components/Pagination/Pagination.spec.js +1003 -0
- package/dist/scripts/src/components/ProfileMenu/ProfileMenu.js +20 -0
- package/dist/scripts/src/components/ProgressBar/ProgressBar.spec.js +166 -0
- package/dist/scripts/src/components/Queue/Queue.spec.js +626 -0
- package/dist/scripts/src/components/RadioGroup/RadioGroup.spec.js +479 -0
- package/dist/scripts/src/components/Redirect/Redirect.spec.js +527 -0
- package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.spec.js +76 -0
- package/dist/scripts/src/components/Select/Select.spec.js +527 -0
- package/dist/scripts/src/components/SelectionStore/SelectionStoreNative.js +3 -1
- package/dist/scripts/src/components/Slider/Slider.js +2 -0
- package/dist/scripts/src/components/Slider/Slider.spec.js +574 -0
- package/dist/scripts/src/components/Slider/SliderNative.js +63 -26
- package/dist/scripts/src/components/Slot/Slot.spec.js +368 -0
- package/dist/scripts/src/components/SpaceFiller/SpaceFiller.spec.js +184 -0
- package/dist/scripts/src/components/Spinner/Spinner.spec.js +161 -0
- package/dist/scripts/src/components/Splitter/HSplitter.spec.js +104 -0
- package/dist/scripts/src/components/Splitter/Splitter.spec.js +543 -0
- package/dist/scripts/src/components/Splitter/VSplitter.spec.js +104 -0
- package/dist/scripts/src/components/Stack/CHStack.spec.js +86 -0
- package/dist/scripts/src/components/Stack/CVStack.spec.js +86 -0
- package/dist/scripts/src/components/Stack/HStack.spec.js +67 -0
- package/dist/scripts/src/components/Stack/Stack.spec.js +654 -0
- package/dist/scripts/src/components/Stack/VStack.spec.js +67 -0
- package/dist/scripts/src/components/Switch/Switch.spec.js +829 -0
- package/dist/scripts/src/components/Table/Table.js +7 -1
- package/dist/scripts/src/components/Table/Table.spec.js +555 -0
- package/dist/scripts/src/components/Table/TableNative.js +4 -1
- package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +53 -0
- package/dist/scripts/src/components/Table/useRowSelection.js +215 -1
- package/dist/scripts/src/components/TableOfContents/TableOfContents.spec.js +838 -0
- package/dist/scripts/src/components/Tabs/Tabs.spec.js +875 -0
- package/dist/scripts/src/components/Text/Text.spec.js +1075 -0
- package/dist/scripts/src/components/TextArea/TextArea.spec.js +714 -0
- package/dist/scripts/src/components/TextBox/TextBox.js +1 -5
- package/dist/scripts/src/components/TextBox/TextBox.spec.js +687 -0
- package/dist/scripts/src/components/TextBox/TextBoxNative.js +10 -15
- package/dist/scripts/src/components/Theme/Theme.spec.js +124 -0
- package/dist/scripts/src/components/Theme/ThemeNative.js +2 -6
- package/dist/scripts/src/components/TimeInput/TimeInput.js +1 -5
- package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +1122 -0
- package/dist/scripts/src/components/TimeInput/TimeInputNative.js +2 -9
- package/dist/scripts/src/components/Timer/Timer.spec.js +358 -0
- package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.spec.js +414 -0
- package/dist/scripts/src/components/ToneSwitch/ToneSwitch.spec.js +89 -0
- package/dist/scripts/src/components/Tooltip/Tooltip.spec.js +418 -0
- package/dist/scripts/src/components/chart-color-schemes.js +43 -0
- package/dist/scripts/src/components-core/ApiBoundComponent.js +38 -24
- package/dist/scripts/src/components-core/CompoundComponent.js +1 -1
- package/dist/scripts/src/components-core/RestApiProxy.js +84 -8
- package/dist/scripts/src/components-core/behaviors/BehaviorContext.js +54 -0
- package/dist/scripts/src/components-core/behaviors/CoreBehaviors.js +80 -0
- package/dist/scripts/src/components-core/descriptorHelper.js +1 -0
- package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +8 -0
- package/dist/scripts/src/components-core/parts.js +4 -1
- package/dist/scripts/src/components-core/renderers.js +31 -0
- package/dist/scripts/src/components-core/rendering/AppRoot.js +2 -1
- package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +31 -46
- package/dist/scripts/src/components-core/rendering/nodeUtils.js +6 -0
- package/dist/scripts/src/components-core/script-runner/simplify-expression.js +386 -0
- package/dist/scripts/src/components-core/theming/component-layout-resolver.js +153 -0
- package/dist/scripts/src/components-core/theming/layout-resolver.js +2 -0
- package/dist/scripts/src/components-core/theming/parse-layout-props.js +98 -0
- package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
- package/dist/scripts/src/components-core/utils/audio-utils.js +83 -0
- package/dist/scripts/src/index-standalone.js +61 -0
- package/dist/scripts/src/index.js +39 -1
- package/dist/scripts/src/language-server/server-common.js +151 -0
- package/dist/scripts/src/language-server/server-web-worker.js +47 -0
- package/dist/scripts/src/language-server/server.js +42 -0
- package/dist/scripts/src/language-server/services/common/docs-generation.js +73 -0
- package/dist/scripts/src/language-server/services/common/lsp-utils.js +9 -0
- package/dist/scripts/src/language-server/services/common/syntax-node-utilities.js +135 -0
- package/dist/scripts/src/language-server/services/completion.js +270 -0
- package/dist/scripts/src/language-server/services/diagnostic.js +19 -0
- package/dist/scripts/src/language-server/services/format.js +430 -0
- package/dist/scripts/src/language-server/services/hover.js +164 -0
- package/dist/scripts/src/language-server/xmlui-metadata-generated.mjs +16266 -0
- package/dist/scripts/src/logging/xmlui.js +21 -0
- package/dist/scripts/src/parsers/common/utils.js +19 -0
- package/dist/scripts/src/syntax/monaco/grammar.monacoLanguage.js +286 -0
- package/dist/scripts/src/syntax/monaco/index.js +14 -0
- package/dist/scripts/src/syntax/monaco/xmlui-dark.js +25 -0
- package/dist/scripts/src/syntax/monaco/xmlui-light.js +25 -0
- package/dist/scripts/src/syntax/monaco/xmluiscript.monacoLanguage.js +310 -0
- package/dist/scripts/src/syntax/textMate/index.js +14 -0
- package/dist/scripts/src/syntax/textMate/xmlui-dark.json +631 -0
- package/dist/scripts/src/syntax/textMate/xmlui-light.json +565 -0
- package/dist/scripts/src/syntax/textMate/xmlui.json +564 -0
- package/dist/scripts/src/syntax/textMate/xmlui.tmLanguage.json +341 -0
- package/dist/scripts/src/testing/ComponentDrivers.js +1327 -0
- package/dist/scripts/src/testing/assertions.js +444 -0
- package/dist/scripts/src/testing/component-test-helpers.js +389 -0
- package/dist/scripts/src/testing/drivers/DateInputDriver.js +19 -0
- package/dist/scripts/src/testing/drivers/ModalDialogDriver.js +10 -0
- package/dist/scripts/src/testing/drivers/NumberBoxDriver.js +44 -0
- package/dist/scripts/src/testing/drivers/SliderDriver.js +20 -0
- package/dist/scripts/src/testing/drivers/TextBoxDriver.js +20 -0
- package/dist/scripts/src/testing/drivers/TimeInputDriver.js +22 -0
- package/dist/scripts/src/testing/drivers/TimerDriver.js +64 -0
- package/dist/scripts/src/testing/fixtures.js +513 -0
- package/dist/scripts/src/testing/infrastructure/TestBed.js +17 -0
- package/dist/scripts/src/testing/infrastructure/main.js +9 -0
- package/dist/scripts/src/testing/infrastructure/public/mockServiceWorker.js +266 -0
- package/dist/scripts/src/testing/themed-app-test-helpers.js +139 -0
- package/dist/standalone/xmlui-standalone.es.d.ts +172 -10
- package/dist/standalone/xmlui-standalone.umd.js +36 -36
- package/package.json +2 -3
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const fixtures_1 = require("../../../testing/fixtures");
|
|
13
|
+
// Test data helpers - using proper XMLUI data format
|
|
14
|
+
const sampleData = `[
|
|
15
|
+
{ name: 'Desktop', value: 400, fill: '#8884d8' },
|
|
16
|
+
{ name: 'Mobile', value: 300, fill: '#82ca9d' },
|
|
17
|
+
{ name: 'Tablet', value: 200, fill: '#ffc658' },
|
|
18
|
+
{ name: 'Other', value: 100, fill: '#ff7300' }
|
|
19
|
+
]`;
|
|
20
|
+
const emptyData = `[]`;
|
|
21
|
+
const singlePointData = `[
|
|
22
|
+
{ name: 'Desktop', value: 400 }
|
|
23
|
+
]`;
|
|
24
|
+
const largeDataset = `[
|
|
25
|
+
{ name: 'Category A', value: 400 },
|
|
26
|
+
{ name: 'Category B', value: 300 },
|
|
27
|
+
{ name: 'Category C', value: 200 },
|
|
28
|
+
{ name: 'Category D', value: 100 },
|
|
29
|
+
{ name: 'Category E', value: 150 },
|
|
30
|
+
{ name: 'Category F', value: 250 },
|
|
31
|
+
{ name: 'Category G', value: 180 },
|
|
32
|
+
{ name: 'Category H', value: 320 },
|
|
33
|
+
{ name: 'Category I', value: 275 },
|
|
34
|
+
{ name: 'Category J', value: 190 }
|
|
35
|
+
]`;
|
|
36
|
+
// Chart selectors - Legend specific
|
|
37
|
+
const chartRoot = ".recharts-responsive-container";
|
|
38
|
+
const chartSvg = ".recharts-surface";
|
|
39
|
+
const legendSelector = ".recharts-legend-wrapper";
|
|
40
|
+
const legendItemSelector = ".recharts-legend-item";
|
|
41
|
+
const legendTextSelector = ".recharts-legend-item-text";
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// BASIC FUNCTIONALITY TESTS
|
|
44
|
+
// =============================================================================
|
|
45
|
+
fixtures_1.test.describe("Basic Functionality", () => {
|
|
46
|
+
// Smoke tests
|
|
47
|
+
fixtures_1.test.describe("smoke tests", { tag: "@smoke" }, () => {
|
|
48
|
+
(0, fixtures_1.test)("Legend renders within PieChart", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
49
|
+
yield initTestBed(`
|
|
50
|
+
<PieChart
|
|
51
|
+
nameKey="name"
|
|
52
|
+
dataKey="value"
|
|
53
|
+
data="{${sampleData}}"
|
|
54
|
+
width="400px"
|
|
55
|
+
height="400px"
|
|
56
|
+
>
|
|
57
|
+
<Legend />
|
|
58
|
+
</PieChart>
|
|
59
|
+
`);
|
|
60
|
+
yield page.waitForSelector(chartRoot, { timeout: 10000 });
|
|
61
|
+
yield (0, fixtures_1.expect)(page.locator(chartRoot)).toBeVisible();
|
|
62
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
63
|
+
}));
|
|
64
|
+
(0, fixtures_1.test)("Legend renders within BarChart", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
65
|
+
yield initTestBed(`
|
|
66
|
+
<BarChart
|
|
67
|
+
xKey="name"
|
|
68
|
+
yKeys="{['value']}"
|
|
69
|
+
data="{${sampleData}}"
|
|
70
|
+
width="600px"
|
|
71
|
+
height="400px"
|
|
72
|
+
showLegend
|
|
73
|
+
>
|
|
74
|
+
<Legend />
|
|
75
|
+
</BarChart>
|
|
76
|
+
`);
|
|
77
|
+
yield page.waitForSelector(chartRoot, { timeout: 10000 });
|
|
78
|
+
yield (0, fixtures_1.expect)(page.locator(chartRoot)).toBeVisible();
|
|
79
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
// Align prop tests
|
|
83
|
+
fixtures_1.test.describe("align prop", () => {
|
|
84
|
+
(0, fixtures_1.test)("handles 'left' alignment", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
85
|
+
yield initTestBed(`
|
|
86
|
+
<PieChart
|
|
87
|
+
nameKey="name"
|
|
88
|
+
dataKey="value"
|
|
89
|
+
data="{${sampleData}}"
|
|
90
|
+
width="400px"
|
|
91
|
+
height="400px"
|
|
92
|
+
>
|
|
93
|
+
<Legend align="left" />
|
|
94
|
+
</PieChart>
|
|
95
|
+
`);
|
|
96
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
97
|
+
const legend = page.locator(legendSelector);
|
|
98
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
99
|
+
// Legend should be visible with left alignment
|
|
100
|
+
// Note: Actual positioning may vary based on chart implementation
|
|
101
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
102
|
+
}));
|
|
103
|
+
(0, fixtures_1.test)("handles 'center' alignment (default)", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
104
|
+
yield initTestBed(`
|
|
105
|
+
<PieChart
|
|
106
|
+
nameKey="name"
|
|
107
|
+
dataKey="value"
|
|
108
|
+
data="{${sampleData}}"
|
|
109
|
+
width="400px"
|
|
110
|
+
height="400px"
|
|
111
|
+
>
|
|
112
|
+
<Legend />
|
|
113
|
+
</PieChart>
|
|
114
|
+
`);
|
|
115
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
116
|
+
const legend = page.locator(legendSelector);
|
|
117
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
118
|
+
}));
|
|
119
|
+
(0, fixtures_1.test)("handles 'right' alignment", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
120
|
+
yield initTestBed(`
|
|
121
|
+
<PieChart
|
|
122
|
+
nameKey="name"
|
|
123
|
+
dataKey="value"
|
|
124
|
+
data="{${sampleData}}"
|
|
125
|
+
width="400px"
|
|
126
|
+
height="400px"
|
|
127
|
+
>
|
|
128
|
+
<Legend align="right" />
|
|
129
|
+
</PieChart>
|
|
130
|
+
`);
|
|
131
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
132
|
+
const legend = page.locator(legendSelector);
|
|
133
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
134
|
+
// Legend should be visible with right alignment
|
|
135
|
+
// Note: Actual positioning may vary based on chart implementation
|
|
136
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
137
|
+
}));
|
|
138
|
+
});
|
|
139
|
+
// VerticalAlign prop tests
|
|
140
|
+
fixtures_1.test.describe("verticalAlign prop", () => {
|
|
141
|
+
(0, fixtures_1.test)("handles 'top' vertical alignment", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
142
|
+
yield initTestBed(`
|
|
143
|
+
<PieChart
|
|
144
|
+
nameKey="name"
|
|
145
|
+
dataKey="value"
|
|
146
|
+
data="{${sampleData}}"
|
|
147
|
+
width="400px"
|
|
148
|
+
height="400px"
|
|
149
|
+
>
|
|
150
|
+
<Legend verticalAlign="top" />
|
|
151
|
+
</PieChart>
|
|
152
|
+
`);
|
|
153
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
154
|
+
const legend = page.locator(legendSelector);
|
|
155
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
156
|
+
// Legend should be visible with top alignment
|
|
157
|
+
// Note: Actual positioning may vary based on chart implementation
|
|
158
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
159
|
+
}));
|
|
160
|
+
(0, fixtures_1.test)("handles 'bottom' vertical alignment (default)", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
161
|
+
yield initTestBed(`
|
|
162
|
+
<PieChart
|
|
163
|
+
nameKey="name"
|
|
164
|
+
dataKey="value"
|
|
165
|
+
data="{${sampleData}}"
|
|
166
|
+
width="400px"
|
|
167
|
+
height="400px"
|
|
168
|
+
>
|
|
169
|
+
<Legend />
|
|
170
|
+
</PieChart>
|
|
171
|
+
`);
|
|
172
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
173
|
+
const legend = page.locator(legendSelector);
|
|
174
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
175
|
+
}));
|
|
176
|
+
(0, fixtures_1.test)("handles 'middle' vertical alignment", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
177
|
+
yield initTestBed(`
|
|
178
|
+
<PieChart
|
|
179
|
+
nameKey="name"
|
|
180
|
+
dataKey="value"
|
|
181
|
+
data="{${sampleData}}"
|
|
182
|
+
width="400px"
|
|
183
|
+
height="400px"
|
|
184
|
+
>
|
|
185
|
+
<Legend verticalAlign="middle" />
|
|
186
|
+
</PieChart>
|
|
187
|
+
`);
|
|
188
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
189
|
+
const legend = page.locator(legendSelector);
|
|
190
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
191
|
+
// Legend should be visible with middle alignment
|
|
192
|
+
// Note: Actual positioning may vary based on chart implementation
|
|
193
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
194
|
+
}));
|
|
195
|
+
});
|
|
196
|
+
// Combined alignment tests
|
|
197
|
+
fixtures_1.test.describe("combined alignment", () => {
|
|
198
|
+
(0, fixtures_1.test)("handles top-left alignment", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
199
|
+
yield initTestBed(`
|
|
200
|
+
<PieChart
|
|
201
|
+
nameKey="name"
|
|
202
|
+
dataKey="value"
|
|
203
|
+
data="{${sampleData}}"
|
|
204
|
+
width="400px"
|
|
205
|
+
height="400px"
|
|
206
|
+
>
|
|
207
|
+
<Legend align="left" verticalAlign="top" />
|
|
208
|
+
</PieChart>
|
|
209
|
+
`);
|
|
210
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
211
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
212
|
+
}));
|
|
213
|
+
(0, fixtures_1.test)("handles bottom-right alignment", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
214
|
+
yield initTestBed(`
|
|
215
|
+
<PieChart
|
|
216
|
+
nameKey="name"
|
|
217
|
+
dataKey="value"
|
|
218
|
+
data="{${sampleData}}"
|
|
219
|
+
width="400px"
|
|
220
|
+
height="400px"
|
|
221
|
+
>
|
|
222
|
+
<Legend align="right" verticalAlign="bottom" />
|
|
223
|
+
</PieChart>
|
|
224
|
+
`);
|
|
225
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
226
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
227
|
+
}));
|
|
228
|
+
(0, fixtures_1.test)("handles center-middle alignment", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
229
|
+
yield initTestBed(`
|
|
230
|
+
<PieChart
|
|
231
|
+
nameKey="name"
|
|
232
|
+
dataKey="value"
|
|
233
|
+
data="{${sampleData}}"
|
|
234
|
+
width="400px"
|
|
235
|
+
height="400px"
|
|
236
|
+
>
|
|
237
|
+
<Legend align="center" verticalAlign="middle" />
|
|
238
|
+
</PieChart>
|
|
239
|
+
`);
|
|
240
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
241
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
242
|
+
}));
|
|
243
|
+
});
|
|
244
|
+
// Data handling tests
|
|
245
|
+
fixtures_1.test.describe("data handling", () => {
|
|
246
|
+
(0, fixtures_1.test)("displays legend items for all data entries", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
247
|
+
yield initTestBed(`
|
|
248
|
+
<PieChart
|
|
249
|
+
nameKey="name"
|
|
250
|
+
dataKey="value"
|
|
251
|
+
data="{${sampleData}}"
|
|
252
|
+
width="400px"
|
|
253
|
+
height="400px"
|
|
254
|
+
>
|
|
255
|
+
<Legend />
|
|
256
|
+
</PieChart>
|
|
257
|
+
`);
|
|
258
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
259
|
+
const legendItems = page.locator(legendItemSelector);
|
|
260
|
+
yield (0, fixtures_1.expect)(legendItems).toHaveCount(4); // Desktop, Mobile, Tablet, Other
|
|
261
|
+
// Check that legend text matches data names
|
|
262
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "Desktop" })).toBeVisible();
|
|
263
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "Mobile" })).toBeVisible();
|
|
264
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "Tablet" })).toBeVisible();
|
|
265
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "Other" })).toBeVisible();
|
|
266
|
+
}));
|
|
267
|
+
(0, fixtures_1.test)("handles single data point", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
268
|
+
yield initTestBed(`
|
|
269
|
+
<PieChart
|
|
270
|
+
nameKey="name"
|
|
271
|
+
dataKey="value"
|
|
272
|
+
data="{${singlePointData}}"
|
|
273
|
+
width="400px"
|
|
274
|
+
height="400px"
|
|
275
|
+
>
|
|
276
|
+
<Legend />
|
|
277
|
+
</PieChart>
|
|
278
|
+
`);
|
|
279
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
280
|
+
const legendItems = page.locator(legendItemSelector);
|
|
281
|
+
yield (0, fixtures_1.expect)(legendItems).toHaveCount(1);
|
|
282
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "Desktop" })).toBeVisible();
|
|
283
|
+
}));
|
|
284
|
+
(0, fixtures_1.test)("handles empty data gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
285
|
+
yield initTestBed(`
|
|
286
|
+
<PieChart
|
|
287
|
+
nameKey="name"
|
|
288
|
+
dataKey="value"
|
|
289
|
+
data="{${emptyData}}"
|
|
290
|
+
width="400px"
|
|
291
|
+
height="400px"
|
|
292
|
+
>
|
|
293
|
+
<Legend />
|
|
294
|
+
</PieChart>
|
|
295
|
+
`);
|
|
296
|
+
yield page.waitForSelector(chartRoot, { timeout: 10000 });
|
|
297
|
+
// Legend should still be present but with no items
|
|
298
|
+
const legendItems = page.locator(legendItemSelector);
|
|
299
|
+
yield (0, fixtures_1.expect)(legendItems).toHaveCount(0);
|
|
300
|
+
}));
|
|
301
|
+
(0, fixtures_1.test)("handles large datasets", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
302
|
+
yield initTestBed(`
|
|
303
|
+
<PieChart
|
|
304
|
+
nameKey="name"
|
|
305
|
+
dataKey="value"
|
|
306
|
+
data="{${largeDataset}}"
|
|
307
|
+
width="400px"
|
|
308
|
+
height="400px"
|
|
309
|
+
>
|
|
310
|
+
<Legend />
|
|
311
|
+
</PieChart>
|
|
312
|
+
`);
|
|
313
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
314
|
+
const legendItems = page.locator(legendItemSelector);
|
|
315
|
+
yield (0, fixtures_1.expect)(legendItems).toHaveCount(10);
|
|
316
|
+
}));
|
|
317
|
+
});
|
|
318
|
+
// Integration with different chart types
|
|
319
|
+
fixtures_1.test.describe("chart type integration", () => {
|
|
320
|
+
(0, fixtures_1.test)("works with LineChart", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
321
|
+
yield initTestBed(`
|
|
322
|
+
<LineChart
|
|
323
|
+
xKey="name"
|
|
324
|
+
yKeys="{['value']}"
|
|
325
|
+
data="{${sampleData}}"
|
|
326
|
+
width="400px"
|
|
327
|
+
height="400px"
|
|
328
|
+
showLegend
|
|
329
|
+
>
|
|
330
|
+
<Legend />
|
|
331
|
+
</LineChart>
|
|
332
|
+
`);
|
|
333
|
+
yield page.waitForSelector(chartRoot, { timeout: 10000 });
|
|
334
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
335
|
+
}));
|
|
336
|
+
(0, fixtures_1.test)("works with DonutChart", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
337
|
+
yield initTestBed(`
|
|
338
|
+
<DonutChart
|
|
339
|
+
nameKey="name"
|
|
340
|
+
dataKey="value"
|
|
341
|
+
data="{${sampleData}}"
|
|
342
|
+
width="400px"
|
|
343
|
+
height="400px"
|
|
344
|
+
>
|
|
345
|
+
<Legend />
|
|
346
|
+
</DonutChart>
|
|
347
|
+
`);
|
|
348
|
+
yield page.waitForSelector(chartRoot, { timeout: 10000 });
|
|
349
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
350
|
+
}));
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
// =============================================================================
|
|
354
|
+
// ACCESSIBILITY TESTS
|
|
355
|
+
// =============================================================================
|
|
356
|
+
fixtures_1.test.describe("Accessibility", () => {
|
|
357
|
+
(0, fixtures_1.test)("legend has proper ARIA structure", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
358
|
+
yield initTestBed(`
|
|
359
|
+
<PieChart
|
|
360
|
+
nameKey="name"
|
|
361
|
+
dataKey="value"
|
|
362
|
+
data="{${sampleData}}"
|
|
363
|
+
width="400px"
|
|
364
|
+
height="400px"
|
|
365
|
+
>
|
|
366
|
+
<Legend />
|
|
367
|
+
</PieChart>
|
|
368
|
+
`);
|
|
369
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
370
|
+
const legend = page.locator(legendSelector);
|
|
371
|
+
yield (0, fixtures_1.expect)(legend).toBeVisible();
|
|
372
|
+
// Legend should be accessible to screen readers
|
|
373
|
+
const legendItems = page.locator(legendItemSelector);
|
|
374
|
+
yield (0, fixtures_1.expect)(legendItems.first()).toBeVisible();
|
|
375
|
+
}));
|
|
376
|
+
(0, fixtures_1.test)("legend items are keyboard accessible", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
377
|
+
yield initTestBed(`
|
|
378
|
+
<PieChart
|
|
379
|
+
nameKey="name"
|
|
380
|
+
dataKey="value"
|
|
381
|
+
data="{${sampleData}}"
|
|
382
|
+
width="400px"
|
|
383
|
+
height="400px"
|
|
384
|
+
>
|
|
385
|
+
<Legend />
|
|
386
|
+
</PieChart>
|
|
387
|
+
`);
|
|
388
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
389
|
+
// Tab navigation should work through legend items
|
|
390
|
+
yield page.keyboard.press("Tab");
|
|
391
|
+
const focusedElement = page.locator(":focus");
|
|
392
|
+
yield (0, fixtures_1.expect)(focusedElement).toBeVisible();
|
|
393
|
+
}));
|
|
394
|
+
(0, fixtures_1.test)("legend text is readable and properly contrasted", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
395
|
+
yield initTestBed(`
|
|
396
|
+
<PieChart
|
|
397
|
+
nameKey="name"
|
|
398
|
+
dataKey="value"
|
|
399
|
+
data="{${sampleData}}"
|
|
400
|
+
width="400px"
|
|
401
|
+
height="400px"
|
|
402
|
+
>
|
|
403
|
+
<Legend />
|
|
404
|
+
</PieChart>
|
|
405
|
+
`);
|
|
406
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
407
|
+
const legendText = page.locator(legendTextSelector).first();
|
|
408
|
+
yield (0, fixtures_1.expect)(legendText).toBeVisible();
|
|
409
|
+
// Text should have readable font size
|
|
410
|
+
yield (0, fixtures_1.expect)(legendText).toHaveCSS("font-size", /\d+px/);
|
|
411
|
+
}));
|
|
412
|
+
(0, fixtures_1.test)("supports screen reader navigation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
413
|
+
yield initTestBed(`
|
|
414
|
+
<PieChart
|
|
415
|
+
nameKey="name"
|
|
416
|
+
dataKey="value"
|
|
417
|
+
data="{${sampleData}}"
|
|
418
|
+
width="400px"
|
|
419
|
+
height="400px"
|
|
420
|
+
>
|
|
421
|
+
<Legend />
|
|
422
|
+
</PieChart>
|
|
423
|
+
`);
|
|
424
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
425
|
+
// Legend should be announced properly by screen readers
|
|
426
|
+
const legendItems = page.locator(legendItemSelector);
|
|
427
|
+
for (let i = 0; i < (yield legendItems.count()); i++) {
|
|
428
|
+
const item = legendItems.nth(i);
|
|
429
|
+
yield (0, fixtures_1.expect)(item).toBeVisible();
|
|
430
|
+
}
|
|
431
|
+
}));
|
|
432
|
+
});
|
|
433
|
+
// =============================================================================
|
|
434
|
+
// PERFORMANCE AND EDGE CASES
|
|
435
|
+
// =============================================================================
|
|
436
|
+
fixtures_1.test.describe("Performance and Edge Cases", () => {
|
|
437
|
+
(0, fixtures_1.test)("handles rapid prop changes efficiently", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
438
|
+
const { testStateDriver } = yield initTestBed(`
|
|
439
|
+
<PieChart
|
|
440
|
+
nameKey="name"
|
|
441
|
+
dataKey="value"
|
|
442
|
+
data="{${sampleData}}"
|
|
443
|
+
width="400px"
|
|
444
|
+
height="400px"
|
|
445
|
+
>
|
|
446
|
+
<Legend align="{testState || 'center'}" />
|
|
447
|
+
</PieChart>
|
|
448
|
+
<Button onClick="testState = testState === 'center' ? 'left' : 'center'">Toggle Align</Button>
|
|
449
|
+
`);
|
|
450
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
451
|
+
// Rapidly change alignment
|
|
452
|
+
for (let i = 0; i < 5; i++) {
|
|
453
|
+
yield page.getByRole("button", { name: "Toggle Align" }).click();
|
|
454
|
+
yield page.waitForTimeout(100);
|
|
455
|
+
}
|
|
456
|
+
// Legend should still be visible and functional
|
|
457
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
458
|
+
}));
|
|
459
|
+
(0, fixtures_1.test)("maintains performance with large datasets", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
460
|
+
yield initTestBed(`
|
|
461
|
+
<PieChart
|
|
462
|
+
nameKey="name"
|
|
463
|
+
dataKey="value"
|
|
464
|
+
data="{${largeDataset}}"
|
|
465
|
+
width="400px"
|
|
466
|
+
height="400px"
|
|
467
|
+
>
|
|
468
|
+
<Legend />
|
|
469
|
+
</PieChart>
|
|
470
|
+
`);
|
|
471
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
472
|
+
const legendItems = page.locator(legendItemSelector);
|
|
473
|
+
yield (0, fixtures_1.expect)(legendItems).toHaveCount(10);
|
|
474
|
+
// All legend items should be visible
|
|
475
|
+
for (let i = 0; i < 10; i++) {
|
|
476
|
+
yield (0, fixtures_1.expect)(legendItems.nth(i)).toBeVisible();
|
|
477
|
+
}
|
|
478
|
+
}));
|
|
479
|
+
(0, fixtures_1.test)("handles responsive container changes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
480
|
+
const { testStateDriver } = yield initTestBed(`
|
|
481
|
+
<PieChart
|
|
482
|
+
nameKey="name"
|
|
483
|
+
dataKey="value"
|
|
484
|
+
data="{${sampleData}}"
|
|
485
|
+
width="{testState || '400px'}"
|
|
486
|
+
height="400px"
|
|
487
|
+
>
|
|
488
|
+
<Legend />
|
|
489
|
+
</PieChart>
|
|
490
|
+
<Button onClick="testState = testState === '400px' ? '200px' : '400px'">Toggle Size</Button>
|
|
491
|
+
`);
|
|
492
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
493
|
+
// Change container size
|
|
494
|
+
yield page.getByRole("button", { name: "Toggle Size" }).click();
|
|
495
|
+
yield page.waitForTimeout(500);
|
|
496
|
+
// Legend should still be visible and properly positioned
|
|
497
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
498
|
+
}));
|
|
499
|
+
(0, fixtures_1.test)("handles Unicode and special characters in legend text", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
500
|
+
const unicodeData = `[
|
|
501
|
+
{ name: 'Desktop 🖥️', value: 400 },
|
|
502
|
+
{ name: 'Mobile 📱', value: 300 },
|
|
503
|
+
{ name: 'Tablet 📟', value: 200 },
|
|
504
|
+
{ name: 'Other ⚡', value: 100 }
|
|
505
|
+
]`;
|
|
506
|
+
yield initTestBed(`
|
|
507
|
+
<PieChart
|
|
508
|
+
nameKey="name"
|
|
509
|
+
dataKey="value"
|
|
510
|
+
data="{${unicodeData}}"
|
|
511
|
+
width="400px"
|
|
512
|
+
height="400px"
|
|
513
|
+
>
|
|
514
|
+
<Legend />
|
|
515
|
+
</PieChart>
|
|
516
|
+
`);
|
|
517
|
+
yield page.waitForSelector(legendSelector, { timeout: 10000 });
|
|
518
|
+
// Check that Unicode characters are displayed correctly
|
|
519
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "🖥️" })).toBeVisible();
|
|
520
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "📱" })).toBeVisible();
|
|
521
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "📟" })).toBeVisible();
|
|
522
|
+
yield (0, fixtures_1.expect)(page.locator(legendTextSelector).filter({ hasText: "⚡" })).toBeVisible();
|
|
523
|
+
}));
|
|
524
|
+
(0, fixtures_1.test)("handles null and undefined prop values gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
525
|
+
yield initTestBed(`
|
|
526
|
+
<PieChart
|
|
527
|
+
nameKey="name"
|
|
528
|
+
dataKey="value"
|
|
529
|
+
data="{${sampleData}}"
|
|
530
|
+
width="400px"
|
|
531
|
+
height="400px"
|
|
532
|
+
>
|
|
533
|
+
<Legend align="{null}" verticalAlign="{undefined}" />
|
|
534
|
+
</PieChart>
|
|
535
|
+
`);
|
|
536
|
+
yield page.waitForSelector(chartRoot, { timeout: 10000 });
|
|
537
|
+
// Should fall back to default values and still render
|
|
538
|
+
yield (0, fixtures_1.expect)(page.locator(legendSelector)).toBeVisible();
|
|
539
|
+
}));
|
|
540
|
+
(0, fixtures_1.test)("works correctly when multiple Legend components are present", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
541
|
+
yield initTestBed(`
|
|
542
|
+
<PieChart
|
|
543
|
+
nameKey="name"
|
|
544
|
+
dataKey="value"
|
|
545
|
+
data="{${sampleData}}"
|
|
546
|
+
width="400px"
|
|
547
|
+
height="400px"
|
|
548
|
+
>
|
|
549
|
+
<Legend align="left" />
|
|
550
|
+
<Legend align="right" />
|
|
551
|
+
</PieChart>
|
|
552
|
+
`);
|
|
553
|
+
yield page.waitForSelector(chartRoot, { timeout: 10000 });
|
|
554
|
+
// Only one legend should be rendered (last one wins)
|
|
555
|
+
const legends = page.locator(legendSelector);
|
|
556
|
+
yield (0, fixtures_1.expect)(legends).toHaveCount(1);
|
|
557
|
+
}));
|
|
558
|
+
});
|