@dxc-technology/halstack-react 0.0.0-2c3a5e1 → 0.0.0-2d5bb6f

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 (294) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -11
  3. package/HalstackContext.d.ts +13 -0
  4. package/HalstackContext.js +318 -0
  5. package/accordion/Accordion.d.ts +1 -1
  6. package/accordion/Accordion.js +123 -167
  7. package/accordion/Accordion.stories.tsx +115 -27
  8. package/accordion/Accordion.test.js +56 -0
  9. package/accordion/types.d.ts +10 -5
  10. package/accordion-group/AccordionGroup.d.ts +1 -1
  11. package/accordion-group/AccordionGroup.js +28 -77
  12. package/accordion-group/AccordionGroup.stories.tsx +28 -2
  13. package/accordion-group/AccordionGroup.test.js +108 -0
  14. package/accordion-group/types.d.ts +17 -6
  15. package/alert/Alert.js +18 -46
  16. package/alert/Alert.stories.tsx +28 -0
  17. package/alert/Alert.test.js +75 -0
  18. package/alert/types.d.ts +3 -3
  19. package/badge/Badge.d.ts +4 -0
  20. package/badge/Badge.js +6 -16
  21. package/badge/types.d.ts +5 -0
  22. package/bleed/Bleed.js +14 -55
  23. package/bleed/Bleed.stories.tsx +94 -95
  24. package/bleed/types.d.ts +26 -2
  25. package/box/Box.js +34 -63
  26. package/box/Box.stories.tsx +15 -0
  27. package/box/Box.test.js +13 -0
  28. package/box/types.d.ts +5 -4
  29. package/bulleted-list/BulletedList.d.ts +7 -0
  30. package/bulleted-list/BulletedList.js +98 -0
  31. package/bulleted-list/BulletedList.stories.tsx +200 -0
  32. package/bulleted-list/types.d.ts +11 -0
  33. package/button/Button.js +61 -100
  34. package/button/Button.stories.tsx +159 -8
  35. package/button/Button.test.js +26 -0
  36. package/button/types.d.ts +8 -8
  37. package/card/Card.js +44 -70
  38. package/card/Card.test.js +39 -0
  39. package/card/types.d.ts +4 -3
  40. package/checkbox/Checkbox.d.ts +2 -2
  41. package/checkbox/Checkbox.js +115 -162
  42. package/checkbox/Checkbox.stories.tsx +198 -130
  43. package/checkbox/Checkbox.test.js +128 -0
  44. package/checkbox/types.d.ts +14 -6
  45. package/chip/Chip.js +26 -50
  46. package/chip/Chip.stories.tsx +96 -9
  47. package/chip/Chip.test.js +42 -0
  48. package/chip/types.d.ts +4 -4
  49. package/common/utils.js +1 -6
  50. package/common/variables.d.ts +1431 -0
  51. package/common/variables.js +480 -553
  52. package/date-input/Calendar.d.ts +4 -0
  53. package/date-input/Calendar.js +215 -0
  54. package/date-input/DateInput.js +164 -300
  55. package/date-input/DateInput.stories.tsx +199 -33
  56. package/date-input/DateInput.test.js +648 -0
  57. package/date-input/DatePicker.d.ts +4 -0
  58. package/date-input/DatePicker.js +116 -0
  59. package/date-input/Icons.d.ts +6 -0
  60. package/date-input/Icons.js +63 -0
  61. package/date-input/YearPicker.d.ts +4 -0
  62. package/date-input/YearPicker.js +101 -0
  63. package/date-input/types.d.ts +71 -13
  64. package/dialog/Dialog.js +52 -84
  65. package/dialog/Dialog.stories.tsx +99 -22
  66. package/dialog/Dialog.test.js +56 -0
  67. package/dialog/types.d.ts +4 -3
  68. package/dropdown/Dropdown.d.ts +1 -1
  69. package/dropdown/Dropdown.js +239 -300
  70. package/dropdown/Dropdown.stories.tsx +245 -56
  71. package/dropdown/Dropdown.test.js +479 -0
  72. package/dropdown/DropdownMenu.d.ts +4 -0
  73. package/dropdown/DropdownMenu.js +60 -0
  74. package/dropdown/DropdownMenuItem.d.ts +4 -0
  75. package/dropdown/DropdownMenuItem.js +70 -0
  76. package/dropdown/types.d.ts +26 -6
  77. package/file-input/FileInput.d.ts +2 -2
  78. package/file-input/FileInput.js +224 -351
  79. package/file-input/FileInput.stories.tsx +122 -11
  80. package/file-input/FileInput.test.js +445 -0
  81. package/file-input/FileItem.d.ts +4 -14
  82. package/file-input/FileItem.js +48 -97
  83. package/file-input/types.d.ts +24 -7
  84. package/flex/Flex.d.ts +4 -0
  85. package/flex/Flex.js +57 -0
  86. package/flex/Flex.stories.tsx +103 -0
  87. package/flex/types.d.ts +32 -0
  88. package/footer/Footer.js +28 -133
  89. package/footer/Footer.stories.tsx +99 -1
  90. package/footer/Footer.test.js +92 -0
  91. package/footer/Icons.js +1 -5
  92. package/footer/types.d.ts +7 -6
  93. package/header/Header.js +112 -177
  94. package/header/Header.stories.tsx +189 -36
  95. package/header/Header.test.js +66 -0
  96. package/header/Icons.js +2 -6
  97. package/header/types.d.ts +4 -3
  98. package/heading/Heading.js +8 -29
  99. package/heading/Heading.test.js +169 -0
  100. package/heading/types.d.ts +3 -3
  101. package/inset/Inset.js +14 -55
  102. package/inset/Inset.stories.tsx +36 -36
  103. package/inset/types.d.ts +26 -2
  104. package/layout/ApplicationLayout.d.ts +16 -6
  105. package/layout/ApplicationLayout.js +71 -164
  106. package/layout/ApplicationLayout.stories.tsx +84 -93
  107. package/layout/Icons.d.ts +5 -0
  108. package/layout/Icons.js +11 -10
  109. package/layout/SidenavContext.d.ts +5 -0
  110. package/layout/SidenavContext.js +15 -0
  111. package/layout/types.d.ts +18 -33
  112. package/link/Link.d.ts +3 -2
  113. package/link/Link.js +61 -106
  114. package/link/Link.stories.tsx +159 -52
  115. package/link/Link.test.js +65 -0
  116. package/link/types.d.ts +9 -29
  117. package/main.d.ts +10 -15
  118. package/main.js +43 -124
  119. package/nav-tabs/NavTabs.d.ts +8 -0
  120. package/nav-tabs/NavTabs.js +95 -0
  121. package/nav-tabs/NavTabs.stories.tsx +260 -0
  122. package/nav-tabs/NavTabs.test.js +75 -0
  123. package/nav-tabs/Tab.d.ts +4 -0
  124. package/nav-tabs/Tab.js +120 -0
  125. package/nav-tabs/types.d.ts +53 -0
  126. package/number-input/NumberInput.js +21 -38
  127. package/number-input/NumberInput.stories.tsx +5 -5
  128. package/number-input/NumberInput.test.js +406 -0
  129. package/number-input/NumberInputContext.js +0 -5
  130. package/number-input/numberInputContextTypes.d.ts +1 -1
  131. package/number-input/types.d.ts +21 -14
  132. package/package.json +22 -25
  133. package/paginator/Icons.d.ts +5 -0
  134. package/paginator/Icons.js +16 -38
  135. package/paginator/Paginator.js +31 -82
  136. package/paginator/Paginator.stories.tsx +24 -0
  137. package/paginator/Paginator.test.js +266 -0
  138. package/paginator/types.d.ts +1 -1
  139. package/paragraph/Paragraph.d.ts +6 -0
  140. package/paragraph/Paragraph.js +28 -0
  141. package/paragraph/Paragraph.stories.tsx +44 -0
  142. package/password-input/PasswordInput.js +28 -54
  143. package/password-input/PasswordInput.test.js +138 -0
  144. package/password-input/types.d.ts +18 -15
  145. package/progress-bar/ProgressBar.d.ts +2 -2
  146. package/progress-bar/ProgressBar.js +65 -84
  147. package/progress-bar/ProgressBar.stories.jsx +47 -12
  148. package/progress-bar/ProgressBar.test.js +93 -0
  149. package/progress-bar/types.d.ts +3 -4
  150. package/quick-nav/QuickNav.d.ts +4 -0
  151. package/quick-nav/QuickNav.js +95 -0
  152. package/quick-nav/QuickNav.stories.tsx +356 -0
  153. package/quick-nav/types.d.ts +21 -0
  154. package/quick-nav/types.js +5 -0
  155. package/radio-group/Radio.d.ts +1 -1
  156. package/radio-group/Radio.js +55 -70
  157. package/radio-group/RadioGroup.js +91 -126
  158. package/radio-group/RadioGroup.stories.tsx +171 -36
  159. package/radio-group/RadioGroup.test.js +529 -157
  160. package/radio-group/types.d.ts +86 -8
  161. package/resultsetTable/Icons.d.ts +7 -0
  162. package/resultsetTable/Icons.js +48 -0
  163. package/resultsetTable/ResultsetTable.js +66 -157
  164. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  165. package/resultsetTable/ResultsetTable.test.js +292 -0
  166. package/resultsetTable/types.d.ts +5 -5
  167. package/select/Icons.d.ts +10 -0
  168. package/select/Icons.js +90 -0
  169. package/select/Listbox.d.ts +4 -0
  170. package/select/Listbox.js +144 -0
  171. package/select/Option.d.ts +4 -0
  172. package/select/Option.js +81 -0
  173. package/select/Select.js +201 -485
  174. package/select/Select.stories.tsx +600 -201
  175. package/select/Select.test.js +1845 -0
  176. package/select/types.d.ts +62 -22
  177. package/sidenav/Sidenav.d.ts +6 -5
  178. package/sidenav/Sidenav.js +164 -74
  179. package/sidenav/Sidenav.stories.tsx +249 -149
  180. package/sidenav/Sidenav.test.js +37 -0
  181. package/sidenav/types.d.ts +50 -27
  182. package/slider/Slider.d.ts +2 -2
  183. package/slider/Slider.js +143 -164
  184. package/slider/Slider.stories.tsx +72 -9
  185. package/slider/Slider.test.js +222 -0
  186. package/slider/types.d.ts +11 -3
  187. package/spinner/Spinner.js +12 -41
  188. package/spinner/Spinner.stories.jsx +27 -1
  189. package/spinner/Spinner.test.js +55 -0
  190. package/spinner/types.d.ts +3 -3
  191. package/switch/Switch.d.ts +2 -2
  192. package/switch/Switch.js +148 -107
  193. package/switch/Switch.stories.tsx +53 -42
  194. package/switch/Switch.test.js +180 -0
  195. package/switch/types.d.ts +13 -5
  196. package/table/Table.js +5 -23
  197. package/table/Table.stories.jsx +80 -1
  198. package/table/Table.test.js +21 -0
  199. package/table/types.d.ts +3 -3
  200. package/tabs/Tab.d.ts +4 -0
  201. package/tabs/Tab.js +115 -0
  202. package/tabs/Tabs.d.ts +1 -1
  203. package/tabs/Tabs.js +318 -139
  204. package/tabs/Tabs.stories.tsx +119 -13
  205. package/tabs/Tabs.test.js +295 -0
  206. package/tabs/types.d.ts +21 -7
  207. package/tag/Tag.js +34 -68
  208. package/tag/Tag.stories.tsx +25 -8
  209. package/tag/Tag.test.js +49 -0
  210. package/tag/types.d.ts +7 -7
  211. package/text-input/Icons.d.ts +8 -0
  212. package/text-input/Icons.js +57 -0
  213. package/text-input/Suggestion.d.ts +4 -0
  214. package/text-input/Suggestion.js +68 -0
  215. package/text-input/Suggestions.d.ts +4 -0
  216. package/text-input/Suggestions.js +109 -0
  217. package/text-input/TextInput.js +232 -438
  218. package/text-input/TextInput.stories.tsx +310 -197
  219. package/text-input/TextInput.test.js +1404 -0
  220. package/text-input/types.d.ts +55 -17
  221. package/textarea/Textarea.js +53 -96
  222. package/textarea/Textarea.stories.jsx +93 -13
  223. package/textarea/Textarea.test.js +360 -0
  224. package/textarea/types.d.ts +22 -15
  225. package/toggle-group/ToggleGroup.d.ts +1 -1
  226. package/toggle-group/ToggleGroup.js +23 -57
  227. package/toggle-group/ToggleGroup.stories.tsx +46 -4
  228. package/toggle-group/ToggleGroup.test.js +124 -0
  229. package/toggle-group/types.d.ts +19 -11
  230. package/translatedLabelsType.d.ts +82 -0
  231. package/translatedLabelsType.js +5 -0
  232. package/typography/Typography.d.ts +4 -0
  233. package/typography/Typography.js +119 -0
  234. package/typography/Typography.stories.tsx +198 -0
  235. package/typography/types.d.ts +18 -0
  236. package/typography/types.js +5 -0
  237. package/useTheme.d.ts +1 -1
  238. package/useTheme.js +3 -9
  239. package/useTranslatedLabels.d.ts +3 -0
  240. package/useTranslatedLabels.js +15 -0
  241. package/wizard/Wizard.d.ts +1 -1
  242. package/wizard/Wizard.js +68 -98
  243. package/wizard/Wizard.stories.tsx +48 -19
  244. package/wizard/Wizard.test.js +114 -0
  245. package/wizard/types.d.ts +12 -7
  246. package/ThemeContext.d.ts +0 -15
  247. package/ThemeContext.js +0 -243
  248. package/V3Select/V3Select.js +0 -455
  249. package/V3Select/index.d.ts +0 -27
  250. package/V3Textarea/V3Textarea.js +0 -260
  251. package/V3Textarea/index.d.ts +0 -27
  252. package/common/RequiredComponent.js +0 -32
  253. package/date/Date.js +0 -373
  254. package/date/index.d.ts +0 -27
  255. package/input-text/Icons.js +0 -22
  256. package/input-text/InputText.js +0 -611
  257. package/input-text/index.d.ts +0 -36
  258. package/list/List.d.ts +0 -4
  259. package/list/List.js +0 -47
  260. package/list/List.stories.tsx +0 -95
  261. package/list/types.d.ts +0 -7
  262. package/radio/Radio.d.ts +0 -4
  263. package/radio/Radio.js +0 -174
  264. package/radio/Radio.stories.tsx +0 -192
  265. package/radio/types.d.ts +0 -54
  266. package/row/Row.d.ts +0 -3
  267. package/row/Row.js +0 -127
  268. package/row/Row.stories.tsx +0 -237
  269. package/row/types.d.ts +0 -10
  270. package/stack/Stack.d.ts +0 -3
  271. package/stack/Stack.js +0 -97
  272. package/stack/Stack.stories.tsx +0 -164
  273. package/stack/types.d.ts +0 -9
  274. package/text/Text.d.ts +0 -7
  275. package/text/Text.js +0 -30
  276. package/text/Text.stories.tsx +0 -19
  277. package/toggle/Toggle.js +0 -186
  278. package/toggle/index.d.ts +0 -21
  279. package/upload/Upload.js +0 -201
  280. package/upload/buttons-upload/ButtonsUpload.js +0 -111
  281. package/upload/buttons-upload/Icons.js +0 -40
  282. package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
  283. package/upload/dragAndDropArea/Icons.js +0 -39
  284. package/upload/file-upload/FileToUpload.js +0 -115
  285. package/upload/file-upload/Icons.js +0 -66
  286. package/upload/files-upload/FilesToUpload.js +0 -109
  287. package/upload/index.d.ts +0 -15
  288. package/upload/transaction/Icons.js +0 -160
  289. package/upload/transaction/Transaction.js +0 -104
  290. package/upload/transactions/Transactions.js +0 -94
  291. /package/{list → badge}/types.js +0 -0
  292. /package/{radio → bulleted-list}/types.js +0 -0
  293. /package/{row → flex}/types.js +0 -0
  294. /package/{stack → nav-tabs}/types.js +0 -0
