@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
@@ -0,0 +1,15 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('starrating')
4
+
5
+ Scenario('should set and get values properly @starrating', async ({ I }) => {
6
+ I.amOnPage('starrating.html')
7
+ I.waitForElement('.je-ready')
8
+ I.waitForValue('#value', '{"integer_rating":0,"string_rating":"","starrating":"Beginner","starrating2":"Beginner","starrating3":"5 Stars"}')
9
+ I.click('[for="root[integer_rating]3"]')
10
+ I.click('[for="root[string_rating]3"]')
11
+ I.click('[for="root[starrating]3"]')
12
+ I.click('[for="root[starrating2]3"]')
13
+ I.click('[for="root[starrating3]10"]')
14
+ I.waitForValue('#value', '{"integer_rating":3,"string_rating":"3","starrating":"Experienced","starrating2":"Experienced","starrating3":"10 Stars"}')
15
+ })
@@ -0,0 +1,37 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('stepper')
4
+
5
+ Scenario('should validate value @stepper', async ({ I }) => {
6
+ I.amOnPage('stepper.html')
7
+ I.click('.get-value')
8
+ I.see('Property must be set.', '[data-schemapath="root.stepper"] div')
9
+ I.waitForValue('.value', '{}')
10
+ })
11
+
12
+ Scenario('should be constrained to maximun and minimun values when stepped @stepper', async ({ I }) => {
13
+ I.amOnPage('stepper.html')
14
+ I.click('.stepper-up')
15
+ I.click('.stepper-up')
16
+ I.click('.stepper-up')
17
+ I.click('.get-value')
18
+ I.click('.get-value')
19
+ I.waitForValue('.value', '{"stepper":6}')
20
+ I.click('.stepper-down')
21
+ I.click('.stepper-down')
22
+ I.click('.stepper-down')
23
+ I.click('.get-value')
24
+ I.waitForValue('.value', '{"stepper":5}')
25
+ })
26
+
27
+ Scenario('should be correct initialized when manually set @stepper', async ({ I }) => {
28
+ I.amOnPage('stepper-manual.html')
29
+ I.fillField('[name="root[stepper]"]', 10)
30
+ I.click('.stepper-up')
31
+ I.click('.get-value')
32
+ I.waitForValue('.value', '{"stepper":11}')
33
+ I.click('.stepper-down')
34
+ I.click('.stepper-down')
35
+ I.click('.get-value')
36
+ I.waitForValue('.value', '{"stepper":9}')
37
+ })
@@ -1,109 +1,125 @@
1
- var assert = require('assert');
2
-
3
- Feature('string');
4
-
5
- Scenario('should have correct initial value', async (I) => {
6
- I.amOnPage('string-ace-editor.html');
7
- I.click('.get-value');
8
- assert.equal(await I.grabValueFrom('.debug'), '[]');
9
- });
10
-
11
- Scenario('should have coerent values', async (I) => {
12
- I.amOnPage('string-ace-editor.html');
13
- I.click('Add item');
14
- I.see('item 1');
15
- I.seeElement('.ace_editor');
16
-
17
- I.click('.ace_editor');
18
- I.pressKey('__YELLOW__');
19
- I.see('__YELLOW__');
20
-
21
- I.click('.get-value');
22
- assert.equal(await I.grabValueFrom('.debug'), JSON.stringify([{"editor":"__YELLOW__"}]));
23
- });
24
-
25
- Scenario('should have correct initial value', async (I) => {
26
- I.amOnPage('string-sceditor.html');
27
- I.click('.get-value');
28
- assert.equal(await I.grabValueFrom('.debug'), '[]');
29
- });
30
-
31
- Scenario('editor value and String editor should have coerent values @optional', async (I) => {
32
- I.amOnPage('string-sceditor.html');
33
- I.click('Add item');
34
- I.see('item 1');
1
+ /* global Feature Scenario */
2
+
3
+ var assert = require('assert')
4
+
5
+ Feature('string')
6
+
7
+ Scenario('ace editor should have correct initial value', async ({ I }) => {
8
+ I.amOnPage('string-ace-editor.html')
9
+ I.click('.get-value')
10
+ I.waitForValue('.debug', '[]')
11
+ })
12
+
13
+ Scenario('should have coerent values', async ({ I }) => {
14
+ I.amOnPage('string-ace-editor.html')
15
+ I.click('Add item')
16
+ I.see('item 1')
17
+ I.seeElement('.ace_editor')
18
+ I.click('.ace_editor')
19
+ I.pressKeys('__YELLOW__')
20
+ I.click('.ace_editor')
21
+ I.see('__YELLOW__')
22
+
23
+ I.click('.get-value')
24
+ I.waitForValue('.debug', JSON.stringify([{ editor: '__YELLOW__' }]))
25
+ })
26
+
27
+ Scenario('sceditor should have correct initial value', async ({ I }) => {
28
+ I.amOnPage('string-sceditor.html')
29
+ I.click('.get-value')
30
+ I.waitForValue('.debug', '[]')
31
+ })
32
+
33
+ Scenario('editor value and String editor should have coerent values @optional', async ({ I }) => {
34
+ I.amOnPage('string-sceditor.html')
35
+ I.click('Add item')
36
+ I.see('item 1')
35
37
 
36
38
  // enters first iframe, writes text on the body and then exits
37
- I.switchTo(0);
38
- I.click('body');
39
- I.pressKey('__YELLOW__');
40
- I.see('__YELLOW__');
41
- I.switchTo();
42
-
43
- I.click('.get-value');
44
- assert.equal(await I.grabValueFrom('.debug'), JSON.stringify([{"editor":"<p>__YELLOW__</p>"}]));
45
- });
46
-
47
- Scenario('Should work correctly in arrays @optional', async (I) => {
48
- I.amOnPage('string-sceditor.html');
49
- I.click('Add item');
50
- I.click('Add item');
51
- I.see('item 1');
52
- I.see('item 2');
39
+ I.switchTo(0)
40
+ I.click('body')
41
+ I.pressKeys('__YELLOW__')
42
+ I.see('__YELLOW__')
43
+ I.switchTo()
44
+
45
+ I.click('.get-value')
46
+ I.waitForValue('.debug', JSON.stringify([{ editor: '<p>__YELLOW__</p>' }]))
47
+ })
48
+
49
+ Scenario('Should work correctly in arrays @optional', async ({ I }) => {
50
+ I.amOnPage('string-sceditor.html')
51
+ I.click('Add item')
52
+ I.click('Add item')
53
+ I.see('item 1')
54
+ I.see('item 2')
53
55
 
54
56
  // enters first iframe, writes text on the body and then exits
55
- I.switchTo(0);
56
- I.click('body');
57
- I.pressKey('__YELLOW__');
58
- I.see('__YELLOW__');
59
- I.switchTo();
57
+ I.switchTo(0)
58
+ I.click('body')
59
+ I.pressKeys('__YELLOW__')
60
+ I.see('__YELLOW__')
61
+ I.switchTo()
60
62
 
61
63
  // enters first iframe and read text
62
- I.switchTo(0);
63
- I.see('__YELLOW__');
64
- I.switchTo();
64
+ I.switchTo(0)
65
+ I.see('__YELLOW__')
66
+ I.switchTo()
65
67
 
66
68
  // enters second iframe, writes text on the body and then exits
67
- I.switchTo(1);
68
- I.click('body');
69
- I.pressKey('__BLUE__');
70
- I.see('__BLUE__');
71
- I.switchTo();
69
+ I.switchTo(1)
70
+ I.click('body')
71
+ I.pressKeys('__BLUE__')
72
+
73
+ I.see('__BLUE__')
74
+ I.switchTo()
72
75
 
73
76
  // enters second iframe and read text
74
- I.switchTo(1);
75
- I.see('__BLUE__');
76
- I.switchTo();
77
+ I.switchTo(1)
78
+ I.see('__BLUE__')
79
+ I.switchTo()
77
80
 
78
- I.click('.get-value');
79
- assert.equal(await I.grabValueFrom('.debug'), JSON.stringify([{"editor":"<p>__YELLOW__<br></p>"},{"editor":"<p>__BLUE__<br></p>"}]));
81
+ I.click('.get-value')
82
+ I.waitForValue('.debug', JSON.stringify([{ editor: '<p>__YELLOW__<br></p>' }, { editor: '<p>__BLUE__<br></p>' }]))
80
83
 
81
- I.click('.json-editor-btn-movedown');
82
- I.click('.get-value');
83
- assert.equal(await I.grabValueFrom('.debug'), JSON.stringify([{"editor":"<p>__BLUE__<br></p>"},{"editor":"<p>__YELLOW__<br></p>"}]));
84
+ I.click('.json-editor-btn-movedown')
85
+ I.click('.get-value')
86
+ I.waitForValue('.debug', JSON.stringify([{ editor: '<p>__BLUE__<br></p>' }, { editor: '<p>__YELLOW__<br></p>' }]))
84
87
 
85
88
  // the last 2 tests will fail because Sceditors iframes loose their content when the iframe is reloaded.
86
89
 
87
90
  // enters first iframe and read text
88
- I.switchTo(0);
89
- I.see('__BLUE__');
90
- I.switchTo();
91
+ I.switchTo(0)
92
+ I.see('__BLUE__')
93
+ I.switchTo()
91
94
 
92
95
  // enters second iframe and read text
93
- I.switchTo(1);
94
- I.see('__YELLOW__');
95
- I.switchTo();
96
-
97
- });
98
-
99
- Scenario('should be readonly if specified and not disabled', async (I) => {
100
- I.amOnPage('read-only.html');
101
- I.seeElement('[name="root[string]"]');
102
- assert.equal(await I.grabAttributeFrom('[name="root[string]"]', 'readonly'), 'true');
103
- });
104
-
105
- Scenario('should have a custom attribute with custom value', async (I) => {
106
- I.amOnPage('string-custom-attributes.html');
107
- I.seeElement('[name="root[custom_attributes]"]');
108
- assert.equal(await I.grabAttributeFrom('[name="root[custom_attributes]"]', 'custom-attribute'), 'custom-value');
109
- });
96
+ I.switchTo(1)
97
+ I.see('__YELLOW__')
98
+ I.switchTo()
99
+ })
100
+
101
+ Scenario('should be readonly if specified and not disabled @readOnly', async ({ I }) => {
102
+ I.amOnPage('read-only.html')
103
+ I.seeReadOnlyAttribute('[name="root[string]"]')
104
+ })
105
+
106
+ Scenario('should have a custom attribute with custom value', async ({ I }) => {
107
+ I.amOnPage('string-custom-attributes.html')
108
+ I.seeElement('[name="root[custom_attributes]"]')
109
+ assert.strictEqual(await I.grabAttributeFrom('[name="root[custom_attributes]"]', 'custom-attribute'), 'custom-value')
110
+ })
111
+
112
+ Scenario('should work with cleave.js library', async ({ I }) => {
113
+ I.amOnPage('string-cleave.html')
114
+ I.seeElement('[name="root[cleave_test]"]')
115
+ await I.fillField('[name="root[cleave_test]"]', '12345678901234567890')
116
+ I.click('.get-value')
117
+ I.waitForValue('.debug', JSON.stringify({ cleave_test: '1234.567.890-1234' }))
118
+ })
119
+
120
+ Scenario('ace editor should have correct initial @prompt-paste-max-length-reached', async ({ I }) => {
121
+ I.amOnPage('prompt-paste-max-length-reached.html')
122
+ I.waitForElement('.je-ready')
123
+ I.click('#paste')
124
+ I.seeInPopup('Pasted text exceeded maximum length of 5 and will be clipped.')
125
+ })
@@ -1,59 +1,65 @@
1
- var assert = require('assert');
1
+ /* global Feature Scenario */
2
2
 
