xmlui 0.11.4 → 0.11.7
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/bin/index.cjs +8836 -0
- package/dist/bin/index.js +8825 -0
- package/dist/lib/{apiInterceptorWorker-QiltRtq1.js → apiInterceptorWorker-dwrAyq6l.js} +126 -151
- package/dist/lib/{index-Cq0EMm3L.js → index-CwYK6iB4.js} +2502 -2675
- package/dist/lib/index.css +1 -1
- package/dist/lib/{initMock-DCigV4Zh.js → initMock-CvmWAkGr.js} +19 -22
- package/dist/lib/language-server-web-worker.js +13 -5
- package/dist/lib/language-server.js +11 -3
- package/dist/lib/{metadata-utils-BiolWMg9.js → metadata-utils-2bsMr4Gd.js} +58 -26
- package/dist/lib/{server-common-DyCHOk-z.js → server-common-DI3W4cob.js} +6297 -5930
- package/dist/lib/syntax-textmate.js +8 -2472
- package/dist/lib/testing.d.ts +1 -0
- package/dist/lib/testing.js +20 -23
- package/dist/lib/{transform-DHf9tQF7.js → transform-CQ_6R-43.js} +159 -126
- package/dist/lib/vite-xmlui-plugin.d.ts +10 -0
- package/dist/lib/vite-xmlui-plugin.js +8316 -0
- package/dist/lib/{xmlui-parser-CHN3mADy.js → xmlui-parser-CW8YmGjO.js} +10 -11
- package/dist/lib/xmlui-parser.js +2 -2
- package/dist/lib/{xmlui-serializer-CYNSHAlP.js → xmlui-serializer-CeCcgdVR.js} +19 -19
- package/dist/lib/xmlui.d.ts +122 -1
- package/dist/lib/xmlui.js +8 -3
- package/dist/metadata/{apiInterceptorWorker-Dql7QGw2.js → apiInterceptorWorker-Wgm2_zjg.js} +124 -149
- package/dist/metadata/{collectedComponentMetadata-CLaDZhmc.js → collectedComponentMetadata-CSFNLstl.js} +3169 -3302
- package/dist/metadata/{initMock-Buqah4JF.js → initMock-CyTd5aE8.js} +19 -22
- package/dist/metadata/xmlui-metadata.css +1 -0
- package/dist/metadata/xmlui-metadata.js +1 -1
- package/dist/metadata/xmlui-metadata.umd.cjs +3 -3
- package/dist/standalone/xmlui-standalone.es.d.ts +171 -2
- package/dist/standalone/xmlui-standalone.umd.js +36 -37
- package/package.json +20 -50
- package/dist/lib/vite-xmlui-plugin/index.js +0 -13985
- package/dist/lib/vite-xmlui-plugin/package.json +0 -3
- package/dist/metadata/style.css +0 -1
- package/dist/scripts/bin/bootstrap.cjs +0 -4
- package/dist/scripts/bin/build-lib.js +0 -126
- package/dist/scripts/bin/build.js +0 -266
- package/dist/scripts/bin/index.js +0 -167
- package/dist/scripts/bin/preview.js +0 -44
- package/dist/scripts/bin/start.js +0 -52
- package/dist/scripts/bin/vite-xmlui-plugin.js +0 -109
- package/dist/scripts/bin/viteConfig.js +0 -144
- package/dist/scripts/package.json +0 -285
- package/dist/scripts/src/abstractions/ActionDefs.js +0 -2
- package/dist/scripts/src/abstractions/AppContextDefs.js +0 -4
- package/dist/scripts/src/abstractions/ComponentDefs.js +0 -2
- package/dist/scripts/src/abstractions/ContainerDefs.js +0 -2
- package/dist/scripts/src/abstractions/ExtensionDefs.js +0 -2
- package/dist/scripts/src/abstractions/FunctionDefs.js +0 -2
- package/dist/scripts/src/abstractions/RendererDefs.js +0 -2
- package/dist/scripts/src/abstractions/ThemingDefs.js +0 -2
- package/dist/scripts/src/abstractions/scripting/BlockScope.js +0 -2
- package/dist/scripts/src/abstractions/scripting/Compilation.js +0 -2
- package/dist/scripts/src/abstractions/scripting/LogicalThread.js +0 -2
- package/dist/scripts/src/abstractions/scripting/LoopScope.js +0 -2
- package/dist/scripts/src/abstractions/scripting/ScriptParserError.js +0 -2
- package/dist/scripts/src/abstractions/scripting/Token.js +0 -2
- package/dist/scripts/src/abstractions/scripting/TryScope.js +0 -2
- package/dist/scripts/src/abstractions/scripting/TryScopeExp.js +0 -2
- package/dist/scripts/src/abstractions/scripting/modules.js +0 -2
- package/dist/scripts/src/components/APICall/APICall.js +0 -130
- package/dist/scripts/src/components/APICall/APICall.spec.js +0 -910
- package/dist/scripts/src/components/APICall/APICallNative.js +0 -36
- package/dist/scripts/src/components/Accordion/Accordion.js +0 -97
- package/dist/scripts/src/components/Accordion/Accordion.spec.js +0 -969
- package/dist/scripts/src/components/Accordion/AccordionContext.js +0 -20
- package/dist/scripts/src/components/Accordion/AccordionItem.js +0 -35
- package/dist/scripts/src/components/Accordion/AccordionItemNative.js +0 -95
- package/dist/scripts/src/components/Accordion/AccordionNative.js +0 -141
- package/dist/scripts/src/components/Animation/AnimationNative.js +0 -263
- package/dist/scripts/src/components/App/App.js +0 -581
- package/dist/scripts/src/components/App/App.spec.js +0 -331
- package/dist/scripts/src/components/App/AppLayoutContext.js +0 -49
- package/dist/scripts/src/components/App/AppNative.js +0 -308
- package/dist/scripts/src/components/App/AppStateContext.js +0 -9
- package/dist/scripts/src/components/App/IndexerContext.js +0 -44
- package/dist/scripts/src/components/App/LinkInfoContext.js +0 -9
- package/dist/scripts/src/components/App/SearchContext.js +0 -35
- package/dist/scripts/src/components/App/Sheet.js +0 -99
- package/dist/scripts/src/components/AppHeader/AppHeader.js +0 -58
- package/dist/scripts/src/components/AppHeader/AppHeader.spec.js +0 -169
- package/dist/scripts/src/components/AppHeader/AppHeaderNative.js +0 -72
- package/dist/scripts/src/components/AppState/AppState.js +0 -75
- package/dist/scripts/src/components/AppState/AppState.spec.js +0 -292
- package/dist/scripts/src/components/AppState/AppStateNative.js +0 -51
- package/dist/scripts/src/components/AutoComplete/AutoComplete.js +0 -109
- package/dist/scripts/src/components/AutoComplete/AutoComplete.spec.js +0 -546
- package/dist/scripts/src/components/AutoComplete/AutoCompleteContext.js +0 -19
- package/dist/scripts/src/components/AutoComplete/AutoCompleteNative.js +0 -498
- package/dist/scripts/src/components/Avatar/Avatar.js +0 -55
- package/dist/scripts/src/components/Avatar/Avatar.spec.js +0 -1514
- package/dist/scripts/src/components/Avatar/AvatarNative.js +0 -58
- package/dist/scripts/src/components/Backdrop/Backdrop.js +0 -40
- package/dist/scripts/src/components/Backdrop/Backdrop.spec.js +0 -131
- package/dist/scripts/src/components/Backdrop/BackdropNative.js +0 -25
- package/dist/scripts/src/components/Badge/Badge.js +0 -81
- package/dist/scripts/src/components/Badge/Badge.spec.js +0 -2214
- package/dist/scripts/src/components/Badge/BadgeNative.js +0 -46
- package/dist/scripts/src/components/Bookmark/Bookmark.js +0 -48
- package/dist/scripts/src/components/Bookmark/Bookmark.spec.js +0 -230
- package/dist/scripts/src/components/Bookmark/BookmarkNative.js +0 -55
- package/dist/scripts/src/components/Breakout/Breakout.js +0 -17
- package/dist/scripts/src/components/Breakout/Breakout.spec.js +0 -56
- package/dist/scripts/src/components/Breakout/BreakoutNative.js +0 -24
- package/dist/scripts/src/components/Button/Button-style.spec.js +0 -274
- package/dist/scripts/src/components/Button/Button.js +0 -171
- package/dist/scripts/src/components/Button/Button.spec.js +0 -425
- package/dist/scripts/src/components/Button/ButtonNative.js +0 -109
- package/dist/scripts/src/components/Card/Card.js +0 -89
- package/dist/scripts/src/components/Card/Card.spec.js +0 -150
- package/dist/scripts/src/components/Card/CardNative.js +0 -41
- package/dist/scripts/src/components/Carousel/Carousel.js +0 -133
- package/dist/scripts/src/components/Carousel/Carousel.spec.js +0 -557
- package/dist/scripts/src/components/Carousel/CarouselContext.js +0 -57
- package/dist/scripts/src/components/Carousel/CarouselItem.js +0 -15
- package/dist/scripts/src/components/Carousel/CarouselItemNative.js +0 -40
- package/dist/scripts/src/components/Carousel/CarouselNative.js +0 -195
- package/dist/scripts/src/components/ChangeListener/ChangeListener.js +0 -34
- package/dist/scripts/src/components/ChangeListener/ChangeListener.spec.js +0 -169
- package/dist/scripts/src/components/ChangeListener/ChangeListenerNative.js +0 -30
- package/dist/scripts/src/components/Charts/AreaChart/AreaChart.js +0 -92
- package/dist/scripts/src/components/Charts/AreaChart/AreaChart.spec.js +0 -999
- package/dist/scripts/src/components/Charts/AreaChart/AreaChartNative.js +0 -127
- package/dist/scripts/src/components/Charts/BarChart/BarChart.js +0 -97
- package/dist/scripts/src/components/Charts/BarChart/BarChart.spec.js +0 -597
- package/dist/scripts/src/components/Charts/BarChart/BarChartNative.js +0 -317
- package/dist/scripts/src/components/Charts/DonutChart/DonutChart.js +0 -60
- package/dist/scripts/src/components/Charts/DonutChart/DonutChart.spec.js +0 -608
- package/dist/scripts/src/components/Charts/LabelList/LabelList.js +0 -41
- package/dist/scripts/src/components/Charts/LabelList/LabelList.spec.js +0 -539
- package/dist/scripts/src/components/Charts/LabelList/LabelListNative.js +0 -25
- package/dist/scripts/src/components/Charts/Legend/Legend.js +0 -33
- package/dist/scripts/src/components/Charts/Legend/Legend.spec.js +0 -558
- package/dist/scripts/src/components/Charts/Legend/LegendNative.js +0 -64
- package/dist/scripts/src/components/Charts/LineChart/LineChart.js +0 -94
- package/dist/scripts/src/components/Charts/LineChart/LineChart.spec.js +0 -450
- package/dist/scripts/src/components/Charts/LineChart/LineChartNative.js +0 -192
- package/dist/scripts/src/components/Charts/PieChart/PieChart.js +0 -64
- package/dist/scripts/src/components/Charts/PieChart/PieChart.spec.js +0 -584
- package/dist/scripts/src/components/Charts/PieChart/PieChartNative.js +0 -167
- package/dist/scripts/src/components/Charts/RadarChart/RadarChart.js +0 -92
- package/dist/scripts/src/components/Charts/RadarChart/RadarChart.spec.js +0 -571
- package/dist/scripts/src/components/Charts/RadarChart/RadarChartNative.js +0 -125
- package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.js +0 -27
- package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.spec.js +0 -451
- package/dist/scripts/src/components/Charts/utils/ChartProvider.js +0 -65
- package/dist/scripts/src/components/Charts/utils/abstractions.js +0 -26
- package/dist/scripts/src/components/Checkbox/Checkbox.js +0 -81
- package/dist/scripts/src/components/Checkbox/Checkbox.spec.js +0 -900
- package/dist/scripts/src/components/CodeBlock/CodeBlock.js +0 -42
- package/dist/scripts/src/components/CodeBlock/CodeBlock.spec.js +0 -196
- package/dist/scripts/src/components/CodeBlock/CodeBlockNative.js +0 -127
- package/dist/scripts/src/components/CodeBlock/highlight-code.js +0 -273
- package/dist/scripts/src/components/ColorPicker/ColorPicker.js +0 -54
- package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +0 -355
- package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +0 -86
- package/dist/scripts/src/components/Column/Column.js +0 -89
- package/dist/scripts/src/components/Column/ColumnNative.js +0 -49
- package/dist/scripts/src/components/Column/TableContext.js +0 -12
- package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +0 -53
- package/dist/scripts/src/components/ComponentProvider.js +0 -811
- package/dist/scripts/src/components/ComponentRegistryContext.js +0 -44
- package/dist/scripts/src/components/ContentSeparator/ContentSeparator.js +0 -51
- package/dist/scripts/src/components/ContentSeparator/ContentSeparator.spec.js +0 -531
- package/dist/scripts/src/components/ContentSeparator/ContentSeparatorNative.js +0 -31
- package/dist/scripts/src/components/DataSource/DataSource.js +0 -124
- package/dist/scripts/src/components/DateInput/DateInput.js +0 -197
- package/dist/scripts/src/components/DateInput/DateInput.spec.js +0 -1023
- package/dist/scripts/src/components/DateInput/DateInputNative.js +0 -734
- package/dist/scripts/src/components/DatePicker/DatePicker.js +0 -146
- package/dist/scripts/src/components/DatePicker/DatePicker.spec.js +0 -394
- package/dist/scripts/src/components/DatePicker/DatePickerNative.js +0 -326
- package/dist/scripts/src/components/DropdownMenu/DropdownMenu.js +0 -196
- package/dist/scripts/src/components/DropdownMenu/DropdownMenu.spec.js +0 -331
- package/dist/scripts/src/components/DropdownMenu/DropdownMenuNative.js +0 -146
- package/dist/scripts/src/components/EmojiSelector/EmojiSelector.js +0 -26
- package/dist/scripts/src/components/EmojiSelector/EmojiSelector.spec.js +0 -29
- package/dist/scripts/src/components/EmojiSelector/EmojiSelectorNative.js +0 -71
- package/dist/scripts/src/components/ExpandableItem/ExpandableItem.js +0 -101
- package/dist/scripts/src/components/ExpandableItem/ExpandableItem.spec.js +0 -435
- package/dist/scripts/src/components/ExpandableItem/ExpandableItemNative.js +0 -109
- package/dist/scripts/src/components/FileInput/FileInput.js +0 -80
- package/dist/scripts/src/components/FileInput/FileInput.spec.js +0 -285
- package/dist/scripts/src/components/FileInput/FileInputNative.js +0 -161
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.js +0 -58
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +0 -296
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZoneNative.js +0 -134
- package/dist/scripts/src/components/FlowLayout/FlowLayout.js +0 -65
- package/dist/scripts/src/components/FlowLayout/FlowLayout.spec.js +0 -518
- package/dist/scripts/src/components/FlowLayout/FlowLayoutNative.js +0 -153
- package/dist/scripts/src/components/Footer/Footer.js +0 -45
- package/dist/scripts/src/components/Footer/Footer.spec.js +0 -991
- package/dist/scripts/src/components/Footer/FooterNative.js +0 -35
- package/dist/scripts/src/components/Form/Form.js +0 -161
- package/dist/scripts/src/components/Form/Form.spec.js +0 -1719
- package/dist/scripts/src/components/Form/FormContext.js +0 -124
- package/dist/scripts/src/components/Form/FormNative.js +0 -463
- package/dist/scripts/src/components/Form/formActions.js +0 -115
- package/dist/scripts/src/components/FormItem/FormItem.js +0 -231
- package/dist/scripts/src/components/FormItem/FormItem.spec.js +0 -1022
- package/dist/scripts/src/components/FormItem/FormItemNative.js +0 -255
- package/dist/scripts/src/components/FormItem/HelperText.js +0 -27
- package/dist/scripts/src/components/FormItem/ItemWithLabel.js +0 -52
- package/dist/scripts/src/components/FormItem/Validations.js +0 -389
- package/dist/scripts/src/components/FormSection/FormSection.js +0 -56
- package/dist/scripts/src/components/Fragment/Fragment.js +0 -24
- package/dist/scripts/src/components/Fragment/Fragment.spec.js +0 -50
- package/dist/scripts/src/components/Heading/H1.spec.js +0 -66
- package/dist/scripts/src/components/Heading/H2.spec.js +0 -66
- package/dist/scripts/src/components/Heading/H3.spec.js +0 -66
- package/dist/scripts/src/components/Heading/H4.spec.js +0 -66
- package/dist/scripts/src/components/Heading/H5.spec.js +0 -66
- package/dist/scripts/src/components/Heading/H6.spec.js +0 -66
- package/dist/scripts/src/components/Heading/Heading.js +0 -396
- package/dist/scripts/src/components/Heading/Heading.spec.js +0 -966
- package/dist/scripts/src/components/Heading/HeadingNative.js +0 -98
- package/dist/scripts/src/components/Heading/abstractions.js +0 -4
- package/dist/scripts/src/components/HoverCard/HoverCard.js +0 -18
- package/dist/scripts/src/components/HoverCard/HovercardNative.js +0 -44
- package/dist/scripts/src/components/HtmlTags/HtmlTags.js +0 -1441
- package/dist/scripts/src/components/HtmlTags/HtmlTags.spec.js +0 -69
- package/dist/scripts/src/components/IFrame/IFrame.js +0 -77
- package/dist/scripts/src/components/IFrame/IFrame.spec.js +0 -527
- package/dist/scripts/src/components/IFrame/IFrameNative.js +0 -46
- package/dist/scripts/src/components/Icon/AdmonitionDanger.js +0 -10
- package/dist/scripts/src/components/Icon/AdmonitionInfo.js +0 -10
- package/dist/scripts/src/components/Icon/AdmonitionNote.js +0 -10
- package/dist/scripts/src/components/Icon/AdmonitionTip.js +0 -10
- package/dist/scripts/src/components/Icon/AdmonitionWarning.js +0 -10
- package/dist/scripts/src/components/Icon/ApiIcon.js +0 -10
- package/dist/scripts/src/components/Icon/ArrowDropDown.js +0 -11
- package/dist/scripts/src/components/Icon/ArrowDropUp.js +0 -11
- package/dist/scripts/src/components/Icon/ArrowLeft.js +0 -11
- package/dist/scripts/src/components/Icon/ArrowRight.js +0 -11
- package/dist/scripts/src/components/Icon/Attach.js +0 -10
- package/dist/scripts/src/components/Icon/Binding.js +0 -11
- package/dist/scripts/src/components/Icon/BoardIcon.js +0 -7
- package/dist/scripts/src/components/Icon/BoxIcon.js +0 -10
- package/dist/scripts/src/components/Icon/CheckIcon.js +0 -7
- package/dist/scripts/src/components/Icon/ChevronDownIcon.js +0 -7
- package/dist/scripts/src/components/Icon/ChevronLeft.js +0 -7
- package/dist/scripts/src/components/Icon/ChevronRight.js +0 -7
- package/dist/scripts/src/components/Icon/ChevronUpIcon.js +0 -7
- package/dist/scripts/src/components/Icon/CodeFileIcon.js +0 -10
- package/dist/scripts/src/components/Icon/CodeSandbox.js +0 -10
- package/dist/scripts/src/components/Icon/CompactListIcon.js +0 -7
- package/dist/scripts/src/components/Icon/ContentCopyIcon.js +0 -7
- package/dist/scripts/src/components/Icon/DarkToLightIcon.js +0 -10
- package/dist/scripts/src/components/Icon/DatabaseIcon.js +0 -11
- package/dist/scripts/src/components/Icon/DocFileIcon.js +0 -10
- package/dist/scripts/src/components/Icon/DocIcon.js +0 -10
- package/dist/scripts/src/components/Icon/DotMenuHorizontalIcon.js +0 -7
- package/dist/scripts/src/components/Icon/DotMenuIcon.js +0 -7
- package/dist/scripts/src/components/Icon/EmailIcon.js +0 -7
- package/dist/scripts/src/components/Icon/EmptyFolderIcon.js +0 -10
- package/dist/scripts/src/components/Icon/ErrorIcon.js +0 -7
- package/dist/scripts/src/components/Icon/ExpressionIcon.js +0 -10
- package/dist/scripts/src/components/Icon/FillPlusCricleIcon.js +0 -7
- package/dist/scripts/src/components/Icon/FilterIcon.js +0 -10
- package/dist/scripts/src/components/Icon/FolderIcon.js +0 -10
- package/dist/scripts/src/components/Icon/GlobeIcon.js +0 -7
- package/dist/scripts/src/components/Icon/HomeIcon.js +0 -7
- package/dist/scripts/src/components/Icon/HyperLinkIcon.js +0 -7
- package/dist/scripts/src/components/Icon/Icon.js +0 -42
- package/dist/scripts/src/components/Icon/Icon.spec.js +0 -527
- package/dist/scripts/src/components/Icon/IconNative.js +0 -127
- package/dist/scripts/src/components/Icon/ImageFileIcon.js +0 -10
- package/dist/scripts/src/components/Icon/Inspect.js +0 -10
- package/dist/scripts/src/components/Icon/LightToDark.js +0 -10
- package/dist/scripts/src/components/Icon/LinkIcon.js +0 -7
- package/dist/scripts/src/components/Icon/ListIcon.js +0 -7
- package/dist/scripts/src/components/Icon/LooseListIcon.js +0 -7
- package/dist/scripts/src/components/Icon/MoonIcon.js +0 -10
- package/dist/scripts/src/components/Icon/MoreOptionsIcon.js +0 -7
- package/dist/scripts/src/components/Icon/NoSortIcon.js +0 -8
- package/dist/scripts/src/components/Icon/PDFIcon.js +0 -10
- package/dist/scripts/src/components/Icon/PenIcon.js +0 -7
- package/dist/scripts/src/components/Icon/PhoneIcon.js +0 -7
- package/dist/scripts/src/components/Icon/PhotoIcon.js +0 -10
- package/dist/scripts/src/components/Icon/PlusIcon.js +0 -7
- package/dist/scripts/src/components/Icon/SearchIcon.js +0 -7
- package/dist/scripts/src/components/Icon/ShareIcon.js +0 -10
- package/dist/scripts/src/components/Icon/SortAscendingIcon.js +0 -8
- package/dist/scripts/src/components/Icon/SortDescendingIcon.js +0 -8
- package/dist/scripts/src/components/Icon/StarsIcon.js +0 -10
- package/dist/scripts/src/components/Icon/SunIcon.js +0 -10
- package/dist/scripts/src/components/Icon/TableDeleteColumnIcon.js +0 -7
- package/dist/scripts/src/components/Icon/TableDeleteRowIcon.js +0 -7
- package/dist/scripts/src/components/Icon/TableInsertColumnIcon.js +0 -7
- package/dist/scripts/src/components/Icon/TableInsertRowIcon.js +0 -7
- package/dist/scripts/src/components/Icon/TrashIcon.js +0 -7
- package/dist/scripts/src/components/Icon/TrendingDownIcon.js +0 -10
- package/dist/scripts/src/components/Icon/TrendingLevelIcon.js +0 -10
- package/dist/scripts/src/components/Icon/TrendingUpIcon.js +0 -10
- package/dist/scripts/src/components/Icon/TxtIcon.js +0 -10
- package/dist/scripts/src/components/Icon/UnknownFileIcon.js +0 -10
- package/dist/scripts/src/components/Icon/UnlinkIcon.js +0 -10
- package/dist/scripts/src/components/Icon/UserIcon.js +0 -7
- package/dist/scripts/src/components/Icon/WarningIcon.js +0 -7
- package/dist/scripts/src/components/Icon/XlsIcon.js +0 -10
- package/dist/scripts/src/components/IconProvider.js +0 -300
- package/dist/scripts/src/components/IconRegistryContext.js +0 -318
- package/dist/scripts/src/components/Image/Image.js +0 -52
- package/dist/scripts/src/components/Image/Image.spec.js +0 -198
- package/dist/scripts/src/components/Image/ImageNative.js +0 -73
- package/dist/scripts/src/components/Input/InputAdornment.js +0 -28
- package/dist/scripts/src/components/Input/InputDivider.js +0 -35
- package/dist/scripts/src/components/Input/InputLabel.js +0 -25
- package/dist/scripts/src/components/Input/PartialInput.js +0 -155
- package/dist/scripts/src/components/Input/index.js +0 -5
- package/dist/scripts/src/components/InspectButton/InspectButton.js +0 -35
- package/dist/scripts/src/components/Items/Items.js +0 -39
- package/dist/scripts/src/components/Items/Items.spec.js +0 -397
- package/dist/scripts/src/components/Items/ItemsNative.js +0 -33
- package/dist/scripts/src/components/Link/Link.js +0 -82
- package/dist/scripts/src/components/Link/Link.spec.js +0 -894
- package/dist/scripts/src/components/Link/LinkNative.js +0 -48
- package/dist/scripts/src/components/List/List.js +0 -130
- package/dist/scripts/src/components/List/List.spec.js +0 -927
- package/dist/scripts/src/components/List/ListNative.js +0 -433
- package/dist/scripts/src/components/List/doc-resources/list-component-data.js +0 -53
- package/dist/scripts/src/components/Logo/Logo.js +0 -30
- package/dist/scripts/src/components/Logo/LogoNative.js +0 -32
- package/dist/scripts/src/components/Markdown/CodeText.js +0 -38
- package/dist/scripts/src/components/Markdown/Markdown.js +0 -143
- package/dist/scripts/src/components/Markdown/Markdown.spec.js +0 -188
- package/dist/scripts/src/components/Markdown/MarkdownNative.js +0 -476
- package/dist/scripts/src/components/Markdown/parse-binding-expr.js +0 -60
- package/dist/scripts/src/components/Markdown/utils.js +0 -389
- package/dist/scripts/src/components/ModalDialog/ConfirmationModalContextProvider.js +0 -111
- package/dist/scripts/src/components/ModalDialog/Dialog.js +0 -20
- package/dist/scripts/src/components/ModalDialog/ModalDialog.js +0 -83
- package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +0 -181
- package/dist/scripts/src/components/ModalDialog/ModalDialogNative.js +0 -217
- package/dist/scripts/src/components/ModalDialog/ModalVisibilityContext.js +0 -60
- package/dist/scripts/src/components/NavGroup/NavGroup.js +0 -70
- package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +0 -304
- package/dist/scripts/src/components/NavGroup/NavGroupContext.js +0 -13
- package/dist/scripts/src/components/NavGroup/NavGroupNative.js +0 -133
- package/dist/scripts/src/components/NavLink/NavLink.js +0 -86
- package/dist/scripts/src/components/NavLink/NavLink.spec.js +0 -864
- package/dist/scripts/src/components/NavLink/NavLinkNative.js +0 -73
- package/dist/scripts/src/components/NavPanel/NavPanel.js +0 -53
- package/dist/scripts/src/components/NavPanel/NavPanel.spec.js +0 -864
- package/dist/scripts/src/components/NavPanel/NavPanelNative.js +0 -222
- package/dist/scripts/src/components/NestedApp/AppWithCodeView.js +0 -91
- package/dist/scripts/src/components/NestedApp/AppWithCodeViewNative.js +0 -84
- package/dist/scripts/src/components/NestedApp/NestedApp.js +0 -86
- package/dist/scripts/src/components/NestedApp/NestedAppNative.js +0 -231
- package/dist/scripts/src/components/NestedApp/Tooltip.js +0 -46
- package/dist/scripts/src/components/NestedApp/defaultProps.js +0 -12
- package/dist/scripts/src/components/NestedApp/utils.js +0 -67
- package/dist/scripts/src/components/NoResult/NoResult.js +0 -46
- package/dist/scripts/src/components/NoResult/NoResult.spec.js +0 -863
- package/dist/scripts/src/components/NoResult/NoResultNative.js +0 -31
- package/dist/scripts/src/components/NumberBox/NumberBox.js +0 -123
- package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +0 -979
- package/dist/scripts/src/components/NumberBox/NumberBoxNative.js +0 -513
- package/dist/scripts/src/components/NumberBox/numberbox-abstractions.js +0 -109
- package/dist/scripts/src/components/Option/Option.js +0 -44
- package/dist/scripts/src/components/Option/Option.spec.js +0 -474
- package/dist/scripts/src/components/Option/OptionNative.js +0 -29
- package/dist/scripts/src/components/Option/OptionTypeProvider.js +0 -16
- package/dist/scripts/src/components/PageMetaTitle/PageMetaTilteNative.js +0 -13
- package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.js +0 -22
- package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.spec.js +0 -80
- package/dist/scripts/src/components/Pages/Pages.js +0 -54
- package/dist/scripts/src/components/Pages/PagesNative.js +0 -57
- package/dist/scripts/src/components/Pagination/Pagination.js +0 -107
- package/dist/scripts/src/components/Pagination/Pagination.spec.js +0 -1008
- package/dist/scripts/src/components/Pagination/PaginationNative.js +0 -157
- package/dist/scripts/src/components/PositionedContainer/PositionedContainer.js +0 -24
- package/dist/scripts/src/components/PositionedContainer/PositionedContainerNative.js +0 -14
- package/dist/scripts/src/components/ProfileMenu/ProfileMenu.js +0 -20
- package/dist/scripts/src/components/ProgressBar/ProgressBar.js +0 -38
- package/dist/scripts/src/components/ProgressBar/ProgressBar.spec.js +0 -166
- package/dist/scripts/src/components/ProgressBar/ProgressBarNative.js +0 -28
- package/dist/scripts/src/components/Queue/Queue.js +0 -85
- package/dist/scripts/src/components/Queue/Queue.spec.js +0 -624
- package/dist/scripts/src/components/Queue/QueueNative.js +0 -342
- package/dist/scripts/src/components/Queue/queueActions.js +0 -87
- package/dist/scripts/src/components/RadioGroup/RadioGroup.js +0 -61
- package/dist/scripts/src/components/RadioGroup/RadioGroup.spec.js +0 -490
- package/dist/scripts/src/components/RadioGroup/RadioGroupNative.js +0 -158
- package/dist/scripts/src/components/RadioGroup/RadioItem.js +0 -28
- package/dist/scripts/src/components/RadioGroup/RadioItemNative.js +0 -62
- package/dist/scripts/src/components/RealTimeAdapter/RealTimeAdapter.js +0 -24
- package/dist/scripts/src/components/RealTimeAdapter/RealTimeAdapterNative.js +0 -135
- package/dist/scripts/src/components/Redirect/Redirect.js +0 -31
- package/dist/scripts/src/components/Redirect/Redirect.spec.js +0 -527
- package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.js +0 -60
- package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.spec.js +0 -76
- package/dist/scripts/src/components/ResponsiveBar/ResponsiveBarNative.js +0 -313
- package/dist/scripts/src/components/Select/HiddenOption.js +0 -20
- package/dist/scripts/src/components/Select/OptionContext.js +0 -12
- package/dist/scripts/src/components/Select/Select.js +0 -131
- package/dist/scripts/src/components/Select/Select.spec.js +0 -763
- package/dist/scripts/src/components/Select/SelectContext.js +0 -16
- package/dist/scripts/src/components/Select/SelectNative.js +0 -440
- package/dist/scripts/src/components/SelectionStore/SelectionStore.js +0 -25
- package/dist/scripts/src/components/SelectionStore/SelectionStoreNative.js +0 -103
- package/dist/scripts/src/components/Slider/Slider.js +0 -115
- package/dist/scripts/src/components/Slider/Slider.spec.js +0 -677
- package/dist/scripts/src/components/Slider/SliderNative.js +0 -237
- package/dist/scripts/src/components/Slot/Slot.js +0 -17
- package/dist/scripts/src/components/Slot/Slot.spec.js +0 -368
- package/dist/scripts/src/components/SlotItem.js +0 -32
- package/dist/scripts/src/components/SpaceFiller/SpaceFiller.js +0 -20
- package/dist/scripts/src/components/SpaceFiller/SpaceFiller.spec.js +0 -184
- package/dist/scripts/src/components/SpaceFiller/SpaceFillerNative.js +0 -10
- package/dist/scripts/src/components/Spinner/Spinner.js +0 -39
- package/dist/scripts/src/components/Spinner/Spinner.spec.js +0 -161
- package/dist/scripts/src/components/Spinner/SpinnerNative.js +0 -48
- package/dist/scripts/src/components/Splitter/HSplitter.spec.js +0 -104
- package/dist/scripts/src/components/Splitter/Splitter.js +0 -163
- package/dist/scripts/src/components/Splitter/Splitter.spec.js +0 -856
- package/dist/scripts/src/components/Splitter/SplitterNative.js +0 -205
- package/dist/scripts/src/components/Splitter/VSplitter.spec.js +0 -104
- package/dist/scripts/src/components/Splitter/utils.js +0 -22
- package/dist/scripts/src/components/Stack/CHStack.spec.js +0 -86
- package/dist/scripts/src/components/Stack/CVStack.spec.js +0 -86
- package/dist/scripts/src/components/Stack/HStack.spec.js +0 -67
- package/dist/scripts/src/components/Stack/Stack.js +0 -156
- package/dist/scripts/src/components/Stack/Stack.spec.js +0 -654
- package/dist/scripts/src/components/Stack/StackNative.js +0 -45
- package/dist/scripts/src/components/Stack/VStack.spec.js +0 -67
- package/dist/scripts/src/components/StickyBox/StickyBox.js +0 -34
- package/dist/scripts/src/components/StickyBox/StickyBoxNative.js +0 -42
- package/dist/scripts/src/components/Switch/Switch.js +0 -80
- package/dist/scripts/src/components/Switch/Switch.spec.js +0 -834
- package/dist/scripts/src/components/Table/Table.js +0 -268
- package/dist/scripts/src/components/Table/Table.spec.js +0 -827
- package/dist/scripts/src/components/Table/TableNative.js +0 -670
- package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +0 -53
- package/dist/scripts/src/components/Table/useRowSelection.js +0 -454
- package/dist/scripts/src/components/TableOfContents/TableOfContents.js +0 -76
- package/dist/scripts/src/components/TableOfContents/TableOfContents.spec.js +0 -838
- package/dist/scripts/src/components/TableOfContents/TableOfContentsNative.js +0 -81
- package/dist/scripts/src/components/Tabs/TabContext.js +0 -58
- package/dist/scripts/src/components/Tabs/TabItem.js +0 -44
- package/dist/scripts/src/components/Tabs/TabItemNative.js +0 -53
- package/dist/scripts/src/components/Tabs/Tabs.js +0 -95
- package/dist/scripts/src/components/Tabs/Tabs.spec.js +0 -1237
- package/dist/scripts/src/components/Tabs/TabsNative.js +0 -137
- package/dist/scripts/src/components/Text/Text.js +0 -181
- package/dist/scripts/src/components/Text/Text.spec.js +0 -1676
- package/dist/scripts/src/components/Text/TextNative.js +0 -244
- package/dist/scripts/src/components/TextArea/TextArea.js +0 -103
- package/dist/scripts/src/components/TextArea/TextArea.spec.js +0 -886
- package/dist/scripts/src/components/TextArea/TextAreaNative.js +0 -196
- package/dist/scripts/src/components/TextArea/TextAreaResizable.js +0 -73
- package/dist/scripts/src/components/TextArea/useComposedRef.js +0 -60
- package/dist/scripts/src/components/TextBox/TextBox.js +0 -133
- package/dist/scripts/src/components/TextBox/TextBox.spec.js +0 -758
- package/dist/scripts/src/components/TextBox/TextBoxNative.js +0 -142
- package/dist/scripts/src/components/Theme/NotificationToast.js +0 -64
- package/dist/scripts/src/components/Theme/Theme.js +0 -47
- package/dist/scripts/src/components/Theme/Theme.spec.js +0 -390
- package/dist/scripts/src/components/Theme/ThemeNative.js +0 -162
- package/dist/scripts/src/components/TimeInput/TimeInput.js +0 -149
- package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +0 -1236
- package/dist/scripts/src/components/TimeInput/TimeInputNative.js +0 -650
- package/dist/scripts/src/components/TimeInput/utils.js +0 -197
- package/dist/scripts/src/components/Timer/Timer.js +0 -62
- package/dist/scripts/src/components/Timer/Timer.spec.js +0 -328
- package/dist/scripts/src/components/Timer/TimerNative.js +0 -178
- package/dist/scripts/src/components/Toggle/Toggle.js +0 -172
- package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.js +0 -63
- package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.spec.js +0 -414
- package/dist/scripts/src/components/ToneSwitch/ToneSwitch.js +0 -51
- package/dist/scripts/src/components/ToneSwitch/ToneSwitch.spec.js +0 -89
- package/dist/scripts/src/components/ToneSwitch/ToneSwitchNative.js +0 -42
- package/dist/scripts/src/components/Tooltip/Tooltip.js +0 -118
- package/dist/scripts/src/components/Tooltip/Tooltip.spec.js +0 -418
- package/dist/scripts/src/components/Tooltip/TooltipNative.js +0 -160
- package/dist/scripts/src/components/Tree/Tree-dynamic.spec.js +0 -2894
- package/dist/scripts/src/components/Tree/Tree-icons.spec.js +0 -206
- package/dist/scripts/src/components/Tree/Tree.spec.js +0 -2839
- package/dist/scripts/src/components/Tree/TreeComponent.js +0 -324
- package/dist/scripts/src/components/Tree/TreeNative.js +0 -1129
- package/dist/scripts/src/components/Tree/testData.js +0 -296
- package/dist/scripts/src/components/TreeDisplay/TreeDisplay.js +0 -49
- package/dist/scripts/src/components/TreeDisplay/TreeDisplayNative.js +0 -104
- package/dist/scripts/src/components/ValidationSummary/ValidationSummary.js +0 -64
- package/dist/scripts/src/components/VisuallyHidden.js +0 -21
- package/dist/scripts/src/components/abstractions.js +0 -341
- package/dist/scripts/src/components/chart-color-schemes.js +0 -43
- package/dist/scripts/src/components/collectedComponentMetadata.js +0 -316
- package/dist/scripts/src/components/component-utils.js +0 -29
- package/dist/scripts/src/components/container-helpers.js +0 -26
- package/dist/scripts/src/components/metadata-helpers.js +0 -269
- package/dist/scripts/src/components-core/ApiBoundComponent.js +0 -227
- package/dist/scripts/src/components-core/AppContext.js +0 -16
- package/dist/scripts/src/components-core/ComponentDecorator.js +0 -74
- package/dist/scripts/src/components-core/ComponentViewer.js +0 -69
- package/dist/scripts/src/components-core/CompoundComponent.js +0 -145
- package/dist/scripts/src/components-core/DebugViewProvider.js +0 -43
- package/dist/scripts/src/components-core/EngineError.js +0 -91
- package/dist/scripts/src/components-core/InspectorContext.js +0 -248
- package/dist/scripts/src/components-core/LoaderComponent.js +0 -109
- package/dist/scripts/src/components-core/RestApiProxy.js +0 -468
- package/dist/scripts/src/components-core/StandaloneApp.js +0 -821
- package/dist/scripts/src/components-core/StandaloneExtensionManager.js +0 -44
- package/dist/scripts/src/components-core/TableOfContentsContext.js +0 -168
- package/dist/scripts/src/components-core/abstractions/ComponentRenderer.js +0 -2
- package/dist/scripts/src/components-core/abstractions/LoaderRenderer.js +0 -2
- package/dist/scripts/src/components-core/abstractions/standalone.js +0 -2
- package/dist/scripts/src/components-core/abstractions/treeAbstractions.js +0 -2
- package/dist/scripts/src/components-core/action/APICall.js +0 -284
- package/dist/scripts/src/components-core/action/FileDownloadAction.js +0 -80
- package/dist/scripts/src/components-core/action/FileUploadAction.js +0 -88
- package/dist/scripts/src/components-core/action/NavigateAction.js +0 -20
- package/dist/scripts/src/components-core/action/TimedAction.js +0 -21
- package/dist/scripts/src/components-core/action/actions.js +0 -15
- package/dist/scripts/src/components-core/appContext/date-functions.js +0 -24
- package/dist/scripts/src/components-core/appContext/math-function.js +0 -27
- package/dist/scripts/src/components-core/appContext/misc-utils.js +0 -14
- package/dist/scripts/src/components-core/behaviors/Behavior.js +0 -2
- package/dist/scripts/src/components-core/behaviors/CoreBehaviors.js +0 -201
- package/dist/scripts/src/components-core/component-hooks.js +0 -25
- package/dist/scripts/src/components-core/constants.js +0 -18
- package/dist/scripts/src/components-core/descriptorHelper.js +0 -96
- package/dist/scripts/src/components-core/devtools/InspectorDialog.js +0 -135
- package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +0 -8
- package/dist/scripts/src/components-core/event-handlers.js +0 -46
- package/dist/scripts/src/components-core/interception/ApiInterceptor.js +0 -247
- package/dist/scripts/src/components-core/interception/ApiInterceptorProvider.js +0 -167
- package/dist/scripts/src/components-core/interception/Backend.js +0 -141
- package/dist/scripts/src/components-core/interception/Errors.js +0 -129
- package/dist/scripts/src/components-core/interception/InMemoryDb.js +0 -41
- package/dist/scripts/src/components-core/interception/IndexedDb.js +0 -205
- package/dist/scripts/src/components-core/interception/ReadonlyCollection.js +0 -145
- package/dist/scripts/src/components-core/interception/abstractions.js +0 -2
- package/dist/scripts/src/components-core/interception/apiInterceptorWorker.js +0 -44
- package/dist/scripts/src/components-core/interception/initMock.js +0 -20
- package/dist/scripts/src/components-core/interception/useApiInterceptorContext.js +0 -9
- package/dist/scripts/src/components-core/loader/ApiLoader.js +0 -54
- package/dist/scripts/src/components-core/loader/DataLoader.js +0 -330
- package/dist/scripts/src/components-core/loader/ExternalDataLoader.js +0 -60
- package/dist/scripts/src/components-core/loader/Loader.js +0 -159
- package/dist/scripts/src/components-core/loader/MockLoaderRenderer.js +0 -43
- package/dist/scripts/src/components-core/loader/PageableLoader.js +0 -272
- package/dist/scripts/src/components-core/markup-check.js +0 -279
- package/dist/scripts/src/components-core/parts.js +0 -11
- package/dist/scripts/src/components-core/renderers.js +0 -76
- package/dist/scripts/src/components-core/rendering/AppContent.js +0 -400
- package/dist/scripts/src/components-core/rendering/AppRoot.js +0 -87
- package/dist/scripts/src/components-core/rendering/AppWrapper.js +0 -49
- package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +0 -380
- package/dist/scripts/src/components-core/rendering/ComponentWrapper.js +0 -166
- package/dist/scripts/src/components-core/rendering/Container.js +0 -621
- package/dist/scripts/src/components-core/rendering/ContainerWrapper.js +0 -94
- package/dist/scripts/src/components-core/rendering/ErrorBoundary.js +0 -65
- package/dist/scripts/src/components-core/rendering/InvalidComponent.js +0 -17
- package/dist/scripts/src/components-core/rendering/StandaloneComponent.js +0 -39
- package/dist/scripts/src/components-core/rendering/StateContainer.js +0 -350
- package/dist/scripts/src/components-core/rendering/UnknownComponent.js +0 -15
- package/dist/scripts/src/components-core/rendering/buildProxy.js +0 -58
- package/dist/scripts/src/components-core/rendering/collectFnVarDeps.js +0 -49
- package/dist/scripts/src/components-core/rendering/containers.js +0 -19
- package/dist/scripts/src/components-core/rendering/nodeUtils.js +0 -6
- package/dist/scripts/src/components-core/rendering/reducer.js +0 -160
- package/dist/scripts/src/components-core/rendering/renderChild.js +0 -82
- package/dist/scripts/src/components-core/rendering/valueExtractor.js +0 -216
- package/dist/scripts/src/components-core/reportEngineError.js +0 -62
- package/dist/scripts/src/components-core/script-runner/AttributeValueParser.js +0 -117
- package/dist/scripts/src/components-core/script-runner/BindingTreeEvaluationContext.js +0 -33
- package/dist/scripts/src/components-core/script-runner/ParameterParser.js +0 -117
- package/dist/scripts/src/components-core/script-runner/ScriptingSourceTree.js +0 -45
- package/dist/scripts/src/components-core/script-runner/asyncProxy.js +0 -96
- package/dist/scripts/src/components-core/script-runner/bannedFunctions.js +0 -34
- package/dist/scripts/src/components-core/script-runner/eval-tree-async.js +0 -613
- package/dist/scripts/src/components-core/script-runner/eval-tree-common.js +0 -439
- package/dist/scripts/src/components-core/script-runner/eval-tree-sync.js +0 -522
- package/dist/scripts/src/components-core/script-runner/process-statement-async.js +0 -761
- package/dist/scripts/src/components-core/script-runner/process-statement-common.js +0 -208
- package/dist/scripts/src/components-core/script-runner/process-statement-sync.js +0 -746
- package/dist/scripts/src/components-core/script-runner/simplify-expression.js +0 -386
- package/dist/scripts/src/components-core/script-runner/statement-queue.js +0 -63
- package/dist/scripts/src/components-core/script-runner/visitors.js +0 -369
- package/dist/scripts/src/components-core/theming/StyleContext.js +0 -133
- package/dist/scripts/src/components-core/theming/StyleRegistry.js +0 -171
- package/dist/scripts/src/components-core/theming/ThemeContext.js +0 -53
- package/dist/scripts/src/components-core/theming/ThemeProvider.js +0 -342
- package/dist/scripts/src/components-core/theming/component-layout-resolver.js +0 -153
- package/dist/scripts/src/components-core/theming/extendThemeUtils.js +0 -47
- package/dist/scripts/src/components-core/theming/hvar.js +0 -105
- package/dist/scripts/src/components-core/theming/layout-resolver.js +0 -388
- package/dist/scripts/src/components-core/theming/parse-layout-props.js +0 -136
- package/dist/scripts/src/components-core/theming/themeVars.js +0 -62
- package/dist/scripts/src/components-core/theming/themes/base-utils.js +0 -15
- package/dist/scripts/src/components-core/theming/themes/palette.js +0 -57
- package/dist/scripts/src/components-core/theming/themes/root.js +0 -434
- package/dist/scripts/src/components-core/theming/themes/solid.js +0 -16
- package/dist/scripts/src/components-core/theming/themes/theme-colors.js +0 -561
- package/dist/scripts/src/components-core/theming/themes/xmlui.js +0 -57
- package/dist/scripts/src/components-core/theming/transformThemeVars.js +0 -733
- package/dist/scripts/src/components-core/theming/utils.js +0 -31
- package/dist/scripts/src/components-core/utils/DataLoaderQueryKeyGenerator.js +0 -41
- package/dist/scripts/src/components-core/utils/LruCache.js +0 -184
- package/dist/scripts/src/components-core/utils/actionUtils.js +0 -32
- package/dist/scripts/src/components-core/utils/audio-utils.js +0 -83
- package/dist/scripts/src/components-core/utils/base64-utils.js +0 -124
- package/dist/scripts/src/components-core/utils/compound-utils.js +0 -11
- package/dist/scripts/src/components-core/utils/css-utils.js +0 -179
- package/dist/scripts/src/components-core/utils/date-utils.js +0 -186
- package/dist/scripts/src/components-core/utils/extractParam.js +0 -281
- package/dist/scripts/src/components-core/utils/hooks.js +0 -400
- package/dist/scripts/src/components-core/utils/mergeProps.js +0 -45
- package/dist/scripts/src/components-core/utils/misc.js +0 -539
- package/dist/scripts/src/components-core/utils/request-params.js +0 -70
- package/dist/scripts/src/components-core/utils/statementUtils.js +0 -224
- package/dist/scripts/src/components-core/utils/treeUtils.js +0 -226
- package/dist/scripts/src/components-core/xmlui-parser.js +0 -548
- package/dist/scripts/src/index-standalone.js +0 -61
- package/dist/scripts/src/index.js +0 -158
- package/dist/scripts/src/language-server/server-common.js +0 -152
- package/dist/scripts/src/language-server/server-web-worker.js +0 -47
- package/dist/scripts/src/language-server/server.js +0 -42
- package/dist/scripts/src/language-server/services/common/docs-generation.js +0 -73
- package/dist/scripts/src/language-server/services/common/lsp-utils.js +0 -9
- package/dist/scripts/src/language-server/services/common/metadata-utils.js +0 -157
- package/dist/scripts/src/language-server/services/common/syntax-node-utilities.js +0 -127
- package/dist/scripts/src/language-server/services/completion.js +0 -288
- package/dist/scripts/src/language-server/services/diagnostic.js +0 -19
- package/dist/scripts/src/language-server/services/format.js +0 -569
- package/dist/scripts/src/language-server/services/hover.js +0 -164
- package/dist/scripts/src/language-server/xmlui-metadata-generated.js +0 -16276
- package/dist/scripts/src/logging/LoggerContext.js +0 -22
- package/dist/scripts/src/logging/LoggerInitializer.js +0 -14
- package/dist/scripts/src/logging/LoggerService.js +0 -60
- package/dist/scripts/src/logging/xmlui.js +0 -21
- package/dist/scripts/src/parsers/common/GenericToken.js +0 -2
- package/dist/scripts/src/parsers/common/InputStream.js +0 -59
- package/dist/scripts/src/parsers/common/utils.js +0 -19
- package/dist/scripts/src/parsers/scripting/Lexer.js +0 -1097
- package/dist/scripts/src/parsers/scripting/Parser.js +0 -2638
- package/dist/scripts/src/parsers/scripting/ParserError.js +0 -47
- package/dist/scripts/src/parsers/scripting/ScriptingNodeTypes.js +0 -50
- package/dist/scripts/src/parsers/scripting/TokenTrait.js +0 -108
- package/dist/scripts/src/parsers/scripting/TokenType.js +0 -109
- package/dist/scripts/src/parsers/scripting/code-behind-collect.js +0 -101
- package/dist/scripts/src/parsers/scripting/modules.js +0 -105
- package/dist/scripts/src/parsers/scripting/tree-visitor.js +0 -601
- package/dist/scripts/src/parsers/style-parser/StyleInputStream.js +0 -39
- package/dist/scripts/src/parsers/style-parser/StyleLexer.js +0 -623
- package/dist/scripts/src/parsers/style-parser/StyleParser.js +0 -453
- package/dist/scripts/src/parsers/style-parser/errors.js +0 -37
- package/dist/scripts/src/parsers/style-parser/source-tree.js +0 -2
- package/dist/scripts/src/parsers/style-parser/tokens.js +0 -43
- package/dist/scripts/src/parsers/xmlui-parser/CharacterCodes.js +0 -136
- package/dist/scripts/src/parsers/xmlui-parser/ParserError.js +0 -60
- package/dist/scripts/src/parsers/xmlui-parser/diagnostics.js +0 -172
- package/dist/scripts/src/parsers/xmlui-parser/fileExtensions.js +0 -6
- package/dist/scripts/src/parsers/xmlui-parser/index.js +0 -29
- package/dist/scripts/src/parsers/xmlui-parser/lint.js +0 -165
- package/dist/scripts/src/parsers/xmlui-parser/parser.js +0 -627
- package/dist/scripts/src/parsers/xmlui-parser/scanner.js +0 -415
- package/dist/scripts/src/parsers/xmlui-parser/syntax-kind.js +0 -123
- package/dist/scripts/src/parsers/xmlui-parser/syntax-node.js +0 -83
- package/dist/scripts/src/parsers/xmlui-parser/transform.js +0 -1131
- package/dist/scripts/src/parsers/xmlui-parser/utils.js +0 -83
- package/dist/scripts/src/parsers/xmlui-parser/xmlui-serializer.js +0 -582
- package/dist/scripts/src/parsers/xmlui-parser/xmlui-tree.js +0 -2
- package/dist/scripts/src/syntax/monaco/grammar.monacoLanguage.js +0 -286
- package/dist/scripts/src/syntax/monaco/index.js +0 -14
- package/dist/scripts/src/syntax/monaco/xmlui-dark.js +0 -25
- package/dist/scripts/src/syntax/monaco/xmlui-light.js +0 -25
- package/dist/scripts/src/syntax/monaco/xmluiscript.monacoLanguage.js +0 -310
- package/dist/scripts/src/syntax/textMate/index.js +0 -14
- package/dist/scripts/src/syntax/textMate/xmlui-dark.json +0 -631
- package/dist/scripts/src/syntax/textMate/xmlui-light.json +0 -565
- package/dist/scripts/src/syntax/textMate/xmlui.json +0 -564
- package/dist/scripts/src/syntax/textMate/xmlui.tmLanguage.json +0 -341
- package/dist/scripts/src/testing/ComponentDrivers.js +0 -1380
- package/dist/scripts/src/testing/assertions.js +0 -444
- package/dist/scripts/src/testing/component-test-helpers.js +0 -373
- package/dist/scripts/src/testing/drivers/DateInputDriver.js +0 -19
- package/dist/scripts/src/testing/drivers/ModalDialogDriver.js +0 -10
- package/dist/scripts/src/testing/drivers/NumberBoxDriver.js +0 -44
- package/dist/scripts/src/testing/drivers/TextBoxDriver.js +0 -20
- package/dist/scripts/src/testing/drivers/TimeInputDriver.js +0 -22
- package/dist/scripts/src/testing/drivers/TimerDriver.js +0 -64
- package/dist/scripts/src/testing/drivers/TreeDriver.js +0 -13
- package/dist/scripts/src/testing/drivers/index.js +0 -9
- package/dist/scripts/src/testing/fixtures.js +0 -519
- package/dist/scripts/src/testing/index.js +0 -69
- package/dist/scripts/src/testing/infrastructure/TestBed.js +0 -17
- package/dist/scripts/src/testing/infrastructure/main.js +0 -9
- package/dist/scripts/src/testing/infrastructure/public/mockServiceWorker.js +0 -266
- package/dist/scripts/src/testing/themed-app-test-helpers.js +0 -133
|
@@ -1,1719 +0,0 @@
|
|
|
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 abstractions_1 = require("../abstractions");
|
|
13
|
-
const fixtures_1 = require("../../testing/fixtures");
|
|
14
|
-
const component_test_helpers_1 = require("../../testing/component-test-helpers");
|
|
15
|
-
// Test data constants
|
|
16
|
-
const errorDisplayInterceptor = {
|
|
17
|
-
initialize: `
|
|
18
|
-
$state.items = {
|
|
19
|
-
[10]: { name: "Smith", id: 10 }
|
|
20
|
-
};
|
|
21
|
-
$state.currentId = 10;
|
|
22
|
-
`,
|
|
23
|
-
operations: {
|
|
24
|
-
"no-validation-error": {
|
|
25
|
-
url: "/no-validation-error",
|
|
26
|
-
method: "post",
|
|
27
|
-
handler: `return true;`,
|
|
28
|
-
},
|
|
29
|
-
"general-validation-error": {
|
|
30
|
-
url: "/general-validation-error",
|
|
31
|
-
method: "post",
|
|
32
|
-
handler: `
|
|
33
|
-
throw Errors.HttpError(404,
|
|
34
|
-
{
|
|
35
|
-
message: "General error message from the backend",
|
|
36
|
-
issues: [
|
|
37
|
-
{ message: "Error for the whole form", severity: "error" },
|
|
38
|
-
{ message: "Warning for the whole form", severity: "warning" },
|
|
39
|
-
]
|
|
40
|
-
}
|
|
41
|
-
);
|
|
42
|
-
`,
|
|
43
|
-
},
|
|
44
|
-
"field-validation-error": {
|
|
45
|
-
url: "/field-validation-error",
|
|
46
|
-
method: "post",
|
|
47
|
-
handler: `
|
|
48
|
-
throw Errors.HttpError(404,
|
|
49
|
-
{
|
|
50
|
-
message: "Field error message from the backend",
|
|
51
|
-
issues: [
|
|
52
|
-
{ field: "test", message: "Display warning", severity: "warning" },
|
|
53
|
-
]
|
|
54
|
-
}
|
|
55
|
-
);
|
|
56
|
-
`,
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
// =============================================================================
|
|
61
|
-
// BASIC FUNCTIONALITY TESTS
|
|
62
|
-
// =============================================================================
|
|
63
|
-
fixtures_1.test.describe("Basic Functionality", () => {
|
|
64
|
-
(0, fixtures_1.test)("component renders with default props", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
65
|
-
yield initTestBed(`<Form testId="form"/>`);
|
|
66
|
-
const driver = yield createFormDriver("form");
|
|
67
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
68
|
-
}));
|
|
69
|
-
(0, fixtures_1.test)("component renders with form items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
70
|
-
yield initTestBed(`
|
|
71
|
-
<Form>
|
|
72
|
-
<FormItem label="Name" bindTo="name" />
|
|
73
|
-
<FormItem label="Email" bindTo="email" />
|
|
74
|
-
</Form>
|
|
75
|
-
`);
|
|
76
|
-
yield (0, fixtures_1.expect)(page.getByText("Name")).toBeVisible();
|
|
77
|
-
yield (0, fixtures_1.expect)(page.getByText("Email")).toBeVisible();
|
|
78
|
-
}));
|
|
79
|
-
(0, fixtures_1.test)("component renders save and cancel buttons by default", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
80
|
-
yield initTestBed(`<Form/>`);
|
|
81
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
82
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
83
|
-
}));
|
|
84
|
-
(0, fixtures_1.test)("component renders custom button labels", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
85
|
-
yield initTestBed(`
|
|
86
|
-
<Form cancelLabel="Go Back" saveLabel="Submit"/>
|
|
87
|
-
`);
|
|
88
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Go Back" })).toBeVisible();
|
|
89
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Submit" })).toBeVisible();
|
|
90
|
-
}));
|
|
91
|
-
(0, fixtures_1.test)("component swaps cancel and save button positions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
92
|
-
yield initTestBed(`
|
|
93
|
-
<Form swapCancelAndSave="true"/>
|
|
94
|
-
`);
|
|
95
|
-
const buttons = page.getByRole("button");
|
|
96
|
-
yield (0, fixtures_1.expect)(buttons.first()).toHaveText("Save");
|
|
97
|
-
yield (0, fixtures_1.expect)(buttons.last()).toHaveText("Cancel");
|
|
98
|
-
}));
|
|
99
|
-
// =============================================================================
|
|
100
|
-
// HIDE BUTTON ROW TESTS
|
|
101
|
-
// =============================================================================
|
|
102
|
-
fixtures_1.test.describe("hideButtonRow property", () => {
|
|
103
|
-
(0, fixtures_1.test)("hides button row when set to true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
104
|
-
yield initTestBed(`<Form hideButtonRow="true"/>`);
|
|
105
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).not.toBeVisible();
|
|
106
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
107
|
-
}));
|
|
108
|
-
(0, fixtures_1.test)("shows button row when set to false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
109
|
-
yield initTestBed(`<Form hideButtonRow="false"/>`);
|
|
110
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
111
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
112
|
-
}));
|
|
113
|
-
(0, fixtures_1.test)("shows button row by default when property not set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
114
|
-
yield initTestBed(`<Form/>`);
|
|
115
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
116
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
117
|
-
}));
|
|
118
|
-
(0, fixtures_1.test)("hides custom button row template when set to true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
119
|
-
yield initTestBed(`
|
|
120
|
-
<Form hideButtonRow="true">
|
|
121
|
-
<property name="buttonRowTemplate">
|
|
122
|
-
<Button label="Custom Save" type="submit" testId="customSave" />
|
|
123
|
-
<Button label="Custom Cancel" type="button" testId="customCancel" />
|
|
124
|
-
</property>
|
|
125
|
-
</Form>
|
|
126
|
-
`);
|
|
127
|
-
yield (0, fixtures_1.expect)(page.getByTestId("customSave")).not.toBeVisible();
|
|
128
|
-
yield (0, fixtures_1.expect)(page.getByTestId("customCancel")).not.toBeVisible();
|
|
129
|
-
}));
|
|
130
|
-
(0, fixtures_1.test)("overrides hideButtonRowUntilDirty when both are set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
131
|
-
yield initTestBed(`
|
|
132
|
-
<Form hideButtonRow="true" hideButtonRowUntilDirty="true">
|
|
133
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
134
|
-
</Form>
|
|
135
|
-
`);
|
|
136
|
-
// Button row should be hidden even before making changes
|
|
137
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
138
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).not.toBeVisible();
|
|
139
|
-
// Make the form dirty
|
|
140
|
-
const driver = yield createFormItemDriver("nameField");
|
|
141
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
142
|
-
yield input.field.fill("John");
|
|
143
|
-
// Button row should still be hidden even after making changes
|
|
144
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
145
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).not.toBeVisible();
|
|
146
|
-
}));
|
|
147
|
-
(0, fixtures_1.test)("handles null value gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
148
|
-
yield initTestBed(`<Form hideButtonRow="{null}"/>`);
|
|
149
|
-
// Should show button row (default behavior)
|
|
150
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
151
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
152
|
-
}));
|
|
153
|
-
(0, fixtures_1.test)("handles undefined value gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
154
|
-
yield initTestBed(`<Form hideButtonRow="{undefined}"/>`);
|
|
155
|
-
// Should show button row (default behavior)
|
|
156
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
157
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
158
|
-
}));
|
|
159
|
-
(0, fixtures_1.test)("handles string 'true' value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
160
|
-
yield initTestBed(`<Form hideButtonRow="true"/>`);
|
|
161
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).not.toBeVisible();
|
|
162
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
163
|
-
}));
|
|
164
|
-
(0, fixtures_1.test)("handles string 'false' value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
165
|
-
yield initTestBed(`<Form hideButtonRow="false"/>`);
|
|
166
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
167
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
168
|
-
}));
|
|
169
|
-
(0, fixtures_1.test)("form submission still works with hidden button row via external submit", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
170
|
-
const { testStateDriver } = yield initTestBed(`
|
|
171
|
-
<Fragment>
|
|
172
|
-
<Form id="testForm" hideButtonRow="true" onSubmit="arg => testState = arg">
|
|
173
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
174
|
-
<Button type="submit" label="External Submit" testId="externalSubmit" />
|
|
175
|
-
</Form>
|
|
176
|
-
</Fragment>
|
|
177
|
-
`);
|
|
178
|
-
const driver = yield createFormItemDriver("nameField");
|
|
179
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
180
|
-
yield input.field.fill("John Doe");
|
|
181
|
-
yield page.getByTestId("externalSubmit").click();
|
|
182
|
-
const submittedData = yield testStateDriver.testState();
|
|
183
|
-
(0, fixtures_1.expect)(submittedData).toEqual({ name: "John Doe" });
|
|
184
|
-
}));
|
|
185
|
-
});
|
|
186
|
-
// =============================================================================
|
|
187
|
-
// HIDE BUTTON ROW UNTIL DIRTY TESTS
|
|
188
|
-
// =============================================================================
|
|
189
|
-
fixtures_1.test.describe("hideButtonRowUntilDirty property", () => {
|
|
190
|
-
(0, fixtures_1.test)("hides button row initially when form is not dirty", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
191
|
-
yield initTestBed(`
|
|
192
|
-
<Form hideButtonRowUntilDirty="true">
|
|
193
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
194
|
-
</Form>
|
|
195
|
-
`);
|
|
196
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).not.toBeVisible();
|
|
197
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
198
|
-
}));
|
|
199
|
-
(0, fixtures_1.test)("shows button row when form becomes dirty", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
200
|
-
yield initTestBed(`
|
|
201
|
-
<Form hideButtonRowUntilDirty="true">
|
|
202
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
203
|
-
</Form>
|
|
204
|
-
`);
|
|
205
|
-
// Initially hidden
|
|
206
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
207
|
-
// Make form dirty
|
|
208
|
-
const driver = yield createFormItemDriver("nameField");
|
|
209
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
210
|
-
yield input.field.fill("John");
|
|
211
|
-
// Now visible
|
|
212
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
213
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
214
|
-
}));
|
|
215
|
-
(0, fixtures_1.test)("keeps button row visible after form becomes dirty", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
216
|
-
yield initTestBed(`
|
|
217
|
-
<Form hideButtonRowUntilDirty="true">
|
|
218
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
219
|
-
</Form>
|
|
220
|
-
`);
|
|
221
|
-
const driver = yield createFormItemDriver("nameField");
|
|
222
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
223
|
-
// Make form dirty
|
|
224
|
-
yield input.field.fill("John");
|
|
225
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
226
|
-
// Clear the input (form is still dirty)
|
|
227
|
-
yield input.field.clear();
|
|
228
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
229
|
-
}));
|
|
230
|
-
(0, fixtures_1.test)("shows button row by default when property set to false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, }) {
|
|
231
|
-
yield initTestBed(`
|
|
232
|
-
<Form hideButtonRowUntilDirty="false">
|
|
233
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
234
|
-
</Form>
|
|
235
|
-
`);
|
|
236
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
237
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
238
|
-
}));
|
|
239
|
-
(0, fixtures_1.test)("shows button row by default when property not set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
240
|
-
yield initTestBed(`
|
|
241
|
-
<Form>
|
|
242
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
243
|
-
</Form>
|
|
244
|
-
`);
|
|
245
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
246
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
247
|
-
}));
|
|
248
|
-
(0, fixtures_1.test)("works with multiple form items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
249
|
-
yield initTestBed(`
|
|
250
|
-
<Form hideButtonRowUntilDirty="true">
|
|
251
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
252
|
-
<FormItem label="Email" bindTo="email" testId="emailField" />
|
|
253
|
-
</Form>
|
|
254
|
-
`);
|
|
255
|
-
// Initially hidden
|
|
256
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
257
|
-
// Modify second field
|
|
258
|
-
const emailDriver = yield createFormItemDriver("emailField");
|
|
259
|
-
const emailInput = yield createTextBoxDriver(emailDriver.input);
|
|
260
|
-
yield emailInput.field.fill("test@example.com");
|
|
261
|
-
// Now visible
|
|
262
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
263
|
-
}));
|
|
264
|
-
(0, fixtures_1.test)("hides custom button row template until dirty", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
265
|
-
yield initTestBed(`
|
|
266
|
-
<Form hideButtonRowUntilDirty="true">
|
|
267
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
268
|
-
<property name="buttonRowTemplate">
|
|
269
|
-
<Button label="Custom Save" type="submit" testId="customSave" />
|
|
270
|
-
</property>
|
|
271
|
-
</Form>
|
|
272
|
-
`);
|
|
273
|
-
// Initially hidden
|
|
274
|
-
yield (0, fixtures_1.expect)(page.getByTestId("customSave")).not.toBeVisible();
|
|
275
|
-
// Make form dirty
|
|
276
|
-
const driver = yield createFormItemDriver("nameField");
|
|
277
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
278
|
-
yield input.field.fill("John");
|
|
279
|
-
// Now visible
|
|
280
|
-
yield (0, fixtures_1.expect)(page.getByTestId("customSave")).toBeVisible();
|
|
281
|
-
}));
|
|
282
|
-
(0, fixtures_1.test)("handles null value gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
283
|
-
yield initTestBed(`
|
|
284
|
-
<Form hideButtonRowUntilDirty="{null}">
|
|
285
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
286
|
-
</Form>
|
|
287
|
-
`);
|
|
288
|
-
// Should show button row (default behavior)
|
|
289
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
290
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
291
|
-
}));
|
|
292
|
-
(0, fixtures_1.test)("handles undefined value gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
293
|
-
yield initTestBed(`
|
|
294
|
-
<Form hideButtonRowUntilDirty="{undefined}">
|
|
295
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
296
|
-
</Form>
|
|
297
|
-
`);
|
|
298
|
-
// Should show button row (default behavior)
|
|
299
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Cancel" })).toBeVisible();
|
|
300
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
301
|
-
}));
|
|
302
|
-
(0, fixtures_1.test)("works with form initialized with data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
303
|
-
yield initTestBed(`
|
|
304
|
-
<Form hideButtonRowUntilDirty="true" data="{{ name: 'Initial' }}">
|
|
305
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
306
|
-
</Form>
|
|
307
|
-
`);
|
|
308
|
-
// Initially hidden (form has data but is not dirty)
|
|
309
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
310
|
-
// Make form dirty
|
|
311
|
-
const driver = yield createFormItemDriver("nameField");
|
|
312
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
313
|
-
yield input.field.fill("Modified");
|
|
314
|
-
// Now visible
|
|
315
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
316
|
-
}));
|
|
317
|
-
(0, fixtures_1.test)("button row appears when checkbox is checked", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
318
|
-
yield initTestBed(`
|
|
319
|
-
<Form hideButtonRowUntilDirty="true">
|
|
320
|
-
<FormItem label="Accept Terms" bindTo="terms" type="checkbox" />
|
|
321
|
-
</Form>
|
|
322
|
-
`);
|
|
323
|
-
// Initially hidden
|
|
324
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
325
|
-
// Check the checkbox
|
|
326
|
-
const checkbox = page.getByRole("checkbox");
|
|
327
|
-
yield checkbox.check();
|
|
328
|
-
// Now visible
|
|
329
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
330
|
-
}));
|
|
331
|
-
(0, fixtures_1.test)("button row appears when slider value changes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
332
|
-
yield initTestBed(`
|
|
333
|
-
<Form hideButtonRowUntilDirty="true">
|
|
334
|
-
<FormItem label="Volume" bindTo="volume" type="slider" testId="volumeField" />
|
|
335
|
-
</Form>
|
|
336
|
-
`);
|
|
337
|
-
// Initially hidden
|
|
338
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).not.toBeVisible();
|
|
339
|
-
// Move the slider using keyboard
|
|
340
|
-
const slider = page.getByRole("slider");
|
|
341
|
-
yield slider.press("ArrowRight");
|
|
342
|
-
// Now visible
|
|
343
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Save" })).toBeVisible();
|
|
344
|
-
}));
|
|
345
|
-
});
|
|
346
|
-
// =============================================================================
|
|
347
|
-
// ENABLE SUBMIT PROPERTY TESTS
|
|
348
|
-
// =============================================================================
|
|
349
|
-
fixtures_1.test.describe("enableSubmit property", () => {
|
|
350
|
-
(0, fixtures_1.test)("disables submit button when set to false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
351
|
-
yield initTestBed(`<Form enableSubmit="false"/>`);
|
|
352
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
353
|
-
yield (0, fixtures_1.expect)(saveButton).toBeVisible();
|
|
354
|
-
yield (0, fixtures_1.expect)(saveButton).toBeDisabled();
|
|
355
|
-
}));
|
|
356
|
-
(0, fixtures_1.test)("enables submit button when set to true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
357
|
-
yield initTestBed(`<Form enableSubmit="true"/>`);
|
|
358
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
359
|
-
yield (0, fixtures_1.expect)(saveButton).toBeVisible();
|
|
360
|
-
yield (0, fixtures_1.expect)(saveButton).toBeEnabled();
|
|
361
|
-
}));
|
|
362
|
-
(0, fixtures_1.test)("submit button is enabled by default when property not set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, }) {
|
|
363
|
-
yield initTestBed(`<Form/>`);
|
|
364
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
365
|
-
yield (0, fixtures_1.expect)(saveButton).toBeEnabled();
|
|
366
|
-
}));
|
|
367
|
-
(0, fixtures_1.test)("prevents form submission when set to false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
368
|
-
const { testStateDriver } = yield initTestBed(`
|
|
369
|
-
<Form enableSubmit="false" onSubmit="arg => testState = arg">
|
|
370
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
371
|
-
</Form>
|
|
372
|
-
`);
|
|
373
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
374
|
-
yield (0, fixtures_1.expect)(saveButton).toBeDisabled();
|
|
375
|
-
// Verify form does not submit (button is disabled, so click won't work)
|
|
376
|
-
yield saveButton.click({ force: true }); // Force click on disabled button
|
|
377
|
-
// testState should remain null since submit was prevented
|
|
378
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toBeNull();
|
|
379
|
-
}));
|
|
380
|
-
(0, fixtures_1.test)("allows form submission when set to true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
381
|
-
const { testStateDriver } = yield initTestBed(`
|
|
382
|
-
<Form enableSubmit="true" onSubmit="arg => testState = arg">
|
|
383
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
384
|
-
</Form>
|
|
385
|
-
`);
|
|
386
|
-
const driver = yield createFormItemDriver("nameField");
|
|
387
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
388
|
-
yield input.field.fill("John Doe");
|
|
389
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
390
|
-
yield (0, fixtures_1.expect)(saveButton).toBeEnabled();
|
|
391
|
-
yield saveButton.click();
|
|
392
|
-
const submittedData = yield testStateDriver.testState();
|
|
393
|
-
(0, fixtures_1.expect)(submittedData).toEqual({ name: "John Doe" });
|
|
394
|
-
}));
|
|
395
|
-
(0, fixtures_1.test)("handles null value gracefully (defaults to enabled)", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
396
|
-
yield initTestBed(`<Form enableSubmit="{null}"/>`);
|
|
397
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
398
|
-
yield (0, fixtures_1.expect)(saveButton).toBeEnabled();
|
|
399
|
-
}));
|
|
400
|
-
(0, fixtures_1.test)("handles string 'true' value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
401
|
-
yield initTestBed(`<Form enableSubmit="true"/>`);
|
|
402
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
403
|
-
yield (0, fixtures_1.expect)(saveButton).toBeEnabled();
|
|
404
|
-
}));
|
|
405
|
-
(0, fixtures_1.test)("handles string 'false' value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
406
|
-
yield initTestBed(`<Form enableSubmit="false"/>`);
|
|
407
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
408
|
-
yield (0, fixtures_1.expect)(saveButton).toBeDisabled();
|
|
409
|
-
}));
|
|
410
|
-
(0, fixtures_1.test)("does not affect cancel button", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
411
|
-
yield initTestBed(`<Form enableSubmit="false"/>`);
|
|
412
|
-
const cancelButton = page.getByRole("button", { name: "Cancel" });
|
|
413
|
-
yield (0, fixtures_1.expect)(cancelButton).toBeEnabled();
|
|
414
|
-
}));
|
|
415
|
-
(0, fixtures_1.test)("works with custom submit button label", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
416
|
-
yield initTestBed(`<Form enableSubmit="false" saveLabel="Submit Now"/>`);
|
|
417
|
-
const submitButton = page.getByRole("button", { name: "Submit Now" });
|
|
418
|
-
yield (0, fixtures_1.expect)(submitButton).toBeDisabled();
|
|
419
|
-
}));
|
|
420
|
-
(0, fixtures_1.test)("works together with form disabled state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
421
|
-
yield initTestBed(`<Form enabled="false" enableSubmit="true"/>`);
|
|
422
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
423
|
-
// Form disabled takes precedence
|
|
424
|
-
yield (0, fixtures_1.expect)(saveButton).toBeDisabled();
|
|
425
|
-
}));
|
|
426
|
-
});
|
|
427
|
-
// =============================================================================
|
|
428
|
-
// DATA PROPERTY TESTS
|
|
429
|
-
// =============================================================================
|
|
430
|
-
fixtures_1.test.describe("data property", () => {
|
|
431
|
-
(0, fixtures_1.test)("sets initial form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createTextBoxDriver, }) {
|
|
432
|
-
yield initTestBed(`
|
|
433
|
-
<Form data="{{ name: 'John', age: 30 }}">
|
|
434
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
435
|
-
<FormItem label="Age" bindTo="age" type="integer" testId="ageField" />
|
|
436
|
-
</Form>
|
|
437
|
-
`);
|
|
438
|
-
const nameDriver = yield createFormItemDriver("nameField");
|
|
439
|
-
const nameInput = yield createTextBoxDriver(nameDriver.input);
|
|
440
|
-
const ageDriver = yield createFormItemDriver("ageField");
|
|
441
|
-
const ageInput = yield createTextBoxDriver(ageDriver.input);
|
|
442
|
-
yield (0, fixtures_1.expect)(nameInput.field).toHaveValue("John");
|
|
443
|
-
yield (0, fixtures_1.expect)(ageInput.field).toHaveValue("30");
|
|
444
|
-
}));
|
|
445
|
-
(0, fixtures_1.test)("handles null data gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
446
|
-
yield initTestBed(`<Form data="{null}" testId="form"/>`);
|
|
447
|
-
const driver = yield createFormDriver("form");
|
|
448
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
449
|
-
}));
|
|
450
|
-
(0, fixtures_1.test)("handles undefined data gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
451
|
-
yield initTestBed(`<Form data="{undefined}" testId="form"/>`);
|
|
452
|
-
const driver = yield createFormDriver("form");
|
|
453
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
454
|
-
}));
|
|
455
|
-
(0, fixtures_1.test)("handles empty object data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
456
|
-
yield initTestBed(`<Form data="{{}}" testId="form"/>`);
|
|
457
|
-
const driver = yield createFormDriver("form");
|
|
458
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
459
|
-
}));
|
|
460
|
-
});
|
|
461
|
-
// =============================================================================
|
|
462
|
-
// ITEM LABEL POSITION TESTS
|
|
463
|
-
// =============================================================================
|
|
464
|
-
fixtures_1.test.describe("itemLabelPosition property", () => {
|
|
465
|
-
abstractions_1.labelPositionValues.forEach((position) => {
|
|
466
|
-
(0, fixtures_1.test)(`sets item label position to ${position}`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, }) {
|
|
467
|
-
yield initTestBed(`
|
|
468
|
-
<Form itemLabelPosition="${position}">
|
|
469
|
-
<FormItem label="Test Label" bindTo="test" testId="testField" />
|
|
470
|
-
</Form>
|
|
471
|
-
`);
|
|
472
|
-
const driver = yield createFormItemDriver("testField");
|
|
473
|
-
yield (0, fixtures_1.expect)(driver.label).toBeVisible();
|
|
474
|
-
}));
|
|
475
|
-
});
|
|
476
|
-
(0, fixtures_1.test)("handles invalid itemLabelPosition gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
477
|
-
yield initTestBed(`<Form itemLabelPosition="invalid" testId="form"/>`);
|
|
478
|
-
const driver = yield createFormDriver("form");
|
|
479
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
480
|
-
}));
|
|
481
|
-
});
|
|
482
|
-
// =============================================================================
|
|
483
|
-
// ITEM LABEL WIDTH TESTS
|
|
484
|
-
// =============================================================================
|
|
485
|
-
fixtures_1.test.describe("itemLabelWidth property", () => {
|
|
486
|
-
(0, fixtures_1.test)("sets custom label width", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver }) {
|
|
487
|
-
yield initTestBed(`
|
|
488
|
-
<Form itemLabelWidth="200px">
|
|
489
|
-
<FormItem label="Test Label" bindTo="test" testId="testField" />
|
|
490
|
-
</Form>
|
|
491
|
-
`);
|
|
492
|
-
const driver = yield createFormItemDriver("testField");
|
|
493
|
-
yield (0, fixtures_1.expect)(driver.label).toBeVisible();
|
|
494
|
-
}));
|
|
495
|
-
(0, fixtures_1.test)("handles numeric label width", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver }) {
|
|
496
|
-
yield initTestBed(`
|
|
497
|
-
<Form itemLabelWidth="150">
|
|
498
|
-
<FormItem label="Test Label" bindTo="test" testId="testField" />
|
|
499
|
-
</Form>
|
|
500
|
-
`);
|
|
501
|
-
const driver = yield createFormItemDriver("testField");
|
|
502
|
-
yield (0, fixtures_1.expect)(driver.label).toBeVisible();
|
|
503
|
-
}));
|
|
504
|
-
(0, fixtures_1.test)("handles invalid label width gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
505
|
-
yield initTestBed(`<Form itemLabelWidth="invalid" testId="form"/>`);
|
|
506
|
-
const driver = yield createFormDriver("form");
|
|
507
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
508
|
-
}));
|
|
509
|
-
(0, fixtures_1.test)("handles theme variable", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver }) {
|
|
510
|
-
const spaceBase = 0.25; //rem
|
|
511
|
-
const labelSize = 10;
|
|
512
|
-
const widthInPx = labelSize * spaceBase * 16; //px
|
|
513
|
-
yield initTestBed(`
|
|
514
|
-
<Theme space-base="${spaceBase}rem">
|
|
515
|
-
<Form itemLabelWidth="$space-${labelSize}">
|
|
516
|
-
<FormItem label="Test Label" bindTo="test" testId="testField" />
|
|
517
|
-
</Form>
|
|
518
|
-
</Theme>
|
|
519
|
-
`);
|
|
520
|
-
const driver = yield createFormItemDriver("testField");
|
|
521
|
-
const labelWidth = yield (0, component_test_helpers_1.getElementStyle)(driver.label, "width");
|
|
522
|
-
(0, fixtures_1.expect)(labelWidth).toBe(`${widthInPx}px`);
|
|
523
|
-
}));
|
|
524
|
-
});
|
|
525
|
-
// =============================================================================
|
|
526
|
-
// ITEM LABEL BREAK TESTS
|
|
527
|
-
// =============================================================================
|
|
528
|
-
fixtures_1.test.describe("itemLabelBreak property", () => {
|
|
529
|
-
(0, fixtures_1.test)("enables label line breaking", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver }) {
|
|
530
|
-
yield initTestBed(`
|
|
531
|
-
<Form itemLabelBreak="true">
|
|
532
|
-
<FormItem label="Very Long Label That Should Break" bindTo="test" testId="testField" />
|
|
533
|
-
</Form>
|
|
534
|
-
`);
|
|
535
|
-
const driver = yield createFormItemDriver("testField");
|
|
536
|
-
yield (0, fixtures_1.expect)(driver.label).toBeVisible();
|
|
537
|
-
}));
|
|
538
|
-
(0, fixtures_1.test)("disables label line breaking", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver }) {
|
|
539
|
-
yield initTestBed(`
|
|
540
|
-
<Form itemLabelBreak="false">
|
|
541
|
-
<FormItem label="Very Long Label That Should Not Break" bindTo="test" testId="testField" />
|
|
542
|
-
</Form>
|
|
543
|
-
`);
|
|
544
|
-
const driver = yield createFormItemDriver("testField");
|
|
545
|
-
yield (0, fixtures_1.expect)(driver.label).toBeVisible();
|
|
546
|
-
}));
|
|
547
|
-
});
|
|
548
|
-
// =============================================================================
|
|
549
|
-
// ENABLED PROPERTY TESTS
|
|
550
|
-
// =============================================================================
|
|
551
|
-
fixtures_1.test.describe("enabled property", () => {
|
|
552
|
-
(0, fixtures_1.test)("disables save button when enabled is false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
553
|
-
yield initTestBed(`
|
|
554
|
-
<Form enabled="false">
|
|
555
|
-
<FormItem label="Test" bindTo="test" />
|
|
556
|
-
</Form>
|
|
557
|
-
`);
|
|
558
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
559
|
-
yield (0, fixtures_1.expect)(saveButton).toBeDisabled();
|
|
560
|
-
}));
|
|
561
|
-
(0, fixtures_1.test)("enables form when enabled is true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
562
|
-
yield initTestBed(`
|
|
563
|
-
<Form enabled="true">
|
|
564
|
-
<FormItem label="Test" bindTo="test" />
|
|
565
|
-
</Form>
|
|
566
|
-
`);
|
|
567
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
568
|
-
const cancelButton = page.getByRole("button", { name: "Cancel" });
|
|
569
|
-
yield (0, fixtures_1.expect)(saveButton).toBeEnabled();
|
|
570
|
-
yield (0, fixtures_1.expect)(cancelButton).toBeEnabled();
|
|
571
|
-
}));
|
|
572
|
-
});
|
|
573
|
-
// =============================================================================
|
|
574
|
-
// BUTTON ROW TEMPLATE TESTS
|
|
575
|
-
// =============================================================================
|
|
576
|
-
fixtures_1.test.describe("buttonRowTemplate property", () => {
|
|
577
|
-
(0, fixtures_1.test)("supports custom button row template", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
578
|
-
yield initTestBed(`
|
|
579
|
-
<Form>
|
|
580
|
-
<FormItem label="Test" bindTo="test" />
|
|
581
|
-
<property name="buttonRowTemplate">
|
|
582
|
-
<Button label="Custom Save" type="submit" />
|
|
583
|
-
<Button label="Custom Cancel" type="button" />
|
|
584
|
-
</property>
|
|
585
|
-
</Form>
|
|
586
|
-
`);
|
|
587
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Custom Save" })).toBeVisible();
|
|
588
|
-
yield (0, fixtures_1.expect)(page.getByRole("button", { name: "Custom Cancel" })).toBeVisible();
|
|
589
|
-
}));
|
|
590
|
-
});
|
|
591
|
-
// =============================================================================
|
|
592
|
-
// EVENT TESTS
|
|
593
|
-
// =============================================================================
|
|
594
|
-
fixtures_1.test.describe("Events", () => {
|
|
595
|
-
(0, fixtures_1.test)("onSubmit event fires with form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
596
|
-
const { testStateDriver } = yield initTestBed(`
|
|
597
|
-
<Form data="{{ name: 'John', email: 'john@example.com' }}" onSubmit="data => testState = data">
|
|
598
|
-
<FormItem label="Name" bindTo="name" />
|
|
599
|
-
<FormItem label="Email" bindTo="email" />
|
|
600
|
-
</Form>
|
|
601
|
-
`);
|
|
602
|
-
yield page.getByRole("button", { name: "Save" }).click();
|
|
603
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual({
|
|
604
|
-
name: "John",
|
|
605
|
-
email: "john@example.com",
|
|
606
|
-
});
|
|
607
|
-
}));
|
|
608
|
-
(0, fixtures_1.test)("onCancel event fires when cancel button clicked", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
609
|
-
const { testStateDriver } = yield initTestBed(`
|
|
610
|
-
<Form onCancel="testState = 'cancelled'">
|
|
611
|
-
<FormItem label="Test" bindTo="test" />
|
|
612
|
-
</Form>
|
|
613
|
-
`);
|
|
614
|
-
yield page.getByRole("button", { name: "Cancel" }).click();
|
|
615
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("cancelled");
|
|
616
|
-
}));
|
|
617
|
-
(0, fixtures_1.test)("onSuccess event fires on successful submission", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormDriver, }) {
|
|
618
|
-
const { testStateDriver } = yield initTestBed(`
|
|
619
|
-
<Form
|
|
620
|
-
testId="form"
|
|
621
|
-
submitUrl="/test-success"
|
|
622
|
-
onSuccess="testState = 'success'; console.log('Submitted successfully')"
|
|
623
|
-
data="{{ name: 'Test' }}">
|
|
624
|
-
<FormItem label="Name" bindTo="name" />
|
|
625
|
-
</Form>
|
|
626
|
-
`, {
|
|
627
|
-
apiInterceptor: {
|
|
628
|
-
operations: {
|
|
629
|
-
testSuccess: {
|
|
630
|
-
url: "/test-success",
|
|
631
|
-
method: "put",
|
|
632
|
-
handler: `return { success: true };`,
|
|
633
|
-
},
|
|
634
|
-
},
|
|
635
|
-
},
|
|
636
|
-
});
|
|
637
|
-
const driver = yield createFormDriver("form");
|
|
638
|
-
yield driver.submitForm();
|
|
639
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("success");
|
|
640
|
-
}));
|
|
641
|
-
(0, fixtures_1.test)("onReset event fires when form is reset", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
642
|
-
const { testStateDriver } = yield initTestBed(`
|
|
643
|
-
<Form
|
|
644
|
-
id="testForm"
|
|
645
|
-
onReset="testState = 'reset'"
|
|
646
|
-
data="{{ name: 'Test' }}">
|
|
647
|
-
<FormItem label="Name" bindTo="name" />
|
|
648
|
-
<Button onClick="testForm.reset()" label="Reset Form" />
|
|
649
|
-
</Form>
|
|
650
|
-
`);
|
|
651
|
-
yield page.getByRole("button", { name: "Reset Form" }).click();
|
|
652
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("reset");
|
|
653
|
-
}));
|
|
654
|
-
});
|
|
655
|
-
// =============================================================================
|
|
656
|
-
// API TESTS
|
|
657
|
-
// =============================================================================
|
|
658
|
-
fixtures_1.test.describe("APIs", () => {
|
|
659
|
-
(0, fixtures_1.test)("update method updates form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
660
|
-
yield initTestBed(`
|
|
661
|
-
<Form
|
|
662
|
-
id="testForm"
|
|
663
|
-
data="{{ name: 'Original', age: 25 }}">
|
|
664
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
665
|
-
<FormItem label="Age" bindTo="age" type="integer" testId="ageField" />
|
|
666
|
-
<Button onClick="testForm.update({ name: 'Updated', age: 30 })" label="Update" />
|
|
667
|
-
</Form>
|
|
668
|
-
`);
|
|
669
|
-
const nameDriver = yield createFormItemDriver("nameField");
|
|
670
|
-
const nameInput = yield createTextBoxDriver(nameDriver.input);
|
|
671
|
-
const ageDriver = yield createFormItemDriver("ageField");
|
|
672
|
-
const ageInput = yield createTextBoxDriver(ageDriver.input);
|
|
673
|
-
yield (0, fixtures_1.expect)(nameInput.field).toHaveValue("Original");
|
|
674
|
-
yield (0, fixtures_1.expect)(ageInput.field).toHaveValue("25");
|
|
675
|
-
yield page.getByRole("button", { name: "Update" }).click();
|
|
676
|
-
yield (0, fixtures_1.expect)(nameInput.field).toHaveValue("Updated");
|
|
677
|
-
yield (0, fixtures_1.expect)(ageInput.field).toHaveValue("30");
|
|
678
|
-
}));
|
|
679
|
-
(0, fixtures_1.test)("reset method resets form to initial state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
680
|
-
yield initTestBed(`
|
|
681
|
-
<Form
|
|
682
|
-
id="testForm"
|
|
683
|
-
data="{{ name: 'Initial' }}">
|
|
684
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
685
|
-
<Button onClick="testForm.reset()" label="Reset" />
|
|
686
|
-
</Form>
|
|
687
|
-
`);
|
|
688
|
-
const nameDriver = yield createFormItemDriver("nameField");
|
|
689
|
-
const nameInput = yield createTextBoxDriver(nameDriver.input);
|
|
690
|
-
// Change the input value
|
|
691
|
-
yield nameInput.field.fill("Changed");
|
|
692
|
-
yield (0, fixtures_1.expect)(nameInput.field).toHaveValue("Changed");
|
|
693
|
-
// Reset the form
|
|
694
|
-
yield page.getByRole("button", { name: "Reset" }).click();
|
|
695
|
-
yield (0, fixtures_1.expect)(nameInput.field).toHaveValue("Initial");
|
|
696
|
-
}));
|
|
697
|
-
(0, fixtures_1.test)("validate method returns validation results without submitting", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
698
|
-
const { testStateDriver } = yield initTestBed(`
|
|
699
|
-
<Form id="testForm">
|
|
700
|
-
<FormItem label="Name" bindTo="name" required="true" testId="nameField" />
|
|
701
|
-
<FormItem label="Email" bindTo="email" testId="emailField" />
|
|
702
|
-
<Button onClick="testState = testForm.validate()" label="Validate" testId="validateBtn" />
|
|
703
|
-
</Form>
|
|
704
|
-
`);
|
|
705
|
-
// Click validate button without filling required field
|
|
706
|
-
yield page.getByTestId("validateBtn").click();
|
|
707
|
-
// Wait for validation to complete
|
|
708
|
-
yield page.waitForTimeout(100);
|
|
709
|
-
const result = yield testStateDriver.testState();
|
|
710
|
-
(0, fixtures_1.expect)(result).toBeTruthy();
|
|
711
|
-
(0, fixtures_1.expect)(result.isValid).toBe(false);
|
|
712
|
-
(0, fixtures_1.expect)(result.errors).toBeDefined();
|
|
713
|
-
(0, fixtures_1.expect)(result.errors.length).toBeGreaterThan(0);
|
|
714
|
-
}));
|
|
715
|
-
(0, fixtures_1.test)("validate method returns isValid true when all validations pass", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
716
|
-
const { testStateDriver } = yield initTestBed(`
|
|
717
|
-
<Form id="testForm">
|
|
718
|
-
<FormItem label="Name" bindTo="name" required="true" testId="nameField" />
|
|
719
|
-
<Button onClick="testState = testForm.validate()" label="Validate" testId="validateBtn" />
|
|
720
|
-
</Form>
|
|
721
|
-
`);
|
|
722
|
-
// Fill the required field
|
|
723
|
-
const nameDriver = yield createFormItemDriver("nameField");
|
|
724
|
-
const nameInput = yield createTextBoxDriver(nameDriver.input);
|
|
725
|
-
yield nameInput.field.fill("John Doe");
|
|
726
|
-
// Click validate button
|
|
727
|
-
yield page.getByTestId("validateBtn").click();
|
|
728
|
-
// Wait for validation to complete
|
|
729
|
-
yield page.waitForTimeout(100);
|
|
730
|
-
const result = yield testStateDriver.testState();
|
|
731
|
-
(0, fixtures_1.expect)(result).toBeTruthy();
|
|
732
|
-
(0, fixtures_1.expect)(result.isValid).toBe(true);
|
|
733
|
-
(0, fixtures_1.expect)(result.errors.length).toBe(0);
|
|
734
|
-
}));
|
|
735
|
-
(0, fixtures_1.test)("validate method returns cleaned form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
736
|
-
const { testStateDriver } = yield initTestBed(`
|
|
737
|
-
<Form id="testForm">
|
|
738
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
739
|
-
<FormItem label="Age" bindTo="age" type="integer" testId="ageField" />
|
|
740
|
-
<Button onClick="testState = testForm.validate()" label="Validate" testId="validateBtn" />
|
|
741
|
-
</Form>
|
|
742
|
-
`);
|
|
743
|
-
// Fill form fields
|
|
744
|
-
const nameDriver = yield createFormItemDriver("nameField");
|
|
745
|
-
const nameInput = yield createTextBoxDriver(nameDriver.input);
|
|
746
|
-
yield nameInput.field.fill("John Doe");
|
|
747
|
-
const ageDriver = yield createFormItemDriver("ageField");
|
|
748
|
-
const ageInput = yield createTextBoxDriver(ageDriver.input);
|
|
749
|
-
yield ageInput.field.fill("30");
|
|
750
|
-
// Click validate button
|
|
751
|
-
yield page.getByTestId("validateBtn").click();
|
|
752
|
-
// Wait for validation to complete
|
|
753
|
-
yield page.waitForTimeout(100);
|
|
754
|
-
const result = yield testStateDriver.testState();
|
|
755
|
-
(0, fixtures_1.expect)(result).toBeTruthy();
|
|
756
|
-
(0, fixtures_1.expect)(result.data).toEqual({ name: "John Doe", age: "30" });
|
|
757
|
-
}));
|
|
758
|
-
(0, fixtures_1.test)("validate method displays validation errors on form", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, }) {
|
|
759
|
-
yield initTestBed(`
|
|
760
|
-
<Form id="testForm">
|
|
761
|
-
<FormItem label="Name" bindTo="name" required="true" testId="nameField" />
|
|
762
|
-
<Button onClick="testForm.validate()" label="Validate" testId="validateBtn" />
|
|
763
|
-
</Form>
|
|
764
|
-
`);
|
|
765
|
-
// Click validate without filling required field
|
|
766
|
-
yield page.getByTestId("validateBtn").click();
|
|
767
|
-
// Validation error should be displayed
|
|
768
|
-
const nameField = page.getByTestId("nameField");
|
|
769
|
-
yield (0, fixtures_1.expect)(nameField).toContainText("This field is required");
|
|
770
|
-
}));
|
|
771
|
-
(0, fixtures_1.test)("validate method does not trigger form submission", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
772
|
-
const { testStateDriver } = yield initTestBed(`
|
|
773
|
-
<Form id="testForm" onSubmit="testState = 'submitted'">
|
|
774
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
775
|
-
<Button onClick="testForm.validate()" label="Validate" testId="validateBtn" />
|
|
776
|
-
</Form>
|
|
777
|
-
`);
|
|
778
|
-
// Fill form
|
|
779
|
-
const nameDriver = yield createFormItemDriver("nameField");
|
|
780
|
-
const nameInput = yield createTextBoxDriver(nameDriver.input);
|
|
781
|
-
yield nameInput.field.fill("John");
|
|
782
|
-
// Click validate button
|
|
783
|
-
yield page.getByTestId("validateBtn").click();
|
|
784
|
-
// Wait a bit
|
|
785
|
-
yield page.waitForTimeout(200);
|
|
786
|
-
// testState should remain null (not 'submitted')
|
|
787
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toBeNull();
|
|
788
|
-
}));
|
|
789
|
-
(0, fixtures_1.test)("validate method returns complete validation results object", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, createTextBoxDriver, }) {
|
|
790
|
-
const { testStateDriver } = yield initTestBed(`
|
|
791
|
-
<Form id="testForm">
|
|
792
|
-
<FormItem label="Name" bindTo="name" required="true" testId="nameField" />
|
|
793
|
-
<FormItem label="Email" bindTo="email" testId="emailField" />
|
|
794
|
-
<Button onClick="testState = testForm.validate()" label="Validate" testId="validateBtn" />
|
|
795
|
-
</Form>
|
|
796
|
-
`);
|
|
797
|
-
// Fill only email (name is required)
|
|
798
|
-
const emailDriver = yield createFormItemDriver("emailField");
|
|
799
|
-
const emailInput = yield createTextBoxDriver(emailDriver.input);
|
|
800
|
-
yield emailInput.field.fill("test@example.com");
|
|
801
|
-
// Click validate button
|
|
802
|
-
yield page.getByTestId("validateBtn").click();
|
|
803
|
-
// Wait for validation to complete
|
|
804
|
-
yield page.waitForTimeout(100);
|
|
805
|
-
const result = yield testStateDriver.testState();
|
|
806
|
-
(0, fixtures_1.expect)(result).toBeTruthy();
|
|
807
|
-
(0, fixtures_1.expect)(result.isValid).toBeDefined();
|
|
808
|
-
(0, fixtures_1.expect)(result.data).toBeDefined();
|
|
809
|
-
(0, fixtures_1.expect)(result.errors).toBeDefined();
|
|
810
|
-
(0, fixtures_1.expect)(result.warnings).toBeDefined();
|
|
811
|
-
(0, fixtures_1.expect)(result.validationResults).toBeDefined();
|
|
812
|
-
}));
|
|
813
|
-
});
|
|
814
|
-
// =============================================================================
|
|
815
|
-
// CONTEXT VARIABLE TESTS
|
|
816
|
-
// =============================================================================
|
|
817
|
-
fixtures_1.test.describe("Context Variables", () => {
|
|
818
|
-
(0, fixtures_1.test)("$data context variable provides access to form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, }) {
|
|
819
|
-
// This test needs specific FormItem behavior that may vary
|
|
820
|
-
yield initTestBed(`
|
|
821
|
-
<Form data="{{ isEnabled: true, name: 'Joe' }}">
|
|
822
|
-
<FormItem testId="isEnabled" label="Enable name" bindTo="isEnabled" type="checkbox" />
|
|
823
|
-
<FormItem testId="name" enabled="{$data.isEnabled}" label="Name" bindTo="name" />
|
|
824
|
-
</Form>
|
|
825
|
-
`);
|
|
826
|
-
const enableSwitch = (yield createFormItemDriver("isEnabled")).checkbox;
|
|
827
|
-
const nameInput = (yield createFormItemDriver("name")).textBox;
|
|
828
|
-
yield (0, fixtures_1.expect)(enableSwitch).toBeVisible();
|
|
829
|
-
yield (0, fixtures_1.expect)(nameInput).toBeEnabled();
|
|
830
|
-
yield enableSwitch.click();
|
|
831
|
-
yield (0, fixtures_1.expect)(nameInput).toBeDisabled();
|
|
832
|
-
}));
|
|
833
|
-
(0, fixtures_1.test)("$data.update method updates form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, }) {
|
|
834
|
-
yield initTestBed(`
|
|
835
|
-
<Form data="{{ counter: 0 }}">
|
|
836
|
-
<FormItem testId="counter" label="Counter" bindTo="counter" type="integer" />
|
|
837
|
-
<Button onClick="$data.update({ counter: $data.counter + 1 })" label="Increment" />
|
|
838
|
-
</Form>
|
|
839
|
-
`);
|
|
840
|
-
const counterDriver = yield createFormItemDriver("counter");
|
|
841
|
-
const counterInput = counterDriver.textBox;
|
|
842
|
-
yield (0, fixtures_1.expect)(counterInput).toHaveValue("0");
|
|
843
|
-
yield page.getByRole("button", { name: "Increment" }).click({ force: true });
|
|
844
|
-
yield (0, fixtures_1.expect)(counterInput).toHaveValue("1");
|
|
845
|
-
}));
|
|
846
|
-
});
|
|
847
|
-
// =============================================================================
|
|
848
|
-
// SUBMIT URL AND METHOD TESTS
|
|
849
|
-
// =============================================================================
|
|
850
|
-
fixtures_1.test.describe("Submit URL and Method", () => {
|
|
851
|
-
(0, fixtures_1.test)("submits to custom URL with POST method (new date)", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
852
|
-
yield initTestBed(`<App><Form testId="form" submitUrl="/custom-endpoint" data="{null}">
|
|
853
|
-
<FormItem label="Name" bindTo="name" />
|
|
854
|
-
</Form></App>`, {
|
|
855
|
-
apiInterceptor: {
|
|
856
|
-
operations: {
|
|
857
|
-
customEndpoint: {
|
|
858
|
-
url: "/custom-endpoint",
|
|
859
|
-
method: "post",
|
|
860
|
-
handler: `return { success: true };`,
|
|
861
|
-
},
|
|
862
|
-
},
|
|
863
|
-
},
|
|
864
|
-
});
|
|
865
|
-
const driver = yield createFormDriver("form");
|
|
866
|
-
yield driver.submitForm();
|
|
867
|
-
const response = yield driver.getSubmitResponse("/custom-endpoint");
|
|
868
|
-
(0, fixtures_1.expect)(response.ok()).toEqual(true);
|
|
869
|
-
}));
|
|
870
|
-
(0, fixtures_1.test)("uses PUT method for existing data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
871
|
-
yield initTestBed(`<Form submitUrl="/entities/1" data="{{ id: 1, name: 'Existing' }}">
|
|
872
|
-
<FormItem label="Name" bindTo="name" />
|
|
873
|
-
</Form>`, {
|
|
874
|
-
apiInterceptor: {
|
|
875
|
-
operations: {
|
|
876
|
-
updateEntity: {
|
|
877
|
-
url: "/entities/1",
|
|
878
|
-
method: "put",
|
|
879
|
-
handler: `return { success: true };`,
|
|
880
|
-
},
|
|
881
|
-
},
|
|
882
|
-
},
|
|
883
|
-
});
|
|
884
|
-
const driver = yield createFormDriver();
|
|
885
|
-
yield driver.submitForm();
|
|
886
|
-
const response = yield driver.getSubmitResponse("/entities/1");
|
|
887
|
-
(0, fixtures_1.expect)(response.ok()).toEqual(true);
|
|
888
|
-
}));
|
|
889
|
-
(0, fixtures_1.test)("uses custom submit method", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
890
|
-
yield initTestBed(`<Form submitUrl="/custom" submitMethod="put" data="{{ name: 'Test' }}">
|
|
891
|
-
<FormItem label="Name" bindTo="name" />
|
|
892
|
-
</Form>`, {
|
|
893
|
-
apiInterceptor: {
|
|
894
|
-
operations: {
|
|
895
|
-
putCustom: {
|
|
896
|
-
url: "/custom",
|
|
897
|
-
method: "put",
|
|
898
|
-
handler: `return { success: true };`,
|
|
899
|
-
},
|
|
900
|
-
},
|
|
901
|
-
},
|
|
902
|
-
});
|
|
903
|
-
const driver = yield createFormDriver();
|
|
904
|
-
yield driver.submitForm();
|
|
905
|
-
const response = yield driver.getSubmitResponse("/custom");
|
|
906
|
-
(0, fixtures_1.expect)(response.ok()).toEqual(true);
|
|
907
|
-
}));
|
|
908
|
-
});
|
|
909
|
-
});
|
|
910
|
-
// =============================================================================
|
|
911
|
-
// ACCESSIBILITY TESTS
|
|
912
|
-
// =============================================================================
|
|
913
|
-
fixtures_1.test.describe("Accessibility", () => {
|
|
914
|
-
(0, fixtures_1.test)("form has correct semantic role", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
915
|
-
yield initTestBed(`<Form/>`);
|
|
916
|
-
yield (0, fixtures_1.expect)(page.locator("form")).toBeVisible();
|
|
917
|
-
}));
|
|
918
|
-
(0, fixtures_1.test)("form items are properly associated with labels", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, }) {
|
|
919
|
-
yield initTestBed(`
|
|
920
|
-
<Form>
|
|
921
|
-
<FormItem label="Full Name" bindTo="name" testId="nameField" />
|
|
922
|
-
</Form>
|
|
923
|
-
`);
|
|
924
|
-
const driver = yield createFormItemDriver("nameField");
|
|
925
|
-
yield (0, fixtures_1.expect)(driver.label).toBeVisible();
|
|
926
|
-
yield (0, fixtures_1.expect)(driver.label).toHaveText("Full Name");
|
|
927
|
-
}));
|
|
928
|
-
(0, fixtures_1.test)("form submission is keyboard accessible", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
929
|
-
const { testStateDriver } = yield initTestBed(`
|
|
930
|
-
<Form onSubmit="testState = 'submitted via keyboard'">
|
|
931
|
-
<FormItem label="Name" bindTo="name" />
|
|
932
|
-
</Form>
|
|
933
|
-
`);
|
|
934
|
-
const submitButton = page.getByRole("button", { name: "Save" });
|
|
935
|
-
yield submitButton.focus();
|
|
936
|
-
yield page.keyboard.press("Enter");
|
|
937
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("submitted via keyboard");
|
|
938
|
-
}));
|
|
939
|
-
(0, fixtures_1.test)("form cancel is keyboard accessible", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
940
|
-
const { testStateDriver } = yield initTestBed(`
|
|
941
|
-
<Form onCancel="testState = 'cancelled via keyboard'">
|
|
942
|
-
<FormItem label="Name" bindTo="name" />
|
|
943
|
-
</Form>
|
|
944
|
-
`);
|
|
945
|
-
const cancelButton = page.getByRole("button", { name: "Cancel" });
|
|
946
|
-
yield cancelButton.focus();
|
|
947
|
-
yield page.keyboard.press("Enter");
|
|
948
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("cancelled via keyboard");
|
|
949
|
-
}));
|
|
950
|
-
(0, fixtures_1.test)("disabled form buttons are properly disabled", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
951
|
-
yield initTestBed(`
|
|
952
|
-
<Form enabled="false">
|
|
953
|
-
<FormItem label="Name" bindTo="name" />
|
|
954
|
-
</Form>
|
|
955
|
-
`);
|
|
956
|
-
const saveButton = page.getByRole("button", { name: "Save" });
|
|
957
|
-
yield (0, fixtures_1.expect)(saveButton).toBeDisabled();
|
|
958
|
-
}));
|
|
959
|
-
});
|
|
960
|
-
// =============================================================================
|
|
961
|
-
// THEME VARIABLE TESTS
|
|
962
|
-
// =============================================================================
|
|
963
|
-
fixtures_1.test.describe("Theme Variables", () => {
|
|
964
|
-
(0, fixtures_1.test)("applies custom gap theme variable", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
965
|
-
yield initTestBed(`<Form testId="form"/>`, {
|
|
966
|
-
testThemeVars: {
|
|
967
|
-
"gap-Form": "2rem",
|
|
968
|
-
},
|
|
969
|
-
});
|
|
970
|
-
const driver = yield createFormDriver("form");
|
|
971
|
-
yield (0, fixtures_1.expect)(driver.component).toHaveCSS("gap", "32px");
|
|
972
|
-
}));
|
|
973
|
-
(0, fixtures_1.test)("applies custom button row gap theme variable", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
974
|
-
yield initTestBed(`<Form testId="form"/>`, {
|
|
975
|
-
testThemeVars: {
|
|
976
|
-
"gap-buttonRow-Form": "1rem",
|
|
977
|
-
},
|
|
978
|
-
});
|
|
979
|
-
const driver = yield createFormDriver("form");
|
|
980
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
981
|
-
}));
|
|
982
|
-
(0, fixtures_1.test)("applies validation display theme variables", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
983
|
-
// This test requires validation system to trigger error display
|
|
984
|
-
yield initTestBed(`
|
|
985
|
-
<Form>
|
|
986
|
-
<FormItem testId="email" label="Email" bindTo="email" type="email" required="true" />
|
|
987
|
-
</Form>
|
|
988
|
-
`, {
|
|
989
|
-
testThemeVars: {
|
|
990
|
-
"backgroundColor-ValidationDisplay-error": "rgb(255, 0, 0)",
|
|
991
|
-
"textColor-ValidationDisplay-error": "rgb(255, 255, 255)",
|
|
992
|
-
},
|
|
993
|
-
});
|
|
994
|
-
// Trigger validation by submitting with empty required field
|
|
995
|
-
yield page.getByRole("button", { name: "Save" }).click();
|
|
996
|
-
const emailComp = page.getByTestId("email");
|
|
997
|
-
yield (0, fixtures_1.expect)(emailComp).toContainText("This field is required");
|
|
998
|
-
}));
|
|
999
|
-
});
|
|
1000
|
-
// =============================================================================
|
|
1001
|
-
// EDGE CASES TESTS
|
|
1002
|
-
// =============================================================================
|
|
1003
|
-
fixtures_1.test.describe("Edge Cases", () => {
|
|
1004
|
-
(0, fixtures_1.test)("handles form without any form items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1005
|
-
yield initTestBed(`<Form testId="form"/>`);
|
|
1006
|
-
const driver = yield createFormDriver("form");
|
|
1007
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
1008
|
-
}));
|
|
1009
|
-
(0, fixtures_1.test)("handles malformed data input gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1010
|
-
yield initTestBed(`<Form data="{invalidJson}" testId="form"/>`);
|
|
1011
|
-
const driver = yield createFormDriver("form");
|
|
1012
|
-
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
1013
|
-
}));
|
|
1014
|
-
(0, fixtures_1.test)("Form does not render if data receives malformed input", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1015
|
-
yield initTestBed(`<Form data="{}" />`);
|
|
1016
|
-
yield (0, fixtures_1.expect)((yield createFormDriver()).component).not.toBeAttached();
|
|
1017
|
-
}));
|
|
1018
|
-
(0, fixtures_1.test)("handles deeply nested data structure", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createTextBoxDriver, }) {
|
|
1019
|
-
yield initTestBed(`
|
|
1020
|
-
<Form data="{{ user: { profile: { name: 'John' } } }}">
|
|
1021
|
-
<FormItem label="Name" bindTo="user.profile.name" testId="nameField" />
|
|
1022
|
-
</Form>
|
|
1023
|
-
`);
|
|
1024
|
-
const driver = yield createFormItemDriver("nameField");
|
|
1025
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
1026
|
-
yield (0, fixtures_1.expect)(input.field).toHaveValue("John");
|
|
1027
|
-
}));
|
|
1028
|
-
(0, fixtures_1.test)("handles form with validation errors", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
1029
|
-
yield initTestBed(`
|
|
1030
|
-
<Form>
|
|
1031
|
-
<FormItem label="Email" bindTo="email" type="email" required="true" />
|
|
1032
|
-
</Form>
|
|
1033
|
-
`);
|
|
1034
|
-
// Try to submit form without filling required field
|
|
1035
|
-
yield page.getByRole("button", { name: "Save" }).click();
|
|
1036
|
-
// Validation should prevent submission and show error
|
|
1037
|
-
const form = page.locator("form");
|
|
1038
|
-
yield (0, fixtures_1.expect)(form).toBeVisible();
|
|
1039
|
-
}));
|
|
1040
|
-
(0, fixtures_1.test)("handles rapid form submissions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
1041
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1042
|
-
<Form onSubmit="testState = (testState || 0) + 1">
|
|
1043
|
-
<FormItem label="Name" bindTo="name" />
|
|
1044
|
-
</Form>
|
|
1045
|
-
`);
|
|
1046
|
-
const submitButton = page.getByRole("button", { name: "Save" });
|
|
1047
|
-
// Click submit button multiple times rapidly
|
|
1048
|
-
yield submitButton.click();
|
|
1049
|
-
yield submitButton.click();
|
|
1050
|
-
yield submitButton.click();
|
|
1051
|
-
// Should only submit once or handle gracefully
|
|
1052
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toBeGreaterThanOrEqual(1);
|
|
1053
|
-
}));
|
|
1054
|
-
(0, fixtures_1.test)("handles null and undefined in nested data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createTextBoxDriver, }) {
|
|
1055
|
-
yield initTestBed(`
|
|
1056
|
-
<Form data="{{ user: null, settings: undefined, name: 'Test' }}">
|
|
1057
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
1058
|
-
</Form>
|
|
1059
|
-
`);
|
|
1060
|
-
const driver = yield createFormItemDriver("nameField");
|
|
1061
|
-
const input = yield createTextBoxDriver(driver.input);
|
|
1062
|
-
yield (0, fixtures_1.expect)(input.field).toHaveValue("Test");
|
|
1063
|
-
}));
|
|
1064
|
-
(0, fixtures_1.test)("handles form with empty string properties", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
1065
|
-
yield initTestBed(`
|
|
1066
|
-
<Form
|
|
1067
|
-
cancelLabel=""
|
|
1068
|
-
saveLabel=""
|
|
1069
|
-
data="{{ name: '' }}">
|
|
1070
|
-
<FormItem label="Name" bindTo="name" />
|
|
1071
|
-
</Form>
|
|
1072
|
-
`);
|
|
1073
|
-
// Form should still be visible
|
|
1074
|
-
const form = page.locator("form");
|
|
1075
|
-
yield (0, fixtures_1.expect)(form).toBeVisible();
|
|
1076
|
-
}));
|
|
1077
|
-
(0, fixtures_1.test)("handles special characters in form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createTextBoxDriver, }) {
|
|
1078
|
-
yield initTestBed(`
|
|
1079
|
-
<Form data="{{ name: 'José María', description: 'Test & symbols' }}">
|
|
1080
|
-
<FormItem label="Name" bindTo="name" testId="nameField" />
|
|
1081
|
-
<FormItem label="Description" bindTo="description" testId="descField" />
|
|
1082
|
-
</Form>
|
|
1083
|
-
`);
|
|
1084
|
-
const nameDriver = yield createFormItemDriver("nameField");
|
|
1085
|
-
const nameInput = yield createTextBoxDriver(nameDriver.input);
|
|
1086
|
-
const descDriver = yield createFormItemDriver("descField");
|
|
1087
|
-
const descInput = yield createTextBoxDriver(descDriver.input);
|
|
1088
|
-
yield (0, fixtures_1.expect)(nameInput.field).toHaveValue("José María");
|
|
1089
|
-
yield (0, fixtures_1.expect)(descInput.field).toHaveValue("Test & symbols");
|
|
1090
|
-
}));
|
|
1091
|
-
(0, fixtures_1.test)("user cannot submit with clientside errors present", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1092
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1093
|
-
<Form onSubmit="testState = true">
|
|
1094
|
-
<FormItem bindTo="name" required="true" />
|
|
1095
|
-
</Form>
|
|
1096
|
-
`);
|
|
1097
|
-
const driver = yield createFormDriver();
|
|
1098
|
-
// The onSubmit event should have been triggered if not for the client error of an empty required field
|
|
1099
|
-
yield driver.submitForm("click");
|
|
1100
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(null);
|
|
1101
|
-
}));
|
|
1102
|
-
(0, fixtures_1.test)("can submit with invisible required field", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createFormItemDriver, createTextBoxDriver, page, }) {
|
|
1103
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1104
|
-
<Form onSubmit="testState = true">
|
|
1105
|
-
<FormItem testId="select" bindTo="authenticationType"
|
|
1106
|
-
type="select" label="Authentication Type:" initialValue="{0}">
|
|
1107
|
-
<Option value="{0}" label="Password" />
|
|
1108
|
-
<Option value="{1}" label="Public Key" />
|
|
1109
|
-
</FormItem>
|
|
1110
|
-
<FormItem label="name1" testId="name1" bindTo="name1"
|
|
1111
|
-
required="true" when="{$data.authenticationType == 0}"/>
|
|
1112
|
-
<FormItem label="name2" testId="name2" bindTo="name2"
|
|
1113
|
-
required="true" when="{$data.authenticationType == 1}"/>
|
|
1114
|
-
</Form>
|
|
1115
|
-
`);
|
|
1116
|
-
const formDriver = yield createFormDriver();
|
|
1117
|
-
const selectDriver = yield createFormItemDriver("select");
|
|
1118
|
-
const textfieldElement = (yield createFormItemDriver("name2")).input;
|
|
1119
|
-
const textfieldDriver = yield createTextBoxDriver(textfieldElement);
|
|
1120
|
-
yield selectDriver.component.click();
|
|
1121
|
-
yield page.getByText("Public Key").click();
|
|
1122
|
-
yield textfieldDriver.field.fill("John");
|
|
1123
|
-
yield formDriver.submitForm();
|
|
1124
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(true);
|
|
1125
|
-
}));
|
|
1126
|
-
(0, fixtures_1.test)("conditional fields keep the state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createOptionDriver, createTextBoxDriver, }) {
|
|
1127
|
-
yield initTestBed(`
|
|
1128
|
-
<Form>
|
|
1129
|
-
<FormItem testId="select" bindTo="authenticationType"
|
|
1130
|
-
type="radioGroup" label="Authentication Type:" initialValue="{0}">
|
|
1131
|
-
<Option value="{0}" label="Password" testId="password"/>
|
|
1132
|
-
<Option value="{1}" label="Public Key" testId="publicKey" />
|
|
1133
|
-
</FormItem>
|
|
1134
|
-
<FormItem label="name1" testId="name1" bindTo="name1"
|
|
1135
|
-
required="true" when="{$data.authenticationType == 0}"/>
|
|
1136
|
-
<FormItem label="name2" testId="name2" bindTo="name2"
|
|
1137
|
-
required="true" when="{$data.authenticationType == 1}"/>
|
|
1138
|
-
</Form>
|
|
1139
|
-
`);
|
|
1140
|
-
const option1Driver = yield createFormItemDriver("password");
|
|
1141
|
-
const option2Driver = yield createOptionDriver("publicKey");
|
|
1142
|
-
const textfield1Element = (yield createFormItemDriver("name1")).input;
|
|
1143
|
-
const textfield1Driver = yield createTextBoxDriver(textfield1Element);
|
|
1144
|
-
// Fill in first field
|
|
1145
|
-
yield textfield1Driver.field.fill("Test Value");
|
|
1146
|
-
yield (0, fixtures_1.expect)(textfield1Driver.field).toHaveValue("Test Value");
|
|
1147
|
-
// Switch to second option
|
|
1148
|
-
yield option2Driver.component.click();
|
|
1149
|
-
// Switch back to first option
|
|
1150
|
-
yield option1Driver.component.click();
|
|
1151
|
-
// Field should retain its value
|
|
1152
|
-
yield (0, fixtures_1.expect)(textfield1Driver.field).toHaveValue("Test Value");
|
|
1153
|
-
}));
|
|
1154
|
-
});
|
|
1155
|
-
// =============================================================================
|
|
1156
|
-
// ORIGINAL TEST SUITE (LEGACY TESTS)
|
|
1157
|
-
// =============================================================================
|
|
1158
|
-
(0, fixtures_1.test)("mock service responds", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1159
|
-
yield initTestBed(`
|
|
1160
|
-
<Form submitUrl="/test" />`, {
|
|
1161
|
-
apiInterceptor: {
|
|
1162
|
-
operations: {
|
|
1163
|
-
test: {
|
|
1164
|
-
url: "/test",
|
|
1165
|
-
method: "post",
|
|
1166
|
-
handler: `return true;`,
|
|
1167
|
-
},
|
|
1168
|
-
},
|
|
1169
|
-
},
|
|
1170
|
-
});
|
|
1171
|
-
const driver = yield createFormDriver();
|
|
1172
|
-
yield driver.submitForm();
|
|
1173
|
-
const request = yield driver.getSubmitResponse("/test");
|
|
1174
|
-
(0, fixtures_1.expect)(request.ok()).toEqual(true);
|
|
1175
|
-
}));
|
|
1176
|
-
// --- $data
|
|
1177
|
-
(0, fixtures_1.test)("$data is correctly bound to form data", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
1178
|
-
yield initTestBed(`
|
|
1179
|
-
<Form data="{{ field: 'test' }}">
|
|
1180
|
-
<FormItem label="testField" bindTo="field">
|
|
1181
|
-
<Button testId="custom" label="{$data.field}" />
|
|
1182
|
-
</FormItem>
|
|
1183
|
-
</Form> `);
|
|
1184
|
-
const driver = yield createButtonDriver("custom");
|
|
1185
|
-
yield (0, fixtures_1.expect)(driver.component).toHaveExplicitLabel("test");
|
|
1186
|
-
}));
|
|
1187
|
-
(0, fixtures_1.test)("$data is correctly undefined if data is not set in props", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver, }) {
|
|
1188
|
-
yield initTestBed(`
|
|
1189
|
-
<Form>
|
|
1190
|
-
<FormItem label="testField" bindTo="field">
|
|
1191
|
-
<Button testId="custom" label="{$data.field}" />
|
|
1192
|
-
</FormItem>
|
|
1193
|
-
</Form> `);
|
|
1194
|
-
const driver = yield createButtonDriver("custom");
|
|
1195
|
-
yield (0, fixtures_1.expect)(driver.component).toHaveExplicitLabel(undefined);
|
|
1196
|
-
}));
|
|
1197
|
-
(0, fixtures_1.test)("Form buttons and contained FormItems are enabled", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormDriver, }) {
|
|
1198
|
-
yield initTestBed(`
|
|
1199
|
-
<Form testId="form">
|
|
1200
|
-
<FormItem label="Name" bindTo="name" />
|
|
1201
|
-
<FormItem label="Email" bindTo="email" />
|
|
1202
|
-
</Form>
|
|
1203
|
-
`);
|
|
1204
|
-
const driver = yield createFormDriver("form");
|
|
1205
|
-
yield (0, fixtures_1.expect)(page.getByText("Name")).toBeVisible();
|
|
1206
|
-
yield (0, fixtures_1.expect)(page.getByText("Email")).toBeVisible();
|
|
1207
|
-
yield (0, fixtures_1.expect)(driver.cancelButton).toBeEnabled();
|
|
1208
|
-
yield (0, fixtures_1.expect)(driver.submitButton).toBeEnabled();
|
|
1209
|
-
}));
|
|
1210
|
-
(0, fixtures_1.test)("submit only triggers when enabled", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1211
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1212
|
-
<Form enabled="false" data="{{ name: 'John' }}" onSubmit="testState = true">
|
|
1213
|
-
<FormItem bindTo="name" />
|
|
1214
|
-
</Form>`);
|
|
1215
|
-
const driver = yield createFormDriver();
|
|
1216
|
-
yield (0, fixtures_1.expect)(driver.submitButton).toBeDisabled();
|
|
1217
|
-
yield driver.submitForm("keypress");
|
|
1218
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(null);
|
|
1219
|
-
}));
|
|
1220
|
-
(0, fixtures_1.test)("submit with unbound fields", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed, createFormDriver }) {
|
|
1221
|
-
yield initTestBed(`
|
|
1222
|
-
<Fragment var.output="none">
|
|
1223
|
-
<Form testId="form"
|
|
1224
|
-
data="{{ firstname: 'James', lastname: 'Clewell' }}"
|
|
1225
|
-
onSubmit="args => output = JSON.stringify(args)">
|
|
1226
|
-
<FormItem label="Firstname" bindTo="firstname" />
|
|
1227
|
-
<FormItem label="Middle name" initialValue="Robert" />
|
|
1228
|
-
<FormItem label="Lastname" />
|
|
1229
|
-
</Form>
|
|
1230
|
-
<Text testId="text">{output}</Text>
|
|
1231
|
-
</Fragment>
|
|
1232
|
-
`);
|
|
1233
|
-
const driver = yield createFormDriver("form");
|
|
1234
|
-
yield driver.submitForm();
|
|
1235
|
-
yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText('{"firstname":"James"}');
|
|
1236
|
-
}));
|
|
1237
|
-
(0, fixtures_1.test)(`submit with type 'items'`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createButtonDriver, createFormItemDriver, }) {
|
|
1238
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1239
|
-
<Form onSubmit="data => testState = data" testId="form">
|
|
1240
|
-
<FormItem testId="formItem" type="items" bindTo="arrayItems" id="arrayItems">
|
|
1241
|
-
<FormItem bindTo="name" testId="text{$itemIndex}"/>
|
|
1242
|
-
</FormItem>
|
|
1243
|
-
<Button testId="addButton" onClick="arrayItems.addItem()"/>
|
|
1244
|
-
</Form>`);
|
|
1245
|
-
yield (yield createButtonDriver("addButton")).click();
|
|
1246
|
-
yield (yield createFormItemDriver("text0")).textBox.fill("John");
|
|
1247
|
-
yield (yield createButtonDriver("addButton")).click();
|
|
1248
|
-
yield (yield createFormItemDriver("text1")).textBox.fill("Peter");
|
|
1249
|
-
const driver = yield createFormDriver("form");
|
|
1250
|
-
yield driver.submitForm();
|
|
1251
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toStrictEqual({
|
|
1252
|
-
arrayItems: [{ name: "John" }, { name: "Peter" }],
|
|
1253
|
-
});
|
|
1254
|
-
}));
|
|
1255
|
-
(0, fixtures_1.test)(`submit with type 'items', empty bindTo`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createButtonDriver, createFormItemDriver, }) {
|
|
1256
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1257
|
-
<Form onSubmit="data => testState = data" testId="form">
|
|
1258
|
-
<FormItem testId="formItem" type="items" bindTo="arrayItems" id="arrayItems">
|
|
1259
|
-
<FormItem testId="text{$itemIndex}" bindTo=""/>
|
|
1260
|
-
</FormItem>
|
|
1261
|
-
<Button testId="addButton" onClick="arrayItems.addItem()"/>
|
|
1262
|
-
</Form>`);
|
|
1263
|
-
yield (yield createButtonDriver("addButton")).click();
|
|
1264
|
-
yield (yield createFormItemDriver("text0")).textBox.fill("John");
|
|
1265
|
-
yield (yield createButtonDriver("addButton")).click();
|
|
1266
|
-
yield (yield createFormItemDriver("text1")).textBox.fill("Peter");
|
|
1267
|
-
const driver = yield createFormDriver("form");
|
|
1268
|
-
yield driver.submitForm();
|
|
1269
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toStrictEqual({
|
|
1270
|
-
arrayItems: ["John", "Peter"],
|
|
1271
|
-
});
|
|
1272
|
-
}));
|
|
1273
|
-
// --- Testing
|
|
1274
|
-
// --- --- buttonRowTemplate
|
|
1275
|
-
(0, fixtures_1.test)("buttonRowTemplate can render buttons", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver }) {
|
|
1276
|
-
yield initTestBed(`
|
|
1277
|
-
<Form>
|
|
1278
|
-
<property name="buttonRowTemplate">
|
|
1279
|
-
<Button testId="submitBtn" type="submit" label="Hello Button" />
|
|
1280
|
-
</property>
|
|
1281
|
-
</Form>`);
|
|
1282
|
-
yield (0, fixtures_1.expect)((yield createButtonDriver("submitBtn")).component).toBeAttached();
|
|
1283
|
-
}));
|
|
1284
|
-
(0, fixtures_1.test)("buttonRowTemplate replaces built-in buttons", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1285
|
-
yield initTestBed(`
|
|
1286
|
-
<Form testId="form">
|
|
1287
|
-
<property name="buttonRowTemplate">
|
|
1288
|
-
<Button testId="submitBtn" type="submit" label="Hello Button" />
|
|
1289
|
-
</property>
|
|
1290
|
-
</Form>`);
|
|
1291
|
-
const driver = yield createFormDriver("form");
|
|
1292
|
-
yield (0, fixtures_1.expect)(driver.submitButton).not.toBeVisible();
|
|
1293
|
-
yield (0, fixtures_1.expect)(driver.cancelButton).not.toBeVisible();
|
|
1294
|
-
}));
|
|
1295
|
-
(0, fixtures_1.test)("setting buttonRowTemplate without buttons still runs submit on Enter", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1296
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1297
|
-
<Form onSubmit="testState = true">
|
|
1298
|
-
<property name="buttonRowTemplate">
|
|
1299
|
-
<Fragment />
|
|
1300
|
-
</property>
|
|
1301
|
-
<FormItem bindTo="name" />
|
|
1302
|
-
</Form>
|
|
1303
|
-
`);
|
|
1304
|
-
const driver = yield createFormDriver();
|
|
1305
|
-
yield driver.submitForm("keypress");
|
|
1306
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toBe(true);
|
|
1307
|
-
}));
|
|
1308
|
-
(0, fixtures_1.test)("data accepts an object", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createTextBoxDriver, }) {
|
|
1309
|
-
yield initTestBed(`
|
|
1310
|
-
<Form data="{{ field1: 'test' }}">
|
|
1311
|
-
<FormItem testId="inputField" bindTo="field1" />
|
|
1312
|
-
</Form>
|
|
1313
|
-
`);
|
|
1314
|
-
const driver = yield createFormItemDriver("inputField");
|
|
1315
|
-
yield (0, fixtures_1.expect)((yield createTextBoxDriver(driver.input)).field).toHaveValue("test");
|
|
1316
|
-
}));
|
|
1317
|
-
(0, fixtures_1.test)(`data accepts primitive`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1318
|
-
yield initTestBed(`
|
|
1319
|
-
<Form data="test">
|
|
1320
|
-
<FormItem bindTo="field1" />
|
|
1321
|
-
</Form>
|
|
1322
|
-
`);
|
|
1323
|
-
const component = (yield createFormDriver()).component;
|
|
1324
|
-
yield (0, fixtures_1.expect)(component).toBeAttached();
|
|
1325
|
-
}));
|
|
1326
|
-
(0, fixtures_1.test)(`data accepts empty array`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1327
|
-
yield initTestBed(`
|
|
1328
|
-
<Form data="{[]}">
|
|
1329
|
-
<FormItem bindTo="field1" />
|
|
1330
|
-
</Form>
|
|
1331
|
-
`);
|
|
1332
|
-
const component = (yield createFormDriver()).component;
|
|
1333
|
-
yield (0, fixtures_1.expect)(component).toBeAttached();
|
|
1334
|
-
}));
|
|
1335
|
-
(0, fixtures_1.test)("data accepts relative URL endpoint", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createTextBoxDriver, }) {
|
|
1336
|
-
yield initTestBed(`
|
|
1337
|
-
<Form data="/test">
|
|
1338
|
-
<FormItem testId="inputField" bindTo="name" />
|
|
1339
|
-
</Form>`, {
|
|
1340
|
-
apiInterceptor: {
|
|
1341
|
-
operations: {
|
|
1342
|
-
test: {
|
|
1343
|
-
url: "/test",
|
|
1344
|
-
method: "get",
|
|
1345
|
-
handler: `return { name: 'John' };`,
|
|
1346
|
-
},
|
|
1347
|
-
},
|
|
1348
|
-
},
|
|
1349
|
-
});
|
|
1350
|
-
const driver = yield createFormItemDriver("inputField");
|
|
1351
|
-
yield (0, fixtures_1.expect)((yield createTextBoxDriver(driver.input)).field).toHaveValue("John");
|
|
1352
|
-
}));
|
|
1353
|
-
(0, fixtures_1.test)("cancel button and save button use default label", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1354
|
-
yield initTestBed(`
|
|
1355
|
-
<Form testId="form">
|
|
1356
|
-
<FormItem label="Name" bindTo="name" />
|
|
1357
|
-
<FormItem label="Email" bindTo="email" />
|
|
1358
|
-
</Form>
|
|
1359
|
-
`);
|
|
1360
|
-
const driver = yield createFormDriver("form");
|
|
1361
|
-
yield (0, fixtures_1.expect)(driver.cancelButton).toHaveText("Cancel");
|
|
1362
|
-
yield (0, fixtures_1.expect)(driver.submitButton).toHaveText("Save");
|
|
1363
|
-
}));
|
|
1364
|
-
(0, fixtures_1.test)("cancel button is rendered with cancelLabel", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1365
|
-
yield initTestBed(`
|
|
1366
|
-
<Form testId="form" cancelLabel="Abort">
|
|
1367
|
-
<FormItem label="Name" bindTo="name" />
|
|
1368
|
-
<FormItem label="Email" bindTo="email" />
|
|
1369
|
-
</Form>
|
|
1370
|
-
`);
|
|
1371
|
-
const driver = yield createFormDriver("form");
|
|
1372
|
-
yield (0, fixtures_1.expect)(driver.cancelButton).toHaveText("Abort");
|
|
1373
|
-
yield (0, fixtures_1.expect)(driver.submitButton).toHaveText("Save");
|
|
1374
|
-
}));
|
|
1375
|
-
(0, fixtures_1.test)("save button is rendered with saveLabel", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1376
|
-
yield initTestBed(`
|
|
1377
|
-
<Form testId="form" saveLabel="Submit">
|
|
1378
|
-
<FormItem label="Name" bindTo="name" />
|
|
1379
|
-
<FormItem label="Email" bindTo="email" />
|
|
1380
|
-
</Form>
|
|
1381
|
-
`);
|
|
1382
|
-
const driver = yield createFormDriver("form");
|
|
1383
|
-
yield (0, fixtures_1.expect)(driver.cancelButton).toHaveText("Cancel");
|
|
1384
|
-
yield (0, fixtures_1.expect)(driver.submitButton).toHaveText("Submit");
|
|
1385
|
-
}));
|
|
1386
|
-
// swapCancelAndSave
|
|
1387
|
-
(0, fixtures_1.test)("built-in button row order is default if swapCancelAndSave is false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1388
|
-
yield initTestBed(`
|
|
1389
|
-
<Form testId="form" saveLabel="Submit">
|
|
1390
|
-
<FormItem label="Name" bindTo="name" />
|
|
1391
|
-
<FormItem label="Email" bindTo="email" />
|
|
1392
|
-
</Form>
|
|
1393
|
-
`);
|
|
1394
|
-
const driver = yield createFormDriver("form");
|
|
1395
|
-
const cancelBox = yield driver.cancelButton.boundingBox();
|
|
1396
|
-
const submitBox = yield driver.submitButton.boundingBox();
|
|
1397
|
-
(0, fixtures_1.expect)(cancelBox.x).toBeLessThan(submitBox.x);
|
|
1398
|
-
}));
|
|
1399
|
-
(0, fixtures_1.test)("built-in button row order flips if swapCancelAndSave is true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1400
|
-
yield initTestBed(`
|
|
1401
|
-
<Form testId="form" saveLabel="Submit" swapCancelAndSave="true">
|
|
1402
|
-
<FormItem label="Name" bindTo="name" />
|
|
1403
|
-
<FormItem label="Email" bindTo="email" />
|
|
1404
|
-
</Form>
|
|
1405
|
-
`);
|
|
1406
|
-
const driver = yield createFormDriver("form");
|
|
1407
|
-
const cancelBox = yield driver.cancelButton.boundingBox();
|
|
1408
|
-
const submitBox = yield driver.submitButton.boundingBox();
|
|
1409
|
-
(0, fixtures_1.expect)(cancelBox.x).toBeGreaterThan(submitBox.x);
|
|
1410
|
-
}));
|
|
1411
|
-
// --- submitUrl
|
|
1412
|
-
(0, fixtures_1.test)("form submits to correct url", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1413
|
-
const endpoint = "/test";
|
|
1414
|
-
yield initTestBed(`
|
|
1415
|
-
<Form data="{{ name: 'John' }}" submitUrl="${endpoint}" submitMethod="post">
|
|
1416
|
-
<FormItem bindTo="name" />
|
|
1417
|
-
</Form>`, {
|
|
1418
|
-
apiInterceptor: {
|
|
1419
|
-
operations: {
|
|
1420
|
-
test: {
|
|
1421
|
-
url: endpoint,
|
|
1422
|
-
method: "post",
|
|
1423
|
-
handler: `{ return true; }`,
|
|
1424
|
-
},
|
|
1425
|
-
},
|
|
1426
|
-
},
|
|
1427
|
-
});
|
|
1428
|
-
const driver = yield createFormDriver();
|
|
1429
|
-
yield driver.submitForm();
|
|
1430
|
-
const response = yield driver.getSubmitResponse(endpoint);
|
|
1431
|
-
(0, fixtures_1.expect)(response.ok()).toBe(true);
|
|
1432
|
-
(0, fixtures_1.expect)(new URL(response.url()).pathname).toBe(endpoint);
|
|
1433
|
-
}));
|
|
1434
|
-
// --- submitMethod
|
|
1435
|
-
// NOTE: GET doesn't work because GET/HEAD cannot have a 'body'
|
|
1436
|
-
["post", "put", "delete"].forEach((method) => {
|
|
1437
|
-
(0, fixtures_1.test)(`${method} REST op on submit`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1438
|
-
yield initTestBed(`<Form submitUrl="/test" submitMethod="${method}" />`, {
|
|
1439
|
-
apiInterceptor: {
|
|
1440
|
-
operations: {
|
|
1441
|
-
testPost: {
|
|
1442
|
-
url: "/test",
|
|
1443
|
-
method: "post",
|
|
1444
|
-
handler: `return true;`,
|
|
1445
|
-
},
|
|
1446
|
-
testPut: {
|
|
1447
|
-
url: "/test",
|
|
1448
|
-
method: "put",
|
|
1449
|
-
handler: `return true;`,
|
|
1450
|
-
},
|
|
1451
|
-
testDelete: {
|
|
1452
|
-
url: "/test",
|
|
1453
|
-
method: "delete",
|
|
1454
|
-
handler: `return true;`,
|
|
1455
|
-
},
|
|
1456
|
-
},
|
|
1457
|
-
},
|
|
1458
|
-
});
|
|
1459
|
-
const driver = yield createFormDriver();
|
|
1460
|
-
const request = yield driver.getSubmitRequest("/test", method, "click");
|
|
1461
|
-
(0, fixtures_1.expect)(request.failure()).toBeNull();
|
|
1462
|
-
}));
|
|
1463
|
-
});
|
|
1464
|
-
// --- submitting the Form
|
|
1465
|
-
(0, fixtures_1.test)("submit triggers when clicking save/submit button", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1466
|
-
yield initTestBed(`
|
|
1467
|
-
<Form data="{{ name: 'John' }}" submitUrl="/test" submitMethod="post">
|
|
1468
|
-
<FormItem bindTo="name" />
|
|
1469
|
-
</Form>`, {
|
|
1470
|
-
apiInterceptor: {
|
|
1471
|
-
operations: {
|
|
1472
|
-
test: {
|
|
1473
|
-
url: "/test",
|
|
1474
|
-
method: "post",
|
|
1475
|
-
handler: `return true;`,
|
|
1476
|
-
},
|
|
1477
|
-
},
|
|
1478
|
-
},
|
|
1479
|
-
});
|
|
1480
|
-
const driver = yield createFormDriver();
|
|
1481
|
-
const request = yield driver.getSubmitRequest("/test", "POST", "click");
|
|
1482
|
-
(0, fixtures_1.expect)(request.failure()).toBeNull();
|
|
1483
|
-
}));
|
|
1484
|
-
(0, fixtures_1.test)("submit triggers when pressing Enter", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver }) {
|
|
1485
|
-
yield initTestBed(`
|
|
1486
|
-
<Form data="{{ name: 'John' }}" submitUrl="/test" submitMethod="post">
|
|
1487
|
-
<FormItem bindTo="name" />
|
|
1488
|
-
</Form>`, {
|
|
1489
|
-
apiInterceptor: {
|
|
1490
|
-
operations: {
|
|
1491
|
-
test: {
|
|
1492
|
-
url: "/test",
|
|
1493
|
-
method: "post",
|
|
1494
|
-
handler: `return true;`,
|
|
1495
|
-
},
|
|
1496
|
-
},
|
|
1497
|
-
},
|
|
1498
|
-
});
|
|
1499
|
-
const driver = yield createFormDriver();
|
|
1500
|
-
const request = yield driver.getSubmitRequest("/test", "POST", "keypress");
|
|
1501
|
-
(0, fixtures_1.expect)(request.failure()).toBeNull();
|
|
1502
|
-
}));
|
|
1503
|
-
(0, fixtures_1.test)("user cannot submit with clientside errors present", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1504
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1505
|
-
<Form onSubmit="testState = true">
|
|
1506
|
-
<FormItem bindTo="name" required="true" />
|
|
1507
|
-
</Form>
|
|
1508
|
-
`);
|
|
1509
|
-
const driver = yield createFormDriver();
|
|
1510
|
-
// The onSubmit event should have been triggered if not for the client error of an empty required field
|
|
1511
|
-
yield driver.submitForm("click");
|
|
1512
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(null);
|
|
1513
|
-
}));
|
|
1514
|
-
// --- backend validation summary
|
|
1515
|
-
(0, fixtures_1.test)("submitting with errors shows validation summary", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1516
|
-
yield initTestBed(`<Form submitUrl="/general-validation-error" submitMethod="post" />`, {
|
|
1517
|
-
apiInterceptor: errorDisplayInterceptor,
|
|
1518
|
-
});
|
|
1519
|
-
const driver = yield createFormDriver();
|
|
1520
|
-
yield driver.submitForm();
|
|
1521
|
-
yield (0, fixtures_1.expect)(yield driver.getValidationSummary()).toBeVisible();
|
|
1522
|
-
}));
|
|
1523
|
-
(0, fixtures_1.test)("submitting without errors does not show summary", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, }) {
|
|
1524
|
-
yield initTestBed(`<Form submitUrl="/no-validation-error" submitMethod="post" />`, {
|
|
1525
|
-
apiInterceptor: errorDisplayInterceptor,
|
|
1526
|
-
});
|
|
1527
|
-
const driver = yield createFormDriver();
|
|
1528
|
-
yield driver.submitForm();
|
|
1529
|
-
yield (0, fixtures_1.expect)(yield driver.getValidationSummary()).not.toBeVisible();
|
|
1530
|
-
}));
|
|
1531
|
-
(0, fixtures_1.test)("general error messages are rendered in the summary", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createValidationDisplayDriver, }) {
|
|
1532
|
-
yield initTestBed(`<Form submitUrl="/general-validation-error" submitMethod="post" />`, {
|
|
1533
|
-
apiInterceptor: errorDisplayInterceptor,
|
|
1534
|
-
});
|
|
1535
|
-
const formDriver = yield createFormDriver();
|
|
1536
|
-
yield formDriver.submitForm();
|
|
1537
|
-
// TODO: strip this down -> it's verbose but hard to read
|
|
1538
|
-
const warningDisplay = yield createValidationDisplayDriver(yield formDriver.getValidationDisplaysBySeverity("warning"));
|
|
1539
|
-
const errorDisplay = yield createValidationDisplayDriver(yield formDriver.getValidationDisplaysBySeverity("error"));
|
|
1540
|
-
(0, fixtures_1.expect)(yield warningDisplay.getText()).toContain("Warning for the whole form");
|
|
1541
|
-
(0, fixtures_1.expect)(yield errorDisplay.getText()).toContain("Error for the whole form");
|
|
1542
|
-
}));
|
|
1543
|
-
(0, fixtures_1.test)("field-related errors are rendered at FormItems", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createFormItemDriver, }) {
|
|
1544
|
-
yield initTestBed(`
|
|
1545
|
-
<Form submitUrl="/field-validation-error" submitMethod="post">
|
|
1546
|
-
<FormItem testId="testField" bindTo="test" label="test" />
|
|
1547
|
-
</Form>`, {
|
|
1548
|
-
apiInterceptor: errorDisplayInterceptor,
|
|
1549
|
-
});
|
|
1550
|
-
const formDriver = yield createFormDriver();
|
|
1551
|
-
const fieldDriver = yield createFormItemDriver("testField");
|
|
1552
|
-
yield formDriver.submitForm();
|
|
1553
|
-
yield (0, fixtures_1.expect)(fieldDriver.validationStatusIndicator).toHaveAttribute(fieldDriver.validationStatusTag, "warning");
|
|
1554
|
-
}));
|
|
1555
|
-
(0, fixtures_1.test)("field-related errors map to correct FormItems", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createFormItemDriver, }) {
|
|
1556
|
-
yield initTestBed(`
|
|
1557
|
-
<Form submitUrl="/field-validation-error" submitMethod="post">
|
|
1558
|
-
<FormItem testId="testField" bindTo="test" label="test" />
|
|
1559
|
-
<FormItem testId="testField2" bindTo="test2" label="test2" />
|
|
1560
|
-
</Form>`, {
|
|
1561
|
-
apiInterceptor: errorDisplayInterceptor,
|
|
1562
|
-
});
|
|
1563
|
-
const formDriver = yield createFormDriver();
|
|
1564
|
-
const fieldDriver = yield createFormItemDriver("testField");
|
|
1565
|
-
yield formDriver.submitForm();
|
|
1566
|
-
yield (0, fixtures_1.expect)(fieldDriver.validationStatusIndicator).toHaveAttribute(fieldDriver.validationStatusTag, "warning");
|
|
1567
|
-
}));
|
|
1568
|
-
fixtures_1.test.skip("field-related errors disappear if user updates FormItems", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createFormItemDriver, }) {
|
|
1569
|
-
yield initTestBed(`
|
|
1570
|
-
<Form testId="form">
|
|
1571
|
-
<FormItem testId="testField" bindTo="test" label="test" required />
|
|
1572
|
-
<FormItem testId="testField2" bindTo="test2" label="test2" />
|
|
1573
|
-
</Form>`);
|
|
1574
|
-
const fieldDriver = yield createFormItemDriver("testField");
|
|
1575
|
-
const fieldDriver2 = yield createFormItemDriver("testField2");
|
|
1576
|
-
yield fieldDriver.component.focus();
|
|
1577
|
-
yield fieldDriver.textBox.fill("a");
|
|
1578
|
-
yield fieldDriver.textBox.fill("");
|
|
1579
|
-
yield fieldDriver.textBox.blur();
|
|
1580
|
-
// Should show required error now
|
|
1581
|
-
yield (0, fixtures_1.expect)(fieldDriver.textBox).toHaveValue("");
|
|
1582
|
-
yield (0, fixtures_1.expect)(fieldDriver.validationStatusIndicator).toHaveAttribute(fieldDriver.validationStatusTag, "error");
|
|
1583
|
-
yield fieldDriver.textBox.fill("a");
|
|
1584
|
-
yield fieldDriver.textBox.blur();
|
|
1585
|
-
yield fieldDriver2.textBox.focus();
|
|
1586
|
-
yield (0, fixtures_1.expect)(fieldDriver2.textBox).toBeFocused();
|
|
1587
|
-
yield fieldDriver2.textBox.fill("b");
|
|
1588
|
-
yield (0, fixtures_1.expect)(fieldDriver.validationStatusIndicator).not.toBeVisible();
|
|
1589
|
-
}));
|
|
1590
|
-
const smartCrudInterceptor = {
|
|
1591
|
-
initialize: `
|
|
1592
|
-
$state.items = {
|
|
1593
|
-
[10]: { name: "Smith", id: 10 }
|
|
1594
|
-
};
|
|
1595
|
-
$state.currentId = 10;
|
|
1596
|
-
`,
|
|
1597
|
-
operations: {
|
|
1598
|
-
create: {
|
|
1599
|
-
url: "/entities",
|
|
1600
|
-
method: "post",
|
|
1601
|
-
handler: `() => {
|
|
1602
|
-
$state.currentId++;
|
|
1603
|
-
$state.items[$state.currentId] = $requestBody;
|
|
1604
|
-
$state.items[$state.currentId].id = $state.currentId;
|
|
1605
|
-
|
|
1606
|
-
return $state.items[$state.currentId];
|
|
1607
|
-
}`,
|
|
1608
|
-
},
|
|
1609
|
-
read: {
|
|
1610
|
-
url: "/entities/:id",
|
|
1611
|
-
method: "get",
|
|
1612
|
-
handler: `() => {
|
|
1613
|
-
return $state.items[$pathParams.id];
|
|
1614
|
-
}`,
|
|
1615
|
-
},
|
|
1616
|
-
update: {
|
|
1617
|
-
url: "/entities/:id",
|
|
1618
|
-
method: "put",
|
|
1619
|
-
handler: `() => {
|
|
1620
|
-
$state.items[$pathParams.id] = { ...$state.items[$pathParams.id], ...$requestBody };
|
|
1621
|
-
return $state.items[$pathParams.id];
|
|
1622
|
-
}`,
|
|
1623
|
-
},
|
|
1624
|
-
},
|
|
1625
|
-
};
|
|
1626
|
-
(0, fixtures_1.test)("create form works with submitUrl", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createFormItemDriver, createTextBoxDriver, }) {
|
|
1627
|
-
yield initTestBed(`
|
|
1628
|
-
<Form submitUrl="/entities">
|
|
1629
|
-
<FormItem bindTo="name" testId="nameInput"/>
|
|
1630
|
-
</Form>
|
|
1631
|
-
`, { apiInterceptor: smartCrudInterceptor });
|
|
1632
|
-
const formDriver = yield createFormDriver();
|
|
1633
|
-
const inputElement = (yield createFormItemDriver("nameInput")).input;
|
|
1634
|
-
const fieldDriver = yield createTextBoxDriver(inputElement);
|
|
1635
|
-
yield fieldDriver.field.fill("John");
|
|
1636
|
-
yield formDriver.submitForm("click");
|
|
1637
|
-
const response = yield formDriver.getSubmitResponse();
|
|
1638
|
-
(0, fixtures_1.expect)(yield response.json()).toEqual({
|
|
1639
|
-
name: "John",
|
|
1640
|
-
id: 11,
|
|
1641
|
-
});
|
|
1642
|
-
}));
|
|
1643
|
-
(0, fixtures_1.test)("regression: data url through modal context", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createButtonDriver, createFormDriver, createFormItemDriver, createTextBoxDriver, }) {
|
|
1644
|
-
yield initTestBed(`
|
|
1645
|
-
<Fragment>
|
|
1646
|
-
<Button testId="openModalButton" onClick="modal.open({data: '/entities/10'})"/>
|
|
1647
|
-
<ModalDialog id="modal">
|
|
1648
|
-
<Form testId="modalForm" data="{$param.data}" submitUrl="{$param.submitUrl}">
|
|
1649
|
-
<FormItem bindTo="name" testId="nameInput"/>
|
|
1650
|
-
</Form>
|
|
1651
|
-
</ModalDialog>
|
|
1652
|
-
</Fragment>
|
|
1653
|
-
`, {
|
|
1654
|
-
apiInterceptor: smartCrudInterceptor,
|
|
1655
|
-
});
|
|
1656
|
-
const formDriver = yield createFormDriver("modalForm");
|
|
1657
|
-
const inputElement = (yield createFormItemDriver("nameInput")).input;
|
|
1658
|
-
const inputDriver = yield createTextBoxDriver(inputElement);
|
|
1659
|
-
yield (yield createButtonDriver("openModalButton")).click();
|
|
1660
|
-
yield (0, fixtures_1.expect)(inputDriver.field).toHaveValue("Smith");
|
|
1661
|
-
yield inputDriver.field.fill("EDITED-Smith");
|
|
1662
|
-
yield formDriver.submitForm("click");
|
|
1663
|
-
const response = yield formDriver.getSubmitResponse();
|
|
1664
|
-
(0, fixtures_1.expect)(yield response.json()).toEqual({
|
|
1665
|
-
name: "EDITED-Smith",
|
|
1666
|
-
id: 10,
|
|
1667
|
-
});
|
|
1668
|
-
}));
|
|
1669
|
-
// --- Conditional Rendering Cases
|
|
1670
|
-
(0, fixtures_1.test)("can submit with invisible required field", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormDriver, createFormItemDriver, createTextBoxDriver, page, }) {
|
|
1671
|
-
const { testStateDriver } = yield initTestBed(`
|
|
1672
|
-
<Form onSubmit="testState = true">
|
|
1673
|
-
<FormItem testId="select" bindTo="authenticationType"
|
|
1674
|
-
type="select" label="Authentication Type:" initialValue="{0}">
|
|
1675
|
-
<Option value="{0}" label="Password" />
|
|
1676
|
-
<Option value="{1}" label="Public Key" />
|
|
1677
|
-
</FormItem>
|
|
1678
|
-
<FormItem label="name1" testId="name1" bindTo="name1"
|
|
1679
|
-
required="true" when="{$data.authenticationType == 0}"/>
|
|
1680
|
-
<FormItem label="name2" testId="name2" bindTo="name2"
|
|
1681
|
-
required="true" when="{$data.authenticationType == 1}"/>
|
|
1682
|
-
</Form>
|
|
1683
|
-
`);
|
|
1684
|
-
const formDriver = yield createFormDriver();
|
|
1685
|
-
const selectDriver = yield createFormItemDriver("select");
|
|
1686
|
-
const textfieldElement = (yield createFormItemDriver("name2")).input;
|
|
1687
|
-
const textfieldDriver = yield createTextBoxDriver(textfieldElement);
|
|
1688
|
-
yield selectDriver.component.click();
|
|
1689
|
-
yield page.getByText("Public Key").click();
|
|
1690
|
-
yield textfieldDriver.field.fill("John");
|
|
1691
|
-
yield formDriver.submitForm();
|
|
1692
|
-
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual(true);
|
|
1693
|
-
}));
|
|
1694
|
-
(0, fixtures_1.test)("conditional fields keep the state", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createFormItemDriver, createOptionDriver, createTextBoxDriver, }) {
|
|
1695
|
-
yield initTestBed(`
|
|
1696
|
-
<Form>
|
|
1697
|
-
<FormItem testId="select" bindTo="authenticationType"
|
|
1698
|
-
type="radioGroup" label="Authentication Type:" initialValue="{0}">
|
|
1699
|
-
<Option value="{0}" label="Password" testId="password"/>
|
|
1700
|
-
<Option value="{1}" label="Public Key" testId="publicKey" />
|
|
1701
|
-
</FormItem>
|
|
1702
|
-
<FormItem label="name1" testId="name1" bindTo="name1"
|
|
1703
|
-
required="true" when="{$data.authenticationType == 0}"/>
|
|
1704
|
-
<FormItem label="name2" testId="name2" bindTo="name2"
|
|
1705
|
-
required="true" when="{$data.authenticationType == 1}"/>
|
|
1706
|
-
</Form>
|
|
1707
|
-
`);
|
|
1708
|
-
const option1Driver = yield createFormItemDriver("password");
|
|
1709
|
-
const option2Driver = yield createOptionDriver("publicKey");
|
|
1710
|
-
const textfield1Element = (yield createFormItemDriver("name1")).input;
|
|
1711
|
-
const textfield1Driver = yield createTextBoxDriver(textfield1Element);
|
|
1712
|
-
const textfield2Element = (yield createFormItemDriver("name2")).input;
|
|
1713
|
-
const textfield2Driver = yield createTextBoxDriver(textfield2Element);
|
|
1714
|
-
yield textfield1Driver.field.fill("name1");
|
|
1715
|
-
yield option2Driver.click();
|
|
1716
|
-
yield textfield2Driver.field.fill("name2");
|
|
1717
|
-
yield option1Driver.click();
|
|
1718
|
-
yield (0, fixtures_1.expect)(textfield1Driver.field).toHaveValue("name1");
|
|
1719
|
-
}));
|