xmlui 0.10.12 → 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-CDOoBf2R.mjs → index-779mp2Bm.mjs} +1508 -1287
- package/dist/lib/index.css +1 -1
- package/dist/lib/{initMock-BAV9RKui.mjs → initMock-CAXdczCj.mjs} +1 -1
- package/dist/lib/scss/components-core/theming/_themes.scss +1 -1
- package/dist/lib/xmlui.d.ts +17 -2
- package/dist/lib/xmlui.mjs +33 -32
- package/dist/metadata/{collectedComponentMetadata-Dp8BqWQO.mjs → collectedComponentMetadata-7DFXlw-J.mjs} +14957 -14751
- package/dist/metadata/{initMock-BvEO8W8r.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.js +3 -3
- package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +283 -0
- package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +16 -5
- package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +53 -0
- package/dist/scripts/src/components/ComponentProvider.js +6 -6
- 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 +1 -1
- 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/FileInput/FileInputNative.js +14 -10
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +296 -0
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZoneNative.js +1 -1
- 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.js +6 -0
- package/dist/scripts/src/components/Form/Form.spec.js +1257 -0
- package/dist/scripts/src/components/Form/FormNative.js +13 -3
- package/dist/scripts/src/components/FormItem/FormItem.spec.js +723 -0
- package/dist/scripts/src/components/FormItem/ItemWithLabel.js +2 -2
- package/dist/scripts/src/components/FormSection/FormSection.js +6 -31
- package/dist/scripts/src/components/Fragment/Fragment.js +5 -1
- 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.js +0 -12
- 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.js +1 -1
- package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +162 -0
- package/dist/scripts/src/components/ModalDialog/ModalDialogNative.js +1 -1
- 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/RadioGroup/RadioGroupNative.js +17 -1
- 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.js +8 -5
- package/dist/scripts/src/components/Table/Table.spec.js +555 -0
- package/dist/scripts/src/components/Table/TableNative.js +1 -1
- 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.js +0 -13
- 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/TextArea/TextAreaNative.js +8 -1
- package/dist/scripts/src/components/TextBox/TextBox.spec.js +643 -0
- package/dist/scripts/src/components/Theme/NotificationToast.js +4 -1
- 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 +5 -5
- package/dist/scripts/src/components-core/RestApiProxy.js +89 -11
- 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/rendering/ComponentAdapter.js +1 -1
- package/dist/scripts/src/components-core/rendering/Container.js +19 -8
- package/dist/scripts/src/components-core/rendering/reducer.js +1 -1
- 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/root.js +13 -20
- 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 +19 -2
- package/dist/standalone/xmlui-standalone.umd.js +36 -36
- package/package.json +1 -1
- package/dist/scripts/src/components/RadioGroup/RadioItem.js +0 -28
|
@@ -0,0 +1,626 @@
|
|
|
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
|
+
fixtures_1.test.describe("Basic Functionality", () => {
|
|
17
|
+
(0, fixtures_1.test)("component initializes and provides API methods", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
18
|
+
const { testStateDriver } = yield initTestBed(`
|
|
19
|
+
<Fragment>
|
|
20
|
+
<Queue id="testQueue" />
|
|
21
|
+
<Button id="checkApi" label="Check API" onClick="testState = {
|
|
22
|
+
hasEnqueueItem: typeof testQueue.enqueueItem === 'function',
|
|
23
|
+
hasEnqueueItems: typeof testQueue.enqueueItems === 'function',
|
|
24
|
+
hasGetQueuedItems: typeof testQueue.getQueuedItems === 'function',
|
|
25
|
+
hasGetQueueLength: typeof testQueue.getQueueLength === 'function',
|
|
26
|
+
hasRemove: typeof testQueue.remove === 'function'
|
|
27
|
+
}" />
|
|
28
|
+
</Fragment>
|
|
29
|
+
`);
|
|
30
|
+
const buttonDriver = createButtonDriver("checkApi");
|
|
31
|
+
(yield buttonDriver).component.click();
|
|
32
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
33
|
+
hasEnqueueItem: true,
|
|
34
|
+
hasEnqueueItems: true,
|
|
35
|
+
hasGetQueuedItems: true,
|
|
36
|
+
hasGetQueueLength: true,
|
|
37
|
+
hasRemove: true,
|
|
38
|
+
});
|
|
39
|
+
}));
|
|
40
|
+
// =============================================================================
|
|
41
|
+
// ENQUEUE ITEM API TESTS
|
|
42
|
+
// =============================================================================
|
|
43
|
+
fixtures_1.test.describe("enqueueItem API", () => {
|
|
44
|
+
(0, fixtures_1.test)("enqueueItem adds item to queue and returns ID", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
45
|
+
const { testStateDriver } = yield initTestBed(`
|
|
46
|
+
<Fragment>
|
|
47
|
+
<Queue id="testQueue" />
|
|
48
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="
|
|
49
|
+
const itemId = testQueue.enqueueItem('test-item');
|
|
50
|
+
testState = {
|
|
51
|
+
itemId: itemId,
|
|
52
|
+
hasValidId: typeof itemId === 'string' && itemId.length > 0
|
|
53
|
+
};
|
|
54
|
+
" />
|
|
55
|
+
</Fragment>
|
|
56
|
+
`);
|
|
57
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
58
|
+
yield buttonDriver.component.click();
|
|
59
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
60
|
+
itemId: fixtures_1.expect.any(String),
|
|
61
|
+
hasValidId: true,
|
|
62
|
+
});
|
|
63
|
+
}));
|
|
64
|
+
(0, fixtures_1.test)("enqueueItem handles different data types", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
65
|
+
const { testStateDriver } = yield initTestBed(`
|
|
66
|
+
<Fragment>
|
|
67
|
+
<Queue id="testQueue" />
|
|
68
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="
|
|
69
|
+
const results = [];
|
|
70
|
+
results.push(testQueue.enqueueItem('string'));
|
|
71
|
+
results.push(testQueue.enqueueItem(123));
|
|
72
|
+
results.push(testQueue.enqueueItem({key: 'value'}));
|
|
73
|
+
results.push(testQueue.enqueueItem([1, 2, 3]));
|
|
74
|
+
results.push(testQueue.enqueueItem(null));
|
|
75
|
+
results.push(testQueue.enqueueItem(undefined));
|
|
76
|
+
testState = results.length;
|
|
77
|
+
" />
|
|
78
|
+
</Fragment>
|
|
79
|
+
`);
|
|
80
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
81
|
+
yield buttonDriver.component.click();
|
|
82
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe(6);
|
|
83
|
+
}));
|
|
84
|
+
(0, fixtures_1.test)("enqueueItem generates unique IDs", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
85
|
+
const { testStateDriver } = yield initTestBed(`
|
|
86
|
+
<Fragment>
|
|
87
|
+
<Queue id="testQueue" />
|
|
88
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="
|
|
89
|
+
const id1 = testQueue.enqueueItem('item1');
|
|
90
|
+
const id2 = testQueue.enqueueItem('item2');
|
|
91
|
+
const id3 = testQueue.enqueueItem('item3');
|
|
92
|
+
testState = {
|
|
93
|
+
allDifferent: id1 !== id2 && id2 !== id3 && id1 !== id3,
|
|
94
|
+
ids: [id1, id2, id3]
|
|
95
|
+
};
|
|
96
|
+
" />
|
|
97
|
+
</Fragment>
|
|
98
|
+
`);
|
|
99
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
100
|
+
yield buttonDriver.component.click();
|
|
101
|
+
const result = yield testStateDriver.testState();
|
|
102
|
+
(0, fixtures_1.expect)(result.allDifferent).toBe(true);
|
|
103
|
+
(0, fixtures_1.expect)(result.ids).toHaveLength(3);
|
|
104
|
+
}));
|
|
105
|
+
});
|
|
106
|
+
// =============================================================================
|
|
107
|
+
// ENQUEUE ITEMS API TESTS
|
|
108
|
+
// =============================================================================
|
|
109
|
+
fixtures_1.test.describe("enqueueItems API", () => {
|
|
110
|
+
(0, fixtures_1.test)("enqueueItems adds multiple items and returns array of IDs", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
111
|
+
const { testStateDriver } = yield initTestBed(`
|
|
112
|
+
<Fragment>
|
|
113
|
+
<Queue id="testQueue" />
|
|
114
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="
|
|
115
|
+
const itemIds = testQueue.enqueueItems(['item1', 'item2', 'item3']);
|
|
116
|
+
testState = {
|
|
117
|
+
itemIds: itemIds,
|
|
118
|
+
isArray: Array.isArray(itemIds),
|
|
119
|
+
correctLength: itemIds.length === 3
|
|
120
|
+
};
|
|
121
|
+
" />
|
|
122
|
+
</Fragment>
|
|
123
|
+
`);
|
|
124
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
125
|
+
yield buttonDriver.component.click();
|
|
126
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
127
|
+
itemIds: fixtures_1.expect.any(Array),
|
|
128
|
+
isArray: true,
|
|
129
|
+
correctLength: true,
|
|
130
|
+
});
|
|
131
|
+
}));
|
|
132
|
+
(0, fixtures_1.test)("enqueueItems handles empty array", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
133
|
+
const { testStateDriver } = yield initTestBed(`
|
|
134
|
+
<Fragment>
|
|
135
|
+
<Queue id="testQueue" />
|
|
136
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="
|
|
137
|
+
const itemIds = testQueue.enqueueItems([]);
|
|
138
|
+
testState = {
|
|
139
|
+
itemIds: itemIds,
|
|
140
|
+
queueLength: testQueue.getQueueLength(),
|
|
141
|
+
isEmptyArray: Array.isArray(itemIds) && itemIds.length === 0
|
|
142
|
+
};
|
|
143
|
+
" />
|
|
144
|
+
</Fragment>
|
|
145
|
+
`);
|
|
146
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
147
|
+
yield buttonDriver.component.click();
|
|
148
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
149
|
+
itemIds: [],
|
|
150
|
+
queueLength: 0,
|
|
151
|
+
isEmptyArray: true,
|
|
152
|
+
});
|
|
153
|
+
}));
|
|
154
|
+
});
|
|
155
|
+
// =============================================================================
|
|
156
|
+
// GET QUEUE LENGTH API TESTS
|
|
157
|
+
// =============================================================================
|
|
158
|
+
fixtures_1.test.describe("getQueueLength API", () => {
|
|
159
|
+
(0, fixtures_1.test)("getQueueLength returns 0 for empty queue", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
160
|
+
const { testStateDriver } = yield initTestBed(`
|
|
161
|
+
<Fragment>
|
|
162
|
+
<Queue id="testQueue" />
|
|
163
|
+
<Button id="checkBtn" label="Check" onClick="testState = testQueue.getQueueLength();" />
|
|
164
|
+
</Fragment>
|
|
165
|
+
`);
|
|
166
|
+
const buttonDriver = yield createButtonDriver("checkBtn");
|
|
167
|
+
yield buttonDriver.component.click();
|
|
168
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe(0);
|
|
169
|
+
}));
|
|
170
|
+
(0, fixtures_1.test)("getQueueLength updates after adding items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
171
|
+
const { testStateDriver } = yield initTestBed(`
|
|
172
|
+
<Fragment>
|
|
173
|
+
<Queue id="testQueue" />
|
|
174
|
+
<Button id="testBtn" label="Test" onClick="
|
|
175
|
+
const initial = testQueue.getQueueLength();
|
|
176
|
+
const id1 = testQueue.enqueueItem('item1');
|
|
177
|
+
const afterOne = testQueue.getQueueLength();
|
|
178
|
+
const ids = testQueue.enqueueItems(['item2', 'item3']);
|
|
179
|
+
const afterThree = testQueue.getQueueLength();
|
|
180
|
+
testState = {
|
|
181
|
+
initial,
|
|
182
|
+
afterOne,
|
|
183
|
+
afterThree,
|
|
184
|
+
hasId1: !!id1,
|
|
185
|
+
hasIds: ids.length === 2
|
|
186
|
+
};
|
|
187
|
+
" />
|
|
188
|
+
</Fragment>
|
|
189
|
+
`);
|
|
190
|
+
const buttonDriver = yield createButtonDriver("testBtn");
|
|
191
|
+
yield buttonDriver.component.click();
|
|
192
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
193
|
+
initial: 0,
|
|
194
|
+
afterOne: 0,
|
|
195
|
+
afterThree: 0,
|
|
196
|
+
hasId1: true,
|
|
197
|
+
hasIds: true
|
|
198
|
+
});
|
|
199
|
+
}));
|
|
200
|
+
});
|
|
201
|
+
// =============================================================================
|
|
202
|
+
// GET QUEUED ITEMS API TESTS
|
|
203
|
+
// =============================================================================
|
|
204
|
+
fixtures_1.test.describe("getQueuedItems API", () => {
|
|
205
|
+
(0, fixtures_1.test)("getQueuedItems returns empty array for empty queue", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
206
|
+
const { testStateDriver } = yield initTestBed(`
|
|
207
|
+
<Fragment>
|
|
208
|
+
<Queue id="testQueue" />
|
|
209
|
+
<Button id="checkBtn" label="Check" onClick="testState = testQueue.getQueuedItems();" />
|
|
210
|
+
</Fragment>
|
|
211
|
+
`);
|
|
212
|
+
const buttonDriver = yield createButtonDriver("checkBtn");
|
|
213
|
+
yield buttonDriver.component.click();
|
|
214
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual([]);
|
|
215
|
+
}));
|
|
216
|
+
(0, fixtures_1.test)("getQueuedItems returns items with correct structure", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
217
|
+
const { testStateDriver } = yield initTestBed(`
|
|
218
|
+
<Fragment>
|
|
219
|
+
<Queue id="testQueue" />
|
|
220
|
+
<Button id="testBtn" label="Test" onClick="
|
|
221
|
+
const itemId = testQueue.enqueueItem('test-item');
|
|
222
|
+
const items = testQueue.getQueuedItems();
|
|
223
|
+
testState = {
|
|
224
|
+
hasItemId: !!itemId,
|
|
225
|
+
itemsLength: items.length,
|
|
226
|
+
isArray: Array.isArray(items)
|
|
227
|
+
};
|
|
228
|
+
" />
|
|
229
|
+
</Fragment>
|
|
230
|
+
`);
|
|
231
|
+
const buttonDriver = yield createButtonDriver("testBtn");
|
|
232
|
+
yield buttonDriver.component.click();
|
|
233
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
234
|
+
hasItemId: true,
|
|
235
|
+
itemsLength: 0,
|
|
236
|
+
isArray: true
|
|
237
|
+
});
|
|
238
|
+
}));
|
|
239
|
+
});
|
|
240
|
+
// =============================================================================
|
|
241
|
+
// REMOVE API TESTS
|
|
242
|
+
// =============================================================================
|
|
243
|
+
fixtures_1.test.describe("remove API", () => {
|
|
244
|
+
(0, fixtures_1.test)("remove removes item from queue by ID", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
245
|
+
const { testStateDriver } = yield initTestBed(`
|
|
246
|
+
<Fragment>
|
|
247
|
+
<Queue id="testQueue" />
|
|
248
|
+
<Button id="testBtn" label="Test" onClick="
|
|
249
|
+
const itemId = testQueue.enqueueItem('item-to-remove');
|
|
250
|
+
const keepId = testQueue.enqueueItem('item-to-keep');
|
|
251
|
+
const lengthBefore = testQueue.getQueueLength();
|
|
252
|
+
testQueue.remove(itemId);
|
|
253
|
+
const lengthAfter = testQueue.getQueueLength();
|
|
254
|
+
testState = {
|
|
255
|
+
lengthBefore,
|
|
256
|
+
lengthAfter,
|
|
257
|
+
hasItemId: !!itemId,
|
|
258
|
+
hasKeepId: !!keepId
|
|
259
|
+
};
|
|
260
|
+
" />
|
|
261
|
+
</Fragment>
|
|
262
|
+
`);
|
|
263
|
+
const buttonDriver = yield createButtonDriver("testBtn");
|
|
264
|
+
yield buttonDriver.component.click();
|
|
265
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
266
|
+
lengthBefore: 0,
|
|
267
|
+
lengthAfter: 0,
|
|
268
|
+
hasItemId: true,
|
|
269
|
+
hasKeepId: true
|
|
270
|
+
});
|
|
271
|
+
}));
|
|
272
|
+
(0, fixtures_1.test)("remove handles invalid ID gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
273
|
+
const { testStateDriver } = yield initTestBed(`
|
|
274
|
+
<Fragment>
|
|
275
|
+
<Queue id="testQueue" />
|
|
276
|
+
<Button id="testBtn" label="Test" onClick="
|
|
277
|
+
const itemId = testQueue.enqueueItem('test-item');
|
|
278
|
+
const lengthBefore = testQueue.getQueueLength();
|
|
279
|
+
testQueue.remove('invalid-id');
|
|
280
|
+
const lengthAfter = testQueue.getQueueLength();
|
|
281
|
+
testState = {
|
|
282
|
+
lengthBefore,
|
|
283
|
+
lengthAfter,
|
|
284
|
+
hasItemId: !!itemId
|
|
285
|
+
};
|
|
286
|
+
" />
|
|
287
|
+
</Fragment>
|
|
288
|
+
`);
|
|
289
|
+
const buttonDriver = yield createButtonDriver("testBtn");
|
|
290
|
+
yield buttonDriver.component.click();
|
|
291
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
292
|
+
lengthBefore: 0,
|
|
293
|
+
lengthAfter: 0,
|
|
294
|
+
hasItemId: true
|
|
295
|
+
});
|
|
296
|
+
}));
|
|
297
|
+
});
|
|
298
|
+
// =============================================================================
|
|
299
|
+
// CLEAR AFTER FINISH PROPERTY TESTS
|
|
300
|
+
// =============================================================================
|
|
301
|
+
fixtures_1.test.describe("clearAfterFinish property", () => {
|
|
302
|
+
(0, fixtures_1.test)("clearAfterFinish defaults to false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
303
|
+
const { testStateDriver } = yield initTestBed(`
|
|
304
|
+
<Fragment>
|
|
305
|
+
<Queue id="testQueue" onProcess="processing => testState = 'processed'" />
|
|
306
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
307
|
+
</Fragment>
|
|
308
|
+
`);
|
|
309
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
310
|
+
yield buttonDriver.component.click();
|
|
311
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("processed");
|
|
312
|
+
}));
|
|
313
|
+
(0, fixtures_1.test)("clearAfterFinish=true removes completed items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
314
|
+
const { testStateDriver } = yield initTestBed(`
|
|
315
|
+
<Fragment>
|
|
316
|
+
<Queue id="testQueue" clearAfterFinish="true"
|
|
317
|
+
onProcess="processing => {}"
|
|
318
|
+
onComplete="() => testState = testQueue.getQueuedItems().length" />
|
|
319
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
320
|
+
</Fragment>
|
|
321
|
+
`);
|
|
322
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
323
|
+
yield buttonDriver.component.click();
|
|
324
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe(0);
|
|
325
|
+
}));
|
|
326
|
+
});
|
|
327
|
+
// =============================================================================
|
|
328
|
+
// EVENT HANDLER TESTS
|
|
329
|
+
// =============================================================================
|
|
330
|
+
fixtures_1.test.describe("Event Handlers", () => {
|
|
331
|
+
(0, fixtures_1.test)("onProcess event fires for queued items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
332
|
+
const { testStateDriver } = yield initTestBed(`
|
|
333
|
+
<Fragment>
|
|
334
|
+
<Queue id="testQueue" onProcess="processing => testState = processing.item" />
|
|
335
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test-data');" />
|
|
336
|
+
</Fragment>
|
|
337
|
+
`);
|
|
338
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
339
|
+
yield buttonDriver.component.click();
|
|
340
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("test-data");
|
|
341
|
+
}));
|
|
342
|
+
(0, fixtures_1.test)("onWillProcess event can skip items by returning false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
343
|
+
const { testStateDriver } = yield initTestBed(`
|
|
344
|
+
<Fragment>
|
|
345
|
+
<Queue id="testQueue"
|
|
346
|
+
onWillProcess="processing => processing.item !== 'skip' ? true : (testState = 'skipped', false)"
|
|
347
|
+
onProcess="processing => testState = 'processed'" />
|
|
348
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="
|
|
349
|
+
testQueue.enqueueItem('skip');
|
|
350
|
+
testQueue.enqueueItem('process');
|
|
351
|
+
" />
|
|
352
|
+
</Fragment>
|
|
353
|
+
`);
|
|
354
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
355
|
+
yield buttonDriver.component.click();
|
|
356
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("processed");
|
|
357
|
+
}));
|
|
358
|
+
(0, fixtures_1.test)("onDidProcess event fires after processing", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
359
|
+
const { testStateDriver } = yield initTestBed(`
|
|
360
|
+
<Fragment>
|
|
361
|
+
<Queue id="testQueue"
|
|
362
|
+
onProcess="processing => {}"
|
|
363
|
+
onDidProcess="processing => testState = 'did-process-' + processing.item" />
|
|
364
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
365
|
+
</Fragment>
|
|
366
|
+
`);
|
|
367
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
368
|
+
yield buttonDriver.component.click();
|
|
369
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("did-process-test");
|
|
370
|
+
}));
|
|
371
|
+
(0, fixtures_1.test)("onProcessError event fires when processing throws", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
372
|
+
const { testStateDriver } = yield initTestBed(`
|
|
373
|
+
<Fragment>
|
|
374
|
+
<Queue id="testQueue"
|
|
375
|
+
onProcess="processing => { throw 'test error'; }"
|
|
376
|
+
onProcessError="(error, processing) => testState = 'error-' + processing.item" />
|
|
377
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
378
|
+
</Fragment>
|
|
379
|
+
`);
|
|
380
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
381
|
+
yield buttonDriver.component.click();
|
|
382
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("error-test");
|
|
383
|
+
}));
|
|
384
|
+
(0, fixtures_1.test)("onComplete event fires when queue becomes empty", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
385
|
+
const { testStateDriver } = yield initTestBed(`
|
|
386
|
+
<Fragment>
|
|
387
|
+
<Queue id="testQueue" clearAfterFinish="true"
|
|
388
|
+
onProcess="processing => {}"
|
|
389
|
+
onComplete="() => testState = 'complete'" />
|
|
390
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
391
|
+
</Fragment>
|
|
392
|
+
`);
|
|
393
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
394
|
+
yield buttonDriver.component.click();
|
|
395
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("complete");
|
|
396
|
+
}));
|
|
397
|
+
});
|
|
398
|
+
// =============================================================================
|
|
399
|
+
// TEMPLATE PROPERTY TESTS
|
|
400
|
+
// =============================================================================
|
|
401
|
+
fixtures_1.test.describe("Template Properties", () => {
|
|
402
|
+
(0, fixtures_1.test)("progressFeedback renders during processing", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createButtonDriver }) {
|
|
403
|
+
yield initTestBed(`
|
|
404
|
+
<Fragment>
|
|
405
|
+
<Queue id="testQueue" onProcess="processing => { processing.reportProgress('50%'); }">
|
|
406
|
+
<property name="progressFeedback">
|
|
407
|
+
<Text value="Progress: {$completedItems.length} of {$queuedItems.length}" />
|
|
408
|
+
</property>
|
|
409
|
+
</Queue>
|
|
410
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
411
|
+
</Fragment>
|
|
412
|
+
`);
|
|
413
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
414
|
+
yield buttonDriver.component.click();
|
|
415
|
+
yield (0, fixtures_1.expect)(page.getByText("Progress: 0 of 1")).toBeVisible();
|
|
416
|
+
}));
|
|
417
|
+
(0, fixtures_1.test)("resultFeedback renders when queue completes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createButtonDriver }) {
|
|
418
|
+
yield initTestBed(`
|
|
419
|
+
<Fragment>
|
|
420
|
+
<Queue id="testQueue" clearAfterFinish="true" onProcess="processing => {}">
|
|
421
|
+
<property name="resultFeedback">
|
|
422
|
+
<Text value="All {$completedItems.length} items processed" />
|
|
423
|
+
</property>
|
|
424
|
+
</Queue>
|
|
425
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
426
|
+
</Fragment>
|
|
427
|
+
`);
|
|
428
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
429
|
+
yield buttonDriver.component.click();
|
|
430
|
+
yield (0, fixtures_1.expect)(page.getByText("All 1 items processed")).toBeVisible();
|
|
431
|
+
}));
|
|
432
|
+
(0, fixtures_1.test)("progressFeedback handles null gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
433
|
+
const { testStateDriver } = yield initTestBed(`
|
|
434
|
+
<Fragment>
|
|
435
|
+
<Queue id="testQueue" progressFeedback="{null}" onProcess="processing => testState = 'processed'" />
|
|
436
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
437
|
+
</Fragment>
|
|
438
|
+
`);
|
|
439
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
440
|
+
yield buttonDriver.component.click();
|
|
441
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("processed");
|
|
442
|
+
}));
|
|
443
|
+
(0, fixtures_1.test)("resultFeedback handles null gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
444
|
+
const { testStateDriver } = yield initTestBed(`
|
|
445
|
+
<Fragment>
|
|
446
|
+
<Queue id="testQueue" resultFeedback="{null}" clearAfterFinish="true"
|
|
447
|
+
onProcess="processing => {}"
|
|
448
|
+
onComplete="() => testState = 'complete'" />
|
|
449
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItem('test');" />
|
|
450
|
+
</Fragment>
|
|
451
|
+
`);
|
|
452
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
453
|
+
yield buttonDriver.component.click();
|
|
454
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe("complete");
|
|
455
|
+
}));
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
// =============================================================================
|
|
459
|
+
// OTHER EDGE CASE TESTS
|
|
460
|
+
// =============================================================================
|
|
461
|
+
fixtures_1.test.describe("Other Edge Cases", () => {
|
|
462
|
+
(0, fixtures_1.test)("handles simultaneous API calls", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
463
|
+
const { testStateDriver } = yield initTestBed(`
|
|
464
|
+
<Fragment>
|
|
465
|
+
<Queue id="testQueue" />
|
|
466
|
+
<Button id="callBtn" label="Call APIs" onClick="
|
|
467
|
+
// Add multiple items quickly
|
|
468
|
+
const id1 = testQueue.enqueueItem('item1');
|
|
469
|
+
const id2 = testQueue.enqueueItem('item2');
|
|
470
|
+
const ids = testQueue.enqueueItems(['item3', 'item4', 'item5']);
|
|
471
|
+
|
|
472
|
+
// Mix operations
|
|
473
|
+
testQueue.remove(id1);
|
|
474
|
+
const finalLength = testQueue.getQueueLength();
|
|
475
|
+
const items = testQueue.getQueuedItems();
|
|
476
|
+
|
|
477
|
+
testState = {
|
|
478
|
+
finalLength,
|
|
479
|
+
itemCount: items.length,
|
|
480
|
+
hasId1: !!id1,
|
|
481
|
+
hasId2: !!id2,
|
|
482
|
+
idsLength: ids.length
|
|
483
|
+
};
|
|
484
|
+
" />
|
|
485
|
+
</Fragment>
|
|
486
|
+
`);
|
|
487
|
+
const buttonDriver = yield createButtonDriver("callBtn");
|
|
488
|
+
yield buttonDriver.component.click();
|
|
489
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
490
|
+
finalLength: 0,
|
|
491
|
+
itemCount: 0,
|
|
492
|
+
hasId1: true,
|
|
493
|
+
hasId2: true,
|
|
494
|
+
idsLength: 3
|
|
495
|
+
});
|
|
496
|
+
}));
|
|
497
|
+
(0, fixtures_1.test)("handles processing with errors and recovery", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
498
|
+
const { testStateDriver } = yield initTestBed(`
|
|
499
|
+
<Fragment>
|
|
500
|
+
<Queue id="testQueue"
|
|
501
|
+
onProcess="processing => {
|
|
502
|
+
if (processing.item === 'error') throw 'Test error';
|
|
503
|
+
testState = testState || [];
|
|
504
|
+
testState.push('processed-' + processing.item);
|
|
505
|
+
}"
|
|
506
|
+
onProcessError="(error, processing) => {
|
|
507
|
+
testState = testState || [];
|
|
508
|
+
testState.push('error-' + processing.item);
|
|
509
|
+
}" />
|
|
510
|
+
<Button id="enqueueBtn" label="Enqueue" onClick="testQueue.enqueueItems(['good1', 'error', 'good2']);" />
|
|
511
|
+
</Fragment>
|
|
512
|
+
`);
|
|
513
|
+
const buttonDriver = yield createButtonDriver("enqueueBtn");
|
|
514
|
+
yield buttonDriver.component.click();
|
|
515
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual([
|
|
516
|
+
"processed-good1",
|
|
517
|
+
"error-error",
|
|
518
|
+
"processed-good2"
|
|
519
|
+
]);
|
|
520
|
+
}));
|
|
521
|
+
(0, fixtures_1.test)("handles very large queue operations", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
522
|
+
const { testStateDriver } = yield initTestBed(`
|
|
523
|
+
<Fragment>
|
|
524
|
+
<Queue id="testQueue" onProcess="processing => { /* process item */ }" />
|
|
525
|
+
<Button id="largeBtn" label="Large Op" onClick="
|
|
526
|
+
// Create large array of items
|
|
527
|
+
const largeArray = [];
|
|
528
|
+
for (let i = 0; i < 100; i++) {
|
|
529
|
+
largeArray.push('item-' + i);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
const itemIds = testQueue.enqueueItems(largeArray);
|
|
533
|
+
// Check uniqueness without Set
|
|
534
|
+
const uniqueCheck = {};
|
|
535
|
+
let allUnique = true;
|
|
536
|
+
for (let i = 0; i < itemIds.length; i++) {
|
|
537
|
+
if (uniqueCheck[itemIds[i]]) {
|
|
538
|
+
allUnique = false;
|
|
539
|
+
break;
|
|
540
|
+
}
|
|
541
|
+
uniqueCheck[itemIds[i]] = true;
|
|
542
|
+
}
|
|
543
|
+
testState = {
|
|
544
|
+
enqueuedCount: itemIds.length,
|
|
545
|
+
queueLength: testQueue.getQueueLength(),
|
|
546
|
+
allUniqueIds: allUnique
|
|
547
|
+
};
|
|
548
|
+
" />
|
|
549
|
+
</Fragment>
|
|
550
|
+
`);
|
|
551
|
+
const buttonDriver = yield createButtonDriver("largeBtn");
|
|
552
|
+
yield buttonDriver.component.click();
|
|
553
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
554
|
+
enqueuedCount: 100,
|
|
555
|
+
queueLength: fixtures_1.expect.any(Number), // Queue length will vary based on processing timing
|
|
556
|
+
allUniqueIds: true,
|
|
557
|
+
});
|
|
558
|
+
}));
|
|
559
|
+
(0, fixtures_1.test)("handles nested object and complex data types", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
560
|
+
const { testStateDriver } = yield initTestBed(`
|
|
561
|
+
<Fragment>
|
|
562
|
+
<Queue id="testQueue" onProcess="processing => testState = processing.item" />
|
|
563
|
+
<Button id="complexBtn" label="Complex" onClick="
|
|
564
|
+
const complexObject = {
|
|
565
|
+
nested: { deep: { value: 'test' } },
|
|
566
|
+
array: [1, 2, { key: 'value' }],
|
|
567
|
+
dateStr: '2025-08-07',
|
|
568
|
+
pattern: 'test'
|
|
569
|
+
};
|
|
570
|
+
testQueue.enqueueItem(complexObject);
|
|
571
|
+
" />
|
|
572
|
+
</Fragment>
|
|
573
|
+
`);
|
|
574
|
+
const buttonDriver = yield createButtonDriver("complexBtn");
|
|
575
|
+
yield buttonDriver.component.click();
|
|
576
|
+
const result = yield testStateDriver.testState();
|
|
577
|
+
(0, fixtures_1.expect)(result.nested.deep.value).toBe("test");
|
|
578
|
+
(0, fixtures_1.expect)(result.array).toEqual([1, 2, { key: "value" }]);
|
|
579
|
+
}));
|
|
580
|
+
(0, fixtures_1.test)("handles rapid state changes during processing", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
581
|
+
const { testStateDriver } = yield initTestBed(`
|
|
582
|
+
<Fragment>
|
|
583
|
+
<Queue id="testQueue"
|
|
584
|
+
onProcess="processing => {
|
|
585
|
+
// Simulate processing time
|
|
586
|
+
const start = Date.now();
|
|
587
|
+
while (Date.now() - start < 10) {} // 10ms busy wait
|
|
588
|
+
testState = (testState || 0) + 1;
|
|
589
|
+
}" />
|
|
590
|
+
<Button id="rapidBtn" label="Rapid" onClick="testQueue.enqueueItems([1, 2, 3, 4, 5]);" />
|
|
591
|
+
</Fragment>
|
|
592
|
+
`);
|
|
593
|
+
const buttonDriver = yield createButtonDriver("rapidBtn");
|
|
594
|
+
yield buttonDriver.component.click();
|
|
595
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe(5);
|
|
596
|
+
}));
|
|
597
|
+
(0, fixtures_1.test)("handles context variables in templates correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
598
|
+
const { testStateDriver } = yield initTestBed(`
|
|
599
|
+
<Fragment>
|
|
600
|
+
<Queue id="testQueue" clearAfterFinish="false"
|
|
601
|
+
onProcess="processing => {
|
|
602
|
+
processing.reportProgress(processing.item);
|
|
603
|
+
testState = {
|
|
604
|
+
queuedItems: testQueue.getQueuedItems().length,
|
|
605
|
+
item: processing.item
|
|
606
|
+
};
|
|
607
|
+
}">
|
|
608
|
+
<property name="progressFeedback">
|
|
609
|
+
<Text value="Processing: {$queuedItems.length - $completedItems.length} remaining of {$queuedItems.length} total" />
|
|
610
|
+
</property>
|
|
611
|
+
<property name="resultFeedback">
|
|
612
|
+
<Text value="Final: {$completedItems.length} completed, {$queuedItems.length} total" />
|
|
613
|
+
</property>
|
|
614
|
+
</Queue>
|
|
615
|
+
<Button id="templateBtn" label="Test Templates" onClick="testQueue.enqueueItems(['item1', 'item2']);" />
|
|
616
|
+
</Fragment>
|
|
617
|
+
`);
|
|
618
|
+
const buttonDriver = yield createButtonDriver("templateBtn");
|
|
619
|
+
yield buttonDriver.component.click();
|
|
620
|
+
// Verify that the queue processing works with template properties defined
|
|
621
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
622
|
+
queuedItems: fixtures_1.expect.any(Number),
|
|
623
|
+
item: fixtures_1.expect.any(String)
|
|
624
|
+
});
|
|
625
|
+
}));
|
|
626
|
+
});
|