xmlui 0.10.12 → 0.10.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/lib/{index-CDOoBf2R.mjs → index-779mp2Bm.mjs} +1508 -1287
  2. package/dist/lib/index.css +1 -1
  3. package/dist/lib/{initMock-BAV9RKui.mjs → initMock-CAXdczCj.mjs} +1 -1
  4. package/dist/lib/scss/components-core/theming/_themes.scss +1 -1
  5. package/dist/lib/xmlui.d.ts +17 -2
  6. package/dist/lib/xmlui.mjs +33 -32
  7. package/dist/metadata/{collectedComponentMetadata-Dp8BqWQO.mjs → collectedComponentMetadata-7DFXlw-J.mjs} +14957 -14751
  8. package/dist/metadata/{initMock-BvEO8W8r.mjs → initMock-AFWEftc6.mjs} +1 -1
  9. package/dist/metadata/style.css +1 -1
  10. package/dist/metadata/xmlui-metadata.mjs +1 -1
  11. package/dist/metadata/xmlui-metadata.umd.js +3 -3
  12. package/dist/scripts/bin/build-lib.js +21 -13
  13. package/dist/scripts/bin/viteConfig.js +3 -1
  14. package/dist/scripts/package.json +1 -1
  15. package/dist/scripts/src/abstractions/scripting/Token.js +2 -0
  16. package/dist/scripts/src/abstractions/scripting/TryScope.js +2 -0
  17. package/dist/scripts/src/abstractions/scripting/modules.js +2 -0
  18. package/dist/scripts/src/components/APICall/APICall.spec.js +910 -0
  19. package/dist/scripts/src/components/Accordion/Accordion.spec.js +969 -0
  20. package/dist/scripts/src/components/Animation/Animation.js +50 -0
  21. package/dist/scripts/src/components/App/App.spec.js +219 -0
  22. package/dist/scripts/src/components/AppHeader/AppHeader.spec.js +169 -0
  23. package/dist/scripts/src/components/AppState/AppState.spec.js +268 -0
  24. package/dist/scripts/src/components/AutoComplete/AutoComplete.spec.js +383 -0
  25. package/dist/scripts/src/components/Avatar/Avatar.spec.js +1543 -0
  26. package/dist/scripts/src/components/Backdrop/Backdrop.spec.js +131 -0
  27. package/dist/scripts/src/components/Badge/Badge.spec.js +2214 -0
  28. package/dist/scripts/src/components/Bookmark/Bookmark.spec.js +230 -0
  29. package/dist/scripts/src/components/Breakout/Breakout.spec.js +56 -0
  30. package/dist/scripts/src/components/Button/Button-style.spec.js +274 -0
  31. package/dist/scripts/src/components/Button/Button.spec.js +454 -0
  32. package/dist/scripts/src/components/Card/Card.spec.js +150 -0
  33. package/dist/scripts/src/components/Carousel/Carousel.spec.js +343 -0
  34. package/dist/scripts/src/components/Carousel/CarouselNative.js +2 -2
  35. package/dist/scripts/src/components/ChangeListener/ChangeListener.spec.js +169 -0
  36. package/dist/scripts/src/components/Charts/AreaChart/AreaChart.spec.js +999 -0
  37. package/dist/scripts/src/components/Charts/BarChart/BarChart.spec.js +597 -0
  38. package/dist/scripts/src/components/Charts/DonutChart/DonutChart.spec.js +608 -0
  39. package/dist/scripts/src/components/Charts/LabelList/LabelList.spec.js +539 -0
  40. package/dist/scripts/src/components/Charts/Legend/Legend.spec.js +558 -0
  41. package/dist/scripts/src/components/Charts/LineChart/LineChart.spec.js +450 -0
  42. package/dist/scripts/src/components/Charts/PieChart/PieChart.spec.js +584 -0
  43. package/dist/scripts/src/components/Charts/RadarChart/RadarChart.spec.js +571 -0
  44. package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.spec.js +449 -0
  45. package/dist/scripts/src/components/Checkbox/Checkbox.spec.js +964 -0
  46. package/dist/scripts/src/components/CodeBlock/CodeBlock.spec.js +196 -0
  47. package/dist/scripts/src/components/ColorPicker/ColorPicker.js +3 -3
  48. package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +283 -0
  49. package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +16 -5
  50. package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +53 -0
  51. package/dist/scripts/src/components/ComponentProvider.js +6 -6
  52. package/dist/scripts/src/components/ContentSeparator/ContentSeparator.spec.js +338 -0
  53. package/dist/scripts/src/components/DateInput/DateInput.spec.js +918 -0
  54. package/dist/scripts/src/components/DatePicker/DatePicker.spec.js +362 -0
  55. package/dist/scripts/src/components/DatePicker/DatePickerNative.js +3 -3
  56. package/dist/scripts/src/components/DropdownMenu/DropdownMenu.spec.js +331 -0
  57. package/dist/scripts/src/components/DropdownMenu/DropdownMenuNative.js +1 -1
  58. package/dist/scripts/src/components/EmojiSelector/EmojiSelector.spec.js +29 -0
  59. package/dist/scripts/src/components/ExpandableItem/ExpandableItem.spec.js +435 -0
  60. package/dist/scripts/src/components/FileInput/FileInput.spec.js +249 -0
  61. package/dist/scripts/src/components/FileInput/FileInputNative.js +14 -10
  62. package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +296 -0
  63. package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZoneNative.js +1 -1
  64. package/dist/scripts/src/components/FlowLayout/FlowLayout.spec.js +518 -0
  65. package/dist/scripts/src/components/Footer/Footer.spec.js +991 -0
  66. package/dist/scripts/src/components/Form/Form.js +6 -0
  67. package/dist/scripts/src/components/Form/Form.spec.js +1257 -0
  68. package/dist/scripts/src/components/Form/FormNative.js +13 -3
  69. package/dist/scripts/src/components/FormItem/FormItem.spec.js +723 -0
  70. package/dist/scripts/src/components/FormItem/ItemWithLabel.js +2 -2
  71. package/dist/scripts/src/components/FormSection/FormSection.js +6 -31
  72. package/dist/scripts/src/components/Fragment/Fragment.js +5 -1
  73. package/dist/scripts/src/components/Fragment/Fragment.spec.js +50 -0
  74. package/dist/scripts/src/components/Heading/H1.spec.js +66 -0
  75. package/dist/scripts/src/components/Heading/H2.spec.js +66 -0
  76. package/dist/scripts/src/components/Heading/H3.spec.js +66 -0
  77. package/dist/scripts/src/components/Heading/H4.spec.js +66 -0
  78. package/dist/scripts/src/components/Heading/H5.spec.js +66 -0
  79. package/dist/scripts/src/components/Heading/H6.spec.js +66 -0
  80. package/dist/scripts/src/components/Heading/Heading.js +0 -12
  81. package/dist/scripts/src/components/Heading/Heading.spec.js +897 -0
  82. package/dist/scripts/src/components/HtmlTags/HtmlTags.spec.js +69 -0
  83. package/dist/scripts/src/components/IFrame/IFrame.spec.js +527 -0
  84. package/dist/scripts/src/components/Icon/ArrowDropDown.js +11 -0
  85. package/dist/scripts/src/components/Icon/ArrowDropUp.js +11 -0
  86. package/dist/scripts/src/components/Icon/ArrowLeft.js +11 -0
  87. package/dist/scripts/src/components/Icon/ArrowRight.js +11 -0
  88. package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
  89. package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
  90. package/dist/scripts/src/components/Icon/Icon.spec.js +527 -0
  91. package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
  92. package/dist/scripts/src/components/Image/Image.js +2 -1
  93. package/dist/scripts/src/components/Image/Image.spec.js +198 -0
  94. package/dist/scripts/src/components/Image/ImageNative.js +30 -2
  95. package/dist/scripts/src/components/Input/InputLabel.js +25 -0
  96. package/dist/scripts/src/components/Input/index.js +5 -0
  97. package/dist/scripts/src/components/Items/Items.spec.js +397 -0
  98. package/dist/scripts/src/components/Link/Link.spec.js +894 -0
  99. package/dist/scripts/src/components/List/List.spec.js +927 -0
  100. package/dist/scripts/src/components/List/doc-resources/list-component-data.js +53 -0
  101. package/dist/scripts/src/components/Markdown/Markdown.spec.js +188 -0
  102. package/dist/scripts/src/components/ModalDialog/ModalDialog.js +1 -1
  103. package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +162 -0
  104. package/dist/scripts/src/components/ModalDialog/ModalDialogNative.js +1 -1
  105. package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +153 -0
  106. package/dist/scripts/src/components/NavGroup/NavGroupNative.js +2 -2
  107. package/dist/scripts/src/components/NavLink/NavLink.spec.js +864 -0
  108. package/dist/scripts/src/components/NavPanel/NavPanel.spec.js +864 -0
  109. package/dist/scripts/src/components/NoResult/NoResult.spec.js +863 -0
  110. package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +1231 -0
  111. package/dist/scripts/src/components/Option/Option.spec.js +472 -0
  112. package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.spec.js +80 -0
  113. package/dist/scripts/src/components/Pagination/Pagination.spec.js +1003 -0
  114. package/dist/scripts/src/components/ProfileMenu/ProfileMenu.js +20 -0
  115. package/dist/scripts/src/components/ProgressBar/ProgressBar.spec.js +166 -0
  116. package/dist/scripts/src/components/Queue/Queue.spec.js +626 -0
  117. package/dist/scripts/src/components/RadioGroup/RadioGroup.spec.js +479 -0
  118. package/dist/scripts/src/components/RadioGroup/RadioGroupNative.js +17 -1
  119. package/dist/scripts/src/components/Redirect/Redirect.spec.js +527 -0
  120. package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.spec.js +76 -0
  121. package/dist/scripts/src/components/Select/Select.spec.js +527 -0
  122. package/dist/scripts/src/components/Slider/Slider.js +2 -0
  123. package/dist/scripts/src/components/Slider/Slider.spec.js +574 -0
  124. package/dist/scripts/src/components/Slider/SliderNative.js +62 -25
  125. package/dist/scripts/src/components/Slot/Slot.spec.js +368 -0
  126. package/dist/scripts/src/components/SpaceFiller/SpaceFiller.spec.js +184 -0
  127. package/dist/scripts/src/components/Spinner/Spinner.spec.js +161 -0
  128. package/dist/scripts/src/components/Splitter/HSplitter.spec.js +104 -0
  129. package/dist/scripts/src/components/Splitter/Splitter.spec.js +543 -0
  130. package/dist/scripts/src/components/Splitter/VSplitter.spec.js +104 -0
  131. package/dist/scripts/src/components/Stack/CHStack.spec.js +86 -0
  132. package/dist/scripts/src/components/Stack/CVStack.spec.js +86 -0
  133. package/dist/scripts/src/components/Stack/HStack.spec.js +67 -0
  134. package/dist/scripts/src/components/Stack/Stack.spec.js +654 -0
  135. package/dist/scripts/src/components/Stack/VStack.spec.js +67 -0
  136. package/dist/scripts/src/components/Switch/Switch.spec.js +829 -0
  137. package/dist/scripts/src/components/Table/Table.js +8 -5
  138. package/dist/scripts/src/components/Table/Table.spec.js +555 -0
  139. package/dist/scripts/src/components/Table/TableNative.js +1 -1
  140. package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +53 -0
  141. package/dist/scripts/src/components/TableOfContents/TableOfContents.spec.js +838 -0
  142. package/dist/scripts/src/components/Tabs/Tabs.spec.js +875 -0
  143. package/dist/scripts/src/components/Text/Text.js +0 -13
  144. package/dist/scripts/src/components/Text/Text.spec.js +1075 -0
  145. package/dist/scripts/src/components/TextArea/TextArea.spec.js +714 -0
  146. package/dist/scripts/src/components/TextArea/TextAreaNative.js +8 -1
  147. package/dist/scripts/src/components/TextBox/TextBox.spec.js +643 -0
  148. package/dist/scripts/src/components/Theme/NotificationToast.js +4 -1
  149. package/dist/scripts/src/components/Theme/Theme.spec.js +124 -0
  150. package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +1122 -0
  151. package/dist/scripts/src/components/Timer/Timer.spec.js +358 -0
  152. package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.spec.js +414 -0
  153. package/dist/scripts/src/components/ToneSwitch/ToneSwitch.spec.js +89 -0
  154. package/dist/scripts/src/components/Tooltip/Tooltip.spec.js +418 -0
  155. package/dist/scripts/src/components/chart-color-schemes.js +43 -0
  156. package/dist/scripts/src/components-core/CompoundComponent.js +5 -5
  157. package/dist/scripts/src/components-core/RestApiProxy.js +89 -11
  158. package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +8 -0
  159. package/dist/scripts/src/components-core/renderers.js +31 -0
  160. package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +1 -1
  161. package/dist/scripts/src/components-core/rendering/Container.js +19 -8
  162. package/dist/scripts/src/components-core/rendering/reducer.js +1 -1
  163. package/dist/scripts/src/components-core/script-runner/simplify-expression.js +386 -0
  164. package/dist/scripts/src/components-core/theming/component-layout-resolver.js +153 -0
  165. package/dist/scripts/src/components-core/theming/parse-layout-props.js +98 -0
  166. package/dist/scripts/src/components-core/theming/themes/root.js +13 -20
  167. package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
  168. package/dist/scripts/src/components-core/utils/audio-utils.js +83 -0
  169. package/dist/scripts/src/index-standalone.js +61 -0
  170. package/dist/scripts/src/index.js +2 -1
  171. package/dist/scripts/src/language-server/server-common.js +151 -0
  172. package/dist/scripts/src/language-server/server-web-worker.js +47 -0
  173. package/dist/scripts/src/language-server/server.js +42 -0
  174. package/dist/scripts/src/language-server/services/common/docs-generation.js +73 -0
  175. package/dist/scripts/src/language-server/services/common/lsp-utils.js +9 -0
  176. package/dist/scripts/src/language-server/services/common/syntax-node-utilities.js +135 -0
  177. package/dist/scripts/src/language-server/services/completion.js +270 -0
  178. package/dist/scripts/src/language-server/services/diagnostic.js +19 -0
  179. package/dist/scripts/src/language-server/services/format.js +430 -0
  180. package/dist/scripts/src/language-server/services/hover.js +164 -0
  181. package/dist/scripts/src/language-server/xmlui-metadata-generated.mjs +16266 -0
  182. package/dist/scripts/src/logging/xmlui.js +21 -0
  183. package/dist/scripts/src/parsers/common/utils.js +19 -0
  184. package/dist/scripts/src/syntax/monaco/grammar.monacoLanguage.js +286 -0
  185. package/dist/scripts/src/syntax/monaco/index.js +14 -0
  186. package/dist/scripts/src/syntax/monaco/xmlui-dark.js +25 -0
  187. package/dist/scripts/src/syntax/monaco/xmlui-light.js +25 -0
  188. package/dist/scripts/src/syntax/monaco/xmluiscript.monacoLanguage.js +310 -0
  189. package/dist/scripts/src/syntax/textMate/index.js +14 -0
  190. package/dist/scripts/src/syntax/textMate/xmlui-dark.json +631 -0
  191. package/dist/scripts/src/syntax/textMate/xmlui-light.json +565 -0
  192. package/dist/scripts/src/syntax/textMate/xmlui.json +564 -0
  193. package/dist/scripts/src/syntax/textMate/xmlui.tmLanguage.json +341 -0
  194. package/dist/scripts/src/testing/ComponentDrivers.js +1355 -0
  195. package/dist/scripts/src/testing/assertions.js +444 -0
  196. package/dist/scripts/src/testing/component-test-helpers.js +389 -0
  197. package/dist/scripts/src/testing/drivers/DateInputDriver.js +19 -0
  198. package/dist/scripts/src/testing/drivers/ModalDialogDriver.js +10 -0
  199. package/dist/scripts/src/testing/drivers/TimeInputDriver.js +22 -0
  200. package/dist/scripts/src/testing/drivers/TimerDriver.js +64 -0
  201. package/dist/scripts/src/testing/fixtures.js +487 -0
  202. package/dist/scripts/src/testing/infrastructure/TestBed.js +17 -0
  203. package/dist/scripts/src/testing/infrastructure/main.js +9 -0
  204. package/dist/scripts/src/testing/infrastructure/public/mockServiceWorker.js +266 -0
  205. package/dist/scripts/src/testing/themed-app-test-helpers.js +139 -0
  206. package/dist/standalone/xmlui-standalone.es.d.ts +19 -2
  207. package/dist/standalone/xmlui-standalone.umd.js +36 -36
  208. package/package.json +1 -1
  209. package/dist/scripts/src/components/RadioGroup/RadioItem.js +0 -28