3
- Feature('table');
3
+ Feature('table')
4
4
 
5
- Scenario('should have correct initial value', async (I) => {
6
- I.amOnPage('table.html');
7
- I.click('.get-value');
8
- assert.equal(await I.grabValueFrom('.debug'), '[]');
9
- });
5
+ Scenario('should have correct initial value', async ({ I }) => {
6
+ I.amOnPage('table.html')
7
+ I.click('.get-value')
8
+ I.waitForValue('.debug', '[]')
9
+ })
10
10
 
11
- Scenario('should ask for confirmation on node delete', async (I) => {
12
- I.amOnPage('table.html');
13
- I.click('Add Node');
14
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
15
- I.click('[data-schemapath="root.0"] .json-editor-btn-delete');
16
- I.seeInPopup('Are you sure you want to remove this node?');
17
- I.cancelPopup();
18
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
19
- I.click('[data-schemapath="root.0"] .json-editor-btn-delete');
20
- I.seeInPopup('Are you sure you want to remove this node?');
21
- I.acceptPopup();
22
- I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
23
- });
11
+ Scenario('should ask for confirmation on node delete', async ({ I }) => {
12
+ I.amOnPage('table.html')
13
+ I.click('Add Node')
14
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
15
+ I.amCancellingPopups()
16
+ I.click('[data-schemapath="root.0"] .json-editor-btn-delete')
17
+ I.seeInPopup('Are you sure you want to remove this item?')
18
+ I.cancelPopup()
19
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
20
+ I.amAcceptingPopups()
21
+ I.click('[data-schemapath="root.0"] .json-editor-btn-delete')
22
+ I.seeInPopup('Are you sure you want to remove this item?')
23
+ I.acceptPopup()
24
+ I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
25
+ })
24
26
 