@@ -1,16 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _react = _interopRequireDefault(require("react"));
6
-
7
- var _RadioGroup = _interopRequireDefault(require("./RadioGroup"));
8
-
9
5
  var _react2 = require("@testing-library/react");
10
-
11
6
  var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
12
-
13
- var single_options = [{
7
+ var _RadioGroup = _interopRequireDefault(require("./RadioGroup.tsx"));
8
+ var options = [{
14
9
  label: "Option 01",
15
10
  value: "1"
16
11
  }, {
@@ -37,212 +32,589 @@ var single_options = [{
37
32
  }, {
38
33
  label: "Option 09",
39
34
  value: "9"
35
+ }];
36
+ var singleDisabledOptions = [{
37
+ label: "Option 01",
38
+ value: "1"
40
39
  }, {
41
- label: "Option 10",
42
- value: "10"
40
+ label: "Option 02",
41
+ value: "2"
42
+ }, {
43
+ label: "Option 03",
44
+ value: "3",
45
+ disabled: true
43
46
  }];
44
47
  describe("Radio Group component tests", function () {
45
- test("Controlled - Not optional constraint - undefined", function () {
48
+ test("Initial render has correct aria attributes and tabIndex", function () {
49
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
50
+ label: "test-radioGroup-label",
51
+ options: options,
52
+ error: ""
53
+ })),
54
+ getByRole = _render.getByRole,
55
+ getAllByRole = _render.getAllByRole,
56
+ getByText = _render.getByText,
57
+ container = _render.container;
58
+ var radioGroup = getByRole("radiogroup");
59
+ var radios = getAllByRole("radio");
60
+ var errorId = "error-".concat(getByText("test-radioGroup-label").id.replace("label-", ""));
61
+ var error = container.querySelector("#".concat(errorId));
62
+ expect(radioGroup.getAttribute("aria-disabled")).toBe("false");
63
+ expect(radioGroup.getAttribute("aria-labelledby")).toBe(getByText("test-radioGroup-label").id);
64
+ expect(radioGroup.getAttribute("aria-invalid")).toBe("false");
65
+ expect(radioGroup.getAttribute("aria-required")).toBe("true");
66
+ expect(radioGroup.getAttribute("aria-orientation")).toBe("vertical");
67
+ expect(error.getAttribute("aria-live")).toBe("off");
68
+ radios.forEach(function (radio, index) {
69
+ // if no option was previously selected, first option is the focusable one
70
+ index === 0 ? expect(radio.tabIndex).toBe(0) : expect(radio.tabIndex).toBe(-1);
71
+ expect(radio.getAttribute("aria-checked")).toBe("false");
72
+ expect(radio.getAttribute("aria-disabled")).toBe("false");
73
+ expect(radio.getAttribute("aria-labelledby")).toBe(getByText("Option 0".concat(index + 1)).id);
74
+ });
75
+ });
76
+ test("aria-orientation attribute changes depending on stacking prop value", function () {
77
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
78
+ label: "test-radioGroup-label",
79
+ options: options,
80
+ stacking: "row"
81
+ })),
82
+ getByRole = _render2.getByRole;
83
+ var radioGroup = getByRole("radiogroup");
84
+ expect(radioGroup.getAttribute("aria-orientation")).toBe("horizontal");
85
+ });
86
+ test("Sends its value when submitted", function () {
87
+ var handlerOnSubmit = jest.fn(function (e) {
88
+ e.preventDefault();
89
+ var formData = new FormData(e.target);
90
+ var formProps = Object.fromEntries(formData);
91
+ expect(formProps).toStrictEqual({
92
+ radiogroup: "5"
93
+ });
94
+ });
95
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement("form", {
96
+ onSubmit: handlerOnSubmit
97
+ }, /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
98
+ name: "radiogroup",
99
+ label: "test-radio-group-label",
100
+ options: options
101
+ }), /*#__PURE__*/_react["default"].createElement("button", {
102
+ type: "submit"
103
+ }, "Submit"))),
104
+ getByText = _render3.getByText,
105
+ getByRole = _render3.getByRole,
106
+ getAllByRole = _render3.getAllByRole;
107
+ var radioGroup = getByRole("radiogroup");
108
+ var submit = getByText("Submit");
109
+ _userEvent["default"].click(radioGroup);
110
+ _userEvent["default"].click(getAllByRole("radio")[4]);
111
+ _userEvent["default"].click(submit);
112
+ });
113
+ test("Disabled state renders with correct aria attribute, correct tabIndex values and it is not focusable by keyboard", function () {
114
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
115
+ label: "test-radioGroup-label",
116
+ options: options,
117
+ disabled: true
118
+ })),
119
+ getByRole = _render4.getByRole,
120
+ getAllByRole = _render4.getAllByRole;
121
+ var radioGroup = getByRole("radiogroup");
122
+ var radios = getAllByRole("radio");
123
+ expect(radioGroup.getAttribute("aria-disabled")).toBe("true");
124
+ radios.forEach(function (radio) {
125
+ expect(radio.tabIndex).toBe(-1);
126
+ });
127
+ _react2.fireEvent.keyDown(radioGroup, {
128
+ key: " ",
129
+ code: "Space",
130
+ keyCode: 13,
131
+ charCode: 13
132
+ });
133
+ _react2.fireEvent.keyDown(radioGroup, {
134
+ key: "ArrowLeft",
135
+ code: "ArrowLeft",
136
+ keyCode: 37,
137
+ charCode: 37
138
+ });
139
+ _react2.fireEvent.keyDown(radioGroup, {
140
+ key: "ArrowDown",
141
+ code: "ArrowDown",
142
+ keyCode: 40,
143
+ charCode: 40
144
+ });
145
+ radios.forEach(function (radio) {
146
+ expect(radio.tabIndex).toBe(-1);
147
+ });
148
+ });
149
+ test("Disabled option renders with correct aria attribute, correct tabIndex value and it is not focusable by keyboard (focus 'jumps' the disabled option)", function () {
150
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
151
+ name: "test",
152
+ label: "test-radioGroup-label",
153
+ options: singleDisabledOptions
154
+ })),
155
+ getByRole = _render5.getByRole,
156
+ getAllByRole = _render5.getAllByRole;
157
+ var radioGroup = getByRole("radiogroup");
158
+ var radios = getAllByRole("radio");
159
+ expect(radios[2].getAttribute("aria-disabled")).toBe("true");
160
+ expect(radios[0].tabIndex).toBe(0);
161
+ expect(radios[1].tabIndex).toBe(-1);
162
+ expect(radios[2].tabIndex).toBe(-1);
163
+ _react2.fireEvent.keyDown(radioGroup, {
164
+ key: "ArrowDown",
165
+ code: "ArrowDown",
166
+ keyCode: 40,
167
+ charCode: 40
168
+ });
169
+ _react2.fireEvent.keyDown(radioGroup, {
170
+ key: "ArrowDown",
171
+ code: "ArrowDown",
172
+ keyCode: 40,
173
+ charCode: 40
174
+ });
175
+ expect(radios[0].tabIndex).toBe(0);
176
+ expect(radios[1].tabIndex).toBe(-1);
177
+ expect(radios[2].tabIndex).toBe(-1);
178
+ });
179
+ test("Disabled radio group doesn't send its value when submitted", function () {
180
+ var handlerOnSubmit = jest.fn(function (e) {
181
+ e.preventDefault();
182
+ var formData = new FormData(e.target);
183
+ var formProps = Object.fromEntries(formData);
184
+ expect(formProps).toStrictEqual({});
185
+ });
186
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement("form", {
187
+ onSubmit: handlerOnSubmit
188
+ }, /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
189
+ name: "radiogroup",
190
+ defaultValue: "1",
191
+ disabled: true,
192
+ label: "test-radio-group-label",
193
+ options: options
194
+ }), /*#__PURE__*/_react["default"].createElement("button", {
195
+ type: "submit"
196
+ }, "Submit"))),
197
+ getByText = _render6.getByText;
198
+ var submit = getByText("Submit");
199
+ _userEvent["default"].click(submit);
200
+ });
201
+ test("Error state renders with correct aria attributes", function () {
202
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
203
+ label: "test-radioGroup-label",
204
+ options: options,
205
+ error: "Error message"
206
+ })),
207
+ getByRole = _render7.getByRole,
208
+ getByText = _render7.getByText;
209
+ var radioGroup = getByRole("radiogroup");
210
+ var errorMessage = getByText("Error message");
211
+ expect(radioGroup.getAttribute("aria-errormessage")).toBe(errorMessage.id);
212
+ expect(radioGroup.getAttribute("aria-invalid")).toBe("true");
213
+ expect(errorMessage.getAttribute("aria-live")).toBe("assertive");
214
+ });
215
+ test("Radio group with required constraint and 'undefined' as value, sends an error", function () {
46
216
  var onChange = jest.fn();
47
217
  var onBlur = jest.fn();
48
-
49
- var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
50
- label: "test-select-label",
51
- options: single_options,
52
- onChange: onChange,
53
- onBlur: onBlur
54
- })),
55
- getByRole = _render.getByRole,
56
- getAllByRole = _render.getAllByRole;
57
-
218
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
219
+ label: "test-radioGroup-label",
220
+ options: options,
221
+ onChange: onChange,
222
+ onBlur: onBlur
223
+ })),
224
+ getByRole = _render8.getByRole,
225
+ getAllByRole = _render8.getAllByRole;
58
226
  var radioGroup = getByRole("radiogroup");
