@json-editor/json-editor 1.4.0-beta.0 → 1.17.0

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 (435) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/.env +2 -0
  3. package/.env-dist +2 -0
  4. package/.eslintrc +10 -0
  5. package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
  6. package/.github/workflows/build.yml +70 -0
  7. package/.travis.yml +62 -16
  8. package/CHANGELOG.md +483 -113
  9. package/CONTRIBUTING.md +43 -4
  10. package/Makefile +26 -0
  11. package/README.md +632 -121
  12. package/README_ADDON.md +577 -0
  13. package/UPGRADING.md +46 -0
  14. package/build/CssToJson.js +55 -0
  15. package/codecept.conf.js +35 -0
  16. package/config/.eslintrc +7 -0
  17. package/config/codeceptjs_helpers.js +146 -0
  18. package/config/helpers.js +10 -0
  19. package/config/karma.conf.js +89 -0
  20. package/config/readme.md +31 -0
  21. package/config/webpack.common.js +71 -0
  22. package/config/webpack.dev.js +15 -0
  23. package/config/webpack.nonmin.js +19 -0
  24. package/config/webpack.prod.js +24 -0
  25. package/dist/jsoneditor.js +2 -11550
  26. package/dist/jsoneditor.js.LICENSE.txt +15 -0
  27. package/dist/nonmin/jsoneditor.js +31392 -0
  28. package/dist/nonmin/jsoneditor.js.map +1 -0
  29. package/docs/basic.html +2 -2
  30. package/docs/basic_person.json +2 -1
  31. package/docs/choices.html +86 -0
  32. package/docs/cleave.html +11 -19
  33. package/docs/colorpicker.html +194 -0
  34. package/docs/css_integration.html +56 -54
  35. package/docs/custom-editor.html +92 -0
  36. package/docs/datetime.html +48 -21
  37. package/docs/describedby.html +42 -35
  38. package/docs/enumsource.html +67 -0
  39. package/docs/form-submission.html +162 -0
  40. package/docs/imask.html +192 -0
  41. package/docs/index.html +600 -582
  42. package/docs/materialize_css.html +1 -1
  43. package/docs/meta-schema.html +793 -0
  44. package/docs/meta_schema.json +446 -400
  45. package/docs/polyfills/assign.js +29 -0
  46. package/docs/radio.html +9 -17
  47. package/docs/recursive.html +15 -17
  48. package/docs/scripts/ajv-validator.js +8695 -0
  49. package/docs/select2.html +15 -9
  50. package/docs/selectize.html +11 -9
  51. package/docs/signature.html +12 -11
  52. package/docs/starrating.html +5 -17
  53. package/docs/upload.html +33 -23
  54. package/docs/uuid.html +70 -0
  55. package/docs/wysiwyg.html +14 -7
  56. package/jasmine.json +11 -0
  57. package/package.json +74 -25
  58. package/release-notes.md +90 -0
  59. package/src/core.js +411 -611
  60. package/src/defaults.js +381 -327
  61. package/src/editor.js +733 -544
  62. package/src/editors/ace.js +90 -0
  63. package/src/editors/array/choices.js +104 -0
  64. package/src/editors/array/select2.js +112 -0
  65. package/src/editors/array/selectize.js +107 -130
  66. package/src/editors/array.css +9 -0
  67. package/src/editors/array.css.js +3 -0
  68. package/src/editors/array.js +812 -695
  69. package/src/editors/autocomplete.js +59 -0
  70. package/src/editors/base64.js +148 -129
  71. package/src/editors/button.js +104 -0
  72. package/src/editors/checkbox.js +111 -76
  73. package/src/editors/choices.css +3 -0
  74. package/src/editors/choices.css.js +3 -0
  75. package/src/editors/choices.js +71 -0
  76. package/src/editors/colorpicker.js +105 -0
  77. package/src/editors/datetime.js +93 -79
  78. package/src/editors/describedby.js +141 -125
  79. package/src/editors/enum.js +131 -116
  80. package/src/editors/hidden.js +100 -86
  81. package/src/editors/index.js +81 -0
  82. package/src/editors/info.js +28 -0
  83. package/src/editors/integer.js +21 -8
  84. package/src/editors/ip.js +36 -0
  85. package/src/editors/jodit.js +66 -0
  86. package/src/editors/multiple.js +380 -241
  87. package/src/editors/multiselect.js +207 -207
  88. package/src/editors/null.js +15 -11
  89. package/src/editors/number.js +39 -30
  90. package/src/editors/object.css +41 -0
  91. package/src/editors/object.css.js +3 -0
  92. package/src/editors/object.js +1190 -1068
  93. package/src/editors/radio.js +117 -101
  94. package/src/editors/sceditor.js +74 -0
  95. package/src/editors/select.js +318 -342
  96. package/src/editors/select2.js +112 -0
  97. package/src/editors/selectize.js +89 -338
  98. package/src/editors/signature.js +100 -104
  99. package/src/editors/simplemde.js +103 -0
  100. package/src/{styles → editors}/starrating.css +11 -2
  101. package/src/editors/starrating.css.js +3 -0
  102. package/src/editors/starrating.js +126 -95
  103. package/src/editors/stepper.js +27 -0
  104. package/src/editors/string.js +352 -426
  105. package/src/editors/table.js +486 -410
  106. package/src/editors/upload.js +297 -131
  107. package/src/editors/uuid.js +49 -0
  108. package/src/iconlib.js +22 -27
  109. package/src/iconlibs/bootstrap.js +28 -0
  110. package/src/iconlibs/bootstrap2.js +28 -17
  111. package/src/iconlibs/bootstrap3.js +28 -17
  112. package/src/iconlibs/fontawesome3.js +28 -17
  113. package/src/iconlibs/fontawesome4.js +28 -18
  114. package/src/iconlibs/fontawesome5.js +28 -18
  115. package/src/iconlibs/foundation2.js +24 -17
  116. package/src/iconlibs/foundation3.js +28 -17
  117. package/src/iconlibs/index.js +27 -0
  118. package/src/iconlibs/jqueryui.js +28 -17
  119. package/src/iconlibs/materialicons.js +49 -44
  120. package/src/iconlibs/openiconic.js +28 -0
  121. package/src/iconlibs/spectre.js +28 -0
  122. package/src/resolvers.js +135 -0
  123. package/src/schemaloader.js +639 -0
  124. package/src/style.css +157 -0
  125. package/src/style.css.js +3 -0
  126. package/src/templates/default.js +46 -51
  127. package/src/templates/ejs.js +8 -10
  128. package/src/templates/handlebars.js +1 -3
  129. package/src/templates/hogan.js +7 -9
  130. package/src/templates/index.js +21 -0
  131. package/src/templates/lodash.js +6 -8
  132. package/src/templates/markup.js +6 -8
  133. package/src/templates/mustache.js +6 -8
  134. package/src/templates/swig.js +1 -3
  135. package/src/templates/underscore.js +6 -8
  136. package/src/theme.js +717 -433
  137. package/src/themes/barebones.css +35 -0
  138. package/src/themes/barebones.css.js +3 -0
  139. package/src/themes/barebones.js +31 -0
  140. package/src/themes/bootstrap2.js +302 -265
  141. package/src/themes/bootstrap3.css +53 -0
  142. package/src/themes/bootstrap3.css.js +3 -0
  143. package/src/themes/bootstrap3.js +355 -262
  144. package/src/themes/bootstrap4.css +89 -0
  145. package/src/themes/bootstrap4.css.js +3 -0
  146. package/src/themes/bootstrap4.js +743 -237
  147. package/src/themes/bootstrap5.css +97 -0
  148. package/src/themes/bootstrap5.css.js +3 -0
  149. package/src/themes/bootstrap5.js +687 -0
  150. package/src/themes/foundation.js +535 -472
  151. package/src/themes/html.css +60 -0
  152. package/src/themes/html.css.js +3 -0
  153. package/src/themes/html.js +69 -82
  154. package/src/themes/index.js +29 -0
  155. package/src/themes/jqueryui.js +181 -167
  156. package/src/themes/materialize.js +263 -292
  157. package/src/themes/spectre.css +208 -0
  158. package/src/themes/spectre.css.js +3 -0
  159. package/src/themes/spectre.js +443 -0
  160. package/src/themes/tailwind.css +303 -0
  161. package/src/themes/tailwind.css.js +3 -0
  162. package/src/themes/tailwind.js +469 -0
  163. package/src/utilities.js +127 -68
  164. package/src/validator.js +909 -565
  165. package/src/validators/ip-validator.js +51 -0
  166. package/tests/Dockerfile +3 -0
  167. package/tests/README.md +25 -5
  168. package/tests/codeceptjs/codecept.json +9 -2
  169. package/tests/codeceptjs/constrains/contains_test.js +37 -0
  170. package/tests/codeceptjs/constrains/dependentRequired_test.js +33 -0
  171. package/tests/codeceptjs/constrains/dependentSchemas_test.js +16 -0
  172. package/tests/codeceptjs/constrains/if-then-else_test.js +186 -0
  173. package/tests/codeceptjs/core_test.js +534 -63
  174. package/tests/codeceptjs/editors/advanced_test.js +12 -9
  175. package/tests/codeceptjs/editors/array_any_of_test.js +50 -0
  176. package/tests/codeceptjs/editors/array_test.js +923 -657
  177. package/tests/codeceptjs/editors/autocomplete_test.js +15 -0
  178. package/tests/codeceptjs/editors/button_test.js +50 -0
  179. package/tests/codeceptjs/editors/checkbox_test.js +21 -6
  180. package/tests/codeceptjs/editors/colorpicker_test.js +29 -0
  181. package/tests/codeceptjs/editors/datetime_test.js +33 -0
  182. package/tests/codeceptjs/editors/inheritance_test.js +10 -0
  183. package/tests/codeceptjs/editors/integer_test.js +82 -64
  184. package/tests/codeceptjs/editors/jodit_test.js +23 -0
  185. package/tests/codeceptjs/editors/multiple_test.js +27 -0
  186. package/tests/codeceptjs/editors/multiselect_test.js +6 -7
  187. package/tests/codeceptjs/editors/number_test.js +75 -60
  188. package/tests/codeceptjs/editors/object_test.js +322 -80
  189. package/tests/codeceptjs/editors/option-no_default_values_test.js +42 -0
  190. package/tests/codeceptjs/editors/programmatic-changes_test.js +20 -0
  191. package/tests/codeceptjs/editors/purify_test.js +26 -0
  192. package/tests/codeceptjs/editors/radio_test.js +9 -0
  193. package/tests/codeceptjs/editors/range_test.js +10 -0
  194. package/tests/codeceptjs/editors/rating_test.js +10 -10
  195. package/tests/codeceptjs/editors/select_test.js +47 -18
  196. package/tests/codeceptjs/editors/starrating_test.js +15 -0
  197. package/tests/codeceptjs/editors/stepper_test.js +37 -0
  198. package/tests/codeceptjs/editors/string_test.js +107 -91
  199. package/tests/codeceptjs/editors/table-confirm-delete_test.js +60 -54
  200. package/tests/codeceptjs/editors/tabs_test.js +15 -11
  201. package/tests/codeceptjs/editors/uuid_test.js +48 -0
  202. package/tests/codeceptjs/editors/validation_test.js +13 -9
  203. package/tests/codeceptjs/issues/issue-gh-1133_test.js +9 -0
  204. package/tests/codeceptjs/issues/issue-gh-1158-2_test.js +10 -0
  205. package/tests/codeceptjs/issues/issue-gh-1158_test.js +8 -0
  206. package/tests/codeceptjs/issues/issue-gh-1164_test.js +9 -0
  207. package/tests/codeceptjs/issues/issue-gh-1171_test.js +11 -0
  208. package/tests/codeceptjs/issues/issue-gh-1211_test.js +17 -0
  209. package/tests/codeceptjs/issues/issue-gh-1257_test.js +11 -0
  210. package/tests/codeceptjs/issues/issue-gh-1272_test.js +21 -0
  211. package/tests/codeceptjs/issues/issue-gh-1330_test.js +8 -0
  212. package/tests/codeceptjs/issues/issue-gh-1338_test.js +18 -0
  213. package/tests/codeceptjs/issues/issue-gh-1347_test.js +8 -0
  214. package/tests/codeceptjs/issues/issue-gh-1364_test.js +13 -0
  215. package/tests/codeceptjs/issues/issue-gh-1367_test.js +11 -0
  216. package/tests/codeceptjs/issues/issue-gh-1383_test.js +9 -0
  217. package/tests/codeceptjs/issues/issue-gh-1384_test.js +9 -0
  218. package/tests/codeceptjs/issues/issue-gh-1410_test.js +13 -0
  219. package/tests/codeceptjs/issues/issue-gh-1422_test.js +9 -0
  220. package/tests/codeceptjs/issues/issue-gh-1431_test.js +12 -0
  221. package/tests/codeceptjs/issues/issue-gh-1439_test.js +12 -0
  222. package/tests/codeceptjs/issues/issue-gh-1452_test.js +10 -0
  223. package/tests/codeceptjs/issues/issue-gh-1453_test.js +18 -0
  224. package/tests/codeceptjs/issues/issue-gh-1461_test.js +14 -0
  225. package/tests/codeceptjs/issues/issue-gh-1463_test.js +9 -0
  226. package/tests/codeceptjs/issues/issue-gh-1471_test.js +17 -0
  227. package/tests/codeceptjs/issues/issue-gh-1485_test.js +13 -0
  228. package/tests/codeceptjs/issues/issue-gh-1491_test.js +9 -0
  229. package/tests/codeceptjs/issues/issue-gh-1525_test.js +9 -0
  230. package/tests/codeceptjs/issues/issue-gh-1536_test.js +12 -0
  231. package/tests/codeceptjs/issues/issue-gh-1538_test.js +10 -0
  232. package/tests/codeceptjs/issues/issue-gh-1541_test.js +8 -0
  233. package/tests/codeceptjs/issues/issue-gh-1559_test.js +15 -0
  234. package/tests/codeceptjs/issues/issue-gh-1562_test.js +12 -0
  235. package/tests/codeceptjs/issues/issue-gh-1586_test.js +15 -0
  236. package/tests/codeceptjs/issues/issue-gh-1636_test.js +9 -0
  237. package/tests/codeceptjs/issues/issue-gh-795_test.js +13 -0
  238. package/tests/codeceptjs/issues/issue-gh-810_test.js +52 -0
  239. package/tests/codeceptjs/issues/issue-gh-812_test.js +25 -0
  240. package/tests/codeceptjs/meta-schema_test.js +85 -0
  241. package/tests/codeceptjs/schemaloader_test.js +14 -0
  242. package/tests/codeceptjs/steps.d.ts +13 -0
  243. package/tests/codeceptjs/steps_file.js +4 -4
  244. package/tests/codeceptjs/test-config.js +3 -0
  245. package/tests/codeceptjs/themes_test.js +564 -0
  246. package/tests/docker-compose-local.yml +5 -0
  247. package/tests/docker-compose.yml +11 -19
  248. package/tests/fixtures/basic_person.json +2 -1
  249. package/tests/fixtures/definitions.json +22 -0
  250. package/tests/fixtures/nested_object.json +26 -0
  251. package/tests/fixtures/properties.json +20 -0
  252. package/tests/fixtures/some_types.json +32 -0
  253. package/tests/fixtures/validation.json +1347 -0
  254. package/tests/pages/_demo.html +475 -0
  255. package/tests/pages/advanced.html +1 -1
  256. package/tests/pages/anyof-2.html +91 -0
  257. package/tests/pages/anyof.html +82 -0
  258. package/tests/pages/array-anyof.html +145 -0
  259. package/tests/pages/array-checkboxes-infotext.html +55 -0
  260. package/tests/pages/array-checkboxes.html +5 -2
  261. package/tests/pages/array-choices.html +48 -0
  262. package/tests/pages/array-events-table.html +70 -0
  263. package/tests/pages/array-events.html +75 -0
  264. package/tests/pages/array-header-template.html +60 -0
  265. package/tests/pages/array-integers.html +5 -2
  266. package/tests/pages/array-multiselects.html +5 -2
  267. package/tests/pages/array-nested-arrays.html +5 -2
  268. package/tests/pages/array-numbers.html +5 -2
  269. package/tests/pages/array-objects.html +5 -2
  270. package/tests/pages/array-ratings.html +5 -2
  271. package/tests/pages/array-selectize-create.html +63 -0
  272. package/tests/pages/array-selectize.html +10 -8
  273. package/tests/pages/array-selects.html +5 -2
  274. package/tests/pages/array-strings.html +5 -2
  275. package/tests/pages/array-table-responsive.html +66 -0
  276. package/tests/pages/array-unique-items-sort.html +81 -0
  277. package/tests/pages/array.html +5 -2
  278. package/tests/pages/assets/autocomplete.css +1 -0
  279. package/tests/pages/assets/autocomplete.min.js +1 -0
  280. package/tests/pages/assets/pages.css +130 -0
  281. package/tests/pages/autocomplete.html +72 -0
  282. package/tests/pages/button-callbacks.html +79 -0
  283. package/tests/pages/button-icons.html +39 -0
  284. package/tests/pages/button_state_mode_1.html +35 -0
  285. package/tests/pages/button_state_mode_2.html +36 -0
  286. package/tests/pages/checkbox-labels.html +116 -0
  287. package/tests/pages/colorpicker-no-3rd-party.html +45 -0
  288. package/tests/pages/colorpicker-use-vanilla-picker.html +52 -0
  289. package/tests/pages/container-attributes.html +51 -0
  290. package/tests/pages/contains.html +39 -0
  291. package/tests/pages/core.html +14 -7
  292. package/tests/pages/datetime.html +78 -0
  293. package/tests/pages/dependentRequired.html +72 -0
  294. package/tests/pages/dependentSchemas.html +53 -0
  295. package/tests/pages/disable-button-in-object-editors.html +57 -0
  296. package/tests/pages/editor-show-validation-errors.html +54 -0
  297. package/tests/pages/enforce-const.html +168 -0
  298. package/tests/pages/error-messages.html +48 -0
  299. package/tests/pages/form-name.html +111 -0
  300. package/tests/pages/grid-strict.html +10 -13
  301. package/tests/pages/grid.html +4 -7
  302. package/tests/pages/if-else.html +58 -0
  303. package/tests/pages/if-then-else-allOf.html +118 -0
  304. package/tests/pages/if-then-else-disable-fields.html +70 -0
  305. package/tests/pages/if-then-else.html +65 -0
  306. package/tests/pages/if-then.html +58 -0
  307. package/tests/pages/inheritance.html +80 -0
  308. package/tests/pages/integer.html +17 -10
  309. package/tests/pages/issues/_template.html +50 -0
  310. package/tests/pages/issues/issue-gh-1133.html +64 -0
  311. package/tests/pages/issues/issue-gh-1158-2.html +189 -0
  312. package/tests/pages/issues/issue-gh-1158.html +50 -0
  313. package/tests/pages/issues/issue-gh-1164.html +71 -0
  314. package/tests/pages/issues/issue-gh-1165.html +63 -0
  315. package/tests/pages/issues/issue-gh-1165.json +8 -0
  316. package/tests/pages/issues/issue-gh-1171.html +39 -0
  317. package/tests/pages/issues/issue-gh-1211.html +1022 -0
  318. package/tests/pages/issues/issue-gh-1233-failing.html +46 -0
  319. package/tests/pages/issues/issue-gh-1233-passing.html +49 -0
  320. package/tests/pages/issues/issue-gh-1257.html +77 -0
  321. package/tests/pages/issues/issue-gh-1272.html +167 -0
  322. package/tests/pages/issues/issue-gh-1330.html +52 -0
  323. package/tests/pages/issues/issue-gh-1338.html +74 -0
  324. package/tests/pages/issues/issue-gh-1347.html +142 -0
  325. package/tests/pages/issues/issue-gh-1364.html +64 -0
  326. package/tests/pages/issues/issue-gh-1367.html +49 -0
  327. package/tests/pages/issues/issue-gh-1383.html +31 -0
  328. package/tests/pages/issues/issue-gh-1383.json +14 -0
  329. package/tests/pages/issues/issue-gh-1384.html +31 -0
  330. package/tests/pages/issues/issue-gh-1384.json +36 -0
  331. package/tests/pages/issues/issue-gh-1410.html +57 -0
  332. package/tests/pages/issues/issue-gh-1422.html +68 -0
  333. package/tests/pages/issues/issue-gh-1431.html +49 -0
  334. package/tests/pages/issues/issue-gh-1439.html +69 -0
  335. package/tests/pages/issues/issue-gh-1452.html +98 -0
  336. package/tests/pages/issues/issue-gh-1453.html +45 -0
  337. package/tests/pages/issues/issue-gh-1461.html +55 -0
  338. package/tests/pages/issues/issue-gh-1463.html +41 -0
  339. package/tests/pages/issues/issue-gh-1466.html +63 -0
  340. package/tests/pages/issues/issue-gh-1471.html +49 -0
  341. package/tests/pages/issues/issue-gh-1485.html +59 -0
  342. package/tests/pages/issues/issue-gh-1491.html +59 -0
  343. package/tests/pages/issues/issue-gh-1525.html +62 -0
  344. package/tests/pages/issues/issue-gh-1536.html +55 -0
  345. package/tests/pages/issues/issue-gh-1538.html +56 -0
  346. package/tests/pages/issues/issue-gh-1541.html +51 -0
  347. package/tests/pages/issues/issue-gh-1541.json +9 -0
  348. package/tests/pages/issues/issue-gh-1559.html +68 -0
  349. package/tests/pages/issues/issue-gh-1562.html +170 -0
  350. package/tests/pages/issues/issue-gh-1586.html +48 -0
  351. package/tests/pages/issues/issue-gh-1636.html +52 -0
  352. package/tests/pages/issues/issue-gh-795.html +58 -0
  353. package/tests/pages/issues/issue-gh-810.html +149 -0
  354. package/tests/pages/issues/issue-gh-812.html +113 -0
  355. package/tests/pages/issues/issue-gh-823-meta-schema.html +35 -0
  356. package/tests/pages/issues/issue-gh-848.html +81 -0
  357. package/tests/pages/keep_only_existing_values.html +81 -0
  358. package/tests/pages/load-events.html +61 -0
  359. package/tests/pages/maxContains.html +40 -0
  360. package/tests/pages/meta-schema.html +793 -0
  361. package/tests/pages/meta_schema.json +740 -0
  362. package/tests/pages/minContains.html +40 -0
  363. package/tests/pages/number.html +53 -6
  364. package/tests/pages/object-case-sensitive-property-search-false.html +42 -0
  365. package/tests/pages/object-case-sensitive-property-search-true.html +42 -0
  366. package/tests/pages/object-no-additional-properties.html +68 -0
  367. package/tests/pages/object-no-duplicated-id.html +70 -0
  368. package/tests/pages/object-required-properties.html +56 -20
  369. package/tests/pages/object-show-opt-in.html +111 -0
  370. package/tests/pages/object-with-dependencies-array.html +58 -0
  371. package/tests/pages/object-with-dependencies.html +62 -0
  372. package/tests/pages/object.html +5 -3
  373. package/tests/pages/oneof-2.html +91 -0
  374. package/tests/pages/oneof.html +105 -0
  375. package/tests/pages/opt-in-widget.html +134 -0
  376. package/tests/pages/option-dependencies.html +107 -0
  377. package/tests/pages/option-no_default_values.html +60 -0
  378. package/tests/pages/per-editor-options.html +44 -0
  379. package/tests/pages/placeholder-options.html +57 -0
  380. package/tests/pages/programmatic-changes.html +121 -0
  381. package/tests/pages/prompt-paste-max-length-reached.html +51 -0
  382. package/tests/pages/purify.html +66 -0
  383. package/tests/pages/range.html +62 -0
  384. package/tests/pages/read-only.html +60 -8
  385. package/tests/pages/ready.html +44 -0
  386. package/tests/pages/references.html +168 -0
  387. package/tests/pages/remove-false-properties.html +85 -0
  388. package/tests/pages/select-values.html +91 -0
  389. package/tests/pages/select.html +4 -3
  390. package/tests/pages/show-validation-errors.html +73 -0
  391. package/tests/pages/starrating.html +86 -0
  392. package/tests/pages/stepper-manual.html +59 -0
  393. package/tests/pages/stepper.html +61 -0
  394. package/tests/pages/string-ace-editor.html +7 -3
  395. package/tests/pages/string-cleave.html +48 -0
  396. package/tests/pages/string-custom-attributes.html +9 -6
  397. package/tests/pages/string-formats.html +54 -0
  398. package/tests/pages/string-formats2.html +59 -0
  399. package/tests/pages/{array-move-events.html → string-jodit-editor.html} +21 -29
  400. package/tests/pages/string-sceditor.html +9 -7
  401. package/tests/pages/string-simplemde-editor.html +83 -0
  402. package/tests/pages/switcher-option.html +69 -0
  403. package/tests/pages/table.html +4 -2
  404. package/tests/pages/tabs.html +1 -1
  405. package/tests/pages/themes.html +517 -0
  406. package/tests/pages/title-hidden.html +75 -0
  407. package/tests/pages/translate-property.html +248 -0
  408. package/tests/pages/urn.html +98 -0
  409. package/tests/pages/use-name-attributes.html +207 -0
  410. package/tests/pages/uuid.html +113 -0
  411. package/tests/pages/validation-messages.json +705 -0
  412. package/tests/pages/validation.html +20 -730
  413. package/tests/unit/.eslintrc +8 -0
  414. package/tests/unit/core.spec.js +320 -0
  415. package/tests/unit/defaults.spec.js +40 -0
  416. package/tests/unit/editor.spec.js +172 -0
  417. package/tests/unit/editors/array.spec.js +87 -0
  418. package/tests/unit/editors/object.spec.js +81 -0
  419. package/tests/unit/editors/table.spec.js +93 -0
  420. package/tests/unit/readme.md +35 -0
  421. package/tests/unit/schemaloader.spec.js +576 -0
  422. package/tests/unit/validator.spec.js +104 -0
  423. package/tests/unit/validators/ip-validator.spec.js +62 -0
  424. package/Gruntfile.js +0 -228
  425. package/dist/css/jsoneditor.min.css +0 -1
  426. package/dist/jsoneditor.js.map +0 -1
  427. package/dist/jsoneditor.min.js +0 -19
  428. package/dist/jsoneditor.min.js.map +0 -1
  429. package/src/class.js +0 -68
  430. package/src/editors/rating.js +0 -152
  431. package/src/ie9.js +0 -51
  432. package/src/intro.js +0 -23
  433. package/src/jquery.js +0 -64
  434. package/src/outro.js +0 -2
  435. package/src/themes/jsoneditor.barebones-theme.js +0 -60
