@wirenboard/json-editor 2.5.3-wb13

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 (283) hide show
  1. package/.env-dist +2 -0
  2. package/.eslintrc +7 -0
  3. package/.gitattributes +1 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
  5. package/.github/issue_template +25 -0
  6. package/.github/workflows/build.yml +58 -0
  7. package/.travis.yml +70 -0
  8. package/CHANGELOG.md +915 -0
  9. package/CONTRIBUTING.md +92 -0
  10. package/LICENSE +20 -0
  11. package/Makefile +26 -0
  12. package/README.md +1646 -0
  13. package/README_ADDON.md +573 -0
  14. package/UPGRADING.md +46 -0
  15. package/build/CssToJson.js +55 -0
  16. package/codecept.conf.js +35 -0
  17. package/config/.eslintrc +7 -0
  18. package/config/codeceptjs_helpers.js +139 -0
  19. package/config/helpers.js +10 -0
  20. package/config/karma.conf.js +93 -0
  21. package/config/readme.md +31 -0
  22. package/config/webpack.common.js +75 -0
  23. package/config/webpack.dev.js +15 -0
  24. package/config/webpack.nonmin.js +19 -0
  25. package/config/webpack.prod.js +25 -0
  26. package/dist/jsoneditor.js +14 -0
  27. package/dist/nonmin/jsoneditor.js +29097 -0
  28. package/dist/nonmin/jsoneditor.js.map +1 -0
  29. package/docs/ace_editor.html +56 -0
  30. package/docs/advanced.html +136 -0
  31. package/docs/basic.html +63 -0
  32. package/docs/basic_person.json +26 -0
  33. package/docs/choices.html +86 -0
  34. package/docs/cleave.html +132 -0
  35. package/docs/colorpicker.html +194 -0
  36. package/docs/css_integration.html +135 -0
  37. package/docs/datetime.html +305 -0
  38. package/docs/describedby.html +161 -0
  39. package/docs/enumsource.html +67 -0
  40. package/docs/images/categoriesDemo.png +0 -0
  41. package/docs/images/inheritance_tree.png +0 -0
  42. package/docs/images/jsoneditor.png +0 -0
  43. package/docs/imask.html +192 -0
  44. package/docs/index.html +579 -0
  45. package/docs/materialize_css.html +164 -0
  46. package/docs/meta_schema.json +705 -0
  47. package/docs/multiple_upload_base64.html +65 -0
  48. package/docs/person.json +73 -0
  49. package/docs/polyfills/assign.js +29 -0
  50. package/docs/radio.html +156 -0
  51. package/docs/recursive.html +170 -0
  52. package/docs/select2.html +99 -0
  53. package/docs/selectize.html +100 -0
  54. package/docs/signature.html +42 -0
  55. package/docs/starrating.html +137 -0
  56. package/docs/upload.html +131 -0
  57. package/docs/uuid.html +70 -0
  58. package/docs/wysiwyg.html +56 -0
  59. package/jasmine.json +11 -0
  60. package/json-editor-json-editor-2.5.3-wb13.tgz +0 -0
  61. package/package.json +100 -0
  62. package/release-notes.md +88 -0
  63. package/src/core.js +412 -0
  64. package/src/defaults.js +402 -0
  65. package/src/editor.js +707 -0
  66. package/src/editors/ace.js +89 -0
  67. package/src/editors/array/choices.js +103 -0
  68. package/src/editors/array/select2.js +110 -0
  69. package/src/editors/array/selectize.js +103 -0
  70. package/src/editors/array.css +9 -0
  71. package/src/editors/array.css.js +3 -0
  72. package/src/editors/array.js +818 -0
  73. package/src/editors/autocomplete.js +58 -0
  74. package/src/editors/base64.js +157 -0
  75. package/src/editors/button.js +97 -0
  76. package/src/editors/checkbox.js +95 -0
  77. package/src/editors/choices.css +3 -0
  78. package/src/editors/choices.css.js +3 -0
  79. package/src/editors/choices.js +69 -0
  80. package/src/editors/colorpicker.js +103 -0
  81. package/src/editors/datetime.js +141 -0
  82. package/src/editors/describedby.js +188 -0
  83. package/src/editors/enum.js +136 -0
  84. package/src/editors/hidden.js +127 -0
  85. package/src/editors/index.js +81 -0
  86. package/src/editors/info.js +20 -0
  87. package/src/editors/integer.js +19 -0
  88. package/src/editors/ip.js +36 -0
  89. package/src/editors/jodit.js +64 -0
  90. package/src/editors/multiple.js +409 -0
  91. package/src/editors/multiselect.js +218 -0
  92. package/src/editors/null.js +18 -0
  93. package/src/editors/number.js +51 -0
  94. package/src/editors/object.css +41 -0
  95. package/src/editors/object.css.js +3 -0
  96. package/src/editors/object.js +1290 -0
  97. package/src/editors/radio.js +111 -0
  98. package/src/editors/sceditor.js +72 -0
  99. package/src/editors/select.js +370 -0
  100. package/src/editors/select2.js +110 -0
  101. package/src/editors/selectize.js +112 -0
  102. package/src/editors/signature.js +113 -0
  103. package/src/editors/simplemde.js +100 -0
  104. package/src/editors/starrating.css +52 -0
  105. package/src/editors/starrating.css.js +3 -0
  106. package/src/editors/starrating.js +135 -0
  107. package/src/editors/stepper.js +27 -0
  108. package/src/editors/string.js +372 -0
  109. package/src/editors/table.js +516 -0
  110. package/src/editors/upload.js +321 -0
  111. package/src/editors/uuid.js +56 -0
  112. package/src/iconlib.js +24 -0
  113. package/src/iconlibs/bootstrap2.js +28 -0
  114. package/src/iconlibs/bootstrap3.js +28 -0
  115. package/src/iconlibs/fontawesome3.js +28 -0
  116. package/src/iconlibs/fontawesome4.js +28 -0
  117. package/src/iconlibs/fontawesome5.js +28 -0
  118. package/src/iconlibs/foundation2.js +24 -0
  119. package/src/iconlibs/foundation3.js +28 -0
  120. package/src/iconlibs/index.js +25 -0
  121. package/src/iconlibs/jqueryui.js +28 -0
  122. package/src/iconlibs/materialicons.js +49 -0
  123. package/src/iconlibs/openiconic.js +28 -0
  124. package/src/iconlibs/spectre.js +28 -0
  125. package/src/resolvers.js +128 -0
  126. package/src/schemaloader.js +408 -0
  127. package/src/style.css +150 -0
  128. package/src/style.css.js +3 -0
  129. package/src/templates/default.js +52 -0
  130. package/src/templates/ejs.js +13 -0
  131. package/src/templates/handlebars.js +1 -0
  132. package/src/templates/hogan.js +10 -0
  133. package/src/templates/index.js +21 -0
  134. package/src/templates/lodash.js +9 -0
  135. package/src/templates/markup.js +9 -0
  136. package/src/templates/mustache.js +9 -0
  137. package/src/templates/swig.js +1 -0
  138. package/src/templates/underscore.js +9 -0
  139. package/src/theme.js +659 -0
  140. package/src/themes/barebones.css +35 -0
  141. package/src/themes/barebones.css.js +3 -0
  142. package/src/themes/barebones.js +28 -0
  143. package/src/themes/bootstrap2.js +319 -0
  144. package/src/themes/bootstrap3.css +0 -0
  145. package/src/themes/bootstrap3.css.js +3 -0
  146. package/src/themes/bootstrap3.js +315 -0
  147. package/src/themes/bootstrap4.css +89 -0
  148. package/src/themes/bootstrap4.css.js +3 -0
  149. package/src/themes/bootstrap4.js +690 -0
  150. package/src/themes/bootstrap5.css.js +3 -0
  151. package/src/themes/foundation.js +569 -0
  152. package/src/themes/html.css +60 -0
  153. package/src/themes/html.css.js +3 -0
  154. package/src/themes/html.js +71 -0
  155. package/src/themes/index.js +28 -0
  156. package/src/themes/jqueryui.js +198 -0
  157. package/src/themes/materialize.js +426 -0
  158. package/src/themes/spectre.css +208 -0
  159. package/src/themes/spectre.css.js +3 -0
  160. package/src/themes/spectre.js +406 -0
  161. package/src/themes/tailwind.css +249 -0
  162. package/src/themes/tailwind.css.js +3 -0
  163. package/src/themes/tailwind.js +443 -0
  164. package/src/utilities.js +138 -0
  165. package/src/validator.js +877 -0
  166. package/src/validators/ip-validator.js +51 -0
  167. package/tests/Dockerfile +3 -0
  168. package/tests/README.md +48 -0
  169. package/tests/codeceptjs/codecept.json +42 -0
  170. package/tests/codeceptjs/constrains/if-then-else_test.js +143 -0
  171. package/tests/codeceptjs/core_test.js +217 -0
  172. package/tests/codeceptjs/editors/advanced_test.js +13 -0
  173. package/tests/codeceptjs/editors/array_any_of_test.js +50 -0
  174. package/tests/codeceptjs/editors/array_test.js +900 -0
  175. package/tests/codeceptjs/editors/button_test.js +35 -0
  176. package/tests/codeceptjs/editors/checkbox_test.js +21 -0
  177. package/tests/codeceptjs/editors/colorpicker_test.js +27 -0
  178. package/tests/codeceptjs/editors/datetime_test.js +33 -0
  179. package/tests/codeceptjs/editors/inheritance_test.js +11 -0
  180. package/tests/codeceptjs/editors/integer_test.js +84 -0
  181. package/tests/codeceptjs/editors/issues/issue-gh-812_test.js +32 -0
  182. package/tests/codeceptjs/editors/jodit_test.js +24 -0
  183. package/tests/codeceptjs/editors/multiselect_test.js +8 -0
  184. package/tests/codeceptjs/editors/number_test.js +82 -0
  185. package/tests/codeceptjs/editors/object_test.js +204 -0
  186. package/tests/codeceptjs/editors/option-no_default_values_test.js +42 -0
  187. package/tests/codeceptjs/editors/programmatic-changes_test.js +20 -0
  188. package/tests/codeceptjs/editors/radio_test.js +10 -0
  189. package/tests/codeceptjs/editors/rating_test.js +13 -0
  190. package/tests/codeceptjs/editors/select_test.js +22 -0
  191. package/tests/codeceptjs/editors/stepper_test.js +27 -0
  192. package/tests/codeceptjs/editors/string_test.js +118 -0
  193. package/tests/codeceptjs/editors/table-confirm-delete_test.js +67 -0
  194. package/tests/codeceptjs/editors/tabs_test.js +14 -0
  195. package/tests/codeceptjs/editors/uuid_test.js +21 -0
  196. package/tests/codeceptjs/editors/validation_test.js +14 -0
  197. package/tests/codeceptjs/meta-schema_test.js +17 -0
  198. package/tests/codeceptjs/schemaloader_test.js +13 -0
  199. package/tests/codeceptjs/steps.d.ts +13 -0
  200. package/tests/codeceptjs/steps_file.js +12 -0
  201. package/tests/codeceptjs/themes_test.js +519 -0
  202. package/tests/docker-compose.yml +34 -0
  203. package/tests/fixtures/basic_person.json +26 -0
  204. package/tests/fixtures/nested_object.json +26 -0
  205. package/tests/fixtures/person.json +55 -0
  206. package/tests/fixtures/recursive.json +8 -0
  207. package/tests/fixtures/some_types.json +32 -0
  208. package/tests/fixtures/string.json +3 -0
  209. package/tests/fixtures/validation.json +1140 -0
  210. package/tests/pages/_demo.html +475 -0
  211. package/tests/pages/advanced.html +137 -0
  212. package/tests/pages/anyof.html +80 -0
  213. package/tests/pages/array-anyof.html +142 -0
  214. package/tests/pages/array-checkboxes.html +41 -0
  215. package/tests/pages/array-choices.html +45 -0
  216. package/tests/pages/array-integers.html +37 -0
  217. package/tests/pages/array-move-events.html +61 -0
  218. package/tests/pages/array-multiselects.html +42 -0
  219. package/tests/pages/array-nested-arrays.html +40 -0
  220. package/tests/pages/array-numbers.html +37 -0
  221. package/tests/pages/array-objects.html +42 -0
  222. package/tests/pages/array-ratings.html +40 -0
  223. package/tests/pages/array-selectize.html +51 -0
  224. package/tests/pages/array-selects.html +36 -0
  225. package/tests/pages/array-strings.html +36 -0
  226. package/tests/pages/array.html +42 -0
  227. package/tests/pages/assets/pages.css +130 -0
  228. package/tests/pages/button-callbacks.html +77 -0
  229. package/tests/pages/checkbox-labels.html +114 -0
  230. package/tests/pages/colorpicker-no-3rd-party.html +43 -0
  231. package/tests/pages/colorpicker-use-vanilla-picker.html +50 -0
  232. package/tests/pages/core.html +118 -0
  233. package/tests/pages/datetime.html +76 -0
  234. package/tests/pages/form-name.html +108 -0
  235. package/tests/pages/grid-strict.html +311 -0
  236. package/tests/pages/grid.html +284 -0
  237. package/tests/pages/if-then-else-allOf.html +117 -0
  238. package/tests/pages/inheritance.html +76 -0
  239. package/tests/pages/integer.html +68 -0
  240. package/tests/pages/issues/_template.html +50 -0
  241. package/tests/pages/issues/issue-gh-812.html +110 -0
  242. package/tests/pages/issues/issue-gh-823-meta-schema.html +35 -0
  243. package/tests/pages/issues/issue-gh-848.html +81 -0
  244. package/tests/pages/meta_schema.json +705 -0
  245. package/tests/pages/number.html +89 -0
  246. package/tests/pages/object-no-additional-properties.html +65 -0
  247. package/tests/pages/object-no-duplicated-id.html +68 -0
  248. package/tests/pages/object-required-properties.html +236 -0
  249. package/tests/pages/object-with-dependencies-array.html +46 -0
  250. package/tests/pages/object-with-dependencies.html +60 -0
  251. package/tests/pages/object.html +79 -0
  252. package/tests/pages/oneof.html +103 -0
  253. package/tests/pages/option-no_default_values.html +58 -0
  254. package/tests/pages/programmatic-changes.html +120 -0
  255. package/tests/pages/read-only.html +105 -0
  256. package/tests/pages/select.html +41 -0
  257. package/tests/pages/stepper.html +59 -0
  258. package/tests/pages/string-ace-editor.html +52 -0
  259. package/tests/pages/string-cleave.html +46 -0
  260. package/tests/pages/string-custom-attributes.html +62 -0
  261. package/tests/pages/string-formats.html +52 -0
  262. package/tests/pages/string-formats2.html +57 -0
  263. package/tests/pages/string-jodit-editor.html +49 -0
  264. package/tests/pages/string-sceditor.html +62 -0
  265. package/tests/pages/table-move-events.html +56 -0
  266. package/tests/pages/table.html +46 -0
  267. package/tests/pages/tabs.html +131 -0
  268. package/tests/pages/themes.html +527 -0
  269. package/tests/pages/translate-property.html +247 -0
  270. package/tests/pages/urn.html +93 -0
  271. package/tests/pages/uuid.html +72 -0
  272. package/tests/pages/validation.html +99 -0
  273. package/tests/unit/.eslintrc +8 -0
  274. package/tests/unit/core.spec.js +309 -0
  275. package/tests/unit/defaults.spec.js +40 -0
  276. package/tests/unit/editor.spec.js +160 -0
  277. package/tests/unit/editors/array.spec.js +86 -0
  278. package/tests/unit/editors/object.spec.js +79 -0
  279. package/tests/unit/editors/table.spec.js +91 -0
  280. package/tests/unit/readme.md +35 -0
  281. package/tests/unit/schemaloader.spec.js +498 -0
  282. package/tests/unit/validator.spec.js +94 -0
  283. package/tests/unit/validators/ip-validator.spec.js +62 -0