59
227
  expect(radioGroup.getAttribute("aria-required")).toBe("true");
60
-
61
- _react2.fireEvent.focus(radioGroup);
62
-
63
228
  _react2.fireEvent.blur(radioGroup);
64
-
65
- expect(onBlur).toHaveBeenCalled();
66
229
  expect(onBlur).toHaveBeenCalledWith({
67
230
  error: "This field is required. Please, choose an option."
68
231
  });
69
-
70
232
  _userEvent["default"].click(radioGroup);
71
-
72
233
  _userEvent["default"].click(getAllByRole("radio")[0]);
73
-
74
- expect(onChange).toHaveBeenCalled();
75
234
  expect(onChange).toHaveBeenCalledWith("1");
76
-
77
- _react2.fireEvent.focus(radioGroup);
78
-
79
235
  _react2.fireEvent.blur(radioGroup);
80
-
81
- expect(onBlur).toHaveBeenCalled();
82
236
  expect(onBlur).toHaveBeenCalledWith({
83
237
  value: "1"
84
238
  });
85
239
  });
86
- test("Controlled - Not optional constraint - empty string", function () {
240
+ test("Radio group with required constraint and empty string as value, sends an error", function () {
87
241
  var onChange = jest.fn();
88
242
  var onBlur = jest.fn();
89
-
90
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
91
- label: "test-select-label",
92
- value: "",
93
- options: single_options,
94
- onChange: onChange,
95
- onBlur: onBlur
96
- })),
97
- getByRole = _render2.getByRole,
98
- getAllByRole = _render2.getAllByRole;
99
-
243
+ var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
244
+ label: "test-radioGroup-label",
245
+ value: "",
246
+ options: options,
247
+ onChange: onChange,
248
+ onBlur: onBlur
249
+ })),
250
+ getByRole = _render9.getByRole,
251
+ getAllByRole = _render9.getAllByRole;
100
252
  var radioGroup = getByRole("radiogroup");