@@ -1,770 +1,1036 @@
1
- var assert = require('assert');
2
-
3
- Feature('array');
4
-
5
- Scenario('should have correct initial value', async (I) => {
6
- I.amOnPage('array.html');
7
- I.click('.get-value');
8
- assert.equal(await I.grabValueFrom('.debug'), '[]');
9
- });
10
-
11
- Scenario('should array editing triggers', async (I) => {
12
- I.amOnPage('array-move-events.html');
13
- I.seeElement('[data-schemapath="root.0"]');
14
- I.seeElement('[data-schemapath="root.1"]');
15
- I.click('.get-value');
16
- assert.equal(await I.grabValueFrom('.debug'), '["A","B"]');
17
-
18
- I.click('.json-editor-btn-moveup');
19
- I.seeInPopup('moveRow');
20
- I.acceptPopup();
21
- I.click('.get-value');
22
- assert.equal(await I.grabValueFrom('.debug'), '["B","A"]');
23
-
24
- I.click('.json-editor-btn-movedown');
25
- I.seeInPopup('moveRow');
26
- I.acceptPopup();
27
- I.click('.get-value');
28
- assert.equal(await I.grabValueFrom('.debug'), '["A","B"]');
29
-
30
- I.click('.json-editor-btntype-add');
31
- I.seeInPopup('addRow');
32
- I.acceptPopup();
33
- I.click('.get-value');
34
- assert.equal(await I.grabValueFrom('.debug'), '["A","B",""]');
35
-
36
- I.click('.json-editor-btntype-deletelast');
37
- I.seeInPopup('Are you sure you want to remove this node?');
38
- I.acceptPopup();
39
- I.seeInPopup('deleteRow');
40
- I.acceptPopup();
41
- I.click('.get-value');
42
- assert.equal(await I.grabValueFrom('.debug'), '["A","B"]');
43
-
44
- I.click('.json-editor-btntype-deleteall');
45
- I.seeInPopup('Are you sure you want to remove this node?');
46
- I.acceptPopup();
47
- I.seeInPopup('deleteAllRows');
48
- I.acceptPopup();
49
- I.click('.get-value');
50
- assert.equal(await I.grabValueFrom('.debug'), '[]');
51
- });
52
-
53
- Scenario('should work well with string editors', async (I) => {
54
- I.amOnPage('array-strings.html');
55
- I.click('Add String');
56
- I.click('Add String');
57
- I.click('Add String');
58
- I.click('Add String');
59
- I.click('Add String');
60
- I.seeElement('[name="root[0]"]');
61
- I.seeElement('[name="root[1]"]');
62
- I.seeElement('[name="root[2]"]');
63
- I.seeElement('[name="root[3]"]');
64
- I.seeElement('[name="root[4]"]');
65
- I.fillField('[name="root[0]"]', "1");
66
- I.fillField('[name="root[1]"]', "2");
67
- I.fillField('[name="root[2]"]', "3");
68
- I.fillField('[name="root[3]"]', "4");
69
- I.fillField('[name="root[4]"]', "5");
70
- I.click('.get-value');
71
- assert.equal(await I.grabValueFrom('.debug'), '["1","2","3","4","5"]');
1
+ /* global Feature Scenario */
2
+
3
+ const { DEFAULT_WAIT_TIME } = require('../test-config')
4
+
5
+ Feature('array')
6
+
7
+ Scenario('should be readonly if specified and not disabled @readOnly', async ({ I }) => {
8
+ I.amOnPage('read-only.html')
9
+ I.waitForElement('.je-ready', DEFAULT_WAIT_TIME)
10
+ I.seeDisabledAttribute('[name="root[array][0]"]')
11
+ I.seeDisabledAttribute('[name="root[array][1]"]')
12
+ })
13
+
14
+ Scenario('Should display properties enum titles in items headerTemplate @headerTemplate', async ({ I }) => {
15
+ I.amOnPage('array-header-template.html')
16
+ I.waitForElement('.je-ready', DEFAULT_WAIT_TIME)
17
+ I.waitForText('Dog', DEFAULT_WAIT_TIME, '.nav-link span')
18
+ I.waitForText('Cat', DEFAULT_WAIT_TIME, '.nav-link span')
19
+ })
20
+
21
+ Scenario('Should set buttons states correctly @button_state_mode', async ({ I }) => {
22
+ I.amOnPage('button_state_mode_1.html')
23
+ I.waitForElement('.je-ready', DEFAULT_WAIT_TIME)
24
+ I.waitForElement('.json-editor-btntype-add', DEFAULT_WAIT_TIME)
25
+ I.waitForElement('.json-editor-btn-movedown', DEFAULT_WAIT_TIME)
26
+ I.waitForElement('.json-editor-btn-moveup', DEFAULT_WAIT_TIME)
27
+ I.dontSeeElement('.json-editor-btntype-delete')
28
+ I.dontSeeElement('.json-editor-btntype-deletelast')
29
+ I.dontSeeElement('.json-editor-btntype-deleteall')
30
+ I.click('.json-editor-btntype-add')
31
+ I.waitForElement('.json-editor-btntype-delete')
32
+ I.waitForElement('.json-editor-btntype-deletelast')
33
+ I.waitForElement('.json-editor-btntype-deleteall')
34
+
35
+ I.amOnPage('button_state_mode_2.html')
36
+ I.waitForElement('.je-ready', DEFAULT_WAIT_TIME)
37
+ I.waitForElement('.json-editor-btntype-add', DEFAULT_WAIT_TIME)
38
+ I.waitForElement('.json-editor-btn-movedown', DEFAULT_WAIT_TIME)
39
+ I.waitForElement('.json-editor-btn-moveup', DEFAULT_WAIT_TIME)
40
+ I.waitForElement('.json-editor-btntype-delete', DEFAULT_WAIT_TIME)
41
+ I.waitForElement('.json-editor-btntype-deletelast', DEFAULT_WAIT_TIME)
42
+ I.seeDisabledAttribute('.json-editor-btntype-delete')
43
+ I.seeDisabledAttribute('.json-editor-btntype-deletelast')
44
+ I.seeDisabledAttribute('.json-editor-btntype-deleteall')
45
+ I.click('.json-editor-btntype-add')
46
+ I.dontSeeDisabledAttribute('.json-editor-btntype-delete')
47
+ I.dontSeeDisabledAttribute('.json-editor-btntype-deletelast')
48
+ I.dontSeeDisabledAttribute('.json-editor-btntype-deleteall')
49
+ })
50
+
51
+ Scenario('should have correct initial value', async ({ I }) => {
52
+ I.amOnPage('array.html')
53
+ I.click('.get-value')
54
+ I.waitForValue('.debug', '[]')
55
+ })
56
+
57
+ Scenario('unique items arrays sorting @unique-itmes-sorting', async ({ I }) => {
58
+ I.amOnPage('array-unique-items-sort.html')
59
+ I.waitForElement('.je-ready', DEFAULT_WAIT_TIME)
60
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(1)')
61
+ I.click('.get-value')
62
+ I.waitForValue('.debug', '{"items":["01"]}')
63
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(2)')
64
+ I.click('.get-value')
65
+ I.waitForValue('.debug', '{"items":["01","02"]}')
66
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(3)')
67
+ I.click('.get-value')
68
+ I.waitForValue('.debug', '{"items":["01","02","03"]}')
69
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(4)')
70
+ I.click('.get-value')
71
+ I.waitForValue('.debug', '{"items":["01","02","03","04"]}')
72
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(5)')
73
+ I.click('.get-value')
74
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05"]}')
75
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(6)')
76
+ I.click('.get-value')
77
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06"]}')
78
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(7)')
79
+ I.click('.get-value')
80
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07"]}')
81
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(8)')
82
+ I.click('.get-value')
83
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08"]}')
84
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(9)')
85
+ I.click('.get-value')
86
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08","09"]}')
87
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(10)')
88
+ I.click('.get-value')
89
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08","09","10"]}')
90
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(11)')
91
+ I.click('.get-value')
92
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08","09","10","11"]}')
93
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(12)')
94
+ I.click('.get-value')
95
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08","09","10","11","12"]}')
96
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(13)')
97
+ I.click('.get-value')
98
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08","09","10","11","12","13"]}')
99
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(14)')
100
+ I.click('.get-value')
101
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08","09","10","11","12","13","14"]}')
102
+ I.click('[data-schemapath="root.items"] .form-control:nth-of-type(15)')
103
+ I.click('.get-value')
104
+ I.waitForValue('.debug', '{"items":["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15"]}')
105
+ })
106
+
107
+ Scenario('should array editor events (table) @array-events', async ({ I }) => {
108
+ I.amOnPage('array-events-table.html')
109
+ I.seeElement('[data-schemapath="root.0"]')
110
+ I.seeElement('[data-schemapath="root.1"]')
111
+ I.seeElement('[data-schemapath="root.2"]')
112
+ I.seeElement('[data-schemapath="root.3"]')
113
+ I.seeElement('[data-schemapath="root.4"]')
114
+ I.click('.get-value')
115
+ I.waitForValue('.debug', '["A","B","C","D","E"]')
116
+
117
+ I.amAcceptingPopups()
118
+ I.click('//button[contains(@class, "json-editor-btn-moveup") and @data-i="1"]')
119
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('moveRow')
120
+ I.acceptPopup()
121
+ I.click('.get-value')
122
+ I.waitForValue('.debug', '["B","A","C","D","E"]')
123
+
124
+ I.amAcceptingPopups()
125
+ I.click('//button[contains(@class, "json-editor-btn-movedown") and @data-i="1"]')
126
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('moveRow')
127
+ I.acceptPopup()
128
+ I.click('.get-value')
129
+ I.waitForValue('.debug', '["B","C","A","D","E"]')
130
+
131
+ I.amAcceptingPopups()
132
+ I.click('//button[contains(@class, "json-editor-btn-copy") and @data-i="2"]')
133
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('copyRow')
134
+ I.acceptPopup()
135
+ I.click('.get-value')
136
+ I.waitForValue('.debug', '["B","C","A","A","D","E"]')
137
+
138
+ I.amAcceptingPopups()
139
+ I.click('.json-editor-btntype-add')
140
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('addRow')
141
+ I.acceptPopup()
142
+ I.click('.get-value')
143
+ I.waitForValue('.debug', '["B","C","A","A","D","E",""]')
144
+
145
+ // This test will fail when using Puppeteer due to the way Puppeteer handles popups.
146
+ // Puppeteer apparently only sees the text in the last popup, so it doesn't see the
147
+ // 'Are you sure you want to remove this item?' popup text.
148
+ // ToDo: Change test so instead of using popup for test values like 'deleteRow', use a
149
+ // form field. Similar to the '.debug' field.
150
+ I.amAcceptingPopups()
151
+ I.click('.json-editor-btntype-deletelast')
152
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('Are you sure you want to remove this item?')
153
+ I.acceptPopup()
154
+ I.amAcceptingPopups()
155
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('deleteRow')
156
+ I.acceptPopup()
157
+ I.click('.get-value')
158
+ I.waitForValue('.debug', '["B","C","A","A","D","E"]')
159
+
160
+ // This test will fail when using Puppeteer due to the way Puppeteer handles popups.
161
+ I.amAcceptingPopups()
162
+ I.click('.json-editor-btntype-deleteall')
163
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('Are you sure you want to remove this item?')
164
+ I.acceptPopup()
165
+ I.amAcceptingPopups()
166
+ I.retry({ retries: 5, minTimeout: 500 }).seeInPopup('deleteAllRows')
167
+ I.acceptPopup()
168
+ I.click('.get-value')
169
+ I.waitForValue('.debug', '[]')
170
+ })
171
+
172
+ Scenario('should array editor events @array-events', async ({ I }) => {
173
+ I.amOnPage('array-events.html')
174
+ I.seeElement('[data-schemapath="root.0"]')
175
+ I.seeElement('[data-schemapath="root.1"]')
176
+ I.click('.get-value')
177
+ I.waitForValue('.debug', '["A","B"]')
178
+
179
+ I.click('.json-editor-btn-moveup')
180
+ I.waitForValue('#action1', 'moveRow')
181
+ I.click('.get-value')
182
+ I.waitForValue('.debug', '["B","A"]')
183
+
184
+ I.click('.json-editor-btn-movedown')
185
+ I.waitForValue('#action1', 'moveRow')
186
+ I.click('.get-value')
187
+ I.waitForValue('.debug', '["A","B"]')
188
+
189
+ I.click('.json-editor-btntype-add')
190
+ I.waitForValue('#action1', 'addRow')
191
+ I.click('.get-value')
192
+ I.waitForValue('.debug', '["A","B",""]')
193
+
194
+ I.click('.json-editor-btntype-copy')
195
+ I.waitForValue('#action2', 'copyRow')
196
+ I.click('.get-value')
197
+ I.waitForValue('.debug', '["A","B","","A"]')
198
+
199
+ I.amAcceptingPopups()
200
+ I.click('.json-editor-btntype-deletelast')
201
+ I.seeInPopup('Are you sure you want to remove this item?')
202
+ I.acceptPopup()
203
+ I.waitForValue('#action1', 'deleteRow')
204
+ I.click('.get-value')
205
+ I.waitForValue('.debug', '["A","B",""]')
206
+
207
+ I.amAcceptingPopups()
208
+ I.click('.json-editor-btntype-deleteall')
209
+ I.seeInPopup('Are you sure you want to remove this item?')
210
+ I.acceptPopup()
211
+ I.waitForValue('#action1', 'deleteAllRows')
212
+ I.click('.get-value')
213
+ I.waitForValue('.debug', '[]')
214
+ })
215
+
216
+ Scenario('should work well with string editors', async ({ I }) => {
217
+ I.amOnPage('array-strings.html')
218
+ I.click('Add String')
219
+ I.click('Add String')
220
+ I.click('Add String')
221
+ I.click('Add String')
222
+ I.click('Add String')
223
+ I.seeElement('[name="root[0]"]')
224
+ I.seeElement('[name="root[1]"]')
225
+ I.seeElement('[name="root[2]"]')
226
+ I.seeElement('[name="root[3]"]')
227
+ I.seeElement('[name="root[4]"]')
228
+ I.fillField('[name="root[0]"]', '1')
229
+ I.fillField('[name="root[1]"]', '2')
230
+ I.fillField('[name="root[2]"]', '3')
231
+ I.fillField('[name="root[3]"]', '4')
232
+ I.fillField('[name="root[4]"]', '5')
233
+ I.click('.get-value')
234
+ I.waitForValue('.debug', '["1","2","3","4","5"]')
72
235
 
73
236
  // shuffle
74
- I.click('.moveup[data-i="4"]');
75
- I.click('.moveup[data-i="2"]');
76
- I.click('.moveup[data-i="1"]');
77
- I.click('.get-value');
78
- assert.equal(await I.grabValueFrom('.debug'), '["3","1","2","5","4"]');
237
+ I.click('.moveup[data-i="4"]')
238
+ I.click('.moveup[data-i="2"]')
239
+ I.click('.moveup[data-i="1"]')
240
+ I.click('.get-value')
241
+ I.waitForValue('.debug', '["3","1","2","5","4"]')
79
242
 
80
243
  // delete single
81
- I.see('String 5');
82
- I.click('[data-schemapath="root.4"] .delete');
83
- I.seeInPopup('Are you sure you want to remove this node?');
84
- I.cancelPopup();
85
- I.see('String 5');
86
- I.click('[data-schemapath="root.4"] .delete');
87
- I.seeInPopup('Are you sure you want to remove this node?');
88
- I.acceptPopup();
89
- I.dontSee('String 5');
244
+ I.see('String 5')
245
+ I.amCancellingPopups()
246
+ I.click('[data-schemapath="root.4"] .delete')
247
+ I.seeInPopup('Are you sure you want to remove this item?')
248
+ I.cancelPopup()
249
+ I.see('String 5')
250
+ I.amAcceptingPopups()
251
+ I.click('[data-schemapath="root.4"] .delete')
252
+ I.seeInPopup('Are you sure you want to remove this item?')
253
+ I.acceptPopup()
254
+ I.dontSee('String 5')
90
255
 
91
256
  // delete last
92
- I.see('String 4');
93
- I.click('Delete Last String');
94
- I.seeInPopup('Are you sure you want to remove this node?');
95
- I.cancelPopup();
96
- I.see('String 4');
97
- I.click('Delete Last String');
98
- I.seeInPopup('Are you sure you want to remove this node?');
99
- I.acceptPopup();
100
- I.dontSee('String 4');
257
+ I.see('String 4')
258
+ I.amCancellingPopups()
259
+ I.click('Delete Last String')
260
+ I.seeInPopup('Are you sure you want to remove this item?')
261
+ I.cancelPopup()
262
+ I.see('String 4')
263
+ I.amAcceptingPopups()
264
+ I.click('Delete Last String')
265
+ I.seeInPopup('Are you sure you want to remove this item?')
266
+ I.acceptPopup()
267
+ I.dontSee('String 4')
101
268
 
102
269
  // delete all
103
- I.see('String 1');
104
- I.see('String 2');
105
- I.see('String 3');
106
- I.click('Delete All');
107
- I.seeInPopup('Are you sure you want to remove this node?');
108
- I.cancelPopup();
109
- I.see('String 1');
110
- I.see('String 2');
111
- I.see('String 3');
112
- I.click('Delete All');
113
- I.seeInPopup('Are you sure you want to remove this node?');
114
- I.acceptPopup();
115
- I.dontSee('String 1');
116
- I.dontSee('String 2');
117
- I.dontSee('String 3');
118
- });
119
-
120
- Scenario('should work well with number editors', async (I) => {
121
- I.amOnPage('array-numbers.html');
122
- I.click('Add Number');
123
- I.click('Add Number');
124
- I.click('Add Number');
125
- I.click('Add Number');
126
- I.click('Add Number');
127
- I.seeElement('[name="root[0]"]');
128
- I.seeElement('[name="root[1]"]');
129
- I.seeElement('[name="root[2]"]');
130
- I.seeElement('[name="root[3]"]');
131
- I.seeElement('[name="root[4]"]');
132
- I.fillField('[name="root[0]"]', "1");
133
- I.fillField('[name="root[1]"]', "2");
134
- I.fillField('[name="root[2]"]', "3");
135
- I.fillField('[name="root[3]"]', "4");
136
- I.fillField('[name="root[4]"]', "5");
137
- I.click('.get-value');
138
- assert.equal(await I.grabValueFrom('.debug'), '[1,2,3,4,5]');
270
+ I.see('String 1')
271
+ I.see('String 2')
272
+ I.see('String 3')
273
+ I.amCancellingPopups()
274
+ I.click('Delete All')
275
+ I.seeInPopup('Are you sure you want to remove this item?')
276
+ I.cancelPopup()
277
+ I.see('String 1')
278
+ I.see('String 2')
279
+ I.see('String 3')
280
+ I.amAcceptingPopups()
281
+ I.click('Delete All')
282
+ I.seeInPopup('Are you sure you want to remove this item?')
283
+ I.acceptPopup()
284
+ I.dontSee('String 1')
285
+ I.dontSee('String 2')
286
+ I.dontSee('String 3')
287
+ })
288
+
289
+ Scenario('should work well with number editors', async ({ I }) => {
290
+ I.amOnPage('array-numbers.html')
291
+ I.click('Add Number')
292
+ I.click('Add Number')
293
+ I.click('Add Number')
294
+ I.click('Add Number')
295
+ I.click('Add Number')
296
+ I.seeElement('[name="root[0]"]')
297
+ I.seeElement('[name="root[1]"]')
298
+ I.seeElement('[name="root[2]"]')
299
+ I.seeElement('[name="root[3]"]')
300
+ I.seeElement('[name="root[4]"]')
301
+ I.fillField('[name="root[0]"]', '1')
302
+ I.fillField('[name="root[1]"]', '2')
303
+ I.fillField('[name="root[2]"]', '3')
304
+ I.fillField('[name="root[3]"]', '4')
305
+ I.fillField('[name="root[4]"]', '5')
306
+ I.click('.get-value')
307
+ I.waitForValue('.debug', '[1,2,3,4,5]')
139
308
 
140
309
  // shuffle
141
- I.click('.moveup[data-i="4"]');
142
- I.click('.moveup[data-i="2"]');
143
- I.click('.moveup[data-i="1"]');
144
- I.click('.get-value');
145
- assert.equal(await I.grabValueFrom('.debug'), '[3,1,2,5,4]');
310
+ I.click('.moveup[data-i="4"]')
311
+ I.click('.moveup[data-i="2"]')
312
+ I.click('.moveup[data-i="1"]')
313
+ I.click('.get-value')
314
+ I.waitForValue('.debug', '[3,1,2,5,4]')
146
315
 
147
316
  // delete single
148
- I.see('Number 5');
149
- I.click('[data-schemapath="root.4"] .delete');
150
- I.seeInPopup('Are you sure you want to remove this node?');
151
- I.cancelPopup();
152
- I.see('Number 5');
153
- I.click('[data-schemapath="root.4"] .delete');
154
- I.seeInPopup('Are you sure you want to remove this node?');
155
- I.acceptPopup();
156
- I.dontSee('Number 5');
317
+ I.see('Number 5')
318
+ I.amCancellingPopups()
319
+ I.click('[data-schemapath="root.4"] .delete')
320
+ I.seeInPopup('Are you sure you want to remove this item?')
321
+ I.cancelPopup()
322
+ I.see('Number 5')
323
+ I.amAcceptingPopups()
324
+ I.click('[data-schemapath="root.4"] .delete')
325
+ I.seeInPopup('Are you sure you want to remove this item?')
326
+ I.acceptPopup()
327
+ I.dontSee('Number 5')
157
328
 
158
329
  // delete last
159
- I.see('Number 4');
160
- I.click('Delete Last Number');
161
- I.seeInPopup('Are you sure you want to remove this node?');
162
- I.cancelPopup();
163
- I.see('Number 4');
164
- I.click('Delete Last Number');
165
- I.seeInPopup('Are you sure you want to remove this node?');
166
- I.acceptPopup();
167
- I.dontSee('Number 4');
330
+ I.see('Number 4')
331
+ I.amCancellingPopups()
332
+ I.click('Delete Last Number')
333
+ I.seeInPopup('Are you sure you want to remove this item?')
334
+ I.cancelPopup()
335
+ I.see('Number 4')
336
+ I.amAcceptingPopups()
337
+ I.click('Delete Last Number')
338
+ I.seeInPopup('Are you sure you want to remove this item?')
339
+ I.acceptPopup()
340
+ I.dontSee('Number 4')
168
341
 
169
342
  // delete all
170
- I.see('Number 1');
171
- I.see('Number 2');
172
- I.see('Number 3');
173
- I.click('Delete All');
174
- I.seeInPopup('Are you sure you want to remove this node?');
175
- I.cancelPopup();
176
- I.see('Number 1');
177
- I.see('Number 2');
178
- I.see('Number 3');
179
- I.click('Delete All');
180
- I.seeInPopup('Are you sure you want to remove this node?');
181
- I.acceptPopup();
182
- I.dontSee('Number 1');
183
- I.dontSee('Number 2');
184
- I.dontSee('Number 3');
185
- });
186
-
187
- Scenario('should work well with integer editors', async (I) => {
188
- I.amOnPage('array-integers.html');
189
- I.click('Add Integer');
190
- I.click('Add Integer');
191
- I.click('Add Integer');
192
- I.click('Add Integer');
193
- I.click('Add Integer');
194
- I.seeElement('[name="root[0]"]');
195
- I.seeElement('[name="root[1]"]');
196
- I.seeElement('[name="root[2]"]');
197
- I.seeElement('[name="root[3]"]');
198
- I.seeElement('[name="root[4]"]');
199
- I.fillField('[name="root[0]"]', "1");
200
- I.fillField('[name="root[1]"]', "2");
201
- I.fillField('[name="root[2]"]', "3");
202
- I.fillField('[name="root[3]"]', "4");
203
- I.fillField('[name="root[4]"]', "5");
204
- I.click('.get-value');
205
- assert.equal(await I.grabValueFrom('.debug'), '[1,2,3,4,5]');
343
+ I.see('Number 1')
344
+ I.see('Number 2')
345
+ I.see('Number 3')
346
+ I.amCancellingPopups()
347
+ I.click('Delete All')
348
+ I.seeInPopup('Are you sure you want to remove this item?')
349
+ I.cancelPopup()
350
+ I.see('Number 1')
351
+ I.see('Number 2')
352
+ I.see('Number 3')
353
+ I.amAcceptingPopups()
354
+ I.click('Delete All')
355
+ I.seeInPopup('Are you sure you want to remove this item?')
356
+ I.acceptPopup()
357
+ I.dontSee('Number 1')
358
+ I.dontSee('Number 2')
359
+ I.dontSee('Number 3')
360
+ })
361
+
362
+ Scenario('should work well with integer editors', async ({ I }) => {
363
+ I.amOnPage('array-integers.html')
364
+ I.click('Add Integer')
365
+ I.click('Add Integer')
366
+ I.click('Add Integer')
367
+ I.click('Add Integer')
368
+ I.click('Add Integer')
369
+ I.seeElement('[name="root[0]"]')
370
+ I.seeElement('[name="root[1]"]')
371
+ I.seeElement('[name="root[2]"]')
372
+ I.seeElement('[name="root[3]"]')
373
+ I.seeElement('[name="root[4]"]')
374
+ I.fillField('[name="root[0]"]', '1')
375
+ I.fillField('[name="root[1]"]', '2')
376
+ I.fillField('[name="root[2]"]', '3')
377
+ I.fillField('[name="root[3]"]', '4')
378
+ I.fillField('[name="root[4]"]', '5')
379
+ I.click('.get-value')
380
+ I.waitForValue('.debug', '[1,2,3,4,5]')
206
381
 
207
382
  // shuffle
208
- I.click('.moveup[data-i="4"]');
209
- I.click('.moveup[data-i="2"]');
210
- I.click('.moveup[data-i="1"]');
211
- I.click('.get-value');
212
- assert.equal(await I.grabValueFrom('.debug'), '[3,1,2,5,4]');
383
+ I.click('.moveup[data-i="4"]')
384
+ I.click('.moveup[data-i="2"]')
385
+ I.click('.moveup[data-i="1"]')
386
+ I.click('.get-value')
387
+ I.waitForValue('.debug', '[3,1,2,5,4]')
213
388
 
214
389
  // delete single
215
- I.see('Integer 5');
216
- I.click('[data-schemapath="root.4"] .delete');
217
- I.seeInPopup('Are you sure you want to remove this node?');
218
- I.cancelPopup();
219
- I.see('Integer 5');
220
- I.click('[data-schemapath="root.4"] .delete');
221
- I.seeInPopup('Are you sure you want to remove this node?');
222
- I.acceptPopup();
223
- I.dontSee('Integer 5');
390
+ I.see('Integer 5')
391
+ I.amCancellingPopups()
392
+ I.click('[data-schemapath="root.4"] .delete')
393
+ I.seeInPopup('Are you sure you want to remove this item?')
394
+ I.cancelPopup()
395
+ I.see('Integer 5')
396
+ I.amAcceptingPopups()
397
+ I.click('[data-schemapath="root.4"] .delete')
398
+ I.seeInPopup('Are you sure you want to remove this item?')
399
+ I.acceptPopup()
400
+ I.dontSee('Integer 5')
224
401
 
225
402
  // delete last
226
- I.see('Integer 4');
227
- I.click('Delete Last Integer');
228
- I.seeInPopup('Are you sure you want to remove this node?');
229
- I.cancelPopup();
230
- I.see('Integer 4');
231
- I.click('Delete Last Integer');
232
- I.seeInPopup('Are you sure you want to remove this node?');
233
- I.acceptPopup();
234
- I.dontSee('Integer 4');
403
+ I.see('Integer 4')
404
+ I.amCancellingPopups()
405
+ I.click('Delete Last Integer')
406
+ I.seeInPopup('Are you sure you want to remove this item?')
407
+ I.cancelPopup()
408
+ I.see('Integer 4')
409
+ I.amAcceptingPopups()
410
+ I.click('Delete Last Integer')
411
+ I.seeInPopup('Are you sure you want to remove this item?')
412
+ I.acceptPopup()
413
+ I.dontSee('Integer 4')
235
414
 
236
415
  // delete all
237
- I.see('Integer 1');
238
- I.see('Integer 2');
239
- I.see('Integer 3');
240
- I.click('Delete All');
241
- I.seeInPopup('Are you sure you want to remove this node?');
242
- I.cancelPopup();
243
- I.see('Integer 1');
244
- I.see('Integer 2');
245
- I.see('Integer 3');
246
- I.click('Delete All');
247
- I.seeInPopup('Are you sure you want to remove this node?');
248
- I.acceptPopup();
249
- I.dontSee('Integer 1');
250
- I.dontSee('Integer 2');
251
- I.dontSee('Integer 3');
252
- });
253
-
254
- Scenario('should work well with select editors', async (I) => {
255
- I.amOnPage('array-selects.html');
256
- I.click('Add Select');
257
- I.click('Add Select');
258
- I.seeElement('[name="root[0]"]');
259
- I.seeElement('[name="root[1]"]');
260
- I.selectOption('[name="root[0]"]', "true");
261
- I.selectOption('[name="root[1]"]', "false");
262
- I.click('.get-value');
263
- assert.equal(await I.grabValueFrom('.debug'), '[true,false]');
416
+ I.see('Integer 1')
417
+ I.see('Integer 2')
418
+ I.see('Integer 3')
419
+ I.amCancellingPopups()
420
+ I.click('Delete All')
421
+ I.seeInPopup('Are you sure you want to remove this item?')
422
+ I.cancelPopup()
423
+ I.see('Integer 1')
424
+ I.see('Integer 2')
425
+ I.see('Integer 3')
426
+ I.amAcceptingPopups()
427
+ I.click('Delete All')
428
+ I.seeInPopup('Are you sure you want to remove this item?')
429
+ I.acceptPopup()
430
+ I.dontSee('Integer 1')
431
+ I.dontSee('Integer 2')
432
+ I.dontSee('Integer 3')
433
+ })
434
+
435
+ Scenario('should work well with select editors', async ({ I }) => {
436
+ I.amOnPage('array-selects.html')
437
+ I.click('Add Select')
438
+ I.click('Add Select')
439
+ I.seeElement('[name="root[0]"]')
440
+ I.seeElement('[name="root[1]"]')
441
+ I.selectOption('[name="root[0]"]', 'true')
442
+ I.selectOption('[name="root[1]"]', 'false')
443
+ I.click('.get-value')
444
+ I.waitForValue('.debug', '[true,false]')
264
445
 
265
446
  // shuffle
266
- I.click('.moveup[data-i="1"]');
267
- I.click('.get-value');
268
- assert.equal(await I.grabValueFrom('.debug'), '[false,true]');
447
+ I.click('.moveup[data-i="1"]')
448
+ I.click('.get-value')
449
+ I.waitForValue('.debug', '[false,true]')
269
450
 
270
451
  // delete single
271
- I.click('Add Select');
272
- I.click('Add Select');
273
- I.click('Add Select');
274
- I.see('Select 5');
275
- I.click('[data-schemapath="root.4"] .delete');
276
- I.seeInPopup('Are you sure you want to remove this node?');
277
- I.cancelPopup();
278
- I.see('Select 5');
279
- I.click('[data-schemapath="root.4"] .delete');
280
- I.seeInPopup('Are you sure you want to remove this node?');
281
- I.acceptPopup();
282
- I.dontSee('Select 5');
452
+ I.click('Add Select')
453
+ I.click('Add Select')
454
+ I.click('Add Select')
455
+ I.see('Select 5')
456
+ I.amCancellingPopups()
457
+ I.click('[data-schemapath="root.4"] .delete')
458
+ I.seeInPopup('Are you sure you want to remove this item?')
459
+ I.cancelPopup()
460
+ I.see('Select 5')
461
+ I.amAcceptingPopups()
462
+ I.click('[data-schemapath="root.4"] .delete')
463
+ I.seeInPopup('Are you sure you want to remove this item?')
464
+ I.acceptPopup()
465
+ I.dontSee('Select 5')
283
466
 
284
467
  // delete last
285
- I.see('Select 4');
286
- I.click('Delete Last Select');
287
- I.seeInPopup('Are you sure you want to remove this node?');
288
- I.cancelPopup();
289
- I.see('Select 4');
290
- I.click('Delete Last Select');
291
- I.seeInPopup('Are you sure you want to remove this node?');
292
- I.acceptPopup();
293
- I.dontSee('Select 4');
468
+ I.see('Select 4')
469
+ I.amCancellingPopups()
470
+ I.click('Delete Last Select')
471
+ I.seeInPopup('Are you sure you want to remove this item?')
472
+ I.cancelPopup()
473
+ I.see('Select 4')
474
+ I.amAcceptingPopups()
475
+ I.click('Delete Last Select')
476
+ I.seeInPopup('Are you sure you want to remove this item?')
477
+ I.acceptPopup()
478
+ I.dontSee('Select 4')
294
479
 
295
480
  // delete all
296
- I.see('Select 1');
297
- I.see('Select 2');
298
- I.see('Select 3');
299
- I.click('Delete All');
300
- I.seeInPopup('Are you sure you want to remove this node?');
301
- I.cancelPopup();
302
- I.see('Select 1');
303
- I.see('Select 2');
304
- I.see('Select 3');
305
- I.click('Delete All');
306
- I.seeInPopup('Are you sure you want to remove this node?');
307
- I.acceptPopup();
308
- I.dontSee('Select 1');
309
- I.dontSee('Select 2');
310
- I.dontSee('Select 3');
311
- });
312
-
313
- Scenario('should work well with checkbox editors', async (I) => {
314
- I.amOnPage('array-checkboxes.html');
315
- I.click('Add Checkbox');
316
- I.click('Add Checkbox');
317
- I.click('Add Checkbox');
318
- I.click('Add Checkbox');
319
- I.click('Add Checkbox');
320
- I.seeElement('[data-schemapath="root.0"]');
321
- I.seeElement('[data-schemapath="root.1"]');
322
- I.seeElement('[data-schemapath="root.2"]');
323
- I.seeElement('[data-schemapath="root.3"]');
324
- I.seeElement('[data-schemapath="root.4"]');
325
- I.checkOption('1', '[data-schemapath="root.0"]');
326
- I.checkOption('2', '[data-schemapath="root.1"]');
327
- I.checkOption('3', '[data-schemapath="root.2"]');
328
- I.checkOption('4', '[data-schemapath="root.3"]');
329
- I.checkOption('5', '[data-schemapath="root.4"]');
330
- I.click('.get-value');
331
- assert.equal(await I.grabValueFrom('.debug'), '[["1"],["2"],["3"],["4"],["5"]]');
481
+ I.see('Select 1')
482
+ I.see('Select 2')
483
+ I.see('Select 3')
484
+ I.amCancellingPopups()
485
+ I.click('Delete All')
486
+ I.seeInPopup('Are you sure you want to remove this item?')
487
+ I.cancelPopup()
488
+ I.see('Select 1')
489
+ I.see('Select 2')
490
+ I.see('Select 3')
491
+ I.amAcceptingPopups()
492
+ I.click('Delete All')
493
+ I.seeInPopup('Are you sure you want to remove this item?')
494
+ I.acceptPopup()
495
+ I.dontSee('Select 1')
496
+ I.dontSee('Select 2')
497
+ I.dontSee('Select 3')
498
+ })
499
+
500
+ Scenario('should work well with checkbox editors', async ({ I }) => {
501
+ I.amOnPage('array-checkboxes.html')
502
+ I.click('Add Checkbox')
503
+ I.click('Add Checkbox')
504
+ I.click('Add Checkbox')
505
+ I.click('Add Checkbox')
506
+ I.click('Add Checkbox')
507
+ I.seeElement('[data-schemapath="root.0"]')
508
+ I.seeElement('[data-schemapath="root.1"]')
509
+ I.seeElement('[data-schemapath="root.2"]')
510
+ I.seeElement('[data-schemapath="root.3"]')
511
+ I.seeElement('[data-schemapath="root.4"]')
512
+ I.checkOption('1', '[data-schemapath="root.0"]')
513
+ I.checkOption('2', '[data-schemapath="root.1"]')
514
+ I.checkOption('3', '[data-schemapath="root.2"]')
515
+ I.checkOption('4', '[data-schemapath="root.3"]')
516
+ I.checkOption('5', '[data-schemapath="root.4"]')
517
+ I.click('.get-value')
518
+ I.waitForValue('.debug', '[["1"],["2"],["3"],["4"],["5"]]')
332
519
 
333
520
  // shuffle
334
- I.click('.moveup[data-i="4"]');
335
- I.click('.moveup[data-i="2"]');
336
- I.click('.moveup[data-i="1"]');
337
- I.click('.get-value');
338
- assert.equal(await I.grabValueFrom('.debug'), '[["3"],["1"],["2"],["5"],["4"]]');
521
+ I.click('.moveup[data-i="4"]')
522
+ I.click('.moveup[data-i="2"]')
523
+ I.click('.moveup[data-i="1"]')
524
+ I.click('.get-value')
525
+ I.waitForValue('.debug', '[["3"],["1"],["2"],["5"],["4"]]')
339
526
 
340
527
  // delete single
341
- I.see('Checkbox 5');
342
- I.click('[data-schemapath="root.4"] .delete');
343
- I.seeInPopup('Are you sure you want to remove this node?');
344
- I.cancelPopup();
345
- I.see('Checkbox 5');
346
- I.click('[data-schemapath="root.4"] .delete');
347
- I.seeInPopup('Are you sure you want to remove this node?');
348
- I.acceptPopup();
349
- I.dontSee('Checkbox 5');
528
+ I.see('Checkbox 5')
529
+ I.amCancellingPopups()
530
+ I.click('[data-schemapath="root.4"] .delete')
531
+ I.seeInPopup('Are you sure you want to remove this item?')
532
+ I.cancelPopup()
533
+ I.see('Checkbox 5')
534
+ I.amAcceptingPopups()
535
+ I.click('[data-schemapath="root.4"] .delete')
536
+ I.seeInPopup('Are you sure you want to remove this item?')
537
+ I.acceptPopup()
538
+ I.dontSee('Checkbox 5')
350
539
 
351
540
  // delete last
352
- I.see('Checkbox 4');
353
- I.click('Delete Last Checkbox');
354
- I.seeInPopup('Are you sure you want to remove this node?');
355
- I.cancelPopup();
356
- I.see('Checkbox 4');
357
- I.click('Delete Last Checkbox');
358
- I.seeInPopup('Are you sure you want to remove this node?');
359
- I.acceptPopup();
360
- I.dontSee('Checkbox 4');
541
+ I.see('Checkbox 4')
542
+ I.amCancellingPopups()
543
+ I.click('Delete Last Checkbox')
544
+ I.seeInPopup('Are you sure you want to remove this item?')
545
+ I.cancelPopup()
546
+ I.see('Checkbox 4')
547
+ I.amAcceptingPopups()
548
+ I.click('Delete Last Checkbox')
549
+ I.seeInPopup('Are you sure you want to remove this item?')
550
+ I.acceptPopup()
551
+ I.dontSee('Checkbox 4')
361
552
 
362
553
  // delete all
363
- I.see('Checkbox 1');
364
- I.see('Checkbox 2');
365
- I.see('Checkbox 3');
366
- I.click('Delete All');
367
- I.seeInPopup('Are you sure you want to remove this node?');
368
- I.cancelPopup();
369
- I.see('Checkbox 1');
370
- I.see('Checkbox 2');
371
- I.see('Checkbox 3');
372
- I.click('Delete All');
373
- I.seeInPopup('Are you sure you want to remove this node?');
374
- I.acceptPopup();
375
- I.dontSee('Checkbox 1');
376
- I.dontSee('Checkbox 2');
377
- I.dontSee('Checkbox 3');
378
- });
379
-
380
- Scenario('should work well with rating editors', async (I) => {
381
- I.amOnPage('array-ratings.html');
382
- I.seeElement('[data-schemapath="root.0"]');
383
- I.seeElement('[data-schemapath="root.1"]');
384
- I.seeElement('[data-schemapath="root.2"]');
385
- I.seeElement('[data-schemapath="root.3"]');
386
- I.seeElement('[data-schemapath="root.4"]');
387
- I.click('.get-value');
388
- assert.equal(await I.grabValueFrom('.debug'), '[1,2,3,4,5]');
554
+ I.see('Checkbox 1')
555
+ I.see('Checkbox 2')
556
+ I.see('Checkbox 3')
557
+ I.amCancellingPopups()
558
+ I.click('Delete All')
559
+ I.seeInPopup('Are you sure you want to remove this item?')
560
+ I.cancelPopup()
561
+ I.see('Checkbox 1')
562
+ I.see('Checkbox 2')
563
+ I.see('Checkbox 3')
564
+ I.amAcceptingPopups()
565
+ I.click('Delete All')
566
+ I.seeInPopup('Are you sure you want to remove this item?')
567
+ I.acceptPopup()
568
+ I.dontSee('Checkbox 1')
569
+ I.dontSee('Checkbox 2')
570
+ I.dontSee('Checkbox 3')
571
+ })
572
+
573
+ Scenario('should work well with checkbox editors with infoText', async ({ I }) => {
574
+ I.amOnPage('array-checkboxes-infotext.html')
575
+
576
+ function check (checkboxId, title, infoText) {
577
+ const label = '//label[@for="' + checkboxId + '"]'
578
+ I.see(title, label)
579
+ const infoTextIcon = label + '/span[@class="je-infobutton-icon"]'
580
+
581
+ if (infoText) {
582
+ I.seeElement(infoTextIcon)
583
+ I.moveCursorTo(infoTextIcon)
584
+ I.see(infoText, label + '//span[@class="je-infobutton-tooltip"]')
585
+ } else {
586
+ I.dontSeeElement(infoTextIcon)
587
+ }
588
+ }
589
+
590
+ check('root0', 'old a')
591
+ check('root1', 'b')
592
+ check('root2', '3')
593
+ check('root3', '4', 'dd')
594
+ check('root4', 'e', 'ee')
595
+ })
596
+
597
+ Scenario('should work well with rating editors', async ({ I }) => {
598
+ I.amOnPage('array-ratings.html')
599
+ I.seeElement('[data-schemapath="root.0"]')
600
+ I.seeElement('[data-schemapath="root.1"]')
601
+ I.seeElement('[data-schemapath="root.2"]')
602
+ I.seeElement('[data-schemapath="root.3"]')
603
+ I.seeElement('[data-schemapath="root.4"]')
604
+ I.click('.get-value')
605
+ I.waitForValue('.debug', '[1,2,3,4,5]')
389
606
 
390
607
  // shuffle
391
- I.click('.moveup[data-i="4"]');
392
- I.click('.moveup[data-i="2"]');
393
- I.click('.moveup[data-i="1"]');
394
- I.click('.get-value');
395
- assert.equal(await I.grabValueFrom('.debug'), '[3,1,2,5,4]');
608
+ I.click('.moveup[data-i="4"]')
609
+ I.click('.moveup[data-i="2"]')
610
+ I.click('.moveup[data-i="1"]')
611
+ I.click('.get-value')
612
+ I.waitForValue('.debug', '[3,1,2,5,4]')
396
613
 
397
614
  // delete single
398
- I.see('Rating 5');
399
- I.click('[data-schemapath="root.4"] .delete');
400
- I.seeInPopup('Are you sure you want to remove this node?');
401
- I.cancelPopup();
402
- I.see('Rating 5');
403
- I.click('[data-schemapath="root.4"] .delete');
404
- I.seeInPopup('Are you sure you want to remove this node?');
405
- I.acceptPopup();
406
- I.dontSee('Rating 5');
615
+ I.see('Rating 5')
616
+ I.amCancellingPopups()
617
+ I.click('[data-schemapath="root.4"] .delete')
618
+ I.seeInPopup('Are you sure you want to remove this item?')
619
+ I.cancelPopup()
620
+ I.see('Rating 5')
621
+ I.amAcceptingPopups()
622
+ I.click('[data-schemapath="root.4"] .delete')
623
+ I.seeInPopup('Are you sure you want to remove this item?')
624
+ I.acceptPopup()
625
+ I.dontSee('Rating 5')
407
626
 
408
627
  // delete last
409
- I.see('Rating 4');
410
- I.click('Delete Last Rating');
411
- I.seeInPopup('Are you sure you want to remove this node?');
412
- I.cancelPopup();
413
- I.see('Rating 4');
414
- I.click('Delete Last Rating');
415
- I.seeInPopup('Are you sure you want to remove this node?');
416
- I.acceptPopup();
417
- I.dontSee('Rating 4');
628
+ I.see('Rating 4')
629
+ I.amCancellingPopups()
630
+ I.click('Delete Last Rating')
631
+ I.seeInPopup('Are you sure you want to remove this item?')
632
+ I.cancelPopup()
633
+ I.see('Rating 4')
634
+ I.amAcceptingPopups()
635
+ I.click('Delete Last Rating')
636
+ I.seeInPopup('Are you sure you want to remove this item?')
637
+ I.acceptPopup()
638
+ I.dontSee('Rating 4')
418
639
 
419
640
  // delete all
420
- I.see('Rating 1');
421
- I.see('Rating 2');
422
- I.see('Rating 3');
423
- I.click('Delete All');
424
- I.seeInPopup('Are you sure you want to remove this node?');
425
- I.cancelPopup();
426
- I.see('Rating 1');
427
- I.see('Rating 2');
428
- I.see('Rating 3');
429
- I.click('Delete All');
430
- I.seeInPopup('Are you sure you want to remove this node?');
431
- I.acceptPopup();
432
- I.dontSee('Rating 1');
433
- I.dontSee('Rating 2');
434
- I.dontSee('Rating 3');
435
- });
436
-
437
- Scenario('should work well with multiselect editors', async (I) => {
438
- I.amOnPage('array-multiselects.html');
439
- I.click('Add Multiselect');
440
- I.click('Add Multiselect');
441
- I.click('Add Multiselect');
442
- I.click('Add Multiselect');
443
- I.click('Add Multiselect');
444
- I.seeElement('[data-schemapath="root.0"]');
445
- I.seeElement('[data-schemapath="root.1"]');
446
- I.seeElement('[data-schemapath="root.2"]');
447
- I.seeElement('[data-schemapath="root.3"]');
448
- I.seeElement('[data-schemapath="root.4"]');
449
- I.selectOption('[name="root[0]"]', "1");
450
- I.selectOption('[name="root[1]"]', "2");
451
- I.selectOption('[name="root[2]"]', "3");
452
- I.selectOption('[name="root[3]"]', "4");
453
- I.selectOption('[name="root[4]"]', "5");
454
- I.click('.get-value');
455
- assert.equal(await I.grabValueFrom('.debug'), '[["1"],["2"],["3"],["4"],["5"]]');
641
+ I.see('Rating 1')
642
+ I.see('Rating 2')
643
+ I.see('Rating 3')
644
+ I.amCancellingPopups()
645
+ I.click('Delete All')
646
+ I.seeInPopup('Are you sure you want to remove this item?')
647
+ I.cancelPopup()
648
+ I.see('Rating 1')
649
+ I.see('Rating 2')
650
+ I.see('Rating 3')
651
+ I.amAcceptingPopups()
652
+ I.click('Delete All')
653
+ I.seeInPopup('Are you sure you want to remove this item?')
654
+ I.acceptPopup()
655
+ I.dontSee('Rating 1')
656
+ I.dontSee('Rating 2')
657
+ I.dontSee('Rating 3')
658
+ })
659
+
660
+ Scenario('should work well with multiselect editors', async ({ I }) => {
661
+ I.amOnPage('array-multiselects.html')
662
+ I.click('Add Multiselect')
663
+ I.click('Add Multiselect')
664
+ I.click('Add Multiselect')
665
+ I.click('Add Multiselect')
666
+ I.click('Add Multiselect')
667
+ I.seeElement('[data-schemapath="root.0"]')
668
+ I.seeElement('[data-schemapath="root.1"]')
669
+ I.seeElement('[data-schemapath="root.2"]')
670
+ I.seeElement('[data-schemapath="root.3"]')
671
+ I.seeElement('[data-schemapath="root.4"]')
672
+ I.selectOption('[name="root[0]"]', '1')
673
+ I.selectOption('[name="root[1]"]', '2')
674
+ I.selectOption('[name="root[2]"]', '3')
675
+ I.selectOption('[name="root[3]"]', '4')
676
+ I.selectOption('[name="root[4]"]', '5')
677
+ I.click('.get-value')
678
+ I.waitForValue('.debug', '[["1"],["2"],["3"],["4"],["5"]]')
456
679
 
457
680
  // shuffle
458
- I.click('.moveup[data-i="4"]');
459
- I.click('.moveup[data-i="2"]');
460
- I.click('.moveup[data-i="1"]');
461
- I.click('.get-value');
462
- assert.equal(await I.grabValueFrom('.debug'), '[["3"],["1"],["2"],["5"],["4"]]');
681
+ I.click('.moveup[data-i="4"]')
682
+ I.click('.moveup[data-i="2"]')
683
+ I.click('.moveup[data-i="1"]')
684
+ I.click('.get-value')
685
+ I.waitForValue('.debug', '[["3"],["1"],["2"],["5"],["4"]]')
463
686
 
464
687
  // delete single
465
- I.see('Multiselect 5');
466
- I.click('[data-schemapath="root.4"] .delete');
467
- I.seeInPopup('Are you sure you want to remove this node?');
468
- I.cancelPopup();
469
- I.see('Multiselect 5');
470
- I.click('[data-schemapath="root.4"] .delete');
471
- I.seeInPopup('Are you sure you want to remove this node?');
472
- I.acceptPopup();
473
- I.dontSee('Multiselect 5');
688
+ I.see('Multiselect 5')
689
+ I.amCancellingPopups()
690
+ I.click('[data-schemapath="root.4"] .delete')
691
+ I.seeInPopup('Are you sure you want to remove this item?')
692
+ I.cancelPopup()
693
+ I.see('Multiselect 5')
694
+ I.amAcceptingPopups()
695
+ I.click('[data-schemapath="root.4"] .delete')
696
+ I.seeInPopup('Are you sure you want to remove this item?')
697
+ I.acceptPopup()
698
+ I.dontSee('Multiselect 5')
474
699
 
475
700
  // delete last
476
- I.see('Multiselect 4');
477
- I.click('Delete Last Multiselect');
478
- I.seeInPopup('Are you sure you want to remove this node?');
479
- I.cancelPopup();
480
- I.see('Multiselect 4');
481
- I.click('Delete Last Multiselect');
482
- I.seeInPopup('Are you sure you want to remove this node?');
483
- I.acceptPopup();
484
- I.dontSee('Multiselect 4');
701
+ I.see('Multiselect 4')
702
+ I.amCancellingPopups()
703
+ I.click('Delete Last Multiselect')
704
+ I.seeInPopup('Are you sure you want to remove this item?')
705
+ I.cancelPopup()
706
+ I.see('Multiselect 4')
707
+ I.click('Delete Last Multiselect')
708
+ I.seeInPopup('Are you sure you want to remove this item?')
709
+ I.acceptPopup()
710
+ I.dontSee('Multiselect 4')
485
711
 
486
712
  // delete all
487
- I.see('Multiselect 1');
488
- I.see('Multiselect 2');
489
- I.see('Multiselect 3');
490
- I.click('Delete All');
491
- I.seeInPopup('Are you sure you want to remove this node?');
492
- I.cancelPopup();
493
- I.see('Multiselect 1');
494
- I.see('Multiselect 2');
495
- I.see('Multiselect 3');
496
- I.click('Delete All');
497
- I.seeInPopup('Are you sure you want to remove this node?');
498
- I.acceptPopup();
499
- I.dontSee('Multiselect 1');
500
- I.dontSee('Multiselect 2');
501
- I.dontSee('Multiselect 3');
502
- });
503
-
504
- Scenario('should work well with object editors', async (I) => {
505
- I.amOnPage('array-objects.html');
506
- I.click('Add Object');
507
- I.click('Add Object');
508
- I.click('Add Object');
509
- I.click('Add Object');
510
- I.click('Add Object');
511
- I.seeElement('[name="root[0][property]"]');
512
- I.seeElement('[name="root[1][property]"]');
513
- I.seeElement('[name="root[2][property]"]');
514
- I.seeElement('[name="root[3][property]"]');
515
- I.seeElement('[name="root[4][property]"]');
516
- I.fillField('[name="root[0][property]"]', "1");
517
- I.fillField('[name="root[1][property]"]', "2");
518
- I.fillField('[name="root[2][property]"]', "3");
519
- I.fillField('[name="root[3][property]"]', "4");
520
- I.fillField('[name="root[4][property]"]', "5");
521
- I.click('.get-value');
522
- assert.equal(await I.grabValueFrom('.debug'), '[{"property":"1"},{"property":"2"},{"property":"3"},{"property":"4"},{"property":"5"}]');
713
+ I.see('Multiselect 1')
714
+ I.see('Multiselect 2')
715
+ I.see('Multiselect 3')
716
+ I.amCancellingPopups()
717
+ I.click('Delete All')
718
+ I.seeInPopup('Are you sure you want to remove this item?')
719
+ I.cancelPopup()
720
+ I.see('Multiselect 1')
721
+ I.see('Multiselect 2')
722
+ I.see('Multiselect 3')
723
+ I.amAcceptingPopups()
724
+ I.click('Delete All')
725
+ I.seeInPopup('Are you sure you want to remove this item?')
726
+ I.acceptPopup()
727
+ I.dontSee('Multiselect 1')
728
+ I.dontSee('Multiselect 2')
729
+ I.dontSee('Multiselect 3')
730
+ })
731
+
732
+ Scenario('should work well with object editors', async ({ I }) => {
733
+ I.amOnPage('array-objects.html')
734
+ I.click('Add Object')
735
+ I.click('Add Object')
736
+ I.click('Add Object')
737
+ I.click('Add Object')
738
+ I.click('Add Object')
739
+ I.seeElement('[name="root[0][property]"]')
740
+ I.seeElement('[name="root[1][property]"]')
741
+ I.seeElement('[name="root[2][property]"]')
742
+ I.seeElement('[name="root[3][property]"]')
743
+ I.seeElement('[name="root[4][property]"]')
744
+ I.fillField('[name="root[0][property]"]', '1')
745
+ I.fillField('[name="root[1][property]"]', '2')
746
+ I.fillField('[name="root[2][property]"]', '3')
747
+ I.fillField('[name="root[3][property]"]', '4')
748
+ I.fillField('[name="root[4][property]"]', '5')
749
+ I.click('.get-value')
750
+ I.waitForValue('.debug', '[{"property":"1"},{"property":"2"},{"property":"3"},{"property":"4"},{"property":"5"}]')
523
751
 
524
752
  // shuffle
525
- I.click('.moveup[data-i="4"]');
526
- I.click('.moveup[data-i="2"]');
527
- I.click('.moveup[data-i="1"]');
528
- I.click('.get-value');
529
- assert.equal(await I.grabValueFrom('.debug'), '[{"property":"3"},{"property":"1"},{"property":"2"},{"property":"5"},{"property":"4"}]');
753
+ I.click('.moveup[data-i="4"]')
754
+ I.click('.moveup[data-i="2"]')
755
+ I.click('.moveup[data-i="1"]')
756
+ I.click('.get-value')
757
+ I.waitForValue('.debug', '[{"property":"3"},{"property":"1"},{"property":"2"},{"property":"5"},{"property":"4"}]')
530
758
 
531
759
  // delete single
532
- I.see('Object 5');
533
- I.click('[data-schemapath="root.4"] .delete');
534
- I.seeInPopup('Are you sure you want to remove this node?');
535
- I.cancelPopup();
536
- I.see('Object 5');
537
- I.click('[data-schemapath="root.4"] .delete');
538
- I.seeInPopup('Are you sure you want to remove this node?');
539
- I.acceptPopup();
540
- I.dontSee('Object 5');
760
+ I.see('Object 5')
761
+ I.amCancellingPopups()
762
+ I.click('[data-schemapath="root.4"] .delete')
763
+ I.seeInPopup('Are you sure you want to remove this item?')
764
+ I.cancelPopup()
765
+ I.see('Object 5')
766
+ I.amAcceptingPopups()
767
+ I.click('[data-schemapath="root.4"] .delete')
768
+ I.seeInPopup('Are you sure you want to remove this item?')
769
+ I.acceptPopup()
770
+ I.dontSee('Object 5')
541
771
 
542
772
  // delete last
543
- I.see('Object 4');
544
- I.click('Delete Last Object');
545
- I.seeInPopup('Are you sure you want to remove this node?');
546
- I.cancelPopup();
547
- I.see('Object 4');
548
- I.click('Delete Last Object');
549
- I.seeInPopup('Are you sure you want to remove this node?');
550
- I.acceptPopup();
551
- I.dontSee('Object 4');
773
+ I.see('Object 4')
774
+ I.amCancellingPopups()
775
+ I.click('Delete Last Object')
776
+ I.seeInPopup('Are you sure you want to remove this item?')
777
+ I.cancelPopup()
778
+ I.see('Object 4')
779
+ I.amAcceptingPopups()
780
+ I.click('Delete Last Object')
781
+ I.seeInPopup('Are you sure you want to remove this item?')
782
+ I.acceptPopup()
783
+ I.dontSee('Object 4')
552
784
 
553
785
  // delete all
554
- I.see('Object 1');
555
- I.see('Object 2');
556
- I.see('Object 3');
557
- I.click('Delete All');
558
- I.seeInPopup('Are you sure you want to remove this node?');
559
- I.cancelPopup();
560
- I.see('Object 1');
561
- I.see('Object 2');
562
- I.see('Object 3');
563
- I.click('Delete All');
564
- I.seeInPopup('Are you sure you want to remove this node?');
565
- I.acceptPopup();
566
- I.dontSee('Object 1');
567
- I.dontSee('Object 2');
568
- I.dontSee('Object 3');
569
- });
570
-
571
- Scenario('should work well with nested array editors', async (I) => {
572
- I.amOnPage('array-nested-arrays.html');
573
- I.click('Add Array');
574
- I.click('Add Array');
575
- I.click('Add Array');
576
- I.click('Add Array');
577
- I.click('Add Array');
578
- I.seeElement('[data-schemapath="root.0"]');
579
- I.seeElement('[data-schemapath="root.1"]');
580
- I.seeElement('[data-schemapath="root.2"]');
581
- I.seeElement('[data-schemapath="root.3"]');
582
- I.seeElement('[data-schemapath="root.4"]');
583
- I.click('.get-value');
584
- assert.equal(await I.grabValueFrom('.debug'), '[[],[],[],[],[]]');
786
+ I.see('Object 1')
787
+ I.see('Object 2')
788
+ I.see('Object 3')
789
+ I.amCancellingPopups()
790
+ I.click('Delete All')
791
+ I.seeInPopup('Are you sure you want to remove this item?')
792
+ I.cancelPopup()
793
+ I.see('Object 1')
794
+ I.see('Object 2')
795
+ I.see('Object 3')
796
+ I.amAcceptingPopups()
797
+ I.click('Delete All')
798
+ I.seeInPopup('Are you sure you want to remove this item?')
799
+ I.acceptPopup()
800
+ I.dontSee('Object 1')
801
+ I.dontSee('Object 2')
802
+ I.dontSee('Object 3')
803
+ })
804
+
805
+ Scenario('should work well with nested array editors', async ({ I }) => {
806
+ I.amOnPage('array-nested-arrays.html')
807
+ I.click('Add Array')
808
+ I.click('Add Array')
809
+ I.click('Add Array')
810
+ I.click('Add Array')
811
+ I.click('Add Array')
812
+ I.seeElement('[data-schemapath="root.0"]')
813
+ I.seeElement('[data-schemapath="root.1"]')
814
+ I.seeElement('[data-schemapath="root.2"]')
815
+ I.seeElement('[data-schemapath="root.3"]')
816
+ I.seeElement('[data-schemapath="root.4"]')
817
+ I.click('.get-value')
818
+ I.waitForValue('.debug', '[[],[],[],[],[]]')
585
819
 
586
820
  // adds one string editor in each first level array
587
821
  for (let i = 0; i < 5; i++) {
588
- I.click('Add String', '[data-schemapath="root.' + i + '"]');
589
- I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][0]"]', String(i + 1));
822
+ I.click('Add String', '[data-schemapath="root.' + i + '"]')
823
+ I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][0]"]', String(i + 1))
590
824
  }
591
825
 
592
- I.click('.get-value');
593
- assert.equal(await I.grabValueFrom('.debug'), '[["1"],["2"],["3"],["4"],["5"]]');
826
+ I.click('.get-value')
827
+ I.waitForValue('.debug', '[["1"],["2"],["3"],["4"],["5"]]')
594
828
 
595
829
  // shuffle
596
- I.click('.moveup[data-i="4"]');
597
- I.click('.moveup[data-i="2"]');
598
- I.click('.moveup[data-i="1"]');
599
- I.click('.get-value');
600
- assert.equal(await I.grabValueFrom('.debug'), '[["3"],["1"],["2"],["5"],["4"]]');
830
+ I.click('.moveup[data-i="4"]')
831
+ I.click('.moveup[data-i="2"]')
832
+ I.click('.moveup[data-i="1"]')
833
+ I.click('.get-value')
834
+ I.waitForValue('.debug', '[["3"],["1"],["2"],["5"],["4"]]')
601
835
 
602
836
  // delete single
603
- I.see('Array 5');
604
- I.click('[data-schemapath="root.4"] .delete');
605
- I.seeInPopup('Are you sure you want to remove this node?');
606
- I.cancelPopup();
607
- I.see('Array 5');
608
- I.click('[data-schemapath="root.4"] .delete');
609
- I.seeInPopup('Are you sure you want to remove this node?');
610
- I.acceptPopup();
611
- I.dontSee('Array 5');
837
+ I.see('Array 5')
838
+ I.amCancellingPopups()
839
+ I.click('[data-schemapath="root.4"] .delete')
840
+ I.seeInPopup('Are you sure you want to remove this item?')
841
+ I.cancelPopup()
842
+ I.see('Array 5')
843
+ I.amAcceptingPopups()
844
+ I.click('[data-schemapath="root.4"] .delete')
845
+ I.seeInPopup('Are you sure you want to remove this item?')
846
+ I.acceptPopup()
847
+ I.dontSee('Array 5')
612
848
 
613
849
  // delete last
614
- I.see('Array 4');
615
- I.click('Delete Last Array');
616
- I.seeInPopup('Are you sure you want to remove this node?');
617
- I.cancelPopup();
618
- I.see('Array 4');
619
- I.click('Delete Last Array');
620
- I.seeInPopup('Are you sure you want to remove this node?');
621
- I.acceptPopup();
622
- I.dontSee('Array 4');
850
+ I.see('Array 4')
851
+ I.amCancellingPopups()
852
+ I.click('Delete Last Array')
853
+ I.seeInPopup('Are you sure you want to remove this item?')
854
+ I.cancelPopup()
855
+ I.see('Array 4')
856
+ I.amAcceptingPopups()
857
+ I.click('Delete Last Array')
858
+ I.seeInPopup('Are you sure you want to remove this item?')
859
+ I.acceptPopup()
860
+ I.dontSee('Array 4')
623
861
 
624
862
  // delete all
625
- I.see('Array 1');
626
- I.see('Array 2');
627
- I.see('Array 3');
863
+ I.see('Array 1')
864
+ I.see('Array 2')
865
+ I.see('Array 3')
628
866
  // there are hidden "Delete All" buttons right now and "I.click(Delete All)"
629
867
  // will attempt to click the first match. It fails because is hidden.
630
868
  // this is why i use this script. is more flexible.
631
- I.executeScript(function() {
632
- var e = document.querySelectorAll('.json-editor-btn-delete');
633
- e[e.length - 1].click();
634
- });
635
- I.seeInPopup('Are you sure you want to remove this node?');
636
- I.cancelPopup();
637
- I.see('Array 1');
638
- I.see('Array 2');
639
- I.see('Array 3');
640
- I.executeScript(function() {
641
- var e = document.querySelectorAll('.json-editor-btn-delete');
642
- e[e.length - 1].click();
643
- });
644
- I.seeInPopup('Are you sure you want to remove this node?');
645
- I.acceptPopup();
646
- I.dontSee('Array 1');
647
- I.dontSee('Array 2');
648
- I.dontSee('Array 3');
869
+ I.amCancellingPopups()
870
+ I.executeScript(function () {
871
+ const e = document.querySelectorAll('.json-editor-btn-delete')
872
+ e[e.length - 1].click()
873
+ })
874
+ I.seeInPopup('Are you sure you want to remove this item?')
875
+ I.cancelPopup()
876
+ I.see('Array 1')
877
+ I.see('Array 2')
878
+ I.see('Array 3')
879
+ I.amAcceptingPopups()
880
+ I.executeScript(function () {
881
+ const e = document.querySelectorAll('.json-editor-btn-delete')
882
+ e[e.length - 1].click()
883
+ })
884
+ I.seeInPopup('Are you sure you want to remove this item?')
885
+ I.acceptPopup()
886
+ I.dontSee('Array 1')
887
+ I.dontSee('Array 2')
888
+ I.dontSee('Array 3')
649
889
 
650
890
  // manipulate nested items
651
- I.amOnPage('array-nested-arrays.html');
652
- I.click('Add Array');
653
- I.click('Add Array');
654
- I.click('Add Array');
655
- I.click('Add Array');
656
- I.click('Add Array');
657
- I.seeElement('[data-schemapath="root.0"]');
658
- I.seeElement('[data-schemapath="root.1"]');
659
- I.seeElement('[data-schemapath="root.2"]');
660
- I.click('.get-value');
661
- assert.equal(await I.grabValueFrom('.debug'), '[[],[],[],[],[]]');
891
+ I.amOnPage('array-nested-arrays.html')
892
+ I.click('Add Array')
893
+ I.click('Add Array')
894
+ I.click('Add Array')
895
+ I.click('Add Array')
896
+ I.click('Add Array')
897
+ I.seeElement('[data-schemapath="root.0"]')
898
+ I.seeElement('[data-schemapath="root.1"]')
899
+ I.seeElement('[data-schemapath="root.2"]')
900
+ I.click('.get-value')
901
+ I.waitForValue('.debug', '[[],[],[],[],[]]')
662
902
 
663
903
  // adds one string editor in each first level array
664
904
  for (let i = 0; i < 5; i++) {
665
- I.click('Add String', '[data-schemapath="root.' + i + '"]');
666
- I.click('Add String', '[data-schemapath="root.' + i + '"]');
667
- I.click('Add String', '[data-schemapath="root.' + i + '"]');
668
- I.click('Add String', '[data-schemapath="root.' + i + '"]');
669
- I.click('Add String', '[data-schemapath="root.' + i + '"]');
670
- I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][0]"]', "1");
671
- I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][1]"]', "2");
672
- I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][2]"]', "3");
673
- I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][3]"]', "4");
674
- I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][4]"]', "5");
905
+ I.click('Add String', '[data-schemapath="root.' + i + '"]')
906
+ I.click('Add String', '[data-schemapath="root.' + i + '"]')
907
+ I.click('Add String', '[data-schemapath="root.' + i + '"]')
908
+ I.click('Add String', '[data-schemapath="root.' + i + '"]')
909
+ I.click('Add String', '[data-schemapath="root.' + i + '"]')
910
+ I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][0]"]', '1')
911
+ I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][1]"]', '2')
912
+ I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][2]"]', '3')
913
+ I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][3]"]', '4')
914
+ I.fillField('[data-schemapath="root.' + i + '"] [name="root[' + i + '][4]"]', '5')
675
915
  }