@@ -0,0 +1,309 @@
1
+ /* global describe beforeEach afterEach it expect Event */
2
+
3
+ /*
4
+ Stub test file
5
+ TODO: Write unit tests for all interfaces
6
+ */
7
+ import { JSONEditor } from '../../src/core'
8
+ import someTypes from '../fixtures/some_types.json'
9
+ import nestedObject from '../fixtures/nested_object.json'
10
+
11
+ const schema = {
12
+ type: 'object',
13
+ properties: {
14
+ name: { type: 'string' }
15
+ }
16
+ }
17
+
18
+ describe('JSONEditor', function () {
19
+ let element
20
+ let editor
21
+
22
+ // inject the HTML fixture for the tests
23
+ beforeEach(() => {
24
+ const fixture = '<div id="fixture"></div>'
25
+
26
+ document.body.insertAdjacentHTML('afterbegin', fixture)
27
+ element = document.getElementById('fixture')
28
+ })
29
+
30
+ // remove the html fixture from the DOM
31
+ afterEach(() => {
32
+ document.body.removeChild(document.getElementById('fixture'))
33
+ })
34
+
35
+ it('should create an editor', () => {
36
+ console.log('Attempting to create new JSONEditor')
37
+ editor = new JSONEditor(element, { schema: schema })
38
+ expect(editor).toBeTruthy()
39
+ })
40
+
41
+ it('can add custom iconlib', () => {
42
+ const customMapping = {
43
+ collapse: 'key-down',
44
+ expand: 'key-right',
45
+ delete: 'trash',
46
+ edit: 'edit',
47
+ add: 'add',
48
+ subtract: 'minus',
49
+ cancel: 'check-circled',
50
+ save: 'create-file',
51
+ moveup: 'arrow-up',
52
+ moveright: 'arrow-right',
53
+ movedown: 'arrow-down',
54
+ moveleft: 'arrow-left',
55
+ copy: 'copy',
56
+ clear: 'close',
57
+ time: 'time',
58
+ calendar: 'calendar',
59
+ edit_properties: 'settings'
60
+ }
61
+ const customIconPrefix = 'mr-1 text-xl ki-'
62
+
63
+ class CustomIconLib extends JSONEditor.AbstractIconLib {
64
+ constructor () {
65
+ super()
66
+ this.mapping = customMapping
67
+ this.icon_prefix = customIconPrefix
68
+ }
69
+ }
70
+ JSONEditor.defaults.iconlibs.myCustom = CustomIconLib
71
+ editor = new JSONEditor(element, { schema: schema, iconlib: 'myCustom' })
72
+ expect(editor.iconlib.icon_prefix).toBe(customIconPrefix)
73
+ })
74
+
75
+ it('can add custom theme', () => {
76
+ class CustomTheme extends JSONEditor.AbstractTheme {}
77
+ CustomTheme.rules = { '.slider:focus': 'box-shadow:none' }
78
+ JSONEditor.defaults.themes.myCustom = CustomTheme
79
+ editor = new JSONEditor(element, { schema: schema, theme: 'myCustom' })
80
+ expect(editor.theme).toBeTruthy()
81
+ })
82
+
83
+ it('can add custom theme (no custom css rules)', () => {
84
+ class CustomTheme extends JSONEditor.AbstractTheme {}
85
+ JSONEditor.defaults.themes.myCustom2 = CustomTheme
86
+ editor = new JSONEditor(element, { schema: schema, theme: 'myCustom2' })
87
+ expect(editor.theme).toBeTruthy()
88
+ })
89
+
90
+ it('can add custom editor', () => {
91
+ class CustomEditor extends JSONEditor.AbstractEditor {}
92
+ JSONEditor.defaults.editors.custom = CustomEditor
93
+ JSONEditor.defaults.resolvers.unshift((schema) => {
94
+ if (schema.type === 'object' && schema.format === 'custom') {
95
+ return 'custom'
96
+ }
97
+ })
98
+ const schema = {
99
+ type: 'object',
100
+ format: 'custom',
101
+ properties: {
102
+ name: { type: 'string' }
103
+ }
104
+ }
105
+ editor = new JSONEditor(element, { schema: schema })
106
+ expect(editor).toBeTruthy()
107
+ })
108
+
109
+ describe('max_depth option', () => {
110
+ it('should create an editor (schema with recursion on object properties)', () => {
111
+ editor = new JSONEditor(element, {
112
+ schema: {
113
+ definitions: {
114
+ bar: {
115
+ type: 'object',
116
+ properties: {
117
+ foo: {
118
+ $ref: '#/definitions/bar'
119
+ }
120
+ }
121
+ }
122
+ },
123
+ type: 'object',
124
+ properties: {
125
+ foo: {
126
+ $ref: '#/definitions/bar'
127
+ }
128
+ }
129
+ },
130
+ max_depth: 4
131
+ })
132
+ expect(editor).toBeTruthy()
133
+ expect(editor.getValue()).toEqual({
134
+ foo: {
135
+ foo: {
136
+ foo: {
137
+ foo: {}
138
+ }
139
+ }
140
+ }
141
+ })
142
+ })
143
+
144
+ it('with max_depth that stops on level with enum as object property', () => {
145
+ const depthWithEnum = 2
146
+
147
+ editor = new JSONEditor(element, {
148
+ schema: {
149
+ type: 'object',
150
+ properties: {
151
+ field_on_level_one: {
152
+ type: 'object',
153
+ properties: {
154
+ propertyWithEnum: {
155
+ type: 'string',
156
+ enum: ['foo', 'bar'],
157
+ default: 'bar'
158
+ },
159
+ something_else: {
160
+ type: 'object',
161
+ properties: {
162
+ some_field: {
163
+ type: 'string',
164
+ default: 'i will be ignored'
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ },
172
+ max_depth: depthWithEnum
173
+ })
174
+ expect(editor).toBeTruthy()
175
+ expect(editor.getValue()).toEqual({
176
+ field_on_level_one: {
177
+ propertyWithEnum: 'bar',
178
+ something_else: {}
179
+ }
180
+ })
181
+ })
182
+
183
+ it('with max_depth equals to 0 renders all schema', () => {
184
+ editor = new JSONEditor(element, {
185
+ schema: nestedObject,
186
+ max_depth: 0
187
+ })
188
+ expect(editor).toBeTruthy()
189
+ expect(editor.getValue()).toEqual({ foo1: { foo2: { foo3: { foo4: { bar: 'end schema' } } } } })
190
+ })
191
+
192
+ it('renders all schema as default', () => {
193
+ editor = new JSONEditor(element, {
194
+ schema: nestedObject
195
+ })
196
+ expect(editor).toBeTruthy()
197
+ expect(editor.getValue()).toEqual({ foo1: { foo2: { foo3: { foo4: { bar: 'end schema' } } } } })
198
+ })
199
+ })
200
+
201
+ describe('use_default_values', () => {
202
+ describe('false', () => {
203
+ it('do not auto-set default values', () => {
204
+ editor = new JSONEditor(element, {
205
+ schema: someTypes,
206
+ use_default_values: false
207
+ })
208
+
209
+ expect(editor.getValue()).toEqual({
210
+ boolean: undefined,
211
+ enum: undefined,
212
+ integer: undefined,
213
+ number: undefined,
214
+ string: undefined,
215
+ object: {},
216
+ array: []
217
+ })
218
+ })
219
+
220
+ it('returns correct values on dirty input text fields', () => {
221
+ editor = new JSONEditor(element, {
222
+ schema: someTypes,
223
+ use_default_values: false
224
+ })
225
+
226
+ expect(editor.getValue()).toEqual({
227
+ boolean: undefined,
228
+ enum: undefined,
229
+ integer: undefined,
230
+ number: undefined,
231
+ string: undefined,
232
+ object: {},
233
+ array: []
234
+ })
235
+
236
+ fillField('root[integer]', 3)
237
+ fillField('root[number]', 4)
238
+ fillField('root[string]', 'foo')
239
+
240
+ expect(editor.getValue()).toEqual({
241
+ boolean: undefined,
242
+ enum: undefined,
243
+ integer: 3,
244
+ number: 4,
245
+ string: 'foo',
246
+ object: {},
247
+ array: []
248
+ })
249
+
250
+ fillField('root[integer]', '')
251
+ fillField('root[number]', '')
252
+ fillField('root[string]', '')
253
+
254
+ expect(editor.getValue()).toEqual({
255
+ boolean: undefined,
256
+ enum: undefined,
257
+ integer: undefined,
258
+ number: undefined,
259
+ string: '',
260
+ object: {},
261
+ array: []
262
+ })
263
+ })
264
+
265
+ it('returns default value from schema if set', () => {
266
+ editor = new JSONEditor(element, {
267
+ schema: {
268
+ type: 'object',
269
+ properties: {
270
+ string_with_default: { type: 'string', default: 'foobar' },
271
+ string_without_default: { type: 'string' },
272
+ enum_with_default: { type: 'string', enum: ['foobar', 'lorem'], default: 'foobar' },
273
+ enum_without_default: { type: 'string', enum: ['foobar', 'lorem'] }
274
+ }
275
+ },
276
+ use_default_values: false,
277
+ remove_empty_properties: true
278
+ })
279
+
280
+ expect(editor.getValue()).toEqual({
281
+ string_with_default: 'foobar',
282
+ enum_with_default: 'foobar'
283
+ })
284
+ })
285
+ })
286
+
287
+ it('true - auto-set default values based on type', () => {
288
+ editor = new JSONEditor(element, {
289
+ schema: someTypes,
290
+ use_default_values: true
291
+ })
292
+
293
+ expect(editor.getValue()).toEqual({
294
+ boolean: false,
295
+ enum: 'foo',
296
+ integer: 0,
297
+ number: 0,
298
+ string: '',
299
+ object: {},
300
+ array: []
301
+ })
302
+ })
303
+ })
304
+ })
305
+
306
+ function fillField (fieldName, value) {
307
+ document.querySelector(`[name="${fieldName}"]`).value = value
308
+ document.querySelector(`[name="${fieldName}"]`).dispatchEvent(new Event('change'))
309
+ }
@@ -0,0 +1,40 @@
1
+ /* global describe beforeEach it expect */
2
+
3
+ import { defaults } from '../../src/defaults'
4
+
5
+ describe('defaults', () => {
6
+ it('should be an object', () => {
7
+ expect(typeof defaults).toBe('object')
8
+ })
9
+
10
+ it('should have standard properties defined', () => {
11
+ expect(typeof (defaults.themes)).toBe('object')
12
+ expect(typeof (defaults.templates)).toBe('object')
13
+ expect(typeof (defaults.iconlibs)).toBe('object')
14
+ expect(typeof (defaults.editors)).toBe('object')
15
+ expect(typeof (defaults.languages)).toBe('object')
16
+ expect(Array.isArray(defaults.resolvers)).toBe(true)
17
+ expect(Array.isArray(defaults.custom_validators)).toBe(true)
18
+ })
19
+ })
20
+
21
+ describe('languages test', () => {
22
+ beforeEach(() => {
23
+ defaults.languages.es = {
24
+ error_notset: 'propiedad debe existir'
25
+ }
26
+ defaults.language = 'es'
27
+ })
28
+
29
+ it('should translate other language', () => {
30
+ expect(defaults.translate('error_notset')).toBe('propiedad debe existir')
31
+ })
32
+
33
+ it('should return default message. if no translation', () => {
34
+ expect(defaults.translate('error_notempty')).toBe('Value required')
35
+ })
36
+
37
+ it('should return translation key for unknown translation string', () => {
38
+ expect(defaults.translate('unknown_message')).toBe('unknown_message')
39
+ })
40
+ })
@@ -0,0 +1,160 @@
1
+ /* global describe beforeEach afterEach it expect */
2
+
3
+ import { JSONEditor } from '../../src/core'
4
+
5
+ describe('Editor', () => {
6
+ let element
7
+ let editor
8
+
9
+ beforeEach(() => {
10
+ document.body.insertAdjacentHTML(
11
+ 'afterbegin',
12
+ '<div id="fixture"></div>')
13
+ element = document.getElementById('fixture')
14
+ })
15
+
16
+ afterEach(() => {
17
+ editor.destroy()
18
+ })
19
+
20
+ it('Primitive Editor start value test', () => {
21
+ editor = new JSONEditor(element, {
22
+ schema: {
23
+ title: 'integer',
24
+ type: 'integer',
25
+ maximum: '5',
26
+ exclusiveMaximum: false
27
+ },
28
+ startval: 5
29
+ })
30
+ expect(editor.getValue()).toBe(5)
31
+ })
32
+
33
+ it('Array start value test', () => {
34
+ editor = new JSONEditor(element, {
35
+ schema: {
36
+ type: 'array',
37
+ title: 'Checkboxes',
38
+ items: {
39
+ title: 'Rating',
40
+ type: 'integer',
41
+ maximum: '5',
42
+ exclusiveMaximum: false
43
+ }
44
+ },
45
+ startval: [1, 2, 3, 4, 5]
46
+ })
47
+ expect(JSON.stringify(editor.getValue())).toBe('[1,2,3,4,5]')
48
+ })
49
+
50
+ it('Starrating start value test', () => {
51
+ editor = new JSONEditor(element, {
52
+ schema: {
53
+ title: 'Rating',
54
+ type: 'integer',
55
+ format: 'rating',
56
+ maximum: '5',
57
+ exclusiveMaximum: false
58
+ },
59
+ startval: 5
60
+ })
61
+ expect(editor.root.value).toBe(5)
62
+ })
63
+
64
+ it('Starrating Array start value test', () => {
65
+ editor = new JSONEditor(element, {
66
+ schema: {
67
+ type: 'array',
68
+ title: 'Checkboxes',
69
+ items: {
70
+ title: 'Rating',
71
+ type: 'integer',
72
+ format: 'rating',
73
+ maximum: '5',
74
+ exclusiveMaximum: false
75
+ }
76
+ },
77
+ startval: [1, 2, 3, 4, 5]
78
+ })
79
+ expect(JSON.stringify(editor.getValue())).toBe('[1,2,3,4,5]')
80
+ })
81
+
82
+ it('oneOf Editor Test', () => {
83
+ editor = new JSONEditor(element, {
84
+ schema: {
85
+ type: 'object',
86
+ properties: {
87
+ one_or_many: {
88
+ oneOf: [
89
+ {
90
+ type: 'string'
91
+ },
92
+ {
93
+ type: 'array',
94
+ format: 'table',
95
+ items: {
96
+ type: 'string'
97
+ }
98
+ }
99
+ ]
100
+ }
101
+ }
102
+ }
103
+ })
104
+ const e = editor.getEditor('root.one_or_many')
105
+ e.switchEditor(1)
106
+ })
107
+ })
108
+
109
+ const fixture = [
110
+ {
111
+ title: 'NumberEditor test',
112
+ schema: {
113
+ type: 'number'
114
+ },
115
+ input: ' 123.45 ',
116
+ value: 123.45
117
+ },
118
+ {
119
+ title: 'NumberEditor test (invalid value)',
120
+ schema: {
121
+ type: 'number'
122
+ },
123
+ input: '12-12',
124
+ value: '12-12'
125
+ },
126
+ {
127
+ title: 'Integer test',
128
+ schema: {
129
+ type: 'integer'
130
+ },
131
+ input: ' 123 ',
132
+ value: 123
133
+ }
134
+ ]
135
+
136
+ describe('Number Editor', () => {
137
+ let element
138
+ let editor
139
+
140
+ beforeEach(() => {
141
+ document.body.insertAdjacentHTML(
142
+ 'afterbegin',
143
+ '<div id="fixture"></div>')
144
+ element = document.getElementById('fixture')
145
+ })
146
+
147
+ afterEach(() => {
148
+ editor.destroy()
149
+ })
150
+
151
+ fixture.forEach(spec => {
152
+ it(spec.title, () => {
153
+ editor = new JSONEditor(element, {
154
+ schema: spec.schema
155
+ })
156
+ editor.setValue(spec.input)
157
+ expect(editor.getValue()).toBe(spec.value)
158
+ })
159
+ })
160
+ })
@@ -0,0 +1,86 @@
1
+ import { JSONEditor } from '../../../src/core'
2
+
3
+ const fixture = [
4
+ {
5
+ title: 'Array Editor Test',
6
+ schema: {
7
+ type: 'array',
8
+ items: {
9
+ type: ['boolean', 'string', 'null', 'number']
10
+ }
11
+ },
12
+ value: [false]
13
+ },
14
+ {
15
+ title: 'Array Editor Test',
16
+ schema: {
17
+ type: 'array',
18
+ items: {
19
+ type: ['boolean', 'string', 'null', 'number']
20
+ }
21
+ },
22
+ value: ['']
23
+ },
24
+ {
25
+ title: 'Array Editor Test',
26
+ schema: {
27
+ type: 'array',
28
+ items: {
29
+ type: ['boolean', 'string', 'null', 'number']
30
+ }
31
+ },
32
+ value: [0]
33
+ },
34
+ {
35
+ title: 'Array Editor Test',
36
+ schema: {
37
+ type: 'array',
38
+ items: {
39
+ type: 'string'
40
+ }
41
+ },
42
+ options: {
43
+ use_default_values: false
44
+ },
45
+ value: ['']
46
+ },
47
+ {
48
+ title: 'Array Editor Test',
49
+ schema: {
50
+ type: 'array',
51
+ items: {
52
+ type: 'number'
53
+ }
54
+ },
55
+ options: {
56
+ use_default_values: false
57
+ },
58
+ value: [0]
59
+ }
60
+ ]
61
+
62
+ describe('Array Editor', () => {
63
+ let element
64
+ let editor
65
+
66
+ beforeEach(() => {
67
+ document.body.insertAdjacentHTML(
68
+ 'afterbegin',
69
+ '<div id="fixture"></div>')
70
+ element = document.getElementById('fixture')
71
+ })
72
+
73
+ afterEach(() => {
74
+ editor.destroy()
75
+ })
76
+
77
+ fixture.forEach(spec => {
78
+ it(spec.title, () => {
79
+ editor = new JSONEditor(element, {
80
+ schema: spec.schema
81
+ })
82
+ editor.setValue(spec.value);
83
+ expect(editor.getValue()).toEqual(spec.value)
84
+ })
85
+ })
86
+ })
@@ -0,0 +1,79 @@
1
+ import { JSONEditor } from '../../../src/core'
2
+
3
+ const fixture = [
4
+ {
5
+ title: 'Object Editor Test',
6
+ schema: {
7
+ type: 'object',
8
+ required: [
9
+ 'name'
10
+ ],
11
+ properties: {
12
+ name: {
13
+ type: 'string',
14
+ default: 'Jeremy Dorn'
15
+ }
16
+ }
17
+ },
18
+ value: {
19
+ name: 'Jeremy Dorn'
20
+ }
21
+ },
22
+ {
23
+ title: 'remove_empty_properties test',
24
+ schema: {
25
+ type: 'object',
26
+ required: [
27
+ 'name'
28
+ ],
29
+ properties: {
30
+ name: {
31
+ type: 'string',
32
+ default: 'Jeremy Dorn'
33
+ },
34
+ location: {
35
+ type: 'object',
36
+ properties: {
37
+ city: {
38
+ type: 'string'
39
+ }
40
+ },
41
+ options: {
42
+ remove_empty_properties: true
43
+ }
44
+ }
45
+ },
46
+ options: {
47
+ remove_empty_properties: true
48
+ }
49
+ },
50
+ value: {
51
+ name: 'Jeremy Dorn'
52
+ }
53
+ }
54
+ ]
55
+
56
+ describe('Object Editor', () => {
57
+ let element
58
+ let editor
59
+
60
+ beforeEach(() => {
61
+ document.body.insertAdjacentHTML(
62
+ 'afterbegin',
63
+ '<div id="fixture"></div>')
64
+ element = document.getElementById('fixture')
65
+ })
66
+
67
+ afterEach(() => {
68
+ editor.destroy()
69
+ })
70
+
71
+ fixture.forEach(spec => {
72
+ it(spec.title, () => {
73
+ editor = new JSONEditor(element, {
74
+ schema: spec.schema
75
+ })
76
+ expect(editor.getValue()).toEqual(spec.value)
77
+ })
78
+ })
79
+ })