101
253
  expect(radioGroup.getAttribute("aria-required")).toBe("true");
102
-
103
- _react2.fireEvent.focus(radioGroup);
104
-
105
254
  _react2.fireEvent.blur(radioGroup);
106
-
107
- expect(onBlur).toHaveBeenCalled();
108
255
  expect(onBlur).toHaveBeenCalledWith({
109
256
  value: "",
110
257
  error: "This field is required. Please, choose an option."
111
258
  });
112
-
113
259
  _userEvent["default"].click(getAllByRole("radio")[0]);
114
-
115
- expect(onChange).toHaveBeenCalled();
116
260
  expect(onChange).toHaveBeenCalledWith("1");
117
261
  });
118
- test("Controlled - Optional constraint", function () {
262
+ test("The 'defaultValue' gives the radio group an initial value when it is uncontrolled", function () {
263
+ var onChange = jest.fn();
264
+ var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
265
+ defaultValue: "2",
266
+ name: "test",
267
+ label: "test-radio-group-label",
268
+ helperText: "test-radio-group-helper-text",
269
+ options: options,
270
+ onChange: onChange
271
+ })),
272
+ getAllByRole = _render10.getAllByRole,
273
+ container = _render10.container;
274
+ var radio = getAllByRole("radio")[1];
275
+ var submitInput = container.querySelector("input[name=\"test\"]");
276
+ expect(radio.tabIndex).toBe(0);
277
+ expect(radio.getAttribute("aria-checked")).toBe("true");
278
+ expect(submitInput.value).toBe("2");
279
+ });
280
+ test("Optional radio group conditions: onBlur event doesn't send an error when no radio was checked, has correct aria attributes, custom label and its value is the empty string", function () {
119
281
  var onChange = jest.fn();
120
282
  var onBlur = jest.fn();
121
-
122
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
123
- label: "test-radio-group-label",
124
- helperText: "test-radio-group-helper-text",
125
- options: single_options,
126
- onChange: onChange,
127
- onBlur: onBlur,
128
- optional: true
129
- })),
130
- getByRole = _render3.getByRole;
131
-
283
+ var _render11 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
284
+ name: "test",
285
+ label: "test-radio-group-label",
286
+ helperText: "test-radio-group-helper-text",
287
+ options: options,
288
+ onChange: onChange,
289
+ onBlur: onBlur,
290
+ optional: true,
291
+ optionalItemLabel: "No selection"
292
+ })),
293
+ getByRole = _render11.getByRole,
294
+ getByText = _render11.getByText,
295
+ container = _render11.container;
132
296
  var radioGroup = getByRole("radiogroup");