25
- Scenario('should ask for confirmation on node delete last', async (I) => {
26
- I.amOnPage('table.html');
27
- I.click('Add Node');
28
- I.click('Add Node');
29
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
30
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
31
- I.click('Delete Last Node');
32
- I.seeInPopup('Are you sure you want to remove this node?');
33
- I.cancelPopup();
34
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
35
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
36
- I.click('Delete Last Node');
37
- I.seeInPopup('Are you sure you want to remove this node?');
38
- I.acceptPopup();
39
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
40
- I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
41
- });
27
+ Scenario('should ask for confirmation on node delete last', async ({ I }) => {
28
+ I.amOnPage('table.html')
29
+ I.click('Add Node')
30
+ I.click('Add Node')
31
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
32
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
33
+ I.amCancellingPopups()
34
+ I.click('Delete Last Node')
35
+ I.seeInPopup('Are you sure you want to remove this item?')
36
+ I.cancelPopup()
37
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
38
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
39
+ I.amAcceptingPopups()
40
+ I.click('Delete Last Node')
41
+ I.seeInPopup('Are you sure you want to remove this item?')
42
+ I.acceptPopup()
43
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
44
+ I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
45
+ })
42
46
 
43
- Scenario('should ask for confirmation on node delete all', async (I) => {
44
- I.amOnPage('table.html');
45
- I.click('Add Node');
46
- I.click('Add Node');
47
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
48
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
49
- I.click('Delete All');
50
- I.seeInPopup('Are you sure you want to remove this node?');
51
- I.cancelPopup();
52
- I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
53
- I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
54
- I.click('Delete All');
55
- I.seeInPopup('Are you sure you want to remove this node?');
56
- I.acceptPopup();
57
- I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete');
58
- I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete');
59
- });
47
+ Scenario('should ask for confirmation on node delete all', async ({ I }) => {
48
+ I.amOnPage('table.html')
49
+ I.click('Add Node')
50
+ I.click('Add Node')
51
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
52
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
53
+ I.amCancellingPopups()
54
+ I.click('Delete All')
55
+ I.seeInPopup('Are you sure you want to remove this item?')
56
+ I.cancelPopup()
57
+ I.seeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
58
+ I.seeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
59
+ I.amAcceptingPopups()
60
+ I.click('Delete All')
61
+ I.seeInPopup('Are you sure you want to remove this item?')
62
+ I.acceptPopup()
63
+ I.dontSeeElement('[data-schemapath="root.0"] .json-editor-btn-delete')
64
+ I.dontSeeElement('[data-schemapath="root.1"] .json-editor-btn-delete')
65
+ })
@@ -1,12 +1,16 @@
1
- Feature('Tabs');
1
+ /* global Feature Scenario */
2
2
 