676
916
 
677
- I.click('.get-value');
678
- assert.equal(await I.grabValueFrom('.debug'), '[["1","2","3","4","5"],["1","2","3","4","5"],["1","2","3","4","5"],["1","2","3","4","5"],["1","2","3","4","5"]]');
917
+ I.click('.get-value')
918
+ I.waitForValue('.debug', '[["1","2","3","4","5"],["1","2","3","4","5"],["1","2","3","4","5"],["1","2","3","4","5"],["1","2","3","4","5"]]')
679
919
 
680
920
  // shuffle every strings array
681
921
  for (let i = 0; i < 5; i++) {
682
- I.click('[data-schemapath="root.' + i + '.4"] .moveup');
683
- I.click('[data-schemapath="root.' + i + '.2"] .moveup');
684
- I.click('[data-schemapath="root.' + i + '.1"] .moveup');
922
+ I.click('[data-schemapath="root.' + i + '.4"] .moveup')
923
+ I.click('[data-schemapath="root.' + i + '.2"] .moveup')
924
+ I.click('[data-schemapath="root.' + i + '.1"] .moveup')
685
925
  }
686
926
 
687
- I.click('.get-value');
688
- assert.equal(await I.grabValueFrom('.debug'), '[["3","1","2","5","4"],["3","1","2","5","4"],["3","1","2","5","4"],["3","1","2","5","4"],["3","1","2","5","4"]]');
927
+ I.click('.get-value')
928
+ I.waitForValue('.debug', '[["3","1","2","5","4"],["3","1","2","5","4"],["3","1","2","5","4"],["3","1","2","5","4"],["3","1","2","5","4"]]')
689
929
 