133
297
  expect(radioGroup.getAttribute("aria-required")).toBe("false");
134
-
135
- _react2.fireEvent.focus(radioGroup);
136
-
137
298
  _react2.fireEvent.blur(radioGroup);
138
-
139
- expect(onBlur).toHaveBeenCalled();
140
299
  expect(onBlur).toHaveBeenCalledWith({});
141
300
  expect(radioGroup.getAttribute("aria-invalid")).toBe("false");
301
+ var optionalLabel = getByText("No selection");
302
+ var submitInput = container.querySelector("input[name=\"test\"]");
303
+ _userEvent["default"].click(optionalLabel);
304
+ expect(onChange).toHaveBeenCalledWith("");
305
+ expect(submitInput.value).toBe("");
142
306
  });
143
- test("Select an option - Click on radio input label", function () {
307
+ test("Controlled radio group", function () {
144
308
  var onChange = jest.fn();
145
-
146
- var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
147
- label: "test-radio-group-label",
148
- helperText: "test-radio-group-helper-text",
149
- options: single_options,
150
- onChange: onChange
151
- })),
152
- getByText = _render4.getByText,
153
- getAllByRole = _render4.getAllByRole;
154
-
155
- var radio = getByText("Option 10");
156
-
157
- _userEvent["default"].click(radio);
158
-
159
- expect(onChange).toHaveBeenCalled();
160
- expect(onChange).toHaveBeenCalledWith("10");
161
- expect(getAllByRole("radio")[9].getAttribute("aria-checked")).toBe("true");
309
+ var onBlur = jest.fn();
310
+ var _render12 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
311
+ name: "test",
312
+ value: "2",
313
+ label: "test-radio-group-label",
314
+ helperText: "test-radio-group-helper-text",
315
+ options: options,
316
+ onChange: onChange,
317
+ onBlur: onBlur
318
+ })),
319
+ getByRole = _render12.getByRole,
320
+ getAllByRole = _render12.getAllByRole,
321
+ container = _render12.container;
322
+ var radioGroup = getByRole("radiogroup");
323
+ var radios = getAllByRole("radio");
324
+ var submitInput = container.querySelector("input[name=\"test\"]");
325
+ expect(submitInput.value).toBe("2");
326
+ expect(radios[1].tabIndex).toBe(0);
327
+ expect(radios[1].getAttribute("aria-checked")).toBe("true");
328
+ _userEvent["default"].click(radios[6]);
329
+ expect(onChange).toHaveBeenCalledWith("7");
330
+ _react2.fireEvent.blur(radioGroup);
331
+ expect(onBlur).toHaveBeenCalledWith({
332
+ value: "2"
333
+ });
162
334
  });