@@ -0,0 +1,918 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const fixtures_1 = require("../../testing/fixtures");
13
+ // =============================================================================
14
+ // BASIC FUNCTIONALITY TESTS
15
+ // =============================================================================
16
+ fixtures_1.test.describe("Basic Functionality", () => {
17
+ (0, fixtures_1.test)("renders with basic props", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
18
+ yield initTestBed(`<DateInput testId="dateInput" />`);
19
+ const driver = yield createDateInputDriver("dateInput");
20
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
21
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeVisible();
22
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeVisible();
23
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeVisible();
24
+ }));
25
+ (0, fixtures_1.test)("renders with initialValue", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
26
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="05/25/2024" />`);
27
+ const driver = yield createDateInputDriver("dateInput");
28
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
29
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
30
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
31
+ }));
32
+ (0, fixtures_1.test)("renders in disabled state when enabled is false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
33
+ yield initTestBed(`<DateInput testId="dateInput" enabled="false" />`);
34
+ const driver = yield createDateInputDriver("dateInput");
35
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeDisabled();
36
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeDisabled();
37
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeDisabled();
38
+ }));
39
+ (0, fixtures_1.test)("shows clear button when clearable is true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
40
+ yield initTestBed(`<DateInput testId="dateInput" clearable="true" initialValue="05/25/2024" />`);
41
+ const driver = yield createDateInputDriver("dateInput");
42
+ yield (0, fixtures_1.expect)(driver.clearButton).toBeVisible();
43
+ }));
44
+ (0, fixtures_1.test)("hides clear button when clearable is false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
45
+ yield initTestBed(`<DateInput testId="dateInput" clearable="false" initialValue="05/25/2024" />`);
46
+ const driver = yield createDateInputDriver("dateInput");
47
+ yield (0, fixtures_1.expect)(driver.clearButton).not.toBeVisible();
48
+ }));
49
+ (0, fixtures_1.test)("renders with required attribute", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
50
+ yield initTestBed(`<DateInput testId="dateInput" required="true" />`);
51
+ const driver = yield createDateInputDriver("dateInput");
52
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("required", "");
53
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("required", "");
54
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("required", "");
55
+ }));
56
+ });
57
+ fixtures_1.test.describe("dateFormat property", () => {
58
+ (0, fixtures_1.test)("renders MM/dd/yyyy format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
59
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM/dd/yyyy" initialValue="05/25/2024" />`);
60
+ const driver = yield createDateInputDriver("dateInput");
61
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
62
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
63
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
64
+ }));
65
+ (0, fixtures_1.test)("renders yyyy-MM-dd format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
66
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="yyyy-MM-dd" initialValue="2024-05-25" />`);
67
+ const driver = yield createDateInputDriver("dateInput");
68
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
69
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
70
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
71
+ }));
72
+ (0, fixtures_1.test)("renders dd/MM/yyyy format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
73
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="dd/MM/yyyy" initialValue="25/05/2024" />`);
74
+ const driver = yield createDateInputDriver("dateInput");
75
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
76
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
77
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
78
+ }));
79
+ (0, fixtures_1.test)("renders yyyyMMdd compact format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
80
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="yyyyMMdd" initialValue="20240525" />`);
81
+ const driver = yield createDateInputDriver("dateInput");
82
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
83
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
84
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
85
+ }));
86
+ (0, fixtures_1.test)("renders MMddyyyy compact format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
87
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MMddyyyy" initialValue="05252024" />`);
88
+ const driver = yield createDateInputDriver("dateInput");
89
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
90
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
91
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
92
+ }));
93
+ (0, fixtures_1.test)("renders MM-dd-yyyy format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
94
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM-dd-yyyy" initialValue="05-25-2024" />`);
95
+ const driver = yield createDateInputDriver("dateInput");
96
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
97
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
98
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
99
+ }));
100
+ (0, fixtures_1.test)("renders dd-MM-yyyy format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
101
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="dd-MM-yyyy" initialValue="25-05-2024" />`);
102
+ const driver = yield createDateInputDriver("dateInput");
103
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
104
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
105
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
106
+ }));
107
+ (0, fixtures_1.test)("renders yyyy/MM/dd format correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
108
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="yyyy/MM/dd" initialValue="2024/05/25" />`);
109
+ const driver = yield createDateInputDriver("dateInput");
110
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
111
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
112
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
113
+ }));
114
+ });
115
+ // =============================================================================
116
+ // INITIAL VALUE PROPERTY TESTS
117
+ // =============================================================================
118
+ fixtures_1.test.describe("initialValue property", () => {
119
+ (0, fixtures_1.test)("parses valid date in default format", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
120
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="05/25/2024" />`);
121
+ const driver = yield createDateInputDriver("dateInput");
122
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
123
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
124
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
125
+ }));
126
+ (0, fixtures_1.test)("falls back to ISO date parsing when format parsing fails", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
127
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM/dd/yyyy" initialValue="2023-08-30" />`);
128
+ const driver = yield createDateInputDriver("dateInput");
129
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("08");
130
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("30");
131
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2023");
132
+ }));
133
+ (0, fixtures_1.test)("falls back to ISO date parsing with different dateFormat", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
134
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="dd-MM-yyyy" initialValue="2023-12-25" />`);
135
+ const driver = yield createDateInputDriver("dateInput");
136
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
137
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("12");
138
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2023");
139
+ }));
140
+ (0, fixtures_1.test)("handles various ISO date formats as fallback", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
141
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM/dd/yyyy" initialValue="2024-02-29T10:30:00Z" />`);
142
+ const driver = yield createDateInputDriver("dateInput");
143
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("02");
144
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("29");
145
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
146
+ }));
147
+ (0, fixtures_1.test)("handles leap year dates correctly via ISO fallback", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
148
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="yyyyMMdd" initialValue="2024-02-29" />`);
149
+ const driver = yield createDateInputDriver("dateInput");
150
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
151
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("02");
152
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("29");
153
+ }));
154
+ (0, fixtures_1.test)("handles null initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
155
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{null}" />`);
156
+ const driver = yield createDateInputDriver("dateInput");
157
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
158
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
159
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
160
+ }));
161
+ (0, fixtures_1.test)("handles undefined initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
162
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{undefined}" />`);
163
+ const driver = yield createDateInputDriver("dateInput");
164
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
165
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
166
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
167
+ }));
168
+ (0, fixtures_1.test)("handles empty string initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
169
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="" />`);
170
+ const driver = yield createDateInputDriver("dateInput");
171
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
172
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
173
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
174
+ }));
175
+ (0, fixtures_1.test)("handles invalid date string gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
176
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="invalid-date-string" />`);
177
+ const driver = yield createDateInputDriver("dateInput");
178
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
179
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
180
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
181
+ }));
182
+ (0, fixtures_1.test)("handles numeric initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
183
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{123456789}" />`);
184
+ const driver = yield createDateInputDriver("dateInput");
185
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
186
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
187
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
188
+ }));
189
+ (0, fixtures_1.test)("handles object initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
190
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{{}}" />`);
191
+ const driver = yield createDateInputDriver("dateInput");
192
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
193
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
194
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
195
+ }));
196
+ (0, fixtures_1.test)("handles boolean initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
197
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{true}" />`);
198
+ const driver = yield createDateInputDriver("dateInput");
199
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
200
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
201
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
202
+ }));
203
+ (0, fixtures_1.test)("handles false boolean initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
204
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{false}" />`);
205
+ const driver = yield createDateInputDriver("dateInput");
206
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
207
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
208
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
209
+ }));
210
+ (0, fixtures_1.test)("handles array initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
211
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{[1, 2, 3]}" />`);
212
+ const driver = yield createDateInputDriver("dateInput");
213
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
214
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
215
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
216
+ }));
217
+ (0, fixtures_1.test)("handles function initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
218
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{() => '2024-01-01'}" />`);
219
+ const driver = yield createDateInputDriver("dateInput");
220
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
221
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
222
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
223
+ }));
224
+ (0, fixtures_1.test)("handles zero numeric initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
225
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{0}" />`);
226
+ const driver = yield createDateInputDriver("dateInput");
227
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
228
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
229
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
230
+ }));
231
+ (0, fixtures_1.test)("handles negative numeric initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
232
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{-123}" />`);
233
+ const driver = yield createDateInputDriver("dateInput");
234
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
235
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
236
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
237
+ }));
238
+ (0, fixtures_1.test)("handles float numeric initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
239
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{123.456}" />`);
240
+ const driver = yield createDateInputDriver("dateInput");
241
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
242
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
243
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
244
+ }));
245
+ (0, fixtures_1.test)("handles NaN initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
246
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{NaN}" />`);
247
+ const driver = yield createDateInputDriver("dateInput");
248
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
249
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
250
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
251
+ }));
252
+ (0, fixtures_1.test)("handles Infinity initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
253
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{Infinity}" />`);
254
+ const driver = yield createDateInputDriver("dateInput");
255
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
256
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
257
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
258
+ }));
259
+ (0, fixtures_1.test)("handles Date object initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
260
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{Date.now()}" />`);
261
+ const driver = yield createDateInputDriver("dateInput");
262
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
263
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
264
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
265
+ }));
266
+ (0, fixtures_1.test)("handles complex object initialValue gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
267
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{{year: 2024, month: 5, day: 25}}" />`);
268
+ const driver = yield createDateInputDriver("dateInput");
269
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
270
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
271
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
272
+ }));
273
+ (0, fixtures_1.test)("prioritizes format-specific parsing over ISO fallback", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
274
+ // This date could potentially be parsed as ISO, but should use format-specific parsing first
275
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="yyyy-MM-dd" initialValue="2023-08-30" />`);
276
+ const driver = yield createDateInputDriver("dateInput");
277
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2023");
278
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("08");
279
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("30");
280
+ }));
281
+ });
282
+ fixtures_1.test.describe("validationStatus property", () => {
283
+ (0, fixtures_1.test)("applies valid status styling", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
284
+ yield initTestBed(`<DateInput testId="dateInput" validationStatus="valid" initialValue="05/25/2024" />`);
285
+ const driver = yield createDateInputDriver("dateInput");
286
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
287
+ // Note: validation status may be applied via CSS classes rather than data attributes
288
+ }));
289
+ (0, fixtures_1.test)("applies warning status styling", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
290
+ yield initTestBed(`<DateInput testId="dateInput" validationStatus="warning" initialValue="05/25/2024" />`);
291
+ const driver = yield createDateInputDriver("dateInput");
292
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
293
+ }));
294
+ (0, fixtures_1.test)("applies error status styling", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
295
+ yield initTestBed(`<DateInput testId="dateInput" validationStatus="error" initialValue="05/25/2024" />`);
296
+ const driver = yield createDateInputDriver("dateInput");
297
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
298
+ }));
299
+ });
300
+ fixtures_1.test.describe("autoFocus property", () => {
301
+ (0, fixtures_1.test)("focuses component when autoFocus is true", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
302
+ yield initTestBed(`<DateInput testId="dateInput" autoFocus="true" />`);
303
+ const driver = yield createDateInputDriver("dateInput");
304
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeFocused();
305
+ }));
306
+ (0, fixtures_1.test)("does not focus when autoFocus is false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
307
+ yield initTestBed(`<DateInput testId="dateInput" autoFocus="false" />`);
308
+ const driver = yield createDateInputDriver("dateInput");
309
+ yield (0, fixtures_1.expect)(driver.dayInput).not.toBeFocused();
310
+ yield (0, fixtures_1.expect)(driver.monthInput).not.toBeFocused();
311
+ yield (0, fixtures_1.expect)(driver.yearInput).not.toBeFocused();
312
+ }));
313
+ });
314
+ fixtures_1.test.describe("emptyCharacter property", () => {
315
+ (0, fixtures_1.test)("uses default '--' placeholder when no emptyCharacter is specified", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
316
+ yield initTestBed(`<DateInput testId="dateInput" />`);
317
+ const driver = yield createDateInputDriver("dateInput");
318
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "--");
319
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "--");
320
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "----");
321
+ }));
322
+ (0, fixtures_1.test)("uses custom emptyCharacter for placeholders", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
323
+ yield initTestBed(`<DateInput testId="dateInput" emptyCharacter="*" />`);
324
+ const driver = yield createDateInputDriver("dateInput");
325
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "**");
326
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "**");
327
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "****");
328
+ }));
329
+ (0, fixtures_1.test)("uses first character when emptyCharacter is multi-character", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
330
+ yield initTestBed(`<DateInput testId="dateInput" emptyCharacter="abc" />`);
331
+ const driver = yield createDateInputDriver("dateInput");
332
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "aa");
333
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "aa");
334
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "aaaa");
335
+ }));
336
+ (0, fixtures_1.test)("defaults to dash when emptyCharacter is empty string", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
337
+ yield initTestBed(`<DateInput testId="dateInput" emptyCharacter="" />`);
338
+ const driver = yield createDateInputDriver("dateInput");
339
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "--");
340
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "--");
341
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "----");
342
+ }));
343
+ (0, fixtures_1.test)("handles null emptyCharacter", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
344
+ yield initTestBed(`<DateInput testId="dateInput" emptyCharacter="{null}" />`);
345
+ const driver = yield createDateInputDriver("dateInput");
346
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "--");
347
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "--");
348
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "----");
349
+ }));
350
+ (0, fixtures_1.test)("handles undefined emptyCharacter", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
351
+ yield initTestBed(`<DateInput testId="dateInput" emptyCharacter="{undefined}" />`);
352
+ const driver = yield createDateInputDriver("dateInput");
353
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "--");
354
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "--");
355
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "----");
356
+ }));
357
+ (0, fixtures_1.test)("works with special characters", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
358
+ yield initTestBed(`<DateInput testId="dateInput" emptyCharacter="@" />`);
359
+ const driver = yield createDateInputDriver("dateInput");
360
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "@@");
361
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "@@");
362
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "@@@@");
363
+ }));
364
+ (0, fixtures_1.test)("works with unicode characters", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
365
+ yield initTestBed(`<DateInput testId="dateInput" emptyCharacter="📅" />`);
366
+ const driver = yield createDateInputDriver("dateInput");
367
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("placeholder", "📅📅");
368
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("placeholder", "📅📅");
369
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("placeholder", "📅📅📅📅");
370
+ }));
371
+ });
372
+ fixtures_1.test.describe("mode property", () => {
373
+ (0, fixtures_1.test)("renders in single date mode by default", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
374
+ yield initTestBed(`<DateInput testId="dateInput" />`);
375
+ const driver = yield createDateInputDriver("dateInput");
376
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
377
+ // Single mode should show one set of date inputs
378
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeVisible();
379
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeVisible();
380
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeVisible();
381
+ }));
382
+ (0, fixtures_1.test)("renders in single date mode when explicitly set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
383
+ yield initTestBed(`<DateInput testId="dateInput" mode="single" />`);
384
+ const driver = yield createDateInputDriver("dateInput");
385
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
386
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeVisible();
387
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeVisible();
388
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeVisible();
389
+ }));
390
+ (0, fixtures_1.test)("renders in range mode when set to range", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
391
+ yield initTestBed(`<DateInput testId="dateInput" mode="range" />`);
392
+ const driver = yield createDateInputDriver("dateInput");
393
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
394
+ // Range mode should show date inputs for start and end dates
395
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeVisible();
396
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeVisible();
397
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeVisible();
398
+ }));
399
+ });
400
+ fixtures_1.test.describe("minValue and maxValue properties", () => {
401
+ (0, fixtures_1.test)("accepts valid date within range", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
402
+ yield initTestBed(`<DateInput testId="dateInput" minValue="2024-01-01" maxValue="2024-12-31" initialValue="05/25/2024" />`);
403
+ const driver = yield createDateInputDriver("dateInput");
404
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
405
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
406
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
407
+ }));
408
+ (0, fixtures_1.test)("works with only minValue set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
409
+ yield initTestBed(`<DateInput testId="dateInput" minValue="2024-01-01" initialValue="05/25/2024" />`);
410
+ const driver = yield createDateInputDriver("dateInput");
411
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
412
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
413
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
414
+ }));
415
+ (0, fixtures_1.test)("works with only maxValue set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
416
+ yield initTestBed(`<DateInput testId="dateInput" maxValue="2024-12-31" initialValue="05/25/2024" />`);
417
+ const driver = yield createDateInputDriver("dateInput");
418
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
419
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
420
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
421
+ }));
422
+ });
423
+ fixtures_1.test.describe("clearable properties", () => {
424
+ (0, fixtures_1.test)("shows clear button when clearable is true and has value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
425
+ yield initTestBed(`<DateInput testId="dateInput" clearable="true" initialValue="05/25/2024" />`);
426
+ const driver = yield createDateInputDriver("dateInput");
427
+ yield (0, fixtures_1.expect)(driver.clearButton).toBeVisible();
428
+ }));
429
+ (0, fixtures_1.test)("clear button is not visible when clearable is false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
430
+ yield initTestBed(`<DateInput testId="dateInput" clearable="false" initialValue="05/25/2024" />`);
431
+ const driver = yield createDateInputDriver("dateInput");
432
+ yield (0, fixtures_1.expect)(driver.clearButton).not.toBeVisible();
433
+ }));
434
+ (0, fixtures_1.test)("uses custom clear icon when specified", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
435
+ yield initTestBed(`<DateInput testId="dateInput" clearable="true" clearIcon="close" initialValue="05/25/2024" />`);
436
+ const driver = yield createDateInputDriver("dateInput");
437
+ yield (0, fixtures_1.expect)(driver.clearButton).toBeVisible();
438
+ }));
439
+ (0, fixtures_1.test)("clearToInitialValue controls clear behavior", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
440
+ yield initTestBed(`<DateInput testId="dateInput" clearable="true" clearToInitialValue="true" initialValue="05/25/2024" />`);
441
+ const driver = yield createDateInputDriver("dateInput");
442
+ yield (0, fixtures_1.expect)(driver.clearButton).toBeVisible();
443
+ }));
444
+ });
445
+ fixtures_1.test.describe("startText, startIcon, endText, endIcon properties", () => {
446
+ (0, fixtures_1.test)("renders start text", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
447
+ yield initTestBed(`<DateInput testId="dateInput" startText="From:" />`);
448
+ const driver = yield createDateInputDriver("dateInput");
449
+ yield (0, fixtures_1.expect)(driver.component).toContainText("From:");
450
+ }));
451
+ (0, fixtures_1.test)("renders start icon", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
452
+ yield initTestBed(`<DateInput testId="dateInput" startIcon="trash" />`);
453
+ const driver = yield createDateInputDriver("dateInput");
454
+ yield (0, fixtures_1.expect)(driver.component.getByRole("img")).toBeVisible();
455
+ }));
456
+ (0, fixtures_1.test)("renders end text", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
457
+ yield initTestBed(`<DateInput testId="dateInput" endText="To:" />`);
458
+ const driver = yield createDateInputDriver("dateInput");
459
+ yield (0, fixtures_1.expect)(driver.component).toContainText("To:");
460
+ }));
461
+ (0, fixtures_1.test)("renders end icon", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
462
+ yield initTestBed(`<DateInput testId="dateInput" endIcon="phone" />`);
463
+ const driver = yield createDateInputDriver("dateInput");
464
+ yield (0, fixtures_1.expect)(driver.component.getByRole("img")).toBeVisible();
465
+ }));
466
+ });
467
+ fixtures_1.test.describe("User Interactions", () => {
468
+ (0, fixtures_1.test)("allows typing in day input", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
469
+ yield initTestBed(`<DateInput testId="dateInput" />`);
470
+ const driver = yield createDateInputDriver("dateInput");
471
+ yield driver.dayInput.focus();
472
+ yield driver.dayInput.fill("25");
473
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
474
+ }));
475
+ (0, fixtures_1.test)("allows typing in month input", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
476
+ yield initTestBed(`<DateInput testId="dateInput" />`);
477
+ const driver = yield createDateInputDriver("dateInput");
478
+ yield driver.monthInput.focus();
479
+ yield driver.monthInput.fill("05");
480
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
481
+ }));
482
+ (0, fixtures_1.test)("allows typing in year input", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
483
+ yield initTestBed(`<DateInput testId="dateInput" />`);
484
+ const driver = yield createDateInputDriver("dateInput");
485
+ yield driver.yearInput.focus();
486
+ yield driver.yearInput.fill("2024");
487
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
488
+ }));
489
+ (0, fixtures_1.test)("clears input when clear button is clicked (clearToInitialValue is true)", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
490
+ yield initTestBed(`<DateInput testId="dateInput" clearable="true" initialValue="05/25/2024" />`);
491
+ const driver = yield createDateInputDriver("dateInput");
492
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
493
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
494
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
495
+ driver.dayInput.fill("18");
496
+ yield driver.clearButton.click();
497
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
498
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
499
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
500
+ }));
501
+ (0, fixtures_1.test)("clears input when clear button is clicked (clearToInitialValue is false)", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
502
+ yield initTestBed(`<DateInput testId="dateInput" clearable="true" initialValue="05/25/2024" clearToInitialValue="false" />`);
503
+ const driver = yield createDateInputDriver("dateInput");
504
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
505
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
506
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
507
+ driver.dayInput.fill("18");
508
+ yield driver.clearButton.click();
509
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
510
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
511
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
512
+ }));
513
+ (0, fixtures_1.test)("navigates between inputs with Tab key", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, page, }) {
514
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM/dd/yyyy" />`);
515
+ const driver = yield createDateInputDriver("dateInput");
516
+ yield driver.monthInput.focus();
517
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeFocused();
518
+ yield page.keyboard.press("Tab");
519
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeFocused();
520
+ yield page.keyboard.press("Tab");
521
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeFocused();
522
+ }));
523
+ (0, fixtures_1.test)("navigates between inputs with arrow keys", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, page, }) {
524
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM/dd/yyyy" />`);
525
+ const driver = yield createDateInputDriver("dateInput");
526
+ yield driver.monthInput.focus();
527
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeFocused();
528
+ yield page.keyboard.press("ArrowRight");
529
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeFocused();
530
+ yield page.keyboard.press("ArrowRight");
531
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeFocused();
532
+ yield page.keyboard.press("ArrowLeft");
533
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeFocused();
534
+ }));
535
+ });
536
+ fixtures_1.test.describe("Event Handling", () => {
537
+ (0, fixtures_1.test)("fires didChange event when value changes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
538
+ const { testStateDriver } = yield initTestBed(`<DateInput testId="dateInput" onDidChange="testState = 'changed'" />`);
539
+ const driver = yield createDateInputDriver("dateInput");
540
+ yield driver.monthInput.fill("05");
541
+ yield driver.dayInput.fill("25");
542
+ yield driver.yearInput.fill("2024");
543
+ yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("changed");
544
+ }));
545
+ (0, fixtures_1.test)("fires gotFocus event when input receives focus", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
546
+ const { testStateDriver } = yield initTestBed(`<DateInput testId="dateInput" onGotFocus="testState = 'focused'" />`);
547
+ const driver = yield createDateInputDriver("dateInput");
548
+ yield driver.dayInput.focus();
549
+ yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("focused");
550
+ }));
551
+ (0, fixtures_1.test)("fires lostFocus event when input loses focus", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, page, }) {
552
+ const { testStateDriver } = yield initTestBed(`<DateInput testId="dateInput" onLostFocus="testState = 'blurred'" />`);
553
+ const driver = yield createDateInputDriver("dateInput");
554
+ yield driver.dayInput.focus();
555
+ yield page.keyboard.press("Tab");
556
+ yield page.keyboard.press("Tab");
557
+ yield page.keyboard.press("Tab"); // Move focus away from all inputs
558
+ yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("blurred");
559
+ }));
560
+ (0, fixtures_1.test)("preserves field values when date combination becomes invalid", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, page }) {
561
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM/dd/yyyy" initialValue="01/30/2024" />`);
562
+ const driver = yield createDateInputDriver("dateInput");
563
+ // Verify initial state
564
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("01");
565
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("30");
566
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
567
+ // Change month from 01 to 02, making Feb 30th which is invalid
568
+ yield driver.monthInput.focus();
569
+ yield driver.monthInput.fill("02");
570
+ // Month should be updated to 02
571
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("02");
572
+ // Day should preserve the invalid value "30" instead of being normalized or cleared
573
+ // This is the key fix - invalid date combinations preserve the field values
574
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("30");
575
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
576
+ // The day field should also be marked as invalid visually
577
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveClass(/invalid/);
578
+ }));
579
+ (0, fixtures_1.test)("does not clear all fields when invalid date is entered", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, page }) {
580
+ yield initTestBed(`<DateInput testId="dateInput" dateFormat="MM/dd/yyyy" />`);
581
+ const driver = yield createDateInputDriver("dateInput");
582
+ // Create a scenario where the complete date would be invalid
583
+ yield driver.monthInput.fill("13"); // Invalid month
584
+ yield driver.dayInput.fill("25");
585
+ yield driver.yearInput.fill("2024");
586
+ // Tab to trigger validation
587
+ yield page.keyboard.press("Tab");
588
+ // Month should be normalized (13 % 10 = 3)
589
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("03");
590
+ // Day and year should be preserved
591
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
592
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
593
+ // The important thing is that we don't get all empty fields
594
+ }));
595
+ });
596
+ fixtures_1.test.describe("API Methods", () => {
597
+ (0, fixtures_1.test)("focus() method focuses the date input", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
598
+ const { testStateDriver } = yield initTestBed(`
599
+ <Fragment>
600
+ <DateInput id="dateInput" testId="dateInput" />
601
+ <Button onClick="dateInput.focus(); testState = 'focused'" />
602
+ </Fragment>
603
+ `);
604
+ const driver = yield createDateInputDriver("dateInput");
605
+ yield driver.component.page().getByRole("button").click();
606
+ yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("focused");
607
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeFocused();
608
+ }));
609
+ (0, fixtures_1.test)("setValue() method sets the date value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
610
+ const { testStateDriver } = yield initTestBed(`
611
+ <Fragment>
612
+ <DateInput id="dateInput" testId="dateInput" />
613
+ <Button onClick="dateInput.setValue('05/25/2024'); testState = 'set'" />
614
+ </Fragment>
615
+ `);
616
+ const driver = yield createDateInputDriver("dateInput");
617
+ yield driver.component.page().getByRole("button").click();
618
+ yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("set");
619
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("05");
620
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("25");
621
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("2024");
622
+ }));
623
+ (0, fixtures_1.test)("value getter returns current date value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
624
+ const { testStateDriver } = yield initTestBed(`
625
+ <Fragment>
626
+ <DateInput id="dateInput" testId="dateInput" initialValue="05/25/2024" />
627
+ <Button onClick="testState = dateInput.value" />
628
+ </Fragment>
629
+ `);
630
+ const driver = yield createDateInputDriver("dateInput");
631
+ yield driver.component.page().getByRole("button").click();
632
+ yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("05/25/2024");
633
+ }));
634
+ (0, fixtures_1.test)("setValue() method clears date when empty string provided", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
635
+ const { testStateDriver } = yield initTestBed(`
636
+ <Fragment>
637
+ <DateInput id="dateInput" testId="dateInput" initialValue="05/25/2024" />
638
+ <Button onClick="dateInput.setValue(''); testState = 'cleared'" />
639
+ </Fragment>
640
+ `);
641
+ const driver = yield createDateInputDriver("dateInput");
642
+ yield driver.component.page().getByRole("button").click();
643
+ yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("cleared");
644
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
645
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
646
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
647
+ }));
648
+ (0, fixtures_1.test)("isoValue() method returns null when no date is set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
649
+ const { testStateDriver } = yield initTestBed(`
650
+ <Fragment>
651
+ <DateInput id="dateInput" />
652
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
653
+ </Fragment>
654
+ `);
655
+ yield page.getByTestId("getIsoBtn").click();
656
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe(null);
657
+ }));
658
+ (0, fixtures_1.test)("isoValue() method returns ISO format for complete date", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
659
+ const { testStateDriver } = yield initTestBed(`
660
+ <Fragment>
661
+ <DateInput id="dateInput" initialValue="05/25/2024" />
662
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
663
+ </Fragment>
664
+ `);
665
+ yield page.getByTestId("getIsoBtn").click();
666
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe("2024-05-25");
667
+ }));
668
+ (0, fixtures_1.test)("isoValue() method handles different date formats correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
669
+ const { testStateDriver } = yield initTestBed(`
670
+ <Fragment>
671
+ <DateInput id="dateInput" dateFormat="dd/MM/yyyy" initialValue="25/05/2024" />
672
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
673
+ </Fragment>
674
+ `);
675
+ yield page.getByTestId("getIsoBtn").click();
676
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe("2024-05-25");
677
+ }));
678
+ (0, fixtures_1.test)("isoValue() method returns null for incomplete date", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createDateInputDriver }) {
679
+ const { testStateDriver } = yield initTestBed(`
680
+ <Fragment>
681
+ <DateInput id="dateInput" testId="dateInput" />
682
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
683
+ </Fragment>
684
+ `);
685
+ const driver = yield createDateInputDriver("dateInput");
686
+ // Set only month and day, leave year empty
687
+ yield driver.monthInput.fill("05");
688
+ yield driver.dayInput.fill("25");
689
+ yield page.getByTestId("getIsoBtn").click();
690
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe(null);
691
+ }));
692
+ (0, fixtures_1.test)("isoValue() method returns null for invalid date", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createDateInputDriver }) {
693
+ const { testStateDriver } = yield initTestBed(`
694
+ <Fragment>
695
+ <DateInput id="dateInput" testId="dateInput" />
696
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
697
+ </Fragment>
698
+ `);
699
+ const driver = yield createDateInputDriver("dateInput");
700
+ // Set invalid date (February 30th)
701
+ yield driver.monthInput.fill("02");
702
+ yield driver.dayInput.fill("30");
703
+ yield driver.yearInput.fill("2024");
704
+ yield page.getByTestId("getIsoBtn").click();
705
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe(null);
706
+ }));
707
+ (0, fixtures_1.test)("isoValue() method updates when date is changed programmatically", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
708
+ const { testStateDriver } = yield initTestBed(`
709
+ <Fragment>
710
+ <DateInput id="dateInput" initialValue="05/25/2024" />
711
+ <Button testId="setDateBtn" onClick="dateInput.setValue('12/31/2023')" />
712
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
713
+ </Fragment>
714
+ `);
715
+ // Change the date programmatically
716
+ yield page.getByTestId("setDateBtn").click();
717
+ // Get the ISO value
718
+ yield page.getByTestId("getIsoBtn").click();
719
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe("2023-12-31");
720
+ }));
721
+ (0, fixtures_1.test)("isoValue() method handles leap year correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
722
+ const { testStateDriver } = yield initTestBed(`
723
+ <Fragment>
724
+ <DateInput id="dateInput" initialValue="02/29/2024" />
725
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
726
+ </Fragment>
727
+ `);
728
+ yield page.getByTestId("getIsoBtn").click();
729
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe("2024-02-29");
730
+ }));
731
+ (0, fixtures_1.test)("isoValue() method handles edge dates correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
732
+ const { testStateDriver } = yield initTestBed(`
733
+ <Fragment>
734
+ <DateInput id="dateInput" initialValue="01/01/1900" />
735
+ <Button testId="getIsoBtn" onClick="testState = dateInput.isoValue()" />
736
+ </Fragment>
737
+ `);
738
+ yield page.getByTestId("getIsoBtn").click();
739
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBe("1900-01-01");
740
+ }));
741
+ });
742
+ // =============================================================================
743
+ // ACCESSIBILITY TESTS
744
+ // =============================================================================
745
+ fixtures_1.test.describe("Accessibility", () => {
746
+ (0, fixtures_1.test)("has correct accessibility attributes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
747
+ yield initTestBed(`<DateInput testId="dateInput" label="Birth Date" />`);
748
+ const driver = yield createDateInputDriver("dateInput");
749
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveRole("textbox");
750
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveRole("textbox");
751
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveRole("textbox");
752
+ }));
753
+ (0, fixtures_1.test)("supports keyboard navigation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, page }) {
754
+ yield initTestBed(`<DateInput testId="dateInput" />`);
755
+ const driver = yield createDateInputDriver("dateInput");
756
+ yield driver.monthInput.focus();
757
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeFocused();
758
+ yield page.keyboard.press("Tab");
759
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeFocused();
760
+ yield page.keyboard.press("Tab");
761
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeFocused();
762
+ yield page.keyboard.press("Shift+Tab");
763
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeFocused();
764
+ }));
765
+ (0, fixtures_1.test)("has proper aria-label when label is provided", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
766
+ yield initTestBed(`<DateInput testId="dateInput" label="Birth Date" />`);
767
+ const driver = yield createDateInputDriver("dateInput");
768
+ yield (0, fixtures_1.expect)(driver.component.locator("label")).toBeVisible();
769
+ yield (0, fixtures_1.expect)(driver.component.locator("label")).toHaveText("Birth Date");
770
+ }));
771
+ (0, fixtures_1.test)("supports screen reader announcements for validation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
772
+ yield initTestBed(`<DateInput testId="dateInput" validationStatus="error" />`);
773
+ const driver = yield createDateInputDriver("dateInput");
774
+ yield (0, fixtures_1.expect)(driver.component).toHaveAttribute("data-validation-status", "error");
775
+ }));
776
+ (0, fixtures_1.test)("clear button has accessible role and label", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
777
+ yield initTestBed(`<DateInput testId="dateInput" clearable="true" initialValue="05/25/2024" />`);
778
+ const driver = yield createDateInputDriver("dateInput");
779
+ yield (0, fixtures_1.expect)(driver.clearButton).toHaveRole("button");
780
+ yield (0, fixtures_1.expect)(driver.clearButton).toBeVisible();
781
+ }));
782
+ (0, fixtures_1.test)("inputs have correct input types", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
783
+ yield initTestBed(`<DateInput testId="dateInput" />`);
784
+ const driver = yield createDateInputDriver("dateInput");
785
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("type", "text");
786
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("type", "text");
787
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("type", "text");
788
+ }));
789
+ (0, fixtures_1.test)("supports required attribute for accessibility", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
790
+ yield initTestBed(`<DateInput testId="dateInput" required="true" />`);
791
+ const driver = yield createDateInputDriver("dateInput");
792
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveAttribute("required", "");
793
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveAttribute("required", "");
794
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveAttribute("required", "");
795
+ }));
796
+ });
797
+ // =============================================================================
798
+ // THEME VARIABLE TESTS
799
+ // =============================================================================
800
+ fixtures_1.test.describe("Theme Variables", () => {
801
+ (0, fixtures_1.test)("component renders with theme variables", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
802
+ yield initTestBed(`
803
+ <DateInput
804
+ testId="dateInput"
805
+ style="--color-divider: red; --width-input: 100px; --backgroundColor-input-invalid: rgb(255, 200, 200);"
806
+ />
807
+ `);
808
+ const driver = yield createDateInputDriver("dateInput");
809
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
810
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeVisible();
811
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeVisible();
812
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeVisible();
813
+ }));
814
+ (0, fixtures_1.test)("component renders with clearable and theme variables", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
815
+ yield initTestBed(`
816
+ <DateInput
817
+ testId="dateInput"
818
+ clearable="{true}"
819
+ style="--padding-button: 15px; --outlineColor-button--focused: green;"
820
+ />
821
+ `);
822
+ const driver = yield createDateInputDriver("dateInput");
823
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
824
+ yield (0, fixtures_1.expect)(driver.clearButton).toBeVisible();
825
+ }));
826
+ });
827
+ // =============================================================================
828
+ // OTHER EDGE CASE TESTS
829
+ // =============================================================================
830
+ fixtures_1.test.describe("Other Edge Cases", () => {
831
+ (0, fixtures_1.test)("handles no props gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
832
+ yield initTestBed(`<DateInput testId="dateInput" />`);
833
+ const driver = yield createDateInputDriver("dateInput");
834
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
835
+ yield (0, fixtures_1.expect)(driver.dayInput).toBeVisible();
836
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeVisible();
837
+ yield (0, fixtures_1.expect)(driver.yearInput).toBeVisible();
838
+ }));
839
+ (0, fixtures_1.test)("handles null initialValue", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
840
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{null}" />`);
841
+ const driver = yield createDateInputDriver("dateInput");
842
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
843
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
844
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
845
+ }));
846
+ (0, fixtures_1.test)("handles undefined initialValue", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
847
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="{undefined}" />`);
848
+ const driver = yield createDateInputDriver("dateInput");
849
+ yield (0, fixtures_1.expect)(driver.dayInput).toHaveValue("");
850
+ yield (0, fixtures_1.expect)(driver.monthInput).toHaveValue("");
851
+ yield (0, fixtures_1.expect)(driver.yearInput).toHaveValue("");
852
+ }));
853
+ (0, fixtures_1.test)("handles invalid date format gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
854
+ yield initTestBed(`<DateInput testId="dateInput" initialValue="invalid-date" />`);
855
+ const driver = yield createDateInputDriver("dateInput");
856
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
857
+ }));
858
+ (0, fixtures_1.test)("handles very long text values", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
859
+ const longText = "a".repeat(1000);
860
+ yield initTestBed(`<DateInput testId="dateInput" placeholder="${longText}" />`);
861
+ const driver = yield createDateInputDriver("dateInput");
862
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
863
+ }));
864
+ (0, fixtures_1.test)("handles extreme minValue and maxValue", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver }) {
865
+ yield initTestBed(`<DateInput testId="dateInput" minValue="1900-01-01" maxValue="2100-12-31" />`);
866
+ const driver = yield createDateInputDriver("dateInput");
867
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
868
+ }));
869
+ (0, fixtures_1.test)("handles negative numbers in input fields", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
870
+ yield initTestBed(`<DateInput testId="dateInput" />`);
871
+ const driver = yield createDateInputDriver("dateInput");
872
+ yield driver.dayInput.fill("-5");
873
+ yield driver.monthInput.fill("-1");
874
+ yield driver.yearInput.fill("-2024");
875
+ // Component should handle invalid input gracefully
876
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
877
+ }));
878
+ (0, fixtures_1.test)("handles very large numbers in input fields", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
879
+ yield initTestBed(`<DateInput testId="dateInput" />`);
880
+ const driver = yield createDateInputDriver("dateInput");
881
+ yield driver.dayInput.fill("99999");
882
+ yield driver.monthInput.fill("99999");
883
+ yield driver.yearInput.fill("99999");
884
+ // Component should handle invalid input gracefully
885
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
886
+ }));
887
+ (0, fixtures_1.test)("handles special characters in input fields", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
888
+ yield initTestBed(`<DateInput testId="dateInput" />`);
889
+ const driver = yield createDateInputDriver("dateInput");
890
+ yield driver.dayInput.fill("@#$");
891
+ yield driver.monthInput.fill("!%^");
892
+ yield driver.yearInput.fill("&*()");
893
+ // Component should handle invalid input gracefully
894
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
895
+ }));
896
+ (0, fixtures_1.test)("handles object value passed to string property", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
897
+ yield initTestBed(`<DateInput testId="dateInput" placeholder="{{}}" />`);
898
+ const driver = yield createDateInputDriver("dateInput");
899
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
900
+ }));
901
+ (0, fixtures_1.test)("handles rapid consecutive value changes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
902
+ const { testStateDriver } = yield initTestBed(`<DateInput testId="dateInput" onDidChange="testState = (testState || 0) + 1" />`);
903
+ const driver = yield createDateInputDriver("dateInput");
904
+ yield driver.monthInput.fill("01");
905
+ yield driver.monthInput.fill("02");
906
+ yield driver.monthInput.fill("03");
907
+ // Should handle rapid changes
908
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBeGreaterThan(0);
909
+ }));
910
+ (0, fixtures_1.test)("maintains focus during validation errors", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDateInputDriver, }) {
911
+ yield initTestBed(`<DateInput testId="dateInput" />`);
912
+ const driver = yield createDateInputDriver("dateInput");
913
+ yield driver.monthInput.focus();
914
+ yield driver.monthInput.fill("13"); // Invalid month
915
+ // Focus should be maintained even with validation error
916
+ yield (0, fixtures_1.expect)(driver.monthInput).toBeFocused();
917
+ }));
918
+ });