690
930
  // delete single (fifth) element from every string array
691
931
  for (let i = 0; i < 5; i++) {
692
- I.see('String 5', '[data-schemapath="root.' + i + '"]');
693
- I.click('[data-schemapath="root.' + i + '.4"] .delete');
694
- I.seeInPopup('Are you sure you want to remove this node?');
695
- I.cancelPopup();
696
- I.see('String 5', '[data-schemapath="root.' + i + '"]');
697
- I.click('[data-schemapath="root.' + i + '.4"] .delete');
698
- I.seeInPopup('Are you sure you want to remove this node?');
699
- I.acceptPopup();
700
- I.dontSee('String 5', '[data-schemapath="root.' + i + '"]');
932
+ I.see('String 5', '[data-schemapath="root.' + i + '"]')
933
+ I.amCancellingPopups()
934
+ I.click('[data-schemapath="root.' + i + '.4"] .delete')
935
+ I.seeInPopup('Are you sure you want to remove this item?')
936
+ I.cancelPopup()
937
+ I.see('String 5', '[data-schemapath="root.' + i + '"]')
938
+ I.amAcceptingPopups()
939
+ I.click('[data-schemapath="root.' + i + '.4"] .delete')
940
+ I.seeInPopup('Are you sure you want to remove this item?')
941
+ I.acceptPopup()
942
+ I.dontSee('String 5', '[data-schemapath="root.' + i + '"]')
701
943
  }