163
- test("Select an option - Click on radio input", function () {
335
+ test("Select an option by clicking on its label", function () {
164
336
  var onChange = jest.fn();
165
-
166
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
167
- label: "test-radio-group-label",
168
- helperText: "test-radio-group-helper-text",
169
- options: single_options,
170
- onChange: onChange
171
- })),
172
- getAllByRole = _render5.getAllByRole;
173
-
174
- var radio = getAllByRole("radio")[6];
175
-
176
- _userEvent["default"].click(radio);
177
-
178
- expect(onChange).toHaveBeenCalled();
337
+ var _render13 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
338
+ name: "test",
339
+ label: "test-radio-group-label",
340
+ helperText: "test-radio-group-helper-text",
341
+ options: options,
342
+ onChange: onChange
343
+ })),
344
+ getByText = _render13.getByText,
345
+ getAllByRole = _render13.getAllByRole,
346
+ container = _render13.container;
347
+ var radioLabel = getByText("Option 09");
348
+ var checkedRadio = getAllByRole("radio")[8];
349
+ var submitInput = container.querySelector("input[name=\"test\"]");
350
+ expect(checkedRadio.tabIndex).toBe(-1);
351
+ _userEvent["default"].click(radioLabel);
352
+ expect(onChange).toHaveBeenCalledWith("9");
353
+ expect(checkedRadio.getAttribute("aria-checked")).toBe("true");
354
+ expect(checkedRadio.tabIndex).toBe(0);
355
+ expect(document.activeElement).toEqual(checkedRadio);
356
+ expect(submitInput.value).toBe("9");
357
+ });
358
+ test("Select an option by clicking on its radio input", function () {
359
+ var onChange = jest.fn();
360
+ var _render14 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
361
+ name: "test",
362
+ label: "test-radio-group-label",
363
+ helperText: "test-radio-group-helper-text",
364
+ options: options,
365
+ onChange: onChange
366
+ })),
367
+ getAllByRole = _render14.getAllByRole,
368
+ container = _render14.container;
369
+ var checkedRadio = getAllByRole("radio")[6];
370
+ var submitInput = container.querySelector("input[name=\"test\"]");
371
+ expect(checkedRadio.tabIndex).toBe(-1);
372
+ _userEvent["default"].click(checkedRadio);
179
373
  expect(onChange).toHaveBeenCalledWith("7");
180
- expect(radio.getAttribute("aria-checked")).toBe("true");
374
+ expect(checkedRadio.getAttribute("aria-checked")).toBe("true");
375
+ expect(checkedRadio.tabIndex).toBe(0);
376
+ expect(document.activeElement).toEqual(checkedRadio);
377
+ expect(submitInput.value).toBe("7");
181
378
  });
182
- test("Select an option - Tab and Enter key", function () {
379
+ test("Select an option that is already checked does not call onChange event but gives the focus", function () {
183
380
  var onChange = jest.fn();
184
-
185
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
186
- label: "test-radio-group-label",
187
- helperText: "test-radio-group-helper-text",
188
- options: single_options,
189
- onChange: onChange
190
- })),
191
- getByRole = _render6.getByRole,
192
- getAllByRole = _render6.getAllByRole;
193
-
381
+ var _render15 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
382
+ defaultValue: "2",
383
+ name: "test",
384
+ label: "test-radio-group-label",
385
+ helperText: "test-radio-group-helper-text",
386
+ options: options,
387
+ onChange: onChange
388
+ })),
389
+ getAllByRole = _render15.getAllByRole;
390
+ var checkedRadio = getAllByRole("radio")[1];
391
+ expect(checkedRadio.tabIndex).toBe(0);
392
+ expect(checkedRadio.getAttribute("aria-checked")).toBe("true");
393
+ _userEvent["default"].click(checkedRadio);
394
+ expect(onChange).not.toHaveBeenCalled();
395
+ expect(document.activeElement).toEqual(checkedRadio);
396
+ });
397
+ test("The 'space' key checks the current focused option if anyone is checked", function () {
398
+ var onChange = jest.fn();
399
+ var _render16 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
400
+ name: "test",
401
+ label: "test-radio-group-label",
402
+ helperText: "test-radio-group-helper-text",
403
+ options: options,
404
+ onChange: onChange
405
+ })),
406
+ getByRole = _render16.getByRole,
407
+ getAllByRole = _render16.getAllByRole,
408
+ container = _render16.container;
194
409
  var radioGroup = getByRole("radiogroup");