3
- Scenario('test top-tabs', (I) => {
4
- I.amOnPage('tabs.html');
5
- I.waitForElement('[data-schemapath="root"] .json-editor-btn-add');
6
- I.click('[data-schemapath="root"] .json-editor-btn-add');
7
- I.see('1 -');
8
- I.see('validation failed')
9
- I.fillField('root[1][name]', 'Somebody')
10
- I.click('body')
11
- I.see('validation passed')
12
- });
3
+ const { DEFAULT_WAIT_TIME } = require('../test-config')
4
+
5
+ Feature('Tabs')
6
+
7
+ Scenario('test @top-tabs', ({ I }) => {
8
+ I.amOnPage('tabs.html')
9
+ I.waitForElement('[data-schemapath="root"] .json-editor-btn-add')
10
+ I.click('[data-schemapath="root"] .json-editor-btn-add')
11
+ I.waitForText('1 -', DEFAULT_WAIT_TIME)
12
+ I.waitForText('validation failed', DEFAULT_WAIT_TIME)
13
+ I.fillField('root[1][name]', 'Somebody')
14
+ I.pressKey('Tab')
15
+ I.waitForText('validation passed', DEFAULT_WAIT_TIME)
16
+ })
@@ -0,0 +1,48 @@
1
+ /* global Feature Scenario */
2
+
3
+ const assert = require('assert')
4
+
5
+ Feature('uuid')
6
+
7
+ Scenario('should have initial value matching uuid @uuid', async ({ I }) => {
8
+ I.amOnPage('uuid.html')
9
+ I.wait(1)
10
+ const value = await I.grabValueFrom('[name="root[uuid]"]')
11
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)), true)
12
+ })
13
+
14
+ Scenario('should have initial value matching uuid in arrays @uuid', async ({ I }) => {
15
+ I.click('Add uuid string array item')
16
+ I.click('Add uuid string array item')
17
+ const value0 = await I.grabValueFrom('[name="root[uuidStringArray][0]"]')
18
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
19
+ const value1 = await I.grabValueFrom('[name="root[uuidStringArray][1]"]')
20
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
21
+ })
22
+
23
+ Scenario('should have initial value matching uuid in arrays of objects with @uuid', async ({ I }) => {
24
+ I.click('Add uuid object array item')
25
+ I.click('Add uuid object array item')
26
+ const value0 = await I.grabValueFrom('[name="root[uuidObjectArray][0][uuid]"]')
27
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
28
+ const value1 = await I.grabValueFrom('[name="root[uuidObjectArray][1][uuid]"]')
29
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
30
+ })
31
+
32
+ Scenario('should have initial value matching uuid in arrays (table) of strings with @uuid', async ({ I }) => {
33
+ I.click('Add uuid string table item')
34
+ I.click('Add uuid string table item')
35
+ const value0 = await I.grabValueFrom('[name="root[uuidStringTable][0]')
36
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
37
+ const value1 = await I.grabValueFrom('[name="root[uuidStringTable][1]')
38
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
39
+ })
40
+
41
+ Scenario('should have initial value matching uuid in arrays (table) of objects with @uuid', async ({ I }) => {
42
+ I.click('Add uuid object table item')
43
+ I.click('Add uuid object table item')
44
+ const value0 = await I.grabValueFrom('[name="root[uuidObjectTable][0][uuid]"]')
45
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value0)), true)
46
+ const value1 = await I.grabValueFrom('[name="root[uuidObjectTable][1][uuid]"]')
47
+ assert.strictEqual((/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value1)), true)
48
+ })
@@ -1,12 +1,16 @@
1
+ /* global Feature Scenario */
2
+
1
3
  // Note: validation.html has its own way of testing; this test simply tests if the output of that test conforms to the expected output