702
944
 
703
- I.click('.get-value');
704
- assert.equal(await I.grabValueFrom('.debug'), '[["3","1","2","5"],["3","1","2","5"],["3","1","2","5"],["3","1","2","5"],["3","1","2","5"]]');
945
+ I.click('.get-value')
946
+ I.waitForValue('.debug', '[["3","1","2","5"],["3","1","2","5"],["3","1","2","5"],["3","1","2","5"],["3","1","2","5"]]')
705
947
 
706
948
  // delete last (fourth) element from every string array
707
949
  for (let i = 0; i < 5; i++) {
708
- I.see('String 4', '[data-schemapath="root.' + i + '"]');
709
- I.click('Delete Last String', '[data-schemapath="root.' + i + '"]');
710
- I.seeInPopup('Are you sure you want to remove this node?');
711
- I.cancelPopup();
712
- I.see('String 4', '[data-schemapath="root.' + i + '"]');
713
- I.click('Delete Last String', '[data-schemapath="root.' + i + '"]');
714
- I.seeInPopup('Are you sure you want to remove this node?');
715
- I.acceptPopup();
716
- I.dontSee('String 4', '[data-schemapath="root.' + i + '"]');
950
+ I.see('String 4', '[data-schemapath="root.' + i + '"]')
951
+ I.amCancellingPopups()
952
+ I.click('Delete Last String', '[data-schemapath="root.' + i + '"]')
953
+ I.seeInPopup('Are you sure you want to remove this item?')
954
+ I.cancelPopup()
955
+ I.see('String 4', '[data-schemapath="root.' + i + '"]')
956
+ I.amAcceptingPopups()
957
+ I.click('Delete Last String', '[data-schemapath="root.' + i + '"]')
958
+ I.seeInPopup('Are you sure you want to remove this item?')
959
+ I.acceptPopup()
960
+ I.dontSee('String 4', '[data-schemapath="root.' + i + '"]')
717
961
  }