195
- var radio = getAllByRole("radio")[0];
196
-
410
+ var checkedRadio = getAllByRole("radio")[0];
411
+ var submitInput = container.querySelector("input[name=\"test\"]");
197
412
  _react2.fireEvent.keyDown(radioGroup, {
198
- key: "Tab",
199
- code: "Tab",
200
- keyCode: 9,
201
- charCode: 9
413
+ key: " ",
414
+ code: "Space",
415
+ keyCode: 32,
416
+ charCode: 32
202
417
  });
203
-
418
+ expect(onChange).toHaveBeenCalledWith("1");
419
+ expect(checkedRadio.getAttribute("aria-checked")).toBe("true");
420
+ expect(checkedRadio.tabIndex).toBe(0);
421
+ expect(submitInput.value).toBe("1");
422
+ });
423
+ test("When the radio group gains the focus by keyboard ('tab' key), it goes to the first option (if no one was previously selected), without selecting it", function () {
424
+ var onChange = jest.fn();
425
+ var onBlur = jest.fn();
426
+ var _render17 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
427
+ name: "test",
428
+ label: "test-radio-group-label",
429
+ helperText: "test-radio-group-helper-text",
430
+ options: options,
431
+ onChange: onChange,
432
+ onBlur: onBlur
433
+ })),
434
+ getByRole = _render17.getByRole,
435
+ getAllByRole = _render17.getAllByRole,
436
+ container = _render17.container;
437
+ var radioGroup = getByRole("radiogroup");
438
+ var radios = getAllByRole("radio");
439
+ var submitInput = container.querySelector("input[name=\"test\"]");
440
+ var checkedRadio = getAllByRole("radio")[0];
441
+ _userEvent["default"].tab();
442
+ expect(onChange).not.toHaveBeenCalled();
443
+ expect(submitInput.value).toBe("");
444
+ expect(checkedRadio.tabIndex).toBe(0);
445
+ expect(checkedRadio.getAttribute("aria-checked")).toBe("false");
446
+ expect(document.activeElement).toEqual(checkedRadio);
204
447
  _react2.fireEvent.keyDown(radioGroup, {
205
- key: "Enter",
206
- code: "Enter",
207
- keyCode: 13,
208
- charCode: 13
448
+ key: "ArrowRight",
449
+ code: "ArrowRight",
450
+ keyCode: 39,
451
+ charCode: 39
209
452
  });
210
-
211
- expect(onChange).toHaveBeenCalled();
212
- expect(onChange).toHaveBeenCalledWith("1");
213
- expect(radio.getAttribute("aria-checked")).toBe("true");
453
+ expect(onBlur).not.toHaveBeenCalled();
454
+ expect(onChange).toHaveBeenCalledTimes(1);
455
+ expect(radios[1].getAttribute("aria-checked")).toBe("true");
456
+ expect(document.activeElement).toEqual(radios[1]);
457
+ expect(radios[1].tabIndex).toBe(0);
458
+ expect(submitInput.value).toBe("2");
214
459
  });
215
- test("Select an option - Tab and Space key", function () {
460
+ test("The 'arrowDown' and 'arrowRight' keys move the selection to the next radio. When the last radio is reached, moves the selection to the first one", function () {
216
461
  var onChange = jest.fn();
217
-
218
- var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
219
- label: "test-radio-group-label",
220
- helperText: "test-radio-group-helper-text",
221
- options: single_options,
222
- onChange: onChange
223
- })),
224
- getByRole = _render7.getByRole,
225
- getAllByRole = _render7.getAllByRole;
226
-
462
+ var onBlur = jest.fn();
463
+ var _render18 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
464
+ defaultValue: "8",
465
+ name: "test",
466
+ label: "test-radio-group-label",
467
+ helperText: "test-radio-group-helper-text",
468
+ options: options,
469
+ onChange: onChange,
470
+ onBlur: onBlur
471
+ })),
472
+ getByRole = _render18.getByRole,
473
+ getAllByRole = _render18.getAllByRole,
474
+ container = _render18.container;
227
475
  var radioGroup = getByRole("radiogroup");
228
- var radio = getAllByRole("radio")[0];
229
-
476
+ var radios = getAllByRole("radio");
477
+ var submitInput = container.querySelector("input[name=\"test\"]");
230
478
  _react2.fireEvent.keyDown(radioGroup, {
231
- key: "Tab",
232
- code: "Tab",
233
- keyCode: 9,
234
- charCode: 9
479
+ key: "ArrowDown",
480
+ code: "ArrowDown",
481
+ keyCode: 40,
482
+ charCode: 40
235
483
  });
236
-
484
+ expect(onBlur).not.toHaveBeenCalled();
485
+ expect(onChange).toHaveBeenCalledTimes(1);
486
+ expect(radios[8].getAttribute("aria-checked")).toBe("true");
487
+ expect(document.activeElement).toEqual(radios[8]);
488
+ expect(radios[8].tabIndex).toBe(0);
489
+ expect(submitInput.value).toBe("9");
237
490
  _react2.fireEvent.keyDown(radioGroup, {
238
- key: "Space",
239
- code: "Space",
240
- keyCode: 32,
241
- charCode: 32
491
+ key: "ArrowRight",
492
+ code: "ArrowRight",
493
+ keyCode: 39,
494
+ charCode: 39
242
495
  });
