xmlui 0.10.13 → 0.10.14
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-779mp2Bm.mjs} +943 -736
- package/dist/lib/index.css +1 -1
- package/dist/lib/{initMock-B9LtmFJG.mjs → initMock-CAXdczCj.mjs} +1 -1
- package/dist/lib/xmlui.d.ts +16 -1
- package/dist/lib/xmlui.mjs +33 -32
- package/dist/metadata/{collectedComponentMetadata-BN8eg9Gr.mjs → collectedComponentMetadata-7DFXlw-J.mjs} +15057 -14865
- package/dist/metadata/{initMock-J7pN8owj.mjs → initMock-AFWEftc6.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 +1 -1
- 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.spec.js +268 -0
- 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.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/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/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/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 +153 -0
- package/dist/scripts/src/components/NavGroup/NavGroupNative.js +2 -2
- 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 +1231 -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/Slider/Slider.js +2 -0
- package/dist/scripts/src/components/Slider/Slider.spec.js +574 -0
- package/dist/scripts/src/components/Slider/SliderNative.js +62 -25
- 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.spec.js +555 -0
- package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +53 -0
- 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.spec.js +643 -0
- package/dist/scripts/src/components/Theme/Theme.spec.js +124 -0
- package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +1122 -0
- 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/CompoundComponent.js +1 -1
- package/dist/scripts/src/components-core/RestApiProxy.js +85 -8
- package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +8 -0
- package/dist/scripts/src/components-core/renderers.js +31 -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/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 +2 -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 +1355 -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/TimeInputDriver.js +22 -0
- package/dist/scripts/src/testing/drivers/TimerDriver.js +64 -0
- package/dist/scripts/src/testing/fixtures.js +487 -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 +18 -1
- package/dist/standalone/xmlui-standalone.umd.js +36 -36
- package/package.json +1 -1
|
@@ -0,0 +1,435 @@
|
|
|
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
|
+
// =============================================================================
|
|
14
|
+
// BASIC FUNCTIONALITY TESTS
|
|
15
|
+
// =============================================================================
|
|
16
|
+
(0, fixtures_1.test)("component renders with basic props", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
17
|
+
yield initTestBed(`<ExpandableItem summary="Test Summary">Content here</ExpandableItem>`, {});
|
|
18
|
+
const driver = yield createExpandableItemDriver();
|
|
19
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
20
|
+
yield (0, fixtures_1.expect)(driver.getSummaryContent()).toContainText("Test Summary");
|
|
21
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible(); // Initially collapsed
|
|
22
|
+
}));
|
|
23
|
+
(0, fixtures_1.test)("component displays summary content correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
24
|
+
yield initTestBed(`<ExpandableItem summary="My Summary">Content</ExpandableItem>`, {});
|
|
25
|
+
const driver = yield createExpandableItemDriver();
|
|
26
|
+
yield (0, fixtures_1.expect)(driver.getSummaryContent()).toContainText("My Summary");
|
|
27
|
+
yield (0, fixtures_1.expect)(driver.getSummary()).toBeVisible();
|
|
28
|
+
}));
|
|
29
|
+
(0, fixtures_1.test)("component handles initiallyExpanded prop", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
30
|
+
yield initTestBed(`<ExpandableItem summary="Test" initiallyExpanded="true">Content here</ExpandableItem>`, {});
|
|
31
|
+
const driver = yield createExpandableItemDriver();
|
|
32
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
33
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toContainText("Content here");
|
|
34
|
+
}));
|
|
35
|
+
(0, fixtures_1.test)("component toggles on summary click", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
36
|
+
yield initTestBed(`<ExpandableItem summary="Click me">Hidden content</ExpandableItem>`, {});
|
|
37
|
+
const driver = yield createExpandableItemDriver();
|
|
38
|
+
// Initially collapsed
|
|
39
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
40
|
+
// Click to expand
|
|
41
|
+
yield driver.getSummary().click();
|
|
42
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
43
|
+
// Click to collapse
|
|
44
|
+
yield driver.getSummary().click();
|
|
45
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
46
|
+
}));
|
|
47
|
+
(0, fixtures_1.test)("component displays correct icons for collapsed and expanded states", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
48
|
+
yield initTestBed(`<ExpandableItem summary="Test">Content</ExpandableItem>`, {});
|
|
49
|
+
const driver = yield createExpandableItemDriver();
|
|
50
|
+
// Initially collapsed - should show chevronright icon
|
|
51
|
+
yield (0, fixtures_1.expect)(driver.getIcon()).toBeVisible();
|
|
52
|
+
// Expand and check icon changes
|
|
53
|
+
yield driver.getSummary().click();
|
|
54
|
+
yield (0, fixtures_1.expect)(driver.getIcon()).toBeVisible();
|
|
55
|
+
}));
|
|
56
|
+
(0, fixtures_1.test)("component handles custom icons", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
57
|
+
yield initTestBed(`
|
|
58
|
+
<ExpandableItem
|
|
59
|
+
summary="Test"
|
|
60
|
+
iconCollapsed="plus"
|
|
61
|
+
iconExpanded="minus">
|
|
62
|
+
Content
|
|
63
|
+
</ExpandableItem>
|
|
64
|
+
`, {});
|
|
65
|
+
const driver = yield createExpandableItemDriver();
|
|
66
|
+
yield (0, fixtures_1.expect)(driver.getIcon()).toBeVisible();
|
|
67
|
+
// Expand to see expanded icon
|
|
68
|
+
yield driver.getSummary().click();
|
|
69
|
+
yield (0, fixtures_1.expect)(driver.getIcon()).toBeVisible();
|
|
70
|
+
}));
|
|
71
|
+
(0, fixtures_1.test)("component supports iconPosition prop", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
72
|
+
yield initTestBed(`<ExpandableItem summary="Test" iconPosition="start">Content</ExpandableItem>`, {});
|
|
73
|
+
const driver = yield createExpandableItemDriver();
|
|
74
|
+
const className = yield driver.getSummary().getAttribute('class');
|
|
75
|
+
(0, fixtures_1.expect)(className).toMatch(/iconStart/);
|
|
76
|
+
yield (0, fixtures_1.expect)(driver.getIcon()).toBeVisible();
|
|
77
|
+
}));
|
|
78
|
+
(0, fixtures_1.test)("component handles withSwitch prop", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
79
|
+
yield initTestBed(`<ExpandableItem summary="Test" withSwitch="true">Content</ExpandableItem>`, {});
|
|
80
|
+
const driver = yield createExpandableItemDriver();
|
|
81
|
+
// Check that the switch container (aria-hidden div) is present
|
|
82
|
+
const switchContainer = driver.getSummary().locator('[aria-hidden="true"]');
|
|
83
|
+
yield (0, fixtures_1.expect)(switchContainer).toBeVisible();
|
|
84
|
+
yield (0, fixtures_1.expect)(driver.getIcon()).not.toBeVisible();
|
|
85
|
+
}));
|
|
86
|
+
// =============================================================================
|
|
87
|
+
// ACCESSIBILITY TESTS
|
|
88
|
+
// =============================================================================
|
|
89
|
+
(0, fixtures_1.test)("component has correct accessibility attributes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
90
|
+
yield initTestBed(`<ExpandableItem summary="Test Summary">Content here</ExpandableItem>`, {});
|
|
91
|
+
const driver = yield createExpandableItemDriver();
|
|
92
|
+
const summary = driver.getSummary();
|
|
93
|
+
// Summary should have proper button role and ARIA attributes
|
|
94
|
+
yield (0, fixtures_1.expect)(summary).toHaveRole("button");
|
|
95
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("aria-expanded", "false");
|
|
96
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("aria-disabled", "false");
|
|
97
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("tabindex", "0");
|
|
98
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("aria-controls");
|
|
99
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("id");
|
|
100
|
+
}));
|
|
101
|
+
(0, fixtures_1.test)("component ARIA attributes update with expansion state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
102
|
+
yield initTestBed(`<ExpandableItem summary="Test Summary">Content here</ExpandableItem>`, {});
|
|
103
|
+
const driver = yield createExpandableItemDriver();
|
|
104
|
+
const summary = driver.getSummary();
|
|
105
|
+
// Initially collapsed
|
|
106
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("aria-expanded", "false");
|
|
107
|
+
// Expand
|
|
108
|
+
yield summary.click();
|
|
109
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("aria-expanded", "true");
|
|
110
|
+
// Collapse
|
|
111
|
+
yield summary.click();
|
|
112
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("aria-expanded", "false");
|
|
113
|
+
}));
|
|
114
|
+
(0, fixtures_1.test)("component content region has correct ARIA attributes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
115
|
+
yield initTestBed(`<ExpandableItem summary="Test Summary" initiallyExpanded="true">Content here</ExpandableItem>`, {});
|
|
116
|
+
const driver = yield createExpandableItemDriver();
|
|
117
|
+
const summary = driver.getSummary();
|
|
118
|
+
const content = driver.getContent();
|
|
119
|
+
// Content should have region role and proper labeling
|
|
120
|
+
yield (0, fixtures_1.expect)(content).toHaveRole("region");
|
|
121
|
+
yield (0, fixtures_1.expect)(content).toHaveAttribute("aria-labelledby");
|
|
122
|
+
yield (0, fixtures_1.expect)(content).toHaveAttribute("id");
|
|
123
|
+
// Verify ARIA relationship between summary and content
|
|
124
|
+
const summaryId = yield summary.getAttribute("id");
|
|
125
|
+
const contentAriaLabelledBy = yield content.getAttribute("aria-labelledby");
|
|
126
|
+
const summaryAriaControls = yield summary.getAttribute("aria-controls");
|
|
127
|
+
const contentId = yield content.getAttribute("id");
|
|
128
|
+
(0, fixtures_1.expect)(contentAriaLabelledBy).toBe(summaryId);
|
|
129
|
+
(0, fixtures_1.expect)(summaryAriaControls).toBe(contentId);
|
|
130
|
+
}));
|
|
131
|
+
(0, fixtures_1.test)("component is keyboard accessible with Enter key", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
132
|
+
const { testStateDriver } = yield initTestBed(`<ExpandableItem summary="Test" onExpandedChange="arg => testState = arg">Content</ExpandableItem>`, {});
|
|
133
|
+
const driver = yield createExpandableItemDriver();
|
|
134
|
+
const summary = driver.getSummary();
|
|
135
|
+
// Focus the summary button
|
|
136
|
+
yield summary.focus();
|
|
137
|
+
yield (0, fixtures_1.expect)(summary).toBeFocused();
|
|
138
|
+
// Press Enter to toggle
|
|
139
|
+
yield summary.press("Enter");
|
|
140
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(true);
|
|
141
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
142
|
+
// Press Enter again to collapse
|
|
143
|
+
yield summary.press("Enter");
|
|
144
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(false);
|
|
145
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
146
|
+
}));
|
|
147
|
+
(0, fixtures_1.test)("component is keyboard accessible with Space key", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
148
|
+
const { testStateDriver } = yield initTestBed(`<ExpandableItem summary="Test" onExpandedChange="arg => testState = arg">Content</ExpandableItem>`, {});
|
|
149
|
+
const driver = yield createExpandableItemDriver();
|
|
150
|
+
const summary = driver.getSummary();
|
|
151
|
+
// Focus the summary button
|
|
152
|
+
yield summary.focus();
|
|
153
|
+
yield (0, fixtures_1.expect)(summary).toBeFocused();
|
|
154
|
+
// Press Space to toggle
|
|
155
|
+
yield summary.press(" ");
|
|
156
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(true);
|
|
157
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
158
|
+
// Press Space again to collapse
|
|
159
|
+
yield summary.press(" ");
|
|
160
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(false);
|
|
161
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
162
|
+
}));
|
|
163
|
+
(0, fixtures_1.test)("component maintains focus after keyboard toggle", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
164
|
+
yield initTestBed(`<ExpandableItem summary="Test">Content</ExpandableItem>`, {});
|
|
165
|
+
const driver = yield createExpandableItemDriver();
|
|
166
|
+
const summary = driver.getSummary();
|
|
167
|
+
// Focus and expand with keyboard
|
|
168
|
+
yield summary.focus();
|
|
169
|
+
yield (0, fixtures_1.expect)(summary).toBeFocused();
|
|
170
|
+
yield summary.press("Enter");
|
|
171
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
172
|
+
yield (0, fixtures_1.expect)(summary).toBeFocused(); // Focus should remain
|
|
173
|
+
// Collapse with keyboard
|
|
174
|
+
yield summary.press("Space");
|
|
175
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
176
|
+
yield (0, fixtures_1.expect)(summary).toBeFocused(); // Focus should still remain
|
|
177
|
+
}));
|
|
178
|
+
(0, fixtures_1.test)("component is focusable only when enabled", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
179
|
+
yield initTestBed(`<ExpandableItem summary="Test" enabled="false">Content</ExpandableItem>`, {});
|
|
180
|
+
const driver = yield createExpandableItemDriver();
|
|
181
|
+
const summary = driver.getSummary();
|
|
182
|
+
// Disabled component should not be focusable (no tabindex attribute)
|
|
183
|
+
yield (0, fixtures_1.expect)(summary).not.toHaveAttribute("tabindex");
|
|
184
|
+
yield (0, fixtures_1.expect)(summary).toHaveAttribute("aria-disabled", "true");
|
|
185
|
+
}));
|
|
186
|
+
(0, fixtures_1.test)("component keyboard interaction works with switch variant", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
187
|
+
const { testStateDriver } = yield initTestBed(`<ExpandableItem summary="Test" withSwitch="true" onExpandedChange="arg => testState = arg">Content</ExpandableItem>`, {});
|
|
188
|
+
const driver = yield createExpandableItemDriver();
|
|
189
|
+
const summary = driver.getSummary();
|
|
190
|
+
// Focus and activate with Enter
|
|
191
|
+
yield summary.focus();
|
|
192
|
+
yield summary.press("Enter");
|
|
193
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(true);
|
|
194
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
195
|
+
// Deactivate with Space
|
|
196
|
+
yield summary.press(" ");
|
|
197
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(false);
|
|
198
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
199
|
+
}));
|
|
200
|
+
(0, fixtures_1.test)("component icon/switch container is hidden from screen readers", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
201
|
+
yield initTestBed(`<ExpandableItem summary="Test">Content</ExpandableItem>`, {});
|
|
202
|
+
const driver = yield createExpandableItemDriver();
|
|
203
|
+
// Icon container should be aria-hidden
|
|
204
|
+
const iconContainer = driver.getSummary().locator('[class*="icon"]');
|
|
205
|
+
yield (0, fixtures_1.expect)(iconContainer).toHaveAttribute("aria-hidden", "true");
|
|
206
|
+
}));
|
|
207
|
+
(0, fixtures_1.test)("component supports screen reader navigation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
208
|
+
yield initTestBed(`<ExpandableItem summary="Accessible Summary">Screen reader content</ExpandableItem>`, {});
|
|
209
|
+
const driver = yield createExpandableItemDriver();
|
|
210
|
+
// Summary should be properly announced as a button
|
|
211
|
+
const summary = driver.getSummary();
|
|
212
|
+
yield (0, fixtures_1.expect)(summary).toHaveRole("button");
|
|
213
|
+
yield summary.click();
|
|
214
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
215
|
+
}));
|
|
216
|
+
// =============================================================================
|
|
217
|
+
// VISUAL STATE TESTS
|
|
218
|
+
// =============================================================================
|
|
219
|
+
(0, fixtures_1.test)("component applies theme variables", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
220
|
+
yield initTestBed(`<ExpandableItem summary="Test">Content</ExpandableItem>`, {
|
|
221
|
+
testThemeVars: { "backgroundColor-ExpandableItem": "rgb(255, 0, 0)" }
|
|
222
|
+
});
|
|
223
|
+
const driver = yield createExpandableItemDriver();
|
|
224
|
+
yield (0, fixtures_1.expect)(driver.component).toHaveCSS("background-color", "rgb(255, 0, 0)");
|
|
225
|
+
}));
|
|
226
|
+
(0, fixtures_1.test)("component applies disabled visual state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
227
|
+
yield initTestBed(`<ExpandableItem summary="Test" enabled="false">Content</ExpandableItem>`, {});
|
|
228
|
+
const driver = yield createExpandableItemDriver();
|
|
229
|
+
const className = yield driver.component.getAttribute('class');
|
|
230
|
+
(0, fixtures_1.expect)(className).toMatch(/disabled/);
|
|
231
|
+
}));
|
|
232
|
+
(0, fixtures_1.test)("component applies expanded visual state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
233
|
+
yield initTestBed(`<ExpandableItem summary="Test" initiallyExpanded="true">Content</ExpandableItem>`, {});
|
|
234
|
+
const driver = yield createExpandableItemDriver();
|
|
235
|
+
// Instead of checking for CSS class, check that content is visible when initially expanded
|
|
236
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
237
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toContainText("Content");
|
|
238
|
+
}));
|
|
239
|
+
(0, fixtures_1.test)("component applies withSwitch visual state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
240
|
+
yield initTestBed(`<ExpandableItem summary="Test" withSwitch="true">Content</ExpandableItem>`, {});
|
|
241
|
+
const driver = yield createExpandableItemDriver();
|
|
242
|
+
const className = yield driver.component.getAttribute('class');
|
|
243
|
+
(0, fixtures_1.expect)(className).toMatch(/withSwitch/);
|
|
244
|
+
}));
|
|
245
|
+
(0, fixtures_1.test)("component handles icon position styling", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
246
|
+
yield initTestBed(`<ExpandableItem summary="Test" iconPosition="end">Content</ExpandableItem>`, {});
|
|
247
|
+
const driver = yield createExpandableItemDriver();
|
|
248
|
+
const className = yield driver.getSummary().getAttribute('class');
|
|
249
|
+
(0, fixtures_1.expect)(className).toMatch(/iconEnd/);
|
|
250
|
+
}));
|
|
251
|
+
// =============================================================================
|
|
252
|
+
// EDGE CASE TESTS
|
|
253
|
+
// =============================================================================
|
|
254
|
+
(0, fixtures_1.test)("component handles null and undefined props gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
255
|
+
yield initTestBed(`<ExpandableItem>Content without summary</ExpandableItem>`, {});
|
|
256
|
+
const driver = yield createExpandableItemDriver();
|
|
257
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
258
|
+
yield (0, fixtures_1.expect)(driver.getSummary()).toBeVisible();
|
|
259
|
+
}));
|
|
260
|
+
(0, fixtures_1.test)("component handles empty summary", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
261
|
+
yield initTestBed(`<ExpandableItem summary="">Content</ExpandableItem>`, {});
|
|
262
|
+
const driver = yield createExpandableItemDriver();
|
|
263
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
264
|
+
yield (0, fixtures_1.expect)(driver.getSummary()).toBeVisible();
|
|
265
|
+
}));
|
|
266
|
+
(0, fixtures_1.test)("component handles empty content", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
267
|
+
yield initTestBed(`<ExpandableItem summary="Test"></ExpandableItem>`, {});
|
|
268
|
+
const driver = yield createExpandableItemDriver();
|
|
269
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
270
|
+
yield driver.getSummary().click();
|
|
271
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
272
|
+
}));
|
|
273
|
+
(0, fixtures_1.test)("component handles special characters in summary", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
274
|
+
yield initTestBed(`<ExpandableItem summary="Test with émojis 🚀 & quotes">Content</ExpandableItem>`, {});
|
|
275
|
+
const driver = yield createExpandableItemDriver();
|
|
276
|
+
yield (0, fixtures_1.expect)(driver.getSummaryContent()).toContainText("Test with émojis 🚀 & quotes");
|
|
277
|
+
}));
|
|
278
|
+
(0, fixtures_1.test)("component handles complex summary content", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
279
|
+
yield initTestBed(`
|
|
280
|
+
<ExpandableItem summary="Complex Summary">
|
|
281
|
+
Content here
|
|
282
|
+
</ExpandableItem>
|
|
283
|
+
`, {});
|
|
284
|
+
const driver = yield createExpandableItemDriver();
|
|
285
|
+
yield (0, fixtures_1.expect)(driver.getSummary()).toBeVisible();
|
|
286
|
+
yield (0, fixtures_1.expect)(driver.getSummaryContent()).toContainText("Complex Summary");
|
|
287
|
+
}));
|
|
288
|
+
(0, fixtures_1.test)("component handles disabled state interaction", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
289
|
+
yield initTestBed(`<ExpandableItem summary="Test" enabled="false">Content</ExpandableItem>`, {});
|
|
290
|
+
const driver = yield createExpandableItemDriver();
|
|
291
|
+
// Should not expand when disabled - use force click since the element is aria-disabled
|
|
292
|
+
yield driver.getSummary().click({ force: true });
|
|
293
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
294
|
+
}));
|
|
295
|
+
// =============================================================================
|
|
296
|
+
// PERFORMANCE TESTS
|
|
297
|
+
// =============================================================================
|
|
298
|
+
(0, fixtures_1.test)("component memoization prevents unnecessary re-renders", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
299
|
+
const { testStateDriver } = yield initTestBed(`
|
|
300
|
+
<ExpandableItem
|
|
301
|
+
summary="Test"
|
|
302
|
+
onExpandedChange="testState = (testState || 0) + 1">
|
|
303
|
+
Content
|
|
304
|
+
</ExpandableItem>
|
|
305
|
+
`, {});
|
|
306
|
+
const driver = yield createExpandableItemDriver();
|
|
307
|
+
// Expand
|
|
308
|
+
yield driver.getSummary().click();
|
|
309
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(1);
|
|
310
|
+
// Collapse
|
|
311
|
+
yield driver.getSummary().click();
|
|
312
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(2);
|
|
313
|
+
}));
|
|
314
|
+
(0, fixtures_1.test)("component handles rapid toggling", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
315
|
+
yield initTestBed(`<ExpandableItem summary="Test">Content</ExpandableItem>`, {});
|
|
316
|
+
const driver = yield createExpandableItemDriver();
|
|
317
|
+
// Rapid clicks
|
|
318
|
+
yield driver.getSummary().click();
|
|
319
|
+
yield driver.getSummary().click();
|
|
320
|
+
yield driver.getSummary().click();
|
|
321
|
+
// Should end up collapsed (odd number of clicks)
|
|
322
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
323
|
+
}));
|
|
324
|
+
(0, fixtures_1.test)("component handles large content efficiently", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
325
|
+
const largeContent = "Very long content ".repeat(100);
|
|
326
|
+
yield initTestBed(`<ExpandableItem summary="Test">${largeContent}</ExpandableItem>`, {});
|
|
327
|
+
const driver = yield createExpandableItemDriver();
|
|
328
|
+
yield driver.getSummary().click();
|
|
329
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
330
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toContainText("Very long content");
|
|
331
|
+
}));
|
|
332
|
+
// =============================================================================
|
|
333
|
+
// INTEGRATION TESTS
|
|
334
|
+
// =============================================================================
|
|
335
|
+
(0, fixtures_1.test)("component works in layout contexts", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
336
|
+
yield initTestBed(`
|
|
337
|
+
<VStack gap="2">
|
|
338
|
+
<ExpandableItem summary="First Item">First content</ExpandableItem>
|
|
339
|
+
<ExpandableItem summary="Second Item">Second content</ExpandableItem>
|
|
340
|
+
</VStack>
|
|
341
|
+
`, {});
|
|
342
|
+
const driver = yield createExpandableItemDriver();
|
|
343
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
344
|
+
// Use first() to get the first ExpandableItem's summary content
|
|
345
|
+
yield (0, fixtures_1.expect)(driver.getSummaryContent().first()).toContainText("First Item");
|
|
346
|
+
}));
|
|
347
|
+
(0, fixtures_1.test)("component API methods work correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
348
|
+
yield initTestBed(`
|
|
349
|
+
<Fragment>
|
|
350
|
+
<ExpandableItem id="expandable" summary="Test">Content</ExpandableItem>
|
|
351
|
+
<Button testId="expandBtn" onClick="expandable.expand()">Expand</Button>
|
|
352
|
+
<Button testId="collapseBtn" onClick="expandable.collapse()">Collapse</Button>
|
|
353
|
+
<Button testId="toggleBtn" onClick="expandable.toggle()">Toggle</Button>
|
|
354
|
+
<Button testId="checkBtn" onClick="testState = expandable.isExpanded()">Check</Button>
|
|
355
|
+
</Fragment>
|
|
356
|
+
`, {});
|
|
357
|
+
const { testStateDriver } = yield initTestBed(`
|
|
358
|
+
<Fragment>
|
|
359
|
+
<ExpandableItem id="expandable" summary="Test">Content</ExpandableItem>
|
|
360
|
+
<Button testId="expandBtn" onClick="expandable.expand()">Expand</Button>
|
|
361
|
+
<Button testId="collapseBtn" onClick="expandable.collapse()">Collapse</Button>
|
|
362
|
+
<Button testId="toggleBtn" onClick="expandable.toggle()">Toggle</Button>
|
|
363
|
+
<Button testId="checkBtn" onClick="testState = expandable.isExpanded()">Check</Button>
|
|
364
|
+
</Fragment>
|
|
365
|
+
`, {});
|
|
366
|
+
// Test expand API
|
|
367
|
+
yield page.getByTestId("expandBtn").click();
|
|
368
|
+
yield (0, fixtures_1.expect)(page.locator('[class*="_content_"]')).toBeVisible();
|
|
369
|
+
// Test isExpanded API
|
|
370
|
+
yield page.getByTestId("checkBtn").click();
|
|
371
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(true);
|
|
372
|
+
// Test collapse API
|
|
373
|
+
yield page.getByTestId("collapseBtn").click();
|
|
374
|
+
yield (0, fixtures_1.expect)(page.locator('[class*="_content_"]')).not.toBeVisible();
|
|
375
|
+
// Test toggle API
|
|
376
|
+
yield page.getByTestId("toggleBtn").click();
|
|
377
|
+
yield (0, fixtures_1.expect)(page.locator('[class*="_content_"]')).toBeVisible();
|
|
378
|
+
}));
|
|
379
|
+
(0, fixtures_1.test)("component works with forms", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
380
|
+
yield initTestBed(`
|
|
381
|
+
<Form>
|
|
382
|
+
<ExpandableItem summary="Advanced Options">
|
|
383
|
+
<FormItem label="Advanced Setting">
|
|
384
|
+
<TextBox name="advanced" />
|
|
385
|
+
</FormItem>
|
|
386
|
+
</ExpandableItem>
|
|
387
|
+
</Form>
|
|
388
|
+
`, {});
|
|
389
|
+
const driver = yield createExpandableItemDriver();
|
|
390
|
+
yield driver.getSummary().click();
|
|
391
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
392
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toContainText("Advanced Setting");
|
|
393
|
+
}));
|
|
394
|
+
(0, fixtures_1.test)("component event handlers work correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
395
|
+
const { testStateDriver } = yield initTestBed(`
|
|
396
|
+
<ExpandableItem
|
|
397
|
+
summary="Test"
|
|
398
|
+
onExpandedChange="arg =>testState = arg">
|
|
399
|
+
Content
|
|
400
|
+
</ExpandableItem>
|
|
401
|
+
`, {});
|
|
402
|
+
const driver = yield createExpandableItemDriver();
|
|
403
|
+
// Click to expand - should set testState to true
|
|
404
|
+
yield driver.getSummary().click();
|
|
405
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(true);
|
|
406
|
+
// Click to collapse - should set testState to false
|
|
407
|
+
yield driver.getSummary().click();
|
|
408
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(false);
|
|
409
|
+
}));
|
|
410
|
+
(0, fixtures_1.test)("component works with switch variant", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver, page }) {
|
|
411
|
+
yield initTestBed(`<ExpandableItem summary="Test" withSwitch="true">Content</ExpandableItem>`, {});
|
|
412
|
+
const driver = yield createExpandableItemDriver();
|
|
413
|
+
// With switch variant, users should click the summary (button) to toggle
|
|
414
|
+
// The switch itself is decorative and aria-hidden
|
|
415
|
+
yield driver.getSummary().click();
|
|
416
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
417
|
+
// Click the summary again to toggle back
|
|
418
|
+
yield driver.getSummary().click();
|
|
419
|
+
yield (0, fixtures_1.expect)(driver.getContent()).not.toBeVisible();
|
|
420
|
+
}));
|
|
421
|
+
(0, fixtures_1.test)("component works in nested scenarios", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createExpandableItemDriver }) {
|
|
422
|
+
yield initTestBed(`
|
|
423
|
+
<ExpandableItem summary="Parent">
|
|
424
|
+
<ExpandableItem summary="Child">
|
|
425
|
+
Nested content
|
|
426
|
+
</ExpandableItem>
|
|
427
|
+
</ExpandableItem>
|
|
428
|
+
`, {});
|
|
429
|
+
const driver = yield createExpandableItemDriver();
|
|
430
|
+
// Expand parent
|
|
431
|
+
yield driver.getSummary().click();
|
|
432
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toBeVisible();
|
|
433
|
+
// Should see nested expandable item
|
|
434
|
+
yield (0, fixtures_1.expect)(driver.getContent()).toContainText("Child");
|
|
435
|
+
}));
|