718
962
 
719
- I.click('.get-value');
720
- assert.equal(await I.grabValueFrom('.debug'), '[["3","1","2"],["3","1","2"],["3","1","2"],["3","1","2"],["3","1","2"]]');
963
+ I.click('.get-value')
964
+ I.waitForValue('.debug', '[["3","1","2"],["3","1","2"],["3","1","2"],["3","1","2"],["3","1","2"]]')
721
965
 
722
966
  // delete last (fourth) element from every string array
723
967
  for (let i = 0; i < 5; i++) {
724
- I.see('String 1', '[data-schemapath="root.' + i + '"]');
725
- I.see('String 2', '[data-schemapath="root.' + i + '"]');
726
- I.see('String 3', '[data-schemapath="root.' + i + '"]');
727
- I.click('Delete All', '[data-schemapath="root.' + i + '"]');
728
- I.seeInPopup('Are you sure you want to remove this node?');
729
- I.cancelPopup();
730
- I.see('String 1', '[data-schemapath="root.' + i + '"]');
731
- I.see('String 2', '[data-schemapath="root.' + i + '"]');
732
- I.see('String 3', '[data-schemapath="root.' + i + '"]');
733
- I.click('Delete All', '[data-schemapath="root.' + i + '"]');
734
- I.seeInPopup('Are you sure you want to remove this node?');
735
- I.acceptPopup();
736
- I.dontSee('String 1', '[data-schemapath="root.' + i + '"]');
737
- I.dontSee('String 2', '[data-schemapath="root.' + i + '"]');
738
- I.dontSee('String 3', '[data-schemapath="root.' + i + '"]');
968
+ I.see('String 1', '[data-schemapath="root.' + i + '"]')
969
+ I.see('String 2', '[data-schemapath="root.' + i + '"]')
970
+ I.see('String 3', '[data-schemapath="root.' + i + '"]')
971
+ I.amCancellingPopups()
972
+ I.click('Delete All', '[data-schemapath="root.' + i + '"]')
973
+ I.seeInPopup('Are you sure you want to remove this item?')
974
+ I.cancelPopup()
975
+ I.see('String 1', '[data-schemapath="root.' + i + '"]')
976
+ I.see('String 2', '[data-schemapath="root.' + i + '"]')
977
+ I.see('String 3', '[data-schemapath="root.' + i + '"]')
978
+ I.amAcceptingPopups()
979
+ I.click('Delete All', '[data-schemapath="root.' + i + '"]')
980
+ I.seeInPopup('Are you sure you want to remove this item?')
981
+ I.acceptPopup()
982
+ I.dontSee('String 1', '[data-schemapath="root.' + i + '"]')
983
+ I.dontSee('String 2', '[data-schemapath="root.' + i + '"]')
984
+ I.dontSee('String 3', '[data-schemapath="root.' + i + '"]')
739
985
  }