243
-
244
- expect(onChange).toHaveBeenCalled();
245
- expect(onChange).toHaveBeenCalledWith("1");
246
- expect(radio.getAttribute("aria-checked")).toBe("true");
496
+ expect(onBlur).not.toHaveBeenCalled();
497
+ expect(onChange).toHaveBeenCalledTimes(2);
498
+ expect(radios[0].getAttribute("aria-checked")).toBe("true");
499
+ expect(document.activeElement).toEqual(radios[0]);
500
+ expect(radios[0].tabIndex).toBe(0);
501
+ expect(submitInput.value).toBe("1");
502
+ });
503
+ test("The 'arrowUp' and 'arrowLeft' keys move the selection to the previous radio. When the first radio is reached, moves the selection to the last one", function () {
504
+ var onChange = jest.fn();
505
+ var onBlur = jest.fn();
506
+ var _render19 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
507
+ defaultValue: "2",
508
+ name: "test",
509
+ label: "test-radio-group-label",
510
+ helperText: "test-radio-group-helper-text",
511
+ options: options,
512
+ onChange: onChange,
513
+ onBlur: onBlur
514
+ })),
515
+ getByRole = _render19.getByRole,
516
+ getAllByRole = _render19.getAllByRole,
517
+ container = _render19.container;
518
+ var radioGroup = getByRole("radiogroup");
519
+ var radios = getAllByRole("radio");
520
+ var submitInput = container.querySelector("input[name=\"test\"]");
521
+ _react2.fireEvent.keyDown(radioGroup, {
522
+ key: "ArrowUp",
523
+ code: "ArrowUp",
524
+ keyCode: 38,
525
+ charCode: 38
526
+ });
527
+ expect(onBlur).not.toHaveBeenCalled();
528
+ expect(onChange).toHaveBeenCalledTimes(1);
529
+ expect(radios[0].getAttribute("aria-checked")).toBe("true");
530
+ expect(document.activeElement).toEqual(radios[0]);
531
+ expect(radios[0].tabIndex).toBe(0);
532
+ expect(submitInput.value).toBe("1");
533
+ _react2.fireEvent.keyDown(radioGroup, {
534
+ key: "ArrowLeft",
535
+ code: "ArrowLeft",
536
+ keyCode: 37,
537
+ charCode: 37
538
+ });
539
+ expect(onBlur).not.toHaveBeenCalled();
540
+ expect(onChange).toHaveBeenCalledTimes(2);
541
+ expect(radios[8].getAttribute("aria-checked")).toBe("true");
542
+ expect(document.activeElement).toEqual(radios[8]);
543
+ expect(radios[8].tabIndex).toBe(0);
544
+ expect(submitInput.value).toBe("9");
545
+ });
546
+ test("Keyboard focus movement continues from the last radio input clicked", function () {
547
+ var onChange = jest.fn();
548
+ var _render20 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
549
+ name: "test",
550
+ label: "test-radio-group-label",
551
+ helperText: "test-radio-group-helper-text",
552
+ options: options,
553
+ onChange: onChange
554
+ })),
555
+ getByRole = _render20.getByRole,
556
+ getAllByRole = _render20.getAllByRole,
557
+ container = _render20.container;
558
+ var radioGroup = getByRole("radiogroup");
559
+ var radios = getAllByRole("radio");
560
+ var submitInput = container.querySelector("input[name=\"test\"]");
561
+ _userEvent["default"].click(radios[3]);
562
+ _react2.fireEvent.keyDown(radioGroup, {
563
+ key: "ArrowDown",
564
+ code: "ArrowDown",
565
+ keyCode: 40,
566
+ charCode: 40
567
+ });
568
+ expect(onChange).toHaveBeenCalledWith("5");
569
+ expect(radios[4].getAttribute("aria-checked")).toBe("true");
570
+ expect(document.activeElement).toEqual(radios[4]);
571
+ expect(radios[4].tabIndex).toBe(0);
572
+ expect(submitInput.value).toBe("5");
573
+ _userEvent["default"].click(radios[8]);
574
+ _react2.fireEvent.keyDown(radioGroup, {
575
+ key: "ArrowLeft",
576
+ code: "ArrowLeft",
577
+ keyCode: 37,
578
+ charCode: 37
579
+ });
580
+ expect(onChange).toHaveBeenCalledWith("8");
581
+ expect(radios[7].getAttribute("aria-checked")).toBe("true");
582
+ expect(document.activeElement).toEqual(radios[7]);
583
+ expect(radios[7].tabIndex).toBe(0);
584
+ expect(submitInput.value).toBe("8");
585
+ });
586
+ test("Readonly radio group lets the user move the focus, but neither click nor keyboard press changes the value", function () {
587
+ var onChange = jest.fn();
588
+ var _render21 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
589
+ name: "test",
590
+ label: "test-radio-group-label",
591
+ helperText: "test-radio-group-helper-text",
592
+ options: options,
593
+ onChange: onChange,
594
+ readonly: true
595
+ })),
596
+ getByRole = _render21.getByRole,
597
+ getAllByRole = _render21.getAllByRole,
598
+ container = _render21.container;
599
+ var radioGroup = getByRole("radiogroup");
600
+ var radios = getAllByRole("radio");
601
+ var submitInput = container.querySelector("input[name=\"test\"]");
602
+ _userEvent["default"].click(radios[5]);
603
+ expect(onChange).not.toHaveBeenCalled();
604
+ expect(radios[5].getAttribute("aria-checked")).toBe("false");
605
+ expect(document.activeElement).toEqual(radios[5]);
606
+ expect(radios[5].tabIndex).toBe(0);
607
+ expect(submitInput.value).toBe("");
608
+ _react2.fireEvent.keyDown(radioGroup, {
609
+ key: "ArrowUp",
610
+ code: "ArrowUp",
611
+ keyCode: 38,
612
+ charCode: 38
613
+ });
614
+ expect(onChange).not.toHaveBeenCalled();
615
+ expect(radios[4].getAttribute("aria-checked")).toBe("false");
616
+ expect(document.activeElement).toEqual(radios[4]);
617
+ expect(radios[4].tabIndex).toBe(0);
618
+ expect(submitInput.value).toBe("");
247
619
  });
248
620
  });