2
4
 
3
- Feature('Validations');
5
+ const { DEFAULT_WAIT_TIME } = require('../test-config')
6
+
7
+ Feature('Validations')
4
8
 
5
- Scenario('test validations in validation.html', (I) => {
6
- I.amOnPage('validation.html');
7
- var numberOfTestItemsExpected = 129;
8
- I.waitForElement("#output div:nth-child("+numberOfTestItemsExpected+")", 10);
9
- I.seeNumberOfElements("#output div", numberOfTestItemsExpected);
10
- I.see("success");
11
- I.dontSee('Fail');
12
- });
9
+ Scenario('test validations in validation.html', ({ I }) => {
10
+ I.amOnPage('validation.html')
11
+ const numberOfTestItemsExpected = 158
12
+ I.waitForElement('#output div:nth-child(' + numberOfTestItemsExpected + ')', DEFAULT_WAIT_TIME)
13
+ I.seeNumberOfElements('#output div', numberOfTestItemsExpected)
14
+ I.see('success')
15
+ I.dontSee('fail')
16
+ })
@@ -0,0 +1,9 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('GitHub issue 1133')
4
+
5
+ Scenario('GitHub issue 1133 should remain fixed @issue-1133', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1133.html')
7
+ I.waitForElement('.je-ready')
8
+ I.waitForValue('#value', '{"SaveDataMask":"DP"}')
9
+ })
@@ -0,0 +1,10 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1165 should remain fixed @issue-1165 @schemaloader', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1165.html')
7
+ I.waitForText('Add item')
8
+ I.click('Add item')
9
+ I.waitForText('external-schema')
10
+ })
@@ -0,0 +1,8 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1158 should remain fixed @issue-1158', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1158.html')
7
+ I.seeElement('[name="root[name]"]')
8
+ })
@@ -0,0 +1,9 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('GitHub issue 1164')
4
+
5
+ Scenario('GitHub issue 1164 should remain fixed @issue-1164', ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1164.html')
7
+ I.waitForElement('.je-ready')
8
+ I.waitForValue('#value', '{"arrayEnumSelect":["one"],"stringEnumRadio":"one","numberEnumRadio":1.1,"integerEnumRadio":1}')
9
+ })
@@ -0,0 +1,11 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1171 should remain fixed @issue-1171', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1171.html')
7
+ I.waitForElement('.je-ready')
8
+ I.dontSeeCheckedAttribute('[id="root[1]"]')
9
+ I.checkOption('[id="root[1]"]')
10
+ I.dontSeeCheckedAttribute('[id="root[0]"]')
11
+ })
@@ -0,0 +1,17 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1211 should remain fixed @issue-1211 @schemaloader', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1211.html')
7
+ I.waitForText('Rule collection')
8
+ I.waitForText('SSID & MAC Groups')
9
+ I.waitForText('Certificate Extensions')
10
+ I.click('Rule')
11
+ I.waitForText('Generic Allow Rule')
12
+ I.click('Group')
13
+ I.waitForText('Group 1')
14
+ I.click('Extension')
15
+ I.waitForText('OID')
16
+ I.waitForValue('#value', '{"rules":[{"type":"any","name":"","description":"","enabled":false}],"groups":[{"type":"ssid-group","ssid-group":[],"name":"","description":""}],"certificate-extensions":[{"name":"","oid":""}],"trustedroots":[],"intuneids":[]}')
17
+ })
@@ -0,0 +1,11 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('GitHub issue 1257')
4
+
5
+ Scenario('GitHub issue 1257 should remain fixed @issue-1257', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1257.html')
7
+ I.waitForElement('.je-ready')
8
+ I.click('[data-schemapath="root.colors"] .json-editor-btntype-add')
9
+ I.waitForValue('#value', '{"colors":[{"text":"X","color":"#fefaac"}],"color":"#fefaac"}')
10
+ I.waitForValue('[name="root[colors][0][color]"]', '#fefaac')
11
+ })
@@ -0,0 +1,21 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1272 should remain fixed @issue-1272', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1272.html')
7
+ I.waitForElement('.je-ready')
8
+ I.selectOption('[name="root[recorder][albums]"]', 'album2')
9
+ I.waitForText('song1')
10
+ I.dontSee('array editor')
11
+ I.selectOption('[data-schemapath="root.recorder.album2"] .je-switcher', 'SideB')
12
+ I.waitForText('array editor')
13
+ I.dontSee('song1')
14
+ I.selectOption('[data-schemapath="root.recorder.album2"] .je-switcher', 'SideA')
15
+ I.waitForText('song1')
16
+ I.dontSee('array editor')
17
+ I.selectOption('[name="root[recorder][albums]"]', 'album1')
18
+ I.selectOption('[name="root[recorder][albums]"]', 'album2')
19
+ I.waitForText('song1')
20
+ I.dontSee('array editor')
21
+ })
@@ -0,0 +1,8 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1330 should remain fixed @issue-1330 @multiselect', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1330.html')
7
+ I.waitForElement('[data-schemapath="root.test"] input[type="checkbox"]')
8
+ })
@@ -0,0 +1,18 @@
1
+ /* global Feature Scenario */
2
+
3
+ Feature('issues')
4
+
5
+ Scenario('GitHub issue 1338 should remain fixed @issue-1338', async ({ I }) => {
6
+ I.amOnPage('issues/issue-gh-1338.html')
7
+ I.waitForText('Value required')
8
+ I.fillField('[id="root[field_a]"]', 'test')
9
+ I.pressKey('Tab')
10
+ I.waitForInvisible('.invalid-feedback')
11
+ I.dontSee('Value required')
12
+ I.refreshPage()
13
+ I.waitForText('Value required')
14
+ I.fillField('[id="root[field_b]"]', 'test')
15
+ I.pressKey('Tab')
16
+ I.waitForInvisible('.invalid-feedback')
17
+ I.dontSee('Value required')
18
+ })