740
986
 
741
- I.click('.get-value');
742
- assert.equal(await I.grabValueFrom('.debug'), '[[],[],[],[],[]]');
743
- });
744
-
745
- Scenario('should work well with selectize multiselect editors', async (I) => {
746
- I.amOnPage('array-selectize.html');
747
- I.click('Add item');
748
- I.click('Add item');
749
- I.seeElement('[data-schemapath="root.0"]');
750
- I.seeElement('[data-schemapath="root.1"]');
751
- I.click('.get-value');
752
- value = await I.grabValueFrom('.debug');
753
- // ensure defaults
754
- assert.equal(value, '[["1","2"],["1","2"]]');
987
+ I.click('.get-value')
988
+ I.waitForValue('.debug', '[[],[],[],[],[]]')
989
+ })
990
+
991
+ Scenario('should work well with selectize multiselect editors', async ({ I }) => {
992
+ I.amOnPage('array-selectize.html')
993
+ I.click('Add item')
994
+ await I.seeElement('[data-schemapath="root.0"]')
995
+ I.click('Add item')
996
+ await I.seeElement('[data-schemapath="root.1"]')
997
+ I.click('.get-value')
998
+ I.waitForValue('.debug', '[["1","2"],["1","2"]]')
755
999
 
756
1000
  // every selected item has remove button
757
- I.seeElement('[data-schemapath="root.0"] .selectize-input [data-value="1"] a.remove');
758
- I.seeElement('[data-schemapath="root.0"] .selectize-input [data-value="2"] a.remove');
759
- I.seeElement('[data-schemapath="root.1"] .selectize-input [data-value="1"] a.remove');
760
- I.seeElement('[data-schemapath="root.1"] .selectize-input [data-value="2"] a.remove');
1001
+ I.seeElement('[data-schemapath="root.0"] .selectize-input [data-value="1"] a.remove')
1002
+ I.seeElement('[data-schemapath="root.0"] .selectize-input [data-value="2"] a.remove')
1003
+ I.seeElement('[data-schemapath="root.1"] .selectize-input [data-value="1"] a.remove')
1004
+ I.seeElement('[data-schemapath="root.1"] .selectize-input [data-value="2"] a.remove')
761
1005
 
762
1006
  // could not add values
763
- I.fillField('[data-schemapath="root.1"] input[type="text"]', "123");
764
- I.dontSeeElement('.create.active');
1007
+ I.fillField('[data-schemapath="root.1"] input[type="text"]', '123')
1008
+ I.dontSeeElement('.create.active')
765
1009
 
766
1010
  // selectize dropdown is filled with enum values
767
- I.click('[data-schemapath="root.0"] .selectize-input');
768
- I.seeElement('[data-schemapath="root.0"] .selectize-dropdown-content [data-value="3"]');
769
- I.seeElement('[data-schemapath="root.0"] .selectize-dropdown-content [data-value="4"]');
770
- });
1011
+ I.click('[data-schemapath="root.0"] .selectize-input')
1012
+ I.seeElement('[data-schemapath="root.0"] .selectize-dropdown-content [data-value="3"]')
1013
+ I.seeElement('[data-schemapath="root.0"] .selectize-dropdown-content [data-value="4"]')
1014
+ })
1015
+
1016
+ Scenario('should be possible to add items to selectize array @selectize-add', async ({ I }) => {
1017
+ I.amOnPage('array-selectize-create.html')
1018
+ I.click('.selectize-input')
1019
+ I.pressKey('g')
1020
+ I.pressKey('Enter')
1021
+ I.pressKey('r')
1022
+ I.pressKey('Enter')
1023
+ I.pressKey('e')
1024
+ I.pressKey('Enter')
1025
+ I.pressKey('a')
1026
+ I.pressKey('Enter')
1027
+ I.pressKey('t')
1028
+ I.pressKey('Enter')
1029
+ I.waitForValue('#value', '["g","r","e","a","t"]')
1030
+ })
1031
+
1032
+ Scenario('Tables should have a container parent that makes tables responsive @array-table', async ({ I }) => {
1033
+ I.amOnPage('array-table-responsive.html')
1034
+ I.waitForElement('.je-ready', DEFAULT_WAIT_TIME)
1035
+ I.waitForElement('.table-responsive')
1036
+ })