@theia/core 1.53.0-next.4 → 1.53.0-next.55
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.
- package/README.md +7 -7
- package/i18n/nls.cs.json +582 -552
- package/i18n/nls.de.json +582 -552
- package/i18n/nls.es.json +582 -552
- package/i18n/nls.fr.json +582 -552
- package/i18n/nls.hu.json +582 -552
- package/i18n/nls.it.json +582 -552
- package/i18n/nls.ja.json +582 -552
- package/i18n/nls.json +582 -552
- package/i18n/nls.ko.json +582 -0
- package/i18n/nls.pl.json +582 -552
- package/i18n/nls.pt-br.json +582 -552
- package/i18n/nls.ru.json +582 -552
- package/i18n/nls.tr.json +582 -0
- package/i18n/nls.zh-cn.json +582 -552
- package/i18n/nls.zh-tw.json +582 -0
- package/lib/browser/authentication-service.d.ts +15 -14
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +5 -5
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/catalog.json +6889 -0
- package/lib/browser/common-frontend-contribution.js +3 -3
- package/lib/browser/common-styling-participants.js +166 -166
- package/lib/browser/context-key-service.d.ts +3 -2
- package/lib/browser/context-key-service.d.ts.map +1 -1
- package/lib/browser/context-key-service.js.map +1 -1
- package/lib/browser/core-preferences.d.ts.map +1 -1
- package/lib/browser/core-preferences.js +9 -0
- package/lib/browser/core-preferences.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/json-schema-store.d.ts +0 -3
- package/lib/browser/json-schema-store.d.ts.map +1 -1
- package/lib/browser/json-schema-store.js +2 -12
- package/lib/browser/json-schema-store.js.map +1 -1
- package/lib/browser/open-with-service.d.ts +13 -1
- package/lib/browser/open-with-service.d.ts.map +1 -1
- package/lib/browser/open-with-service.js +48 -9
- package/lib/browser/open-with-service.js.map +1 -1
- package/lib/browser/opener-service.d.ts +8 -0
- package/lib/browser/opener-service.d.ts.map +1 -1
- package/lib/browser/opener-service.js +18 -3
- package/lib/browser/opener-service.js.map +1 -1
- package/lib/browser/progress-location-service.spec.js +7 -7
- package/lib/browser/saveable-service.d.ts.map +1 -1
- package/lib/browser/saveable-service.js +6 -2
- package/lib/browser/saveable-service.js.map +1 -1
- package/lib/browser/saveable.d.ts +17 -1
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js +62 -1
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +5 -4
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +2 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +6 -16
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +12 -29
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +43 -78
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +8 -39
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +10 -10
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +43 -32
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/storage-service.js +3 -3
- package/lib/browser/tree/tree.spec.js +75 -75
- package/lib/browser/view-container.d.ts +2 -2
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/widget-open-handler.d.ts +4 -1
- package/lib/browser/widget-open-handler.d.ts.map +1 -1
- package/lib/browser/widget-open-handler.js.map +1 -1
- package/lib/browser/widgets/extractable-widget.js +1 -1
- package/lib/browser/widgets/extractable-widget.js.map +1 -1
- package/lib/browser/widgets/index.d.ts +1 -0
- package/lib/browser/widgets/index.d.ts.map +1 -1
- package/lib/browser/widgets/index.js +1 -0
- package/lib/browser/widgets/index.js.map +1 -1
- package/lib/browser/widgets/split-widget.d.ts +45 -0
- package/lib/browser/widgets/split-widget.d.ts.map +1 -0
- package/lib/browser/widgets/split-widget.js +126 -0
- package/lib/browser/widgets/split-widget.js.map +1 -0
- package/lib/common/event.d.ts +2 -0
- package/lib/common/event.d.ts.map +1 -1
- package/lib/common/event.js +4 -0
- package/lib/common/event.js.map +1 -1
- package/lib/common/glob.d.ts +4 -4
- package/lib/common/json-schema.d.ts +2 -0
- package/lib/common/json-schema.d.ts.map +1 -1
- package/lib/common/menu/menu-types.d.ts.map +1 -1
- package/lib/common/menu/menu-types.js.map +1 -1
- package/lib/electron-browser/electron-uri-handler.d.ts +6 -0
- package/lib/electron-browser/electron-uri-handler.d.ts.map +1 -0
- package/lib/electron-browser/electron-uri-handler.js +49 -0
- package/lib/electron-browser/electron-uri-handler.js.map +1 -0
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +6 -6
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/preload.d.ts.map +1 -1
- package/lib/electron-browser/preload.js +12 -0
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +3 -0
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js.map +1 -1
- package/lib/electron-common/electron-api.d.ts +2 -0
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js +2 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-api-main.d.ts +2 -0
- package/lib/electron-main/electron-api-main.d.ts.map +1 -1
- package/lib/electron-main/electron-api-main.js +27 -3
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts +5 -3
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +57 -14
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts +1 -0
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +3 -0
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.d.ts.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.js +12 -8
- package/lib/node/i18n/theia-localization-contribution.js.map +1 -1
- package/lib/node/process-utils.spec.js +8 -8
- package/package.json +10 -8
- package/shared/ajv/index.d.ts +2 -2
- package/shared/markdown-it.d.ts +2 -2
- package/shared/markdown-it.js +1 -1
- package/shared/reflect-metadata/index.d.ts +1 -1
- package/shared/reflect-metadata/index.js +1 -1
- package/shared/vscode-languageserver-types/index.d.ts +1 -1
- package/src/browser/about-dialog.tsx +137 -137
- package/src/browser/authentication-service.ts +467 -468
- package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -101
- package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -41
- package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -79
- package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +185 -185
- package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -108
- package/src/browser/breadcrumbs/index.ts +21 -21
- package/src/browser/browser-clipboard-service.ts +122 -122
- package/src/browser/browser.ts +239 -239
- package/src/browser/clipboard-service.ts +23 -23
- package/src/browser/color-application-contribution.ts +110 -110
- package/src/browser/color-registry.ts +60 -60
- package/src/browser/command-open-handler.ts +54 -54
- package/src/browser/common-frontend-contribution.ts +2680 -2680
- package/src/browser/common-styling-participants.ts +361 -361
- package/src/browser/connection-status-service.spec.ts +200 -200
- package/src/browser/connection-status-service.ts +216 -216
- package/src/browser/context-key-service.ts +142 -142
- package/src/browser/context-menu-renderer.ts +124 -124
- package/src/browser/core-preferences.ts +343 -334
- package/src/browser/credentials-service.ts +106 -106
- package/src/browser/decoration-style.ts +65 -65
- package/src/browser/decorations-service.ts +209 -209
- package/src/browser/dialogs/react-dialog.tsx +56 -56
- package/src/browser/dialogs.ts +534 -534
- package/src/browser/diff-uris.ts +117 -117
- package/src/browser/encoding-registry.ts +97 -97
- package/src/browser/endpoint.spec.ts +148 -148
- package/src/browser/endpoint.ts +136 -136
- package/src/browser/external-uri-service.ts +79 -79
- package/src/browser/file-icons-js.d.ts +20 -20
- package/src/browser/frontend-application-bindings.ts +62 -62
- package/src/browser/frontend-application-config-provider.spec.ts +45 -45
- package/src/browser/frontend-application-config-provider.ts +50 -50
- package/src/browser/frontend-application-contribution.ts +110 -110
- package/src/browser/frontend-application-module.ts +474 -475
- package/src/browser/frontend-application-state.ts +74 -74
- package/src/browser/frontend-application.ts +326 -326
- package/src/browser/hover-service.ts +218 -218
- package/src/browser/http-open-handler.ts +49 -49
- package/src/browser/i18n/i18n-frontend-module.ts +27 -27
- package/src/browser/i18n/language-quick-pick-service.ts +130 -130
- package/src/browser/icon-registry.ts +87 -87
- package/src/browser/icon-theme-contribution.ts +64 -64
- package/src/browser/icon-theme-service.ts +217 -217
- package/src/browser/icons/CollapseAll.svg +7 -7
- package/src/browser/icons/CollapseAll_inverse.svg +7 -7
- package/src/browser/icons/Refresh.svg +7 -7
- package/src/browser/icons/Refresh_inverse.svg +7 -7
- package/src/browser/icons/add-inverse.svg +4 -4
- package/src/browser/icons/add.svg +4 -4
- package/src/browser/icons/arrow-down-bright.svg +6 -6
- package/src/browser/icons/arrow-down-dark.svg +6 -6
- package/src/browser/icons/arrow-up-bright.svg +6 -6
- package/src/browser/icons/arrow-up-dark.svg +6 -6
- package/src/browser/icons/case-sensitive-dark.svg +16 -16
- package/src/browser/icons/case-sensitive.svg +16 -16
- package/src/browser/icons/chevron-right-dark.svg +5 -5
- package/src/browser/icons/chevron-right-light.svg +6 -6
- package/src/browser/icons/circle-bright.svg +7 -7
- package/src/browser/icons/circle-dark.svg +7 -7
- package/src/browser/icons/clear-search-results-dark.svg +7 -7
- package/src/browser/icons/clear-search-results.svg +7 -7
- package/src/browser/icons/close-all-bright.svg +7 -7
- package/src/browser/icons/close-all-dark.svg +7 -7
- package/src/browser/icons/close-bright.svg +7 -7
- package/src/browser/icons/close-dark.svg +7 -7
- package/src/browser/icons/collapse.svg +4 -4
- package/src/browser/icons/edit-json-dark.svg +6 -6
- package/src/browser/icons/edit-json.svg +6 -6
- package/src/browser/icons/expand.svg +4 -4
- package/src/browser/icons/loading-dark.svg +6 -6
- package/src/browser/icons/loading-light.svg +6 -6
- package/src/browser/icons/open-change-bright.svg +3 -3
- package/src/browser/icons/open-change-dark.svg +4 -4
- package/src/browser/icons/open-file-bright.svg +4 -4
- package/src/browser/icons/open-file-dark.svg +4 -4
- package/src/browser/icons/preview-bright.svg +3 -3
- package/src/browser/icons/preview-dark.svg +3 -3
- package/src/browser/icons/regex-dark.svg +10 -10
- package/src/browser/icons/regex.svg +10 -10
- package/src/browser/icons/remove-all-inverse.svg +4 -4
- package/src/browser/icons/remove-all.svg +4 -4
- package/src/browser/icons/replace-all-inverse.svg +13 -13
- package/src/browser/icons/replace-all.svg +13 -13
- package/src/browser/icons/replace-inverse.svg +15 -15
- package/src/browser/icons/replace.svg +15 -15
- package/src/browser/icons/whole-word-dark.svg +19 -19
- package/src/browser/icons/whole-word.svg +19 -19
- package/src/browser/index.ts +50 -50
- package/src/browser/json-schema-store.ts +118 -127
- package/src/browser/keybinding.spec.ts +554 -554
- package/src/browser/keybinding.ts +759 -759
- package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +108 -108
- package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +171 -171
- package/src/browser/keyboard/browser-keyboard-layout-provider.ts +469 -469
- package/src/browser/keyboard/browser-keyboard-module.ts +30 -30
- package/src/browser/keyboard/index.ts +20 -20
- package/src/browser/keyboard/keyboard-layout-service.spec.ts +121 -121
- package/src/browser/keyboard/keyboard-layout-service.ts +455 -455
- package/src/browser/keyboard/keys.spec.ts +258 -258
- package/src/browser/keyboard/keys.ts +20 -20
- package/src/browser/keys.ts +21 -21
- package/src/browser/label-parser.spec.ts +165 -165
- package/src/browser/label-parser.ts +108 -108
- package/src/browser/label-provider.spec.ts +62 -62
- package/src/browser/label-provider.ts +385 -385
- package/src/browser/language-icon-provider.ts +55 -55
- package/src/browser/language-service.ts +77 -77
- package/src/browser/logger-frontend-module.ts +65 -65
- package/src/browser/markdown-rendering/markdown-renderer.ts +98 -98
- package/src/browser/menu/browser-context-menu-renderer.ts +48 -48
- package/src/browser/menu/browser-menu-module.ts +28 -28
- package/src/browser/menu/browser-menu-plugin.ts +491 -491
- package/src/browser/menu/context-menu-context.ts +41 -41
- package/src/browser/messaging/connection-source.ts +26 -26
- package/src/browser/messaging/frontend-id-provider.ts +37 -37
- package/src/browser/messaging/index.ts +18 -18
- package/src/browser/messaging/messaging-frontend-module.ts +41 -41
- package/src/browser/messaging/service-connection-provider.ts +140 -140
- package/src/browser/messaging/ws-connection-provider.ts +49 -49
- package/src/browser/messaging/ws-connection-source.ts +230 -230
- package/src/browser/mime-service.ts +30 -30
- package/src/browser/navigatable-types.ts +81 -81
- package/src/browser/navigatable.ts +39 -39
- package/src/browser/open-with-service.ts +140 -93
- package/src/browser/opener-service.spec.ts +49 -49
- package/src/browser/opener-service.ts +169 -146
- package/src/browser/performance/frontend-stopwatch.ts +65 -65
- package/src/browser/performance/index.ts +18 -18
- package/src/browser/performance/measurement-frontend-bindings.ts +31 -31
- package/src/browser/preferences/index.ts +23 -23
- package/src/browser/preferences/injectable-preference-proxy.ts +283 -283
- package/src/browser/preferences/preference-configurations.ts +82 -82
- package/src/browser/preferences/preference-contribution.ts +436 -436
- package/src/browser/preferences/preference-language-override-service.ts +111 -111
- package/src/browser/preferences/preference-provider.spec.ts +36 -36
- package/src/browser/preferences/preference-provider.ts +277 -277
- package/src/browser/preferences/preference-proxy.spec.ts +367 -367
- package/src/browser/preferences/preference-proxy.ts +367 -367
- package/src/browser/preferences/preference-schema-provider.spec.ts +130 -130
- package/src/browser/preferences/preference-scope.ts +18 -18
- package/src/browser/preferences/preference-service.spec.ts +613 -613
- package/src/browser/preferences/preference-service.ts +594 -594
- package/src/browser/preferences/preference-validation-service.spec.ts +334 -334
- package/src/browser/preferences/preference-validation-service.ts +358 -358
- package/src/browser/preferences/test/index.ts +19 -19
- package/src/browser/preferences/test/mock-preference-provider.ts +50 -50
- package/src/browser/preferences/test/mock-preference-proxy.ts +48 -48
- package/src/browser/preferences/test/mock-preference-service.ts +63 -63
- package/src/browser/preload/i18n-preload-contribution.ts +50 -50
- package/src/browser/preload/os-preload-contribution.ts +37 -37
- package/src/browser/preload/preload-module.ts +45 -45
- package/src/browser/preload/preloader.ts +37 -37
- package/src/browser/preload/theme-preload-contribution.ts +31 -31
- package/src/browser/progress-bar-factory.ts +29 -29
- package/src/browser/progress-bar.ts +76 -76
- package/src/browser/progress-client.ts +53 -53
- package/src/browser/progress-location-service.spec.ts +50 -50
- package/src/browser/progress-location-service.ts +96 -96
- package/src/browser/progress-status-bar-item.ts +83 -83
- package/src/browser/quick-input/index.ts +23 -23
- package/src/browser/quick-input/quick-access.ts +75 -75
- package/src/browser/quick-input/quick-command-frontend-contribution.ts +89 -89
- package/src/browser/quick-input/quick-command-service.ts +246 -246
- package/src/browser/quick-input/quick-help-service.ts +87 -87
- package/src/browser/quick-input/quick-input-frontend-contribution.ts +33 -33
- package/src/browser/quick-input/quick-input-service.spec.ts +176 -176
- package/src/browser/quick-input/quick-input-service.ts +17 -17
- package/src/browser/quick-input/quick-pick-service-impl.ts +69 -69
- package/src/browser/quick-input/quick-view-service.ts +83 -83
- package/src/browser/request/browser-request-module.ts +23 -23
- package/src/browser/request/browser-request-service.ts +172 -172
- package/src/browser/resource-context-key.ts +77 -77
- package/src/browser/saveable-service.ts +332 -328
- package/src/browser/saveable.ts +395 -327
- package/src/browser/secondary-window-handler.ts +211 -211
- package/src/browser/shell/additional-views-menu-widget.tsx +71 -71
- package/src/browser/shell/application-shell-mouse-tracker.ts +103 -103
- package/src/browser/shell/application-shell.ts +2271 -2271
- package/src/browser/shell/current-widget-command-adapter.ts +57 -57
- package/src/browser/shell/index.ts +23 -23
- package/src/browser/shell/shell-layout-restorer.ts +399 -399
- package/src/browser/shell/side-panel-handler.ts +794 -794
- package/src/browser/shell/side-panel-toolbar.ts +111 -111
- package/src/browser/shell/sidebar-bottom-menu-widget.tsx +39 -39
- package/src/browser/shell/sidebar-menu-widget.tsx +183 -183
- package/src/browser/shell/sidebar-top-menu-widget.tsx +26 -26
- package/src/browser/shell/split-panels.ts +191 -191
- package/src/browser/shell/tab-bar-decorator.ts +106 -106
- package/src/browser/shell/tab-bar-toolbar/index.ts +19 -19
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +31 -31
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +242 -256
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +149 -207
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +62 -62
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +443 -428
- package/src/browser/shell/tab-bars.spec.ts +63 -63
- package/src/browser/shell/tab-bars.ts +1468 -1468
- package/src/browser/shell/theia-dock-panel.ts +265 -265
- package/src/browser/shell/view-column-service.ts +125 -125
- package/src/browser/shell/view-contribution.ts +178 -178
- package/src/browser/source-tree/index.ts +19 -19
- package/src/browser/source-tree/source-tree-widget.tsx +107 -107
- package/src/browser/source-tree/source-tree.ts +146 -146
- package/src/browser/source-tree/tree-source.ts +73 -73
- package/src/browser/status-bar/index.ts +29 -29
- package/src/browser/status-bar/status-bar-types.ts +97 -97
- package/src/browser/status-bar/status-bar-view-model.ts +209 -209
- package/src/browser/status-bar/status-bar.tsx +189 -189
- package/src/browser/storage-service.spec.ts +76 -76
- package/src/browser/storage-service.ts +129 -129
- package/src/browser/style/about.css +36 -36
- package/src/browser/style/alert-messages.css +62 -62
- package/src/browser/style/ansi.css +88 -88
- package/src/browser/style/breadcrumbs.css +130 -130
- package/src/browser/style/dialog.css +126 -126
- package/src/browser/style/dockpanel.css +76 -76
- package/src/browser/style/hover-service.css +101 -101
- package/src/browser/style/icons.css +61 -61
- package/src/browser/style/index.css +353 -351
- package/src/browser/style/materialcolors.css +278 -278
- package/src/browser/style/menus.css +230 -230
- package/src/browser/style/notification.css +39 -39
- package/src/browser/style/os.css +87 -87
- package/src/browser/style/progress-bar.css +43 -43
- package/src/browser/style/quick-title-bar.css +45 -45
- package/src/browser/style/scrollbars.css +172 -172
- package/src/browser/style/search-box.css +123 -123
- package/src/browser/style/select-component.css +107 -107
- package/src/browser/style/sidepanel.css +367 -367
- package/src/browser/style/split-widget.css +38 -0
- package/src/browser/style/status-bar.css +127 -127
- package/src/browser/style/tabs.css +647 -658
- package/src/browser/style/tooltip.css +28 -28
- package/src/browser/style/tree-decorators.css +81 -81
- package/src/browser/style/tree.css +232 -232
- package/src/browser/style/view-container.css +187 -194
- package/src/browser/style/widget.css +19 -19
- package/src/browser/styling-service.ts +96 -96
- package/src/browser/supported-encodings.ts +262 -262
- package/src/browser/test/jsdom.ts +69 -69
- package/src/browser/test/mock-connection-status-service.ts +33 -33
- package/src/browser/test/mock-env-variables-server.ts +47 -47
- package/src/browser/test/mock-opener-service.ts +34 -34
- package/src/browser/test/mock-storage-service.ts +49 -49
- package/src/browser/theming.ts +206 -206
- package/src/browser/tooltip-service.tsx +96 -96
- package/src/browser/tree/fuzzy-search.spec.ts +99 -99
- package/src/browser/tree/fuzzy-search.ts +136 -136
- package/src/browser/tree/index.ts +29 -29
- package/src/browser/tree/search-box-debounce.ts +96 -96
- package/src/browser/tree/search-box.ts +355 -355
- package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -109
- package/src/browser/tree/test/mock-tree-model.ts +136 -136
- package/src/browser/tree/test/tree-test-container.ts +50 -50
- package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -46
- package/src/browser/tree/tree-compression/compressed-tree-model.ts +88 -88
- package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +203 -203
- package/src/browser/tree/tree-compression/index.ts +20 -20
- package/src/browser/tree/tree-compression/tree-compression-service.ts +125 -125
- package/src/browser/tree/tree-compression/tree-compression.css +28 -28
- package/src/browser/tree/tree-consistency.spec.ts +105 -105
- package/src/browser/tree/tree-container.spec.ts +45 -45
- package/src/browser/tree/tree-container.ts +155 -155
- package/src/browser/tree/tree-decorator.spec.ts +162 -162
- package/src/browser/tree/tree-decorator.ts +238 -238
- package/src/browser/tree/tree-expansion.spec.ts +173 -173
- package/src/browser/tree/tree-expansion.ts +165 -165
- package/src/browser/tree/tree-focus-service.ts +55 -55
- package/src/browser/tree/tree-iterator.spec.ts +170 -170
- package/src/browser/tree/tree-iterator.ts +256 -256
- package/src/browser/tree/tree-label-provider.ts +40 -40
- package/src/browser/tree/tree-model.ts +562 -562
- package/src/browser/tree/tree-navigation.ts +58 -58
- package/src/browser/tree/tree-preference.ts +50 -50
- package/src/browser/tree/tree-search.ts +128 -128
- package/src/browser/tree/tree-selectable.spec.ts +152 -152
- package/src/browser/tree/tree-selection-impl.ts +176 -176
- package/src/browser/tree/tree-selection-state.spec.ts +462 -462
- package/src/browser/tree/tree-selection-state.ts +245 -245
- package/src/browser/tree/tree-selection.ts +159 -159
- package/src/browser/tree/tree-view-welcome-widget.tsx +263 -263
- package/src/browser/tree/tree-widget-selection.ts +45 -45
- package/src/browser/tree/tree-widget.tsx +1591 -1591
- package/src/browser/tree/tree.spec.ts +241 -241
- package/src/browser/tree/tree.ts +425 -425
- package/src/browser/undo-redo-handler.ts +85 -85
- package/src/browser/user-working-directory-provider.ts +77 -77
- package/src/browser/view-container.ts +1640 -1640
- package/src/browser/widget-decoration.ts +358 -358
- package/src/browser/widget-manager.spec.ts +102 -102
- package/src/browser/widget-manager.ts +318 -318
- package/src/browser/widget-open-handler.ts +168 -165
- package/src/browser/widgets/alert-message.tsx +56 -56
- package/src/browser/widgets/enhanced-preview-widget.ts +27 -27
- package/src/browser/widgets/extractable-widget.ts +33 -33
- package/src/browser/widgets/index.ts +21 -20
- package/src/browser/widgets/previewable-widget.ts +31 -31
- package/src/browser/widgets/react-renderer.tsx +53 -53
- package/src/browser/widgets/react-widget.tsx +51 -51
- package/src/browser/widgets/select-component.tsx +367 -367
- package/src/browser/widgets/split-widget.ts +163 -0
- package/src/browser/widgets/widget.ts +406 -406
- package/src/browser/window/browser-window-module.ts +32 -32
- package/src/browser/window/default-secondary-window-service.ts +189 -189
- package/src/browser/window/default-window-service.spec.ts +78 -78
- package/src/browser/window/default-window-service.ts +171 -171
- package/src/browser/window/secondary-window-service.ts +39 -39
- package/src/browser/window/test/mock-window-service.ts +29 -29
- package/src/browser/window/window-service.ts +78 -78
- package/src/browser/window/window-title-service.ts +107 -107
- package/src/browser/window/window-title-updater.ts +95 -95
- package/src/browser/window-contribution.ts +64 -64
- package/src/browser-only/frontend-only-application-module.ts +116 -116
- package/src/browser-only/i18n/i18n-frontend-only-module.ts +37 -37
- package/src/browser-only/logger-frontend-only-module.ts +63 -63
- package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +39 -39
- package/src/browser-only/messaging/messaging-frontend-only-module.ts +42 -42
- package/src/browser-only/preload/frontend-only-preload-module.ts +49 -49
- package/src/common/accessibility.ts +33 -33
- package/src/common/application-error.spec.ts +27 -27
- package/src/common/application-error.ts +76 -76
- package/src/common/application-protocol.ts +42 -42
- package/src/common/array-utils.ts +129 -129
- package/src/common/buffer.ts +228 -228
- package/src/common/cancellation.ts +163 -163
- package/src/common/char-code.ts +438 -438
- package/src/common/collections.ts +125 -125
- package/src/common/color.ts +103 -103
- package/src/common/command.spec.ts +208 -208
- package/src/common/command.ts +489 -489
- package/src/common/contribution-filter/contribution-filter-registry.ts +79 -79
- package/src/common/contribution-filter/contribution-filter.ts +64 -64
- package/src/common/contribution-filter/filter.ts +23 -23
- package/src/common/contribution-filter/index.ts +19 -19
- package/src/common/contribution-provider.ts +96 -96
- package/src/common/disposable.spec.ts +94 -94
- package/src/common/disposable.ts +188 -188
- package/src/common/encoding-service.ts +380 -380
- package/src/common/encodings.ts +24 -24
- package/src/common/env-variables/env-variables-protocol.ts +38 -38
- package/src/common/env-variables/index.ts +17 -17
- package/src/common/event.spec.ts +32 -32
- package/src/common/event.ts +493 -487
- package/src/common/file-uri.ts +61 -61
- package/src/common/frontend-application-state.ts +38 -38
- package/src/common/glob.ts +741 -741
- package/src/common/hash.ts +85 -85
- package/src/common/i18n/localization-server.ts +25 -25
- package/src/common/i18n/localization.ts +80 -80
- package/src/common/i18n/nls.metadata.json +34112 -34112
- package/src/common/index.ts +51 -51
- package/src/common/json-schema.ts +108 -106
- package/src/common/key-store.ts +26 -26
- package/src/common/keybinding.ts +152 -152
- package/src/common/keyboard/keyboard-layout-provider.ts +51 -51
- package/src/common/keys.ts +694 -694
- package/src/common/label-protocol.ts +35 -35
- package/src/common/logger-protocol.ts +119 -119
- package/src/common/logger-watcher.ts +48 -48
- package/src/common/logger.spec.ts +46 -46
- package/src/common/logger.ts +389 -389
- package/src/common/lsp-types.ts +34 -34
- package/src/common/markdown-rendering/icon-utilities.ts +30 -30
- package/src/common/markdown-rendering/index.ts +18 -18
- package/src/common/markdown-rendering/markdown-string.ts +152 -152
- package/src/common/menu/action-menu-node.ts +65 -65
- package/src/common/menu/composite-menu-node.spec.ts +67 -67
- package/src/common/menu/composite-menu-node.ts +114 -114
- package/src/common/menu/index.ts +21 -21
- package/src/common/menu/menu-adapter.ts +103 -103
- package/src/common/menu/menu-model-registry.ts +374 -374
- package/src/common/menu/menu-types.ts +220 -219
- package/src/common/menu/menu.spec.ts +101 -101
- package/src/common/message-rpc/channel.spec.ts +88 -88
- package/src/common/message-rpc/channel.ts +300 -300
- package/src/common/message-rpc/index.ts +22 -22
- package/src/common/message-rpc/message-buffer.ts +105 -105
- package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -70
- package/src/common/message-rpc/rpc-message-encoder.spec.ts +65 -65
- package/src/common/message-rpc/rpc-message-encoder.ts +190 -190
- package/src/common/message-rpc/rpc-protocol.ts +255 -255
- package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -41
- package/src/common/message-rpc/uint8-array-message-buffer.ts +213 -213
- package/src/common/message-service-protocol.ts +148 -148
- package/src/common/message-service.ts +226 -226
- package/src/common/messaging/connection-error-handler.ts +73 -73
- package/src/common/messaging/connection-management.ts +43 -43
- package/src/common/messaging/handler.ts +26 -26
- package/src/common/messaging/index.ts +19 -19
- package/src/common/messaging/proxy-factory.spec.ts +108 -108
- package/src/common/messaging/proxy-factory.ts +336 -336
- package/src/common/messaging/socket-write-buffer.ts +52 -52
- package/src/common/messaging/web-socket-channel.ts +76 -76
- package/src/common/nls.ts +151 -151
- package/src/common/numbers.ts +21 -21
- package/src/common/objects.spec.ts +112 -112
- package/src/common/objects.ts +123 -123
- package/src/common/os.ts +82 -82
- package/src/common/path.spec.ts +415 -415
- package/src/common/path.ts +334 -334
- package/src/common/paths.ts +250 -250
- package/src/common/performance/index.ts +19 -19
- package/src/common/performance/measurement-protocol.ts +104 -104
- package/src/common/performance/measurement.ts +130 -130
- package/src/common/performance/stopwatch.ts +183 -183
- package/src/common/preferences/preference-schema.ts +101 -101
- package/src/common/preferences/preference-scope.spec.ts +48 -48
- package/src/common/preferences/preference-scope.ts +68 -68
- package/src/common/prioritizeable.ts +58 -58
- package/src/common/progress-service-protocol.ts +35 -35
- package/src/common/progress-service.ts +82 -82
- package/src/common/promise-util.spec.ts +102 -102
- package/src/common/promise-util.ts +143 -143
- package/src/common/quick-pick-service.ts +353 -353
- package/src/common/reference.spec.ts +145 -145
- package/src/common/reference.ts +230 -230
- package/src/common/resource.ts +430 -430
- package/src/common/selection-command-handler.ts +101 -101
- package/src/common/selection-service.spec.ts +43 -43
- package/src/common/selection-service.ts +49 -49
- package/src/common/selection.ts +50 -50
- package/src/common/severity.ts +111 -111
- package/src/common/stream.ts +718 -718
- package/src/common/strings.ts +231 -231
- package/src/common/telemetry.ts +45 -45
- package/src/common/ternary-search-tree.ts +417 -417
- package/src/common/test/expect.ts +34 -34
- package/src/common/test/mock-logger.ts +118 -118
- package/src/common/test/mock-menu.ts +35 -35
- package/src/common/test/mock-resource-provider.ts +33 -33
- package/src/common/theme.ts +68 -68
- package/src/common/types.spec.ts +86 -86
- package/src/common/types.ts +140 -140
- package/src/common/uri-command-handler.spec.ts +90 -90
- package/src/common/uri-command-handler.ts +148 -148
- package/src/common/uri.spec.ts +278 -278
- package/src/common/uri.ts +279 -279
- package/src/common/uuid.ts +45 -45
- package/src/common/version.ts +17 -17
- package/src/common/view-column.ts +33 -33
- package/src/common/window.ts +34 -34
- package/src/electron-browser/electron-clipboard-service.ts +32 -32
- package/src/electron-browser/electron-uri-handler.ts +42 -0
- package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +39 -39
- package/src/electron-browser/keyboard/electron-keyboard-module.ts +28 -28
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +122 -122
- package/src/electron-browser/menu/electron-main-menu-factory.ts +339 -338
- package/src/electron-browser/menu/electron-menu-contribution.ts +506 -506
- package/src/electron-browser/menu/electron-menu-module.ts +40 -40
- package/src/electron-browser/menu/electron-menu-style.css +110 -110
- package/src/electron-browser/messaging/electron-frontend-id-provider.ts +25 -25
- package/src/electron-browser/messaging/electron-ipc-connection-source.ts +65 -65
- package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +45 -45
- package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +78 -78
- package/src/electron-browser/messaging/electron-ws-connection-source.ts +38 -38
- package/src/electron-browser/preload.ts +264 -249
- package/src/electron-browser/request/electron-browser-request-module.ts +26 -26
- package/src/electron-browser/token/electron-token-frontend-module.ts +22 -22
- package/src/electron-browser/window/electron-frontend-application-state.ts +26 -26
- package/src/electron-browser/window/electron-secondary-window-service.ts +35 -35
- package/src/electron-browser/window/electron-window-module.ts +48 -45
- package/src/electron-browser/window/electron-window-preferences.ts +76 -76
- package/src/electron-browser/window/electron-window-service.ts +109 -109
- package/src/electron-browser/window/external-app-open-handler.ts +42 -42
- package/src/electron-common/electron-api.ts +157 -154
- package/src/electron-common/electron-main-window-service.ts +24 -24
- package/src/electron-common/electron-token.ts +27 -27
- package/src/electron-main/electron-api-main.ts +373 -347
- package/src/electron-main/electron-main-application-module.ts +65 -65
- package/src/electron-main/electron-main-application.ts +860 -818
- package/src/electron-main/electron-main-constants.ts +23 -23
- package/src/electron-main/electron-main-window-service-impl.ts +44 -44
- package/src/electron-main/electron-security-token-service.ts +36 -36
- package/src/electron-main/event-utils.ts +36 -36
- package/src/electron-main/messaging/electron-connection-handler.ts +21 -21
- package/src/electron-main/messaging/electron-messaging-contribution.ts +143 -143
- package/src/electron-main/messaging/electron-messaging-service.ts +35 -35
- package/src/electron-main/theia-electron-window.ts +219 -214
- package/src/electron-node/cli/electron-backend-cli-module.ts +24 -24
- package/src/electron-node/cli/electron-cli-contribution.ts +35 -35
- package/src/electron-node/hosting/electron-backend-hosting-module.ts +24 -24
- package/src/electron-node/hosting/electron-ws-origin-validator.ts +37 -37
- package/src/electron-node/keyboard/electron-backend-keyboard-module.ts +30 -30
- package/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +35 -35
- package/src/electron-node/request/electron-backend-request-module.ts +23 -23
- package/src/electron-node/request/electron-backend-request-service.ts +78 -78
- package/src/electron-node/token/electron-token-backend-contribution.ts +48 -48
- package/src/electron-node/token/electron-token-backend-module.ts +28 -28
- package/src/electron-node/token/electron-token-validator.ts +93 -93
- package/src/node/application-server.ts +59 -59
- package/src/node/backend-application-config-provider.spec.ts +29 -29
- package/src/node/backend-application-config-provider.ts +48 -48
- package/src/node/backend-application-module.ts +139 -139
- package/src/node/backend-application.ts +374 -374
- package/src/node/cli.spec.ts +94 -94
- package/src/node/cli.ts +63 -63
- package/src/node/console-logger-server.spec.ts +59 -59
- package/src/node/console-logger-server.ts +76 -76
- package/src/node/debug.ts +30 -30
- package/src/node/dynamic-require.ts +56 -56
- package/src/node/env-variables/env-variables-server.ts +123 -123
- package/src/node/env-variables/index.ts +17 -17
- package/src/node/environment-utils.spec.ts +92 -92
- package/src/node/environment-utils.ts +66 -66
- package/src/node/file-uri.spec.ts +76 -76
- package/src/node/filesystem-locking.ts +77 -77
- package/src/node/hosting/backend-application-hosts.ts +60 -60
- package/src/node/hosting/backend-hosting-module.ts +26 -26
- package/src/node/hosting/ws-origin-validator.ts +36 -36
- package/src/node/i18n/i18n-backend-module.ts +42 -42
- package/src/node/i18n/localization-contribution.ts +112 -112
- package/src/node/i18n/localization-provider.ts +125 -125
- package/src/node/i18n/localization-server.ts +52 -52
- package/src/node/i18n/theia-localization-contribution.ts +40 -36
- package/src/node/index.ts +22 -22
- package/src/node/key-store-server.ts +162 -162
- package/src/node/logger-backend-module.ts +88 -88
- package/src/node/logger-cli-contribution.spec.ts +245 -245
- package/src/node/logger-cli-contribution.ts +168 -168
- package/src/node/main.ts +33 -33
- package/src/node/messaging/binary-message-pipe.ts +168 -168
- package/src/node/messaging/connection-container-module.ts +96 -96
- package/src/node/messaging/default-messaging-service.ts +129 -129
- package/src/node/messaging/frontend-connection-service.ts +24 -24
- package/src/node/messaging/index.ts +19 -19
- package/src/node/messaging/ipc-bootstrap.ts +27 -27
- package/src/node/messaging/ipc-channel.ts +77 -77
- package/src/node/messaging/ipc-connection-provider.ts +107 -107
- package/src/node/messaging/ipc-protocol.ts +76 -76
- package/src/node/messaging/messaging-backend-module.ts +52 -52
- package/src/node/messaging/messaging-listeners.ts +52 -52
- package/src/node/messaging/messaging-service.ts +46 -46
- package/src/node/messaging/test/test-web-socket-channel.ts +61 -61
- package/src/node/messaging/websocket-endpoint.ts +79 -79
- package/src/node/messaging/websocket-frontend-connection-service.ts +186 -186
- package/src/node/os-backend-provider.ts +25 -25
- package/src/node/performance/index.ts +18 -18
- package/src/node/performance/measurement-backend-bindings.ts +35 -35
- package/src/node/performance/node-stopwatch.ts +40 -40
- package/src/node/process-utils.spec.ts +48 -48
- package/src/node/process-utils.ts +102 -102
- package/src/node/remote/backend-remote-service.ts +25 -25
- package/src/node/remote/remote-cli-contribution.ts +34 -34
- package/src/node/remote/remote-copy-contribution.ts +45 -45
- package/src/node/request/backend-request-facade.ts +39 -39
- package/src/node/request/backend-request-module.ts +25 -25
- package/src/node/request/proxy-cli-contribution.ts +65 -65
- package/src/node/ws-request-validators.ts +56 -56
- package/src/typings/native-keymap.d.ts +108 -108
- package/i18n/nls.pt-pt.json +0 -552
|
@@ -1,334 +1,334 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2022 Ericsson and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { Container } from 'inversify';
|
|
18
|
-
import { PreferenceValidationService } from './preference-validation-service';
|
|
19
|
-
import { PreferenceItem, PreferenceSchemaProvider } from './preference-contribution';
|
|
20
|
-
import { PreferenceLanguageOverrideService } from './preference-language-override-service';
|
|
21
|
-
import * as assert from 'assert';
|
|
22
|
-
import { JSONValue } from '@phosphor/coreutils';
|
|
23
|
-
import { IJSONSchema, JsonType } from '../../common/json-schema';
|
|
24
|
-
|
|
25
|
-
/* eslint-disable no-null/no-null */
|
|
26
|
-
|
|
27
|
-
describe('Preference Validation Service', () => {
|
|
28
|
-
const container = new Container();
|
|
29
|
-
container.bind(PreferenceSchemaProvider).toConstantValue({ getDefaultValue: PreferenceSchemaProvider.prototype.getDefaultValue } as PreferenceSchemaProvider);
|
|
30
|
-
container.bind(PreferenceLanguageOverrideService).toSelf().inSingletonScope();
|
|
31
|
-
const validator = container.resolve(PreferenceValidationService);
|
|
32
|
-
const validateBySchema: (value: JSONValue, schema: PreferenceItem) => JSONValue = validator.validateBySchema.bind(validator, 'dummy');
|
|
33
|
-
|
|
34
|
-
describe('should validate strings', () => {
|
|
35
|
-
const expected = 'expected';
|
|
36
|
-
it('good input -> should return the same string', () => {
|
|
37
|
-
const actual = validateBySchema(expected, { type: 'string' });
|
|
38
|
-
assert.strictEqual(actual, expected);
|
|
39
|
-
});
|
|
40
|
-
it('bad input -> should return the default', () => {
|
|
41
|
-
const actual = validateBySchema(3, { type: 'string', default: expected });
|
|
42
|
-
assert.strictEqual(actual, expected);
|
|
43
|
-
});
|
|
44
|
-
it('bad input -> should return string even if default is not a string', () => {
|
|
45
|
-
const actual = validateBySchema(3, { type: 'string', default: 3 });
|
|
46
|
-
assert.strictEqual(typeof actual, 'string');
|
|
47
|
-
assert.strictEqual(actual, '3');
|
|
48
|
-
});
|
|
49
|
-
it('bad input -> should return an empty string if no default', () => {
|
|
50
|
-
const actual = validateBySchema(3, { type: 'string' });
|
|
51
|
-
assert.strictEqual(actual, '');
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
describe('should validate numbers', () => {
|
|
55
|
-
const expected = 1.23;
|
|
56
|
-
it('good input -> should return the same number', () => {
|
|
57
|
-
const actual = validateBySchema(expected, { type: 'number' });
|
|
58
|
-
assert.strictEqual(actual, expected);
|
|
59
|
-
});
|
|
60
|
-
it('bad input -> should return the default', () => {
|
|
61
|
-
const actual = validateBySchema('zxy', { type: 'number', default: expected });
|
|
62
|
-
assert.strictEqual(actual, expected);
|
|
63
|
-
});
|
|
64
|
-
it('bad input -> should return a number even if the default is not a number', () => {
|
|
65
|
-
const actual = validateBySchema('zxy', { type: 'number', default: ['fun array'] });
|
|
66
|
-
assert.strictEqual(actual, 0);
|
|
67
|
-
});
|
|
68
|
-
it('bad input -> should return 0 if no default', () => {
|
|
69
|
-
const actual = validateBySchema('zxy', { type: 'number' });
|
|
70
|
-
assert.strictEqual(actual, 0);
|
|
71
|
-
});
|
|
72
|
-
it('should do its best to make a number of a string', () => {
|
|
73
|
-
const actual = validateBySchema(expected.toString(), { type: 'number' });
|
|
74
|
-
assert.strictEqual(actual, expected);
|
|
75
|
-
});
|
|
76
|
-
it('should return the max if input is greater than max', () => {
|
|
77
|
-
const maximum = 50;
|
|
78
|
-
const actual = validateBySchema(100, { type: 'number', maximum });
|
|
79
|
-
assert.strictEqual(actual, maximum);
|
|
80
|
-
});
|
|
81
|
-
it('should return the minimum if input is less than minimum', () => {
|
|
82
|
-
const minimum = 30;
|
|
83
|
-
const actual = validateBySchema(15, { type: 'number', minimum });
|
|
84
|
-
assert.strictEqual(actual, minimum);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe('should validate integers', () => {
|
|
88
|
-
const expected = 2;
|
|
89
|
-
it('good input -> should return the same number', () => {
|
|
90
|
-
const actual = validateBySchema(expected, { type: 'integer' });
|
|
91
|
-
assert.strictEqual(actual, expected);
|
|
92
|
-
});
|
|
93
|
-
it('bad input -> should return the default', () => {
|
|
94
|
-
const actual = validateBySchema('zxy', { type: 'integer', default: expected });
|
|
95
|
-
assert.strictEqual(actual, expected);
|
|
96
|
-
});
|
|
97
|
-
it('bad input -> should return 0 if no default', () => {
|
|
98
|
-
const actual = validateBySchema('zxy', { type: 'integer' });
|
|
99
|
-
assert.strictEqual(actual, 0);
|
|
100
|
-
});
|
|
101
|
-
it('should round a non-integer', () => {
|
|
102
|
-
const actual = validateBySchema(1.75, { type: 'integer' });
|
|
103
|
-
assert.strictEqual(actual, expected);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
describe('should validate booleans', () => {
|
|
107
|
-
it('good input -> should return the same value', () => {
|
|
108
|
-
assert.strictEqual(validateBySchema(true, { type: 'boolean' }), true);
|
|
109
|
-
assert.strictEqual(validateBySchema(false, { type: 'boolean' }), false);
|
|
110
|
-
});
|
|
111
|
-
it('bad input -> should return the default', () => {
|
|
112
|
-
const actual = validateBySchema(['not a boolean!'], { type: 'boolean', default: true });
|
|
113
|
-
assert.strictEqual(actual, true);
|
|
114
|
-
});
|
|
115
|
-
it('bad input -> should return false if no default', () => {
|
|
116
|
-
const actual = validateBySchema({ isBoolean: 'no' }, { type: 'boolean' });
|
|
117
|
-
assert.strictEqual(actual, false);
|
|
118
|
-
});
|
|
119
|
-
it('should treat string "true" and "false" as equivalent to booleans', () => {
|
|
120
|
-
assert.strictEqual(validateBySchema('true', { type: 'boolean' }), true);
|
|
121
|
-
assert.strictEqual(validateBySchema('false', { type: 'boolean' }), false);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('should validate null', () => {
|
|
125
|
-
it('should always just return null', () => {
|
|
126
|
-
assert.strictEqual(validateBySchema({ whatever: ['anything'] }, { type: 'null' }), null);
|
|
127
|
-
assert.strictEqual(validateBySchema('not null', { type: 'null' }), null);
|
|
128
|
-
assert.strictEqual(validateBySchema(123, { type: 'null', default: 123 }), null);
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
describe('should validate enums', () => {
|
|
132
|
-
const expected = 'expected';
|
|
133
|
-
const defaultValue = 'default';
|
|
134
|
-
const options = [expected, defaultValue, 'other-value'];
|
|
135
|
-
it('good value -> should return same value', () => {
|
|
136
|
-
const actual = validateBySchema(expected, { enum: options });
|
|
137
|
-
assert.strictEqual(actual, expected);
|
|
138
|
-
});
|
|
139
|
-
it('bad value -> should return default value', () => {
|
|
140
|
-
const actual = validateBySchema('not-in-enum', { enum: options, defaultValue });
|
|
141
|
-
assert.strictEqual(actual, defaultValue);
|
|
142
|
-
});
|
|
143
|
-
it('bad value -> should return first value if no default or bad default', () => {
|
|
144
|
-
const noDefault = validateBySchema(['not-in-enum'], { enum: options });
|
|
145
|
-
assert.strictEqual(noDefault, expected);
|
|
146
|
-
const badDefault = validateBySchema({ inEnum: false }, { enum: options, default: 'not-in-enum' });
|
|
147
|
-
assert.strictEqual(badDefault, expected);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
describe('should validate objects', () => {
|
|
151
|
-
it('should reject non object types', () => {
|
|
152
|
-
const schema = { type: 'object' } as const;
|
|
153
|
-
assert.deepStrictEqual(validateBySchema(null, schema), {});
|
|
154
|
-
assert.deepStrictEqual(validateBySchema('null', schema), {});
|
|
155
|
-
assert.deepStrictEqual(validateBySchema(3, schema), {});
|
|
156
|
-
});
|
|
157
|
-
it('should reject objects that are missing required fields', () => {
|
|
158
|
-
const schema: PreferenceItem = { type: 'object', properties: { 'required': { type: 'string' }, 'not-required': { type: 'number' } }, required: ['required'] };
|
|
159
|
-
assert.deepStrictEqual(validateBySchema({ 'not-required': 3 }, schema), {});
|
|
160
|
-
const defaultValue = { required: 'present' };
|
|
161
|
-
assert.deepStrictEqual(validateBySchema({ 'not-required': 3 }, { ...schema, defaultValue }), defaultValue);
|
|
162
|
-
});
|
|
163
|
-
it('should reject objects that have impermissible extra properties', () => {
|
|
164
|
-
const schema: PreferenceItem = { type: 'object', properties: { 'required': { type: 'string' } }, additionalProperties: false };
|
|
165
|
-
assert.deepStrictEqual(validateBySchema({ 'required': 'hello', 'not-required': 3 }, schema), {});
|
|
166
|
-
});
|
|
167
|
-
it('should accept objects with extra properties if extra properties are not forbidden', () => {
|
|
168
|
-
const input = { 'required': 'hello', 'not-forbidden': 3 };
|
|
169
|
-
const schema: PreferenceItem = { type: 'object', properties: { 'required': { type: 'string' } }, additionalProperties: true };
|
|
170
|
-
assert.deepStrictEqual(validateBySchema(input, schema), input);
|
|
171
|
-
assert.deepStrictEqual(validateBySchema(input, { ...schema, additionalProperties: undefined }), input);
|
|
172
|
-
});
|
|
173
|
-
it("should reject objects with properties that violate the property's rules", () => {
|
|
174
|
-
const input = { required: 'not-a-number!' };
|
|
175
|
-
const schema: PreferenceItem = { type: 'object', properties: { required: { type: 'number' } } };
|
|
176
|
-
assert.deepStrictEqual(validateBySchema(input, schema), {});
|
|
177
|
-
});
|
|
178
|
-
it('should reject objects with extra properties that violate the extra property rules', () => {
|
|
179
|
-
const input = { required: 3, 'not-required': 'not-a-number!' };
|
|
180
|
-
const schema: PreferenceItem = { type: 'object', properties: { required: { type: 'number' } }, additionalProperties: { type: 'number' } };
|
|
181
|
-
assert.deepStrictEqual(validateBySchema(input, schema), {});
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
describe('should validate arrays', () => {
|
|
185
|
-
const expected = ['one-string', 'two-string'];
|
|
186
|
-
it('good input -> should return same value', () => {
|
|
187
|
-
const actual = validateBySchema(expected, { type: 'array', items: { type: 'string' } });
|
|
188
|
-
assert.deepStrictEqual(actual, expected);
|
|
189
|
-
const augmentedExpected = [3, ...expected, 4];
|
|
190
|
-
const augmentedActual = validateBySchema(augmentedExpected, { type: 'array', items: { type: ['number', 'string'] } });
|
|
191
|
-
assert.deepStrictEqual(augmentedActual, augmentedExpected);
|
|
192
|
-
});
|
|
193
|
-
it('bad input -> should filter out impermissible items', () => {
|
|
194
|
-
const actual = validateBySchema([3, ...expected, []], { type: 'array', items: { type: 'string' } });
|
|
195
|
-
assert.deepStrictEqual(actual, expected);
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
describe('should validate tuples', () => {
|
|
199
|
-
const schema: PreferenceItem & { items: IJSONSchema[] } = {
|
|
200
|
-
'type': 'array',
|
|
201
|
-
'items': [{
|
|
202
|
-
'type': 'number',
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
'type': 'string',
|
|
206
|
-
}],
|
|
207
|
-
};
|
|
208
|
-
it('good input -> returns same object', () => {
|
|
209
|
-
const expected = [1, 'two'];
|
|
210
|
-
assert.strictEqual(validateBySchema(expected, schema), expected);
|
|
211
|
-
});
|
|
212
|
-
it('bad input -> should use the default if supplied present and valid', () => {
|
|
213
|
-
const defaultValue = [8, 'three'];
|
|
214
|
-
const withDefault = { ...schema, default: defaultValue };
|
|
215
|
-
assert.strictEqual(validateBySchema('not even an array!', withDefault), defaultValue);
|
|
216
|
-
assert.strictEqual(validateBySchema(['first fails', 'second ok'], withDefault), defaultValue);
|
|
217
|
-
assert.strictEqual(validateBySchema([], withDefault), defaultValue);
|
|
218
|
-
assert.strictEqual(validateBySchema([2, ['second fails']], withDefault), defaultValue);
|
|
219
|
-
});
|
|
220
|
-
it('bad input -> in the absence of a default, it should return any good values or the default for each subschema', () => {
|
|
221
|
-
const withSubDefault: PreferenceItem = { ...schema, items: [{ type: 'string', default: 'cool' }, ...schema.items] };
|
|
222
|
-
assert.deepStrictEqual(validateBySchema('not an array', withSubDefault), ['cool', 0, '']);
|
|
223
|
-
assert.deepStrictEqual(validateBySchema([2, 8, null], withSubDefault), ['cool', 8, '']);
|
|
224
|
-
});
|
|
225
|
-
it("bad input -> uses the default, but fixes fields that don't match schema", () => {
|
|
226
|
-
const defaultValue = [8, 8];
|
|
227
|
-
const withDefault = { ...schema, default: defaultValue };
|
|
228
|
-
assert.deepStrictEqual(validateBySchema('something invalid', withDefault), [8, '']);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
describe('should validate type arrays', () => {
|
|
232
|
-
const type: JsonType[] = ['boolean', 'string', 'number'];
|
|
233
|
-
it('good input -> returns same value', () => {
|
|
234
|
-
const goodBoolean = validateBySchema(true, { type });
|
|
235
|
-
assert.strictEqual(goodBoolean, true);
|
|
236
|
-
const goodString = validateBySchema('string', { type });
|
|
237
|
-
assert.strictEqual(goodString, 'string');
|
|
238
|
-
const goodNumber = validateBySchema(1.23, { type });
|
|
239
|
-
assert.strictEqual(goodNumber, 1.23);
|
|
240
|
-
});
|
|
241
|
-
it('bad input -> returns default if default valid', () => {
|
|
242
|
-
const stringDefault = 'default';
|
|
243
|
-
const booleanDefault = true;
|
|
244
|
-
const numberDefault = 100;
|
|
245
|
-
assert.strictEqual(validateBySchema([], { type, default: stringDefault }), stringDefault);
|
|
246
|
-
assert.strictEqual(validateBySchema([], { type, default: booleanDefault }), booleanDefault);
|
|
247
|
-
assert.strictEqual(validateBySchema([], { type, default: numberDefault }), numberDefault);
|
|
248
|
-
});
|
|
249
|
-
it("bad input -> returns first validator's result if no default or bad default", () => {
|
|
250
|
-
assert.strictEqual(validateBySchema([], { type }), false);
|
|
251
|
-
assert.strictEqual(validateBySchema([], { type, default: {} }), false);
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
describe('should validate anyOfs', () => {
|
|
255
|
-
const schema: PreferenceItem = { anyOf: [{ type: 'number', minimum: 1 }, { type: 'array', items: { type: 'string' } }], default: 5 };
|
|
256
|
-
it('good input -> returns same value', () => {
|
|
257
|
-
assert.strictEqual(validateBySchema(3, schema), 3);
|
|
258
|
-
const goodArray = ['a string', 'here too'];
|
|
259
|
-
assert.strictEqual(validateBySchema(goodArray, schema), goodArray);
|
|
260
|
-
});
|
|
261
|
-
it('bad input -> returns default if present and valid', () => {
|
|
262
|
-
assert.strictEqual(validateBySchema({}, schema), 5);
|
|
263
|
-
});
|
|
264
|
-
it('bad input -> first validator, if default absent or default ill-formed', () => {
|
|
265
|
-
assert.strictEqual(validateBySchema({}, { ...schema, default: 0 }), 1);
|
|
266
|
-
assert.strictEqual(validateBySchema({}, { ...schema, default: undefined }), 1);
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
describe('should validate oneOfs', () => {
|
|
270
|
-
// Between 4 and 6 should be rejected
|
|
271
|
-
const schema: PreferenceItem = { oneOf: [{ type: 'number', minimum: 1, maximum: 6 }, { type: 'number', minimum: 4, maximum: 10 }], default: 8 };
|
|
272
|
-
it('good input -> returns same value', () => {
|
|
273
|
-
assert.strictEqual(validateBySchema(2, schema), 2);
|
|
274
|
-
assert.strictEqual(validateBySchema(7, schema), 7);
|
|
275
|
-
});
|
|
276
|
-
it('bad input -> returns default if present and valid', () => {
|
|
277
|
-
assert.strictEqual(validateBySchema(5, schema), 8);
|
|
278
|
-
});
|
|
279
|
-
it('bad input -> returns value if default absent or invalid.', () => {
|
|
280
|
-
assert.strictEqual(validateBySchema(5, { ...schema, default: undefined }), 5);
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
describe('should validate consts', () => {
|
|
284
|
-
const schema: PreferenceItem = { const: { 'the only': 'possible value' }, default: 'ignore-the-default' };
|
|
285
|
-
const goodValue = { 'the only': 'possible value' };
|
|
286
|
-
it('good input -> returns same value', () => {
|
|
287
|
-
assert.strictEqual(validateBySchema(goodValue, schema), goodValue);
|
|
288
|
-
});
|
|
289
|
-
it('bad input -> returns the const value for any other value', () => {
|
|
290
|
-
assert.deepStrictEqual(validateBySchema('literally anything else', schema), goodValue);
|
|
291
|
-
assert.deepStrictEqual(validateBySchema('ignore-the-default', schema), goodValue);
|
|
292
|
-
});
|
|
293
|
-
});
|
|
294
|
-
describe('should maintain triple equality for valid object types', () => {
|
|
295
|
-
const arraySchema: PreferenceItem = { type: 'array', items: { type: 'string' } };
|
|
296
|
-
it('maintains triple equality for arrays', () => {
|
|
297
|
-
const input = ['one-string', 'two-string'];
|
|
298
|
-
assert(validateBySchema(input, arraySchema) === input);
|
|
299
|
-
});
|
|
300
|
-
it('does not maintain triple equality if the array is only partially correct', () => {
|
|
301
|
-
const input = ['one-string', 'two-string', 3];
|
|
302
|
-
assert.notStrictEqual(validateBySchema(input, arraySchema), input);
|
|
303
|
-
});
|
|
304
|
-
it('maintains triple equality for objects', () => {
|
|
305
|
-
const schema: PreferenceItem = {
|
|
306
|
-
'type': 'object',
|
|
307
|
-
properties: {
|
|
308
|
-
primitive: { type: 'string' },
|
|
309
|
-
complex: { type: 'object', properties: { nested: { type: 'number' } } }
|
|
310
|
-
}
|
|
311
|
-
};
|
|
312
|
-
const input = { primitive: 'is a string', complex: { nested: 3 } };
|
|
313
|
-
assert(validateBySchema(input, schema) === input);
|
|
314
|
-
});
|
|
315
|
-
});
|
|
316
|
-
it('should return the value if any error occurs', () => {
|
|
317
|
-
let wasCalled = false;
|
|
318
|
-
const originalValidator = validator['validateString'];
|
|
319
|
-
validator['validateString'] = () => {
|
|
320
|
-
wasCalled = true;
|
|
321
|
-
throw new Error('Only a test!');
|
|
322
|
-
};
|
|
323
|
-
const input = { shouldBeValid: false };
|
|
324
|
-
const output = validateBySchema(input, { type: 'string' });
|
|
325
|
-
assert(wasCalled);
|
|
326
|
-
assert(input === output);
|
|
327
|
-
validator['validateString'] = originalValidator;
|
|
328
|
-
});
|
|
329
|
-
it('should return the same object if no validation possible', () => {
|
|
330
|
-
for (const input of ['whatever', { valid: 'hard to say' }, 234, ["no one knows if I'm not", 'so I am']]) {
|
|
331
|
-
assert(validateBySchema(input, {}) === input);
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
});
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2022 Ericsson and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { Container } from 'inversify';
|
|
18
|
+
import { PreferenceValidationService } from './preference-validation-service';
|
|
19
|
+
import { PreferenceItem, PreferenceSchemaProvider } from './preference-contribution';
|
|
20
|
+
import { PreferenceLanguageOverrideService } from './preference-language-override-service';
|
|
21
|
+
import * as assert from 'assert';
|
|
22
|
+
import { JSONValue } from '@phosphor/coreutils';
|
|
23
|
+
import { IJSONSchema, JsonType } from '../../common/json-schema';
|
|
24
|
+
|
|
25
|
+
/* eslint-disable no-null/no-null */
|
|
26
|
+
|
|
27
|
+
describe('Preference Validation Service', () => {
|
|
28
|
+
const container = new Container();
|
|
29
|
+
container.bind(PreferenceSchemaProvider).toConstantValue({ getDefaultValue: PreferenceSchemaProvider.prototype.getDefaultValue } as PreferenceSchemaProvider);
|
|
30
|
+
container.bind(PreferenceLanguageOverrideService).toSelf().inSingletonScope();
|
|
31
|
+
const validator = container.resolve(PreferenceValidationService);
|
|
32
|
+
const validateBySchema: (value: JSONValue, schema: PreferenceItem) => JSONValue = validator.validateBySchema.bind(validator, 'dummy');
|
|
33
|
+
|
|
34
|
+
describe('should validate strings', () => {
|
|
35
|
+
const expected = 'expected';
|
|
36
|
+
it('good input -> should return the same string', () => {
|
|
37
|
+
const actual = validateBySchema(expected, { type: 'string' });
|
|
38
|
+
assert.strictEqual(actual, expected);
|
|
39
|
+
});
|
|
40
|
+
it('bad input -> should return the default', () => {
|
|
41
|
+
const actual = validateBySchema(3, { type: 'string', default: expected });
|
|
42
|
+
assert.strictEqual(actual, expected);
|
|
43
|
+
});
|
|
44
|
+
it('bad input -> should return string even if default is not a string', () => {
|
|
45
|
+
const actual = validateBySchema(3, { type: 'string', default: 3 });
|
|
46
|
+
assert.strictEqual(typeof actual, 'string');
|
|
47
|
+
assert.strictEqual(actual, '3');
|
|
48
|
+
});
|
|
49
|
+
it('bad input -> should return an empty string if no default', () => {
|
|
50
|
+
const actual = validateBySchema(3, { type: 'string' });
|
|
51
|
+
assert.strictEqual(actual, '');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('should validate numbers', () => {
|
|
55
|
+
const expected = 1.23;
|
|
56
|
+
it('good input -> should return the same number', () => {
|
|
57
|
+
const actual = validateBySchema(expected, { type: 'number' });
|
|
58
|
+
assert.strictEqual(actual, expected);
|
|
59
|
+
});
|
|
60
|
+
it('bad input -> should return the default', () => {
|
|
61
|
+
const actual = validateBySchema('zxy', { type: 'number', default: expected });
|
|
62
|
+
assert.strictEqual(actual, expected);
|
|
63
|
+
});
|
|
64
|
+
it('bad input -> should return a number even if the default is not a number', () => {
|
|
65
|
+
const actual = validateBySchema('zxy', { type: 'number', default: ['fun array'] });
|
|
66
|
+
assert.strictEqual(actual, 0);
|
|
67
|
+
});
|
|
68
|
+
it('bad input -> should return 0 if no default', () => {
|
|
69
|
+
const actual = validateBySchema('zxy', { type: 'number' });
|
|
70
|
+
assert.strictEqual(actual, 0);
|
|
71
|
+
});
|
|
72
|
+
it('should do its best to make a number of a string', () => {
|
|
73
|
+
const actual = validateBySchema(expected.toString(), { type: 'number' });
|
|
74
|
+
assert.strictEqual(actual, expected);
|
|
75
|
+
});
|
|
76
|
+
it('should return the max if input is greater than max', () => {
|
|
77
|
+
const maximum = 50;
|
|
78
|
+
const actual = validateBySchema(100, { type: 'number', maximum });
|
|
79
|
+
assert.strictEqual(actual, maximum);
|
|
80
|
+
});
|
|
81
|
+
it('should return the minimum if input is less than minimum', () => {
|
|
82
|
+
const minimum = 30;
|
|
83
|
+
const actual = validateBySchema(15, { type: 'number', minimum });
|
|
84
|
+
assert.strictEqual(actual, minimum);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('should validate integers', () => {
|
|
88
|
+
const expected = 2;
|
|
89
|
+
it('good input -> should return the same number', () => {
|
|
90
|
+
const actual = validateBySchema(expected, { type: 'integer' });
|
|
91
|
+
assert.strictEqual(actual, expected);
|
|
92
|
+
});
|
|
93
|
+
it('bad input -> should return the default', () => {
|
|
94
|
+
const actual = validateBySchema('zxy', { type: 'integer', default: expected });
|
|
95
|
+
assert.strictEqual(actual, expected);
|
|
96
|
+
});
|
|
97
|
+
it('bad input -> should return 0 if no default', () => {
|
|
98
|
+
const actual = validateBySchema('zxy', { type: 'integer' });
|
|
99
|
+
assert.strictEqual(actual, 0);
|
|
100
|
+
});
|
|
101
|
+
it('should round a non-integer', () => {
|
|
102
|
+
const actual = validateBySchema(1.75, { type: 'integer' });
|
|
103
|
+
assert.strictEqual(actual, expected);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('should validate booleans', () => {
|
|
107
|
+
it('good input -> should return the same value', () => {
|
|
108
|
+
assert.strictEqual(validateBySchema(true, { type: 'boolean' }), true);
|
|
109
|
+
assert.strictEqual(validateBySchema(false, { type: 'boolean' }), false);
|
|
110
|
+
});
|
|
111
|
+
it('bad input -> should return the default', () => {
|
|
112
|
+
const actual = validateBySchema(['not a boolean!'], { type: 'boolean', default: true });
|
|
113
|
+
assert.strictEqual(actual, true);
|
|
114
|
+
});
|
|
115
|
+
it('bad input -> should return false if no default', () => {
|
|
116
|
+
const actual = validateBySchema({ isBoolean: 'no' }, { type: 'boolean' });
|
|
117
|
+
assert.strictEqual(actual, false);
|
|
118
|
+
});
|
|
119
|
+
it('should treat string "true" and "false" as equivalent to booleans', () => {
|
|
120
|
+
assert.strictEqual(validateBySchema('true', { type: 'boolean' }), true);
|
|
121
|
+
assert.strictEqual(validateBySchema('false', { type: 'boolean' }), false);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe('should validate null', () => {
|
|
125
|
+
it('should always just return null', () => {
|
|
126
|
+
assert.strictEqual(validateBySchema({ whatever: ['anything'] }, { type: 'null' }), null);
|
|
127
|
+
assert.strictEqual(validateBySchema('not null', { type: 'null' }), null);
|
|
128
|
+
assert.strictEqual(validateBySchema(123, { type: 'null', default: 123 }), null);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('should validate enums', () => {
|
|
132
|
+
const expected = 'expected';
|
|
133
|
+
const defaultValue = 'default';
|
|
134
|
+
const options = [expected, defaultValue, 'other-value'];
|
|
135
|
+
it('good value -> should return same value', () => {
|
|
136
|
+
const actual = validateBySchema(expected, { enum: options });
|
|
137
|
+
assert.strictEqual(actual, expected);
|
|
138
|
+
});
|
|
139
|
+
it('bad value -> should return default value', () => {
|
|
140
|
+
const actual = validateBySchema('not-in-enum', { enum: options, defaultValue });
|
|
141
|
+
assert.strictEqual(actual, defaultValue);
|
|
142
|
+
});
|
|
143
|
+
it('bad value -> should return first value if no default or bad default', () => {
|
|
144
|
+
const noDefault = validateBySchema(['not-in-enum'], { enum: options });
|
|
145
|
+
assert.strictEqual(noDefault, expected);
|
|
146
|
+
const badDefault = validateBySchema({ inEnum: false }, { enum: options, default: 'not-in-enum' });
|
|
147
|
+
assert.strictEqual(badDefault, expected);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('should validate objects', () => {
|
|
151
|
+
it('should reject non object types', () => {
|
|
152
|
+
const schema = { type: 'object' } as const;
|
|
153
|
+
assert.deepStrictEqual(validateBySchema(null, schema), {});
|
|
154
|
+
assert.deepStrictEqual(validateBySchema('null', schema), {});
|
|
155
|
+
assert.deepStrictEqual(validateBySchema(3, schema), {});
|
|
156
|
+
});
|
|
157
|
+
it('should reject objects that are missing required fields', () => {
|
|
158
|
+
const schema: PreferenceItem = { type: 'object', properties: { 'required': { type: 'string' }, 'not-required': { type: 'number' } }, required: ['required'] };
|
|
159
|
+
assert.deepStrictEqual(validateBySchema({ 'not-required': 3 }, schema), {});
|
|
160
|
+
const defaultValue = { required: 'present' };
|
|
161
|
+
assert.deepStrictEqual(validateBySchema({ 'not-required': 3 }, { ...schema, defaultValue }), defaultValue);
|
|
162
|
+
});
|
|
163
|
+
it('should reject objects that have impermissible extra properties', () => {
|
|
164
|
+
const schema: PreferenceItem = { type: 'object', properties: { 'required': { type: 'string' } }, additionalProperties: false };
|
|
165
|
+
assert.deepStrictEqual(validateBySchema({ 'required': 'hello', 'not-required': 3 }, schema), {});
|
|
166
|
+
});
|
|
167
|
+
it('should accept objects with extra properties if extra properties are not forbidden', () => {
|
|
168
|
+
const input = { 'required': 'hello', 'not-forbidden': 3 };
|
|
169
|
+
const schema: PreferenceItem = { type: 'object', properties: { 'required': { type: 'string' } }, additionalProperties: true };
|
|
170
|
+
assert.deepStrictEqual(validateBySchema(input, schema), input);
|
|
171
|
+
assert.deepStrictEqual(validateBySchema(input, { ...schema, additionalProperties: undefined }), input);
|
|
172
|
+
});
|
|
173
|
+
it("should reject objects with properties that violate the property's rules", () => {
|
|
174
|
+
const input = { required: 'not-a-number!' };
|
|
175
|
+
const schema: PreferenceItem = { type: 'object', properties: { required: { type: 'number' } } };
|
|
176
|
+
assert.deepStrictEqual(validateBySchema(input, schema), {});
|
|
177
|
+
});
|
|
178
|
+
it('should reject objects with extra properties that violate the extra property rules', () => {
|
|
179
|
+
const input = { required: 3, 'not-required': 'not-a-number!' };
|
|
180
|
+
const schema: PreferenceItem = { type: 'object', properties: { required: { type: 'number' } }, additionalProperties: { type: 'number' } };
|
|
181
|
+
assert.deepStrictEqual(validateBySchema(input, schema), {});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe('should validate arrays', () => {
|
|
185
|
+
const expected = ['one-string', 'two-string'];
|
|
186
|
+
it('good input -> should return same value', () => {
|
|
187
|
+
const actual = validateBySchema(expected, { type: 'array', items: { type: 'string' } });
|
|
188
|
+
assert.deepStrictEqual(actual, expected);
|
|
189
|
+
const augmentedExpected = [3, ...expected, 4];
|
|
190
|
+
const augmentedActual = validateBySchema(augmentedExpected, { type: 'array', items: { type: ['number', 'string'] } });
|
|
191
|
+
assert.deepStrictEqual(augmentedActual, augmentedExpected);
|
|
192
|
+
});
|
|
193
|
+
it('bad input -> should filter out impermissible items', () => {
|
|
194
|
+
const actual = validateBySchema([3, ...expected, []], { type: 'array', items: { type: 'string' } });
|
|
195
|
+
assert.deepStrictEqual(actual, expected);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('should validate tuples', () => {
|
|
199
|
+
const schema: PreferenceItem & { items: IJSONSchema[] } = {
|
|
200
|
+
'type': 'array',
|
|
201
|
+
'items': [{
|
|
202
|
+
'type': 'number',
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
'type': 'string',
|
|
206
|
+
}],
|
|
207
|
+
};
|
|
208
|
+
it('good input -> returns same object', () => {
|
|
209
|
+
const expected = [1, 'two'];
|
|
210
|
+
assert.strictEqual(validateBySchema(expected, schema), expected);
|
|
211
|
+
});
|
|
212
|
+
it('bad input -> should use the default if supplied present and valid', () => {
|
|
213
|
+
const defaultValue = [8, 'three'];
|
|
214
|
+
const withDefault = { ...schema, default: defaultValue };
|
|
215
|
+
assert.strictEqual(validateBySchema('not even an array!', withDefault), defaultValue);
|
|
216
|
+
assert.strictEqual(validateBySchema(['first fails', 'second ok'], withDefault), defaultValue);
|
|
217
|
+
assert.strictEqual(validateBySchema([], withDefault), defaultValue);
|
|
218
|
+
assert.strictEqual(validateBySchema([2, ['second fails']], withDefault), defaultValue);
|
|
219
|
+
});
|
|
220
|
+
it('bad input -> in the absence of a default, it should return any good values or the default for each subschema', () => {
|
|
221
|
+
const withSubDefault: PreferenceItem = { ...schema, items: [{ type: 'string', default: 'cool' }, ...schema.items] };
|
|
222
|
+
assert.deepStrictEqual(validateBySchema('not an array', withSubDefault), ['cool', 0, '']);
|
|
223
|
+
assert.deepStrictEqual(validateBySchema([2, 8, null], withSubDefault), ['cool', 8, '']);
|
|
224
|
+
});
|
|
225
|
+
it("bad input -> uses the default, but fixes fields that don't match schema", () => {
|
|
226
|
+
const defaultValue = [8, 8];
|
|
227
|
+
const withDefault = { ...schema, default: defaultValue };
|
|
228
|
+
assert.deepStrictEqual(validateBySchema('something invalid', withDefault), [8, '']);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
describe('should validate type arrays', () => {
|
|
232
|
+
const type: JsonType[] = ['boolean', 'string', 'number'];
|
|
233
|
+
it('good input -> returns same value', () => {
|
|
234
|
+
const goodBoolean = validateBySchema(true, { type });
|
|
235
|
+
assert.strictEqual(goodBoolean, true);
|
|
236
|
+
const goodString = validateBySchema('string', { type });
|
|
237
|
+
assert.strictEqual(goodString, 'string');
|
|
238
|
+
const goodNumber = validateBySchema(1.23, { type });
|
|
239
|
+
assert.strictEqual(goodNumber, 1.23);
|
|
240
|
+
});
|
|
241
|
+
it('bad input -> returns default if default valid', () => {
|
|
242
|
+
const stringDefault = 'default';
|
|
243
|
+
const booleanDefault = true;
|
|
244
|
+
const numberDefault = 100;
|
|
245
|
+
assert.strictEqual(validateBySchema([], { type, default: stringDefault }), stringDefault);
|
|
246
|
+
assert.strictEqual(validateBySchema([], { type, default: booleanDefault }), booleanDefault);
|
|
247
|
+
assert.strictEqual(validateBySchema([], { type, default: numberDefault }), numberDefault);
|
|
248
|
+
});
|
|
249
|
+
it("bad input -> returns first validator's result if no default or bad default", () => {
|
|
250
|
+
assert.strictEqual(validateBySchema([], { type }), false);
|
|
251
|
+
assert.strictEqual(validateBySchema([], { type, default: {} }), false);
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
describe('should validate anyOfs', () => {
|
|
255
|
+
const schema: PreferenceItem = { anyOf: [{ type: 'number', minimum: 1 }, { type: 'array', items: { type: 'string' } }], default: 5 };
|
|
256
|
+
it('good input -> returns same value', () => {
|
|
257
|
+
assert.strictEqual(validateBySchema(3, schema), 3);
|
|
258
|
+
const goodArray = ['a string', 'here too'];
|
|
259
|
+
assert.strictEqual(validateBySchema(goodArray, schema), goodArray);
|
|
260
|
+
});
|
|
261
|
+
it('bad input -> returns default if present and valid', () => {
|
|
262
|
+
assert.strictEqual(validateBySchema({}, schema), 5);
|
|
263
|
+
});
|
|
264
|
+
it('bad input -> first validator, if default absent or default ill-formed', () => {
|
|
265
|
+
assert.strictEqual(validateBySchema({}, { ...schema, default: 0 }), 1);
|
|
266
|
+
assert.strictEqual(validateBySchema({}, { ...schema, default: undefined }), 1);
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
describe('should validate oneOfs', () => {
|
|
270
|
+
// Between 4 and 6 should be rejected
|
|
271
|
+
const schema: PreferenceItem = { oneOf: [{ type: 'number', minimum: 1, maximum: 6 }, { type: 'number', minimum: 4, maximum: 10 }], default: 8 };
|
|
272
|
+
it('good input -> returns same value', () => {
|
|
273
|
+
assert.strictEqual(validateBySchema(2, schema), 2);
|
|
274
|
+
assert.strictEqual(validateBySchema(7, schema), 7);
|
|
275
|
+
});
|
|
276
|
+
it('bad input -> returns default if present and valid', () => {
|
|
277
|
+
assert.strictEqual(validateBySchema(5, schema), 8);
|
|
278
|
+
});
|
|
279
|
+
it('bad input -> returns value if default absent or invalid.', () => {
|
|
280
|
+
assert.strictEqual(validateBySchema(5, { ...schema, default: undefined }), 5);
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
describe('should validate consts', () => {
|
|
284
|
+
const schema: PreferenceItem = { const: { 'the only': 'possible value' }, default: 'ignore-the-default' };
|
|
285
|
+
const goodValue = { 'the only': 'possible value' };
|
|
286
|
+
it('good input -> returns same value', () => {
|
|
287
|
+
assert.strictEqual(validateBySchema(goodValue, schema), goodValue);
|
|
288
|
+
});
|
|
289
|
+
it('bad input -> returns the const value for any other value', () => {
|
|
290
|
+
assert.deepStrictEqual(validateBySchema('literally anything else', schema), goodValue);
|
|
291
|
+
assert.deepStrictEqual(validateBySchema('ignore-the-default', schema), goodValue);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
describe('should maintain triple equality for valid object types', () => {
|
|
295
|
+
const arraySchema: PreferenceItem = { type: 'array', items: { type: 'string' } };
|
|
296
|
+
it('maintains triple equality for arrays', () => {
|
|
297
|
+
const input = ['one-string', 'two-string'];
|
|
298
|
+
assert(validateBySchema(input, arraySchema) === input);
|
|
299
|
+
});
|
|
300
|
+
it('does not maintain triple equality if the array is only partially correct', () => {
|
|
301
|
+
const input = ['one-string', 'two-string', 3];
|
|
302
|
+
assert.notStrictEqual(validateBySchema(input, arraySchema), input);
|
|
303
|
+
});
|
|
304
|
+
it('maintains triple equality for objects', () => {
|
|
305
|
+
const schema: PreferenceItem = {
|
|
306
|
+
'type': 'object',
|
|
307
|
+
properties: {
|
|
308
|
+
primitive: { type: 'string' },
|
|
309
|
+
complex: { type: 'object', properties: { nested: { type: 'number' } } }
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
const input = { primitive: 'is a string', complex: { nested: 3 } };
|
|
313
|
+
assert(validateBySchema(input, schema) === input);
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
it('should return the value if any error occurs', () => {
|
|
317
|
+
let wasCalled = false;
|
|
318
|
+
const originalValidator = validator['validateString'];
|
|
319
|
+
validator['validateString'] = () => {
|
|
320
|
+
wasCalled = true;
|
|
321
|
+
throw new Error('Only a test!');
|
|
322
|
+
};
|
|
323
|
+
const input = { shouldBeValid: false };
|
|
324
|
+
const output = validateBySchema(input, { type: 'string' });
|
|
325
|
+
assert(wasCalled);
|
|
326
|
+
assert(input === output);
|
|
327
|
+
validator['validateString'] = originalValidator;
|
|
328
|
+
});
|
|
329
|
+
it('should return the same object if no validation possible', () => {
|
|
330
|
+
for (const input of ['whatever', { valid: 'hard to say' }, 234, ["no one knows if I'm not", 'so I am']]) {
|
|
331
|
+
assert(validateBySchema(input, {}) === input);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
});
|