@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.
Files changed (689) hide show
  1. package/README.md +7 -7
  2. package/i18n/nls.cs.json +582 -552
  3. package/i18n/nls.de.json +582 -552
  4. package/i18n/nls.es.json +582 -552
  5. package/i18n/nls.fr.json +582 -552
  6. package/i18n/nls.hu.json +582 -552
  7. package/i18n/nls.it.json +582 -552
  8. package/i18n/nls.ja.json +582 -552
  9. package/i18n/nls.json +582 -552
  10. package/i18n/nls.ko.json +582 -0
  11. package/i18n/nls.pl.json +582 -552
  12. package/i18n/nls.pt-br.json +582 -552
  13. package/i18n/nls.ru.json +582 -552
  14. package/i18n/nls.tr.json +582 -0
  15. package/i18n/nls.zh-cn.json +582 -552
  16. package/i18n/nls.zh-tw.json +582 -0
  17. package/lib/browser/authentication-service.d.ts +15 -14
  18. package/lib/browser/authentication-service.d.ts.map +1 -1
  19. package/lib/browser/authentication-service.js +5 -5
  20. package/lib/browser/authentication-service.js.map +1 -1
  21. package/lib/browser/catalog.json +6889 -0
  22. package/lib/browser/common-frontend-contribution.js +3 -3
  23. package/lib/browser/common-styling-participants.js +166 -166
  24. package/lib/browser/context-key-service.d.ts +3 -2
  25. package/lib/browser/context-key-service.d.ts.map +1 -1
  26. package/lib/browser/context-key-service.js.map +1 -1
  27. package/lib/browser/core-preferences.d.ts.map +1 -1
  28. package/lib/browser/core-preferences.js +9 -0
  29. package/lib/browser/core-preferences.js.map +1 -1
  30. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  31. package/lib/browser/frontend-application-module.js.map +1 -1
  32. package/lib/browser/json-schema-store.d.ts +0 -3
  33. package/lib/browser/json-schema-store.d.ts.map +1 -1
  34. package/lib/browser/json-schema-store.js +2 -12
  35. package/lib/browser/json-schema-store.js.map +1 -1
  36. package/lib/browser/open-with-service.d.ts +13 -1
  37. package/lib/browser/open-with-service.d.ts.map +1 -1
  38. package/lib/browser/open-with-service.js +48 -9
  39. package/lib/browser/open-with-service.js.map +1 -1
  40. package/lib/browser/opener-service.d.ts +8 -0
  41. package/lib/browser/opener-service.d.ts.map +1 -1
  42. package/lib/browser/opener-service.js +18 -3
  43. package/lib/browser/opener-service.js.map +1 -1
  44. package/lib/browser/progress-location-service.spec.js +7 -7
  45. package/lib/browser/saveable-service.d.ts.map +1 -1
  46. package/lib/browser/saveable-service.js +6 -2
  47. package/lib/browser/saveable-service.js.map +1 -1
  48. package/lib/browser/saveable.d.ts +17 -1
  49. package/lib/browser/saveable.d.ts.map +1 -1
  50. package/lib/browser/saveable.js +62 -1
  51. package/lib/browser/saveable.js.map +1 -1
  52. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +5 -4
  53. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
  54. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +2 -1
  55. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  56. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +6 -16
  57. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  58. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +12 -29
  59. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  60. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +43 -78
  61. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
  62. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +8 -39
  63. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
  64. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +10 -10
  65. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
  66. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +43 -32
  67. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  68. package/lib/browser/storage-service.js +3 -3
  69. package/lib/browser/tree/tree.spec.js +75 -75
  70. package/lib/browser/view-container.d.ts +2 -2
  71. package/lib/browser/view-container.d.ts.map +1 -1
  72. package/lib/browser/view-container.js.map +1 -1
  73. package/lib/browser/widget-open-handler.d.ts +4 -1
  74. package/lib/browser/widget-open-handler.d.ts.map +1 -1
  75. package/lib/browser/widget-open-handler.js.map +1 -1
  76. package/lib/browser/widgets/extractable-widget.js +1 -1
  77. package/lib/browser/widgets/extractable-widget.js.map +1 -1
  78. package/lib/browser/widgets/index.d.ts +1 -0
  79. package/lib/browser/widgets/index.d.ts.map +1 -1
  80. package/lib/browser/widgets/index.js +1 -0
  81. package/lib/browser/widgets/index.js.map +1 -1
  82. package/lib/browser/widgets/split-widget.d.ts +45 -0
  83. package/lib/browser/widgets/split-widget.d.ts.map +1 -0
  84. package/lib/browser/widgets/split-widget.js +126 -0
  85. package/lib/browser/widgets/split-widget.js.map +1 -0
  86. package/lib/common/event.d.ts +2 -0
  87. package/lib/common/event.d.ts.map +1 -1
  88. package/lib/common/event.js +4 -0
  89. package/lib/common/event.js.map +1 -1
  90. package/lib/common/glob.d.ts +4 -4
  91. package/lib/common/json-schema.d.ts +2 -0
  92. package/lib/common/json-schema.d.ts.map +1 -1
  93. package/lib/common/menu/menu-types.d.ts.map +1 -1
  94. package/lib/common/menu/menu-types.js.map +1 -1
  95. package/lib/electron-browser/electron-uri-handler.d.ts +6 -0
  96. package/lib/electron-browser/electron-uri-handler.d.ts.map +1 -0
  97. package/lib/electron-browser/electron-uri-handler.js +49 -0
  98. package/lib/electron-browser/electron-uri-handler.js.map +1 -0
  99. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -1
  100. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  101. package/lib/electron-browser/menu/electron-main-menu-factory.js +6 -6
  102. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  103. package/lib/electron-browser/preload.d.ts.map +1 -1
  104. package/lib/electron-browser/preload.js +12 -0
  105. package/lib/electron-browser/preload.js.map +1 -1
  106. package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
  107. package/lib/electron-browser/window/electron-window-module.js +3 -0
  108. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  109. package/lib/electron-browser/window/external-app-open-handler.js +1 -1
  110. package/lib/electron-browser/window/external-app-open-handler.js.map +1 -1
  111. package/lib/electron-common/electron-api.d.ts +2 -0
  112. package/lib/electron-common/electron-api.d.ts.map +1 -1
  113. package/lib/electron-common/electron-api.js +2 -1
  114. package/lib/electron-common/electron-api.js.map +1 -1
  115. package/lib/electron-main/electron-api-main.d.ts +2 -0
  116. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  117. package/lib/electron-main/electron-api-main.js +27 -3
  118. package/lib/electron-main/electron-api-main.js.map +1 -1
  119. package/lib/electron-main/electron-main-application.d.ts +5 -3
  120. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  121. package/lib/electron-main/electron-main-application.js +57 -14
  122. package/lib/electron-main/electron-main-application.js.map +1 -1
  123. package/lib/electron-main/theia-electron-window.d.ts +1 -0
  124. package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
  125. package/lib/electron-main/theia-electron-window.js +3 -0
  126. package/lib/electron-main/theia-electron-window.js.map +1 -1
  127. package/lib/node/i18n/theia-localization-contribution.d.ts.map +1 -1
  128. package/lib/node/i18n/theia-localization-contribution.js +12 -8
  129. package/lib/node/i18n/theia-localization-contribution.js.map +1 -1
  130. package/lib/node/process-utils.spec.js +8 -8
  131. package/package.json +10 -8
  132. package/shared/ajv/index.d.ts +2 -2
  133. package/shared/markdown-it.d.ts +2 -2
  134. package/shared/markdown-it.js +1 -1
  135. package/shared/reflect-metadata/index.d.ts +1 -1
  136. package/shared/reflect-metadata/index.js +1 -1
  137. package/shared/vscode-languageserver-types/index.d.ts +1 -1
  138. package/src/browser/about-dialog.tsx +137 -137
  139. package/src/browser/authentication-service.ts +467 -468
  140. package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -101
  141. package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -41
  142. package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -79
  143. package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +185 -185
  144. package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -108
  145. package/src/browser/breadcrumbs/index.ts +21 -21
  146. package/src/browser/browser-clipboard-service.ts +122 -122
  147. package/src/browser/browser.ts +239 -239
  148. package/src/browser/clipboard-service.ts +23 -23
  149. package/src/browser/color-application-contribution.ts +110 -110
  150. package/src/browser/color-registry.ts +60 -60
  151. package/src/browser/command-open-handler.ts +54 -54
  152. package/src/browser/common-frontend-contribution.ts +2680 -2680
  153. package/src/browser/common-styling-participants.ts +361 -361
  154. package/src/browser/connection-status-service.spec.ts +200 -200
  155. package/src/browser/connection-status-service.ts +216 -216
  156. package/src/browser/context-key-service.ts +142 -142
  157. package/src/browser/context-menu-renderer.ts +124 -124
  158. package/src/browser/core-preferences.ts +343 -334
  159. package/src/browser/credentials-service.ts +106 -106
  160. package/src/browser/decoration-style.ts +65 -65
  161. package/src/browser/decorations-service.ts +209 -209
  162. package/src/browser/dialogs/react-dialog.tsx +56 -56
  163. package/src/browser/dialogs.ts +534 -534
  164. package/src/browser/diff-uris.ts +117 -117
  165. package/src/browser/encoding-registry.ts +97 -97
  166. package/src/browser/endpoint.spec.ts +148 -148
  167. package/src/browser/endpoint.ts +136 -136
  168. package/src/browser/external-uri-service.ts +79 -79
  169. package/src/browser/file-icons-js.d.ts +20 -20
  170. package/src/browser/frontend-application-bindings.ts +62 -62
  171. package/src/browser/frontend-application-config-provider.spec.ts +45 -45
  172. package/src/browser/frontend-application-config-provider.ts +50 -50
  173. package/src/browser/frontend-application-contribution.ts +110 -110
  174. package/src/browser/frontend-application-module.ts +474 -475
  175. package/src/browser/frontend-application-state.ts +74 -74
  176. package/src/browser/frontend-application.ts +326 -326
  177. package/src/browser/hover-service.ts +218 -218
  178. package/src/browser/http-open-handler.ts +49 -49
  179. package/src/browser/i18n/i18n-frontend-module.ts +27 -27
  180. package/src/browser/i18n/language-quick-pick-service.ts +130 -130
  181. package/src/browser/icon-registry.ts +87 -87
  182. package/src/browser/icon-theme-contribution.ts +64 -64
  183. package/src/browser/icon-theme-service.ts +217 -217
  184. package/src/browser/icons/CollapseAll.svg +7 -7
  185. package/src/browser/icons/CollapseAll_inverse.svg +7 -7
  186. package/src/browser/icons/Refresh.svg +7 -7
  187. package/src/browser/icons/Refresh_inverse.svg +7 -7
  188. package/src/browser/icons/add-inverse.svg +4 -4
  189. package/src/browser/icons/add.svg +4 -4
  190. package/src/browser/icons/arrow-down-bright.svg +6 -6
  191. package/src/browser/icons/arrow-down-dark.svg +6 -6
  192. package/src/browser/icons/arrow-up-bright.svg +6 -6
  193. package/src/browser/icons/arrow-up-dark.svg +6 -6
  194. package/src/browser/icons/case-sensitive-dark.svg +16 -16
  195. package/src/browser/icons/case-sensitive.svg +16 -16
  196. package/src/browser/icons/chevron-right-dark.svg +5 -5
  197. package/src/browser/icons/chevron-right-light.svg +6 -6
  198. package/src/browser/icons/circle-bright.svg +7 -7
  199. package/src/browser/icons/circle-dark.svg +7 -7
  200. package/src/browser/icons/clear-search-results-dark.svg +7 -7
  201. package/src/browser/icons/clear-search-results.svg +7 -7
  202. package/src/browser/icons/close-all-bright.svg +7 -7
  203. package/src/browser/icons/close-all-dark.svg +7 -7
  204. package/src/browser/icons/close-bright.svg +7 -7
  205. package/src/browser/icons/close-dark.svg +7 -7
  206. package/src/browser/icons/collapse.svg +4 -4
  207. package/src/browser/icons/edit-json-dark.svg +6 -6
  208. package/src/browser/icons/edit-json.svg +6 -6
  209. package/src/browser/icons/expand.svg +4 -4
  210. package/src/browser/icons/loading-dark.svg +6 -6
  211. package/src/browser/icons/loading-light.svg +6 -6
  212. package/src/browser/icons/open-change-bright.svg +3 -3
  213. package/src/browser/icons/open-change-dark.svg +4 -4
  214. package/src/browser/icons/open-file-bright.svg +4 -4
  215. package/src/browser/icons/open-file-dark.svg +4 -4
  216. package/src/browser/icons/preview-bright.svg +3 -3
  217. package/src/browser/icons/preview-dark.svg +3 -3
  218. package/src/browser/icons/regex-dark.svg +10 -10
  219. package/src/browser/icons/regex.svg +10 -10
  220. package/src/browser/icons/remove-all-inverse.svg +4 -4
  221. package/src/browser/icons/remove-all.svg +4 -4
  222. package/src/browser/icons/replace-all-inverse.svg +13 -13
  223. package/src/browser/icons/replace-all.svg +13 -13
  224. package/src/browser/icons/replace-inverse.svg +15 -15
  225. package/src/browser/icons/replace.svg +15 -15
  226. package/src/browser/icons/whole-word-dark.svg +19 -19
  227. package/src/browser/icons/whole-word.svg +19 -19
  228. package/src/browser/index.ts +50 -50
  229. package/src/browser/json-schema-store.ts +118 -127
  230. package/src/browser/keybinding.spec.ts +554 -554
  231. package/src/browser/keybinding.ts +759 -759
  232. package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +108 -108
  233. package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +171 -171
  234. package/src/browser/keyboard/browser-keyboard-layout-provider.ts +469 -469
  235. package/src/browser/keyboard/browser-keyboard-module.ts +30 -30
  236. package/src/browser/keyboard/index.ts +20 -20
  237. package/src/browser/keyboard/keyboard-layout-service.spec.ts +121 -121
  238. package/src/browser/keyboard/keyboard-layout-service.ts +455 -455
  239. package/src/browser/keyboard/keys.spec.ts +258 -258
  240. package/src/browser/keyboard/keys.ts +20 -20
  241. package/src/browser/keys.ts +21 -21
  242. package/src/browser/label-parser.spec.ts +165 -165
  243. package/src/browser/label-parser.ts +108 -108
  244. package/src/browser/label-provider.spec.ts +62 -62
  245. package/src/browser/label-provider.ts +385 -385
  246. package/src/browser/language-icon-provider.ts +55 -55
  247. package/src/browser/language-service.ts +77 -77
  248. package/src/browser/logger-frontend-module.ts +65 -65
  249. package/src/browser/markdown-rendering/markdown-renderer.ts +98 -98
  250. package/src/browser/menu/browser-context-menu-renderer.ts +48 -48
  251. package/src/browser/menu/browser-menu-module.ts +28 -28
  252. package/src/browser/menu/browser-menu-plugin.ts +491 -491
  253. package/src/browser/menu/context-menu-context.ts +41 -41
  254. package/src/browser/messaging/connection-source.ts +26 -26
  255. package/src/browser/messaging/frontend-id-provider.ts +37 -37
  256. package/src/browser/messaging/index.ts +18 -18
  257. package/src/browser/messaging/messaging-frontend-module.ts +41 -41
  258. package/src/browser/messaging/service-connection-provider.ts +140 -140
  259. package/src/browser/messaging/ws-connection-provider.ts +49 -49
  260. package/src/browser/messaging/ws-connection-source.ts +230 -230
  261. package/src/browser/mime-service.ts +30 -30
  262. package/src/browser/navigatable-types.ts +81 -81
  263. package/src/browser/navigatable.ts +39 -39
  264. package/src/browser/open-with-service.ts +140 -93
  265. package/src/browser/opener-service.spec.ts +49 -49
  266. package/src/browser/opener-service.ts +169 -146
  267. package/src/browser/performance/frontend-stopwatch.ts +65 -65
  268. package/src/browser/performance/index.ts +18 -18
  269. package/src/browser/performance/measurement-frontend-bindings.ts +31 -31
  270. package/src/browser/preferences/index.ts +23 -23
  271. package/src/browser/preferences/injectable-preference-proxy.ts +283 -283
  272. package/src/browser/preferences/preference-configurations.ts +82 -82
  273. package/src/browser/preferences/preference-contribution.ts +436 -436
  274. package/src/browser/preferences/preference-language-override-service.ts +111 -111
  275. package/src/browser/preferences/preference-provider.spec.ts +36 -36
  276. package/src/browser/preferences/preference-provider.ts +277 -277
  277. package/src/browser/preferences/preference-proxy.spec.ts +367 -367
  278. package/src/browser/preferences/preference-proxy.ts +367 -367
  279. package/src/browser/preferences/preference-schema-provider.spec.ts +130 -130
  280. package/src/browser/preferences/preference-scope.ts +18 -18
  281. package/src/browser/preferences/preference-service.spec.ts +613 -613
  282. package/src/browser/preferences/preference-service.ts +594 -594
  283. package/src/browser/preferences/preference-validation-service.spec.ts +334 -334
  284. package/src/browser/preferences/preference-validation-service.ts +358 -358
  285. package/src/browser/preferences/test/index.ts +19 -19
  286. package/src/browser/preferences/test/mock-preference-provider.ts +50 -50
  287. package/src/browser/preferences/test/mock-preference-proxy.ts +48 -48
  288. package/src/browser/preferences/test/mock-preference-service.ts +63 -63
  289. package/src/browser/preload/i18n-preload-contribution.ts +50 -50
  290. package/src/browser/preload/os-preload-contribution.ts +37 -37
  291. package/src/browser/preload/preload-module.ts +45 -45
  292. package/src/browser/preload/preloader.ts +37 -37
  293. package/src/browser/preload/theme-preload-contribution.ts +31 -31
  294. package/src/browser/progress-bar-factory.ts +29 -29
  295. package/src/browser/progress-bar.ts +76 -76
  296. package/src/browser/progress-client.ts +53 -53
  297. package/src/browser/progress-location-service.spec.ts +50 -50
  298. package/src/browser/progress-location-service.ts +96 -96
  299. package/src/browser/progress-status-bar-item.ts +83 -83
  300. package/src/browser/quick-input/index.ts +23 -23
  301. package/src/browser/quick-input/quick-access.ts +75 -75
  302. package/src/browser/quick-input/quick-command-frontend-contribution.ts +89 -89
  303. package/src/browser/quick-input/quick-command-service.ts +246 -246
  304. package/src/browser/quick-input/quick-help-service.ts +87 -87
  305. package/src/browser/quick-input/quick-input-frontend-contribution.ts +33 -33
  306. package/src/browser/quick-input/quick-input-service.spec.ts +176 -176
  307. package/src/browser/quick-input/quick-input-service.ts +17 -17
  308. package/src/browser/quick-input/quick-pick-service-impl.ts +69 -69
  309. package/src/browser/quick-input/quick-view-service.ts +83 -83
  310. package/src/browser/request/browser-request-module.ts +23 -23
  311. package/src/browser/request/browser-request-service.ts +172 -172
  312. package/src/browser/resource-context-key.ts +77 -77
  313. package/src/browser/saveable-service.ts +332 -328
  314. package/src/browser/saveable.ts +395 -327
  315. package/src/browser/secondary-window-handler.ts +211 -211
  316. package/src/browser/shell/additional-views-menu-widget.tsx +71 -71
  317. package/src/browser/shell/application-shell-mouse-tracker.ts +103 -103
  318. package/src/browser/shell/application-shell.ts +2271 -2271
  319. package/src/browser/shell/current-widget-command-adapter.ts +57 -57
  320. package/src/browser/shell/index.ts +23 -23
  321. package/src/browser/shell/shell-layout-restorer.ts +399 -399
  322. package/src/browser/shell/side-panel-handler.ts +794 -794
  323. package/src/browser/shell/side-panel-toolbar.ts +111 -111
  324. package/src/browser/shell/sidebar-bottom-menu-widget.tsx +39 -39
  325. package/src/browser/shell/sidebar-menu-widget.tsx +183 -183
  326. package/src/browser/shell/sidebar-top-menu-widget.tsx +26 -26
  327. package/src/browser/shell/split-panels.ts +191 -191
  328. package/src/browser/shell/tab-bar-decorator.ts +106 -106
  329. package/src/browser/shell/tab-bar-toolbar/index.ts +19 -19
  330. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +31 -31
  331. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +242 -256
  332. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +149 -207
  333. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +62 -62
  334. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +443 -428
  335. package/src/browser/shell/tab-bars.spec.ts +63 -63
  336. package/src/browser/shell/tab-bars.ts +1468 -1468
  337. package/src/browser/shell/theia-dock-panel.ts +265 -265
  338. package/src/browser/shell/view-column-service.ts +125 -125
  339. package/src/browser/shell/view-contribution.ts +178 -178
  340. package/src/browser/source-tree/index.ts +19 -19
  341. package/src/browser/source-tree/source-tree-widget.tsx +107 -107
  342. package/src/browser/source-tree/source-tree.ts +146 -146
  343. package/src/browser/source-tree/tree-source.ts +73 -73
  344. package/src/browser/status-bar/index.ts +29 -29
  345. package/src/browser/status-bar/status-bar-types.ts +97 -97
  346. package/src/browser/status-bar/status-bar-view-model.ts +209 -209
  347. package/src/browser/status-bar/status-bar.tsx +189 -189
  348. package/src/browser/storage-service.spec.ts +76 -76
  349. package/src/browser/storage-service.ts +129 -129
  350. package/src/browser/style/about.css +36 -36
  351. package/src/browser/style/alert-messages.css +62 -62
  352. package/src/browser/style/ansi.css +88 -88
  353. package/src/browser/style/breadcrumbs.css +130 -130
  354. package/src/browser/style/dialog.css +126 -126
  355. package/src/browser/style/dockpanel.css +76 -76
  356. package/src/browser/style/hover-service.css +101 -101
  357. package/src/browser/style/icons.css +61 -61
  358. package/src/browser/style/index.css +353 -351
  359. package/src/browser/style/materialcolors.css +278 -278
  360. package/src/browser/style/menus.css +230 -230
  361. package/src/browser/style/notification.css +39 -39
  362. package/src/browser/style/os.css +87 -87
  363. package/src/browser/style/progress-bar.css +43 -43
  364. package/src/browser/style/quick-title-bar.css +45 -45
  365. package/src/browser/style/scrollbars.css +172 -172
  366. package/src/browser/style/search-box.css +123 -123
  367. package/src/browser/style/select-component.css +107 -107
  368. package/src/browser/style/sidepanel.css +367 -367
  369. package/src/browser/style/split-widget.css +38 -0
  370. package/src/browser/style/status-bar.css +127 -127
  371. package/src/browser/style/tabs.css +647 -658
  372. package/src/browser/style/tooltip.css +28 -28
  373. package/src/browser/style/tree-decorators.css +81 -81
  374. package/src/browser/style/tree.css +232 -232
  375. package/src/browser/style/view-container.css +187 -194
  376. package/src/browser/style/widget.css +19 -19
  377. package/src/browser/styling-service.ts +96 -96
  378. package/src/browser/supported-encodings.ts +262 -262
  379. package/src/browser/test/jsdom.ts +69 -69
  380. package/src/browser/test/mock-connection-status-service.ts +33 -33
  381. package/src/browser/test/mock-env-variables-server.ts +47 -47
  382. package/src/browser/test/mock-opener-service.ts +34 -34
  383. package/src/browser/test/mock-storage-service.ts +49 -49
  384. package/src/browser/theming.ts +206 -206
  385. package/src/browser/tooltip-service.tsx +96 -96
  386. package/src/browser/tree/fuzzy-search.spec.ts +99 -99
  387. package/src/browser/tree/fuzzy-search.ts +136 -136
  388. package/src/browser/tree/index.ts +29 -29
  389. package/src/browser/tree/search-box-debounce.ts +96 -96
  390. package/src/browser/tree/search-box.ts +355 -355
  391. package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -109
  392. package/src/browser/tree/test/mock-tree-model.ts +136 -136
  393. package/src/browser/tree/test/tree-test-container.ts +50 -50
  394. package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -46
  395. package/src/browser/tree/tree-compression/compressed-tree-model.ts +88 -88
  396. package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +203 -203
  397. package/src/browser/tree/tree-compression/index.ts +20 -20
  398. package/src/browser/tree/tree-compression/tree-compression-service.ts +125 -125
  399. package/src/browser/tree/tree-compression/tree-compression.css +28 -28
  400. package/src/browser/tree/tree-consistency.spec.ts +105 -105
  401. package/src/browser/tree/tree-container.spec.ts +45 -45
  402. package/src/browser/tree/tree-container.ts +155 -155
  403. package/src/browser/tree/tree-decorator.spec.ts +162 -162
  404. package/src/browser/tree/tree-decorator.ts +238 -238
  405. package/src/browser/tree/tree-expansion.spec.ts +173 -173
  406. package/src/browser/tree/tree-expansion.ts +165 -165
  407. package/src/browser/tree/tree-focus-service.ts +55 -55
  408. package/src/browser/tree/tree-iterator.spec.ts +170 -170
  409. package/src/browser/tree/tree-iterator.ts +256 -256
  410. package/src/browser/tree/tree-label-provider.ts +40 -40
  411. package/src/browser/tree/tree-model.ts +562 -562
  412. package/src/browser/tree/tree-navigation.ts +58 -58
  413. package/src/browser/tree/tree-preference.ts +50 -50
  414. package/src/browser/tree/tree-search.ts +128 -128
  415. package/src/browser/tree/tree-selectable.spec.ts +152 -152
  416. package/src/browser/tree/tree-selection-impl.ts +176 -176
  417. package/src/browser/tree/tree-selection-state.spec.ts +462 -462
  418. package/src/browser/tree/tree-selection-state.ts +245 -245
  419. package/src/browser/tree/tree-selection.ts +159 -159
  420. package/src/browser/tree/tree-view-welcome-widget.tsx +263 -263
  421. package/src/browser/tree/tree-widget-selection.ts +45 -45
  422. package/src/browser/tree/tree-widget.tsx +1591 -1591
  423. package/src/browser/tree/tree.spec.ts +241 -241
  424. package/src/browser/tree/tree.ts +425 -425
  425. package/src/browser/undo-redo-handler.ts +85 -85
  426. package/src/browser/user-working-directory-provider.ts +77 -77
  427. package/src/browser/view-container.ts +1640 -1640
  428. package/src/browser/widget-decoration.ts +358 -358
  429. package/src/browser/widget-manager.spec.ts +102 -102
  430. package/src/browser/widget-manager.ts +318 -318
  431. package/src/browser/widget-open-handler.ts +168 -165
  432. package/src/browser/widgets/alert-message.tsx +56 -56
  433. package/src/browser/widgets/enhanced-preview-widget.ts +27 -27
  434. package/src/browser/widgets/extractable-widget.ts +33 -33
  435. package/src/browser/widgets/index.ts +21 -20
  436. package/src/browser/widgets/previewable-widget.ts +31 -31
  437. package/src/browser/widgets/react-renderer.tsx +53 -53
  438. package/src/browser/widgets/react-widget.tsx +51 -51
  439. package/src/browser/widgets/select-component.tsx +367 -367
  440. package/src/browser/widgets/split-widget.ts +163 -0
  441. package/src/browser/widgets/widget.ts +406 -406
  442. package/src/browser/window/browser-window-module.ts +32 -32
  443. package/src/browser/window/default-secondary-window-service.ts +189 -189
  444. package/src/browser/window/default-window-service.spec.ts +78 -78
  445. package/src/browser/window/default-window-service.ts +171 -171
  446. package/src/browser/window/secondary-window-service.ts +39 -39
  447. package/src/browser/window/test/mock-window-service.ts +29 -29
  448. package/src/browser/window/window-service.ts +78 -78
  449. package/src/browser/window/window-title-service.ts +107 -107
  450. package/src/browser/window/window-title-updater.ts +95 -95
  451. package/src/browser/window-contribution.ts +64 -64
  452. package/src/browser-only/frontend-only-application-module.ts +116 -116
  453. package/src/browser-only/i18n/i18n-frontend-only-module.ts +37 -37
  454. package/src/browser-only/logger-frontend-only-module.ts +63 -63
  455. package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +39 -39
  456. package/src/browser-only/messaging/messaging-frontend-only-module.ts +42 -42
  457. package/src/browser-only/preload/frontend-only-preload-module.ts +49 -49
  458. package/src/common/accessibility.ts +33 -33
  459. package/src/common/application-error.spec.ts +27 -27
  460. package/src/common/application-error.ts +76 -76
  461. package/src/common/application-protocol.ts +42 -42
  462. package/src/common/array-utils.ts +129 -129
  463. package/src/common/buffer.ts +228 -228
  464. package/src/common/cancellation.ts +163 -163
  465. package/src/common/char-code.ts +438 -438
  466. package/src/common/collections.ts +125 -125
  467. package/src/common/color.ts +103 -103
  468. package/src/common/command.spec.ts +208 -208
  469. package/src/common/command.ts +489 -489
  470. package/src/common/contribution-filter/contribution-filter-registry.ts +79 -79
  471. package/src/common/contribution-filter/contribution-filter.ts +64 -64
  472. package/src/common/contribution-filter/filter.ts +23 -23
  473. package/src/common/contribution-filter/index.ts +19 -19
  474. package/src/common/contribution-provider.ts +96 -96
  475. package/src/common/disposable.spec.ts +94 -94
  476. package/src/common/disposable.ts +188 -188
  477. package/src/common/encoding-service.ts +380 -380
  478. package/src/common/encodings.ts +24 -24
  479. package/src/common/env-variables/env-variables-protocol.ts +38 -38
  480. package/src/common/env-variables/index.ts +17 -17
  481. package/src/common/event.spec.ts +32 -32
  482. package/src/common/event.ts +493 -487
  483. package/src/common/file-uri.ts +61 -61
  484. package/src/common/frontend-application-state.ts +38 -38
  485. package/src/common/glob.ts +741 -741
  486. package/src/common/hash.ts +85 -85
  487. package/src/common/i18n/localization-server.ts +25 -25
  488. package/src/common/i18n/localization.ts +80 -80
  489. package/src/common/i18n/nls.metadata.json +34112 -34112
  490. package/src/common/index.ts +51 -51
  491. package/src/common/json-schema.ts +108 -106
  492. package/src/common/key-store.ts +26 -26
  493. package/src/common/keybinding.ts +152 -152
  494. package/src/common/keyboard/keyboard-layout-provider.ts +51 -51
  495. package/src/common/keys.ts +694 -694
  496. package/src/common/label-protocol.ts +35 -35
  497. package/src/common/logger-protocol.ts +119 -119
  498. package/src/common/logger-watcher.ts +48 -48
  499. package/src/common/logger.spec.ts +46 -46
  500. package/src/common/logger.ts +389 -389
  501. package/src/common/lsp-types.ts +34 -34
  502. package/src/common/markdown-rendering/icon-utilities.ts +30 -30
  503. package/src/common/markdown-rendering/index.ts +18 -18
  504. package/src/common/markdown-rendering/markdown-string.ts +152 -152
  505. package/src/common/menu/action-menu-node.ts +65 -65
  506. package/src/common/menu/composite-menu-node.spec.ts +67 -67
  507. package/src/common/menu/composite-menu-node.ts +114 -114
  508. package/src/common/menu/index.ts +21 -21
  509. package/src/common/menu/menu-adapter.ts +103 -103
  510. package/src/common/menu/menu-model-registry.ts +374 -374
  511. package/src/common/menu/menu-types.ts +220 -219
  512. package/src/common/menu/menu.spec.ts +101 -101
  513. package/src/common/message-rpc/channel.spec.ts +88 -88
  514. package/src/common/message-rpc/channel.ts +300 -300
  515. package/src/common/message-rpc/index.ts +22 -22
  516. package/src/common/message-rpc/message-buffer.ts +105 -105
  517. package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -70
  518. package/src/common/message-rpc/rpc-message-encoder.spec.ts +65 -65
  519. package/src/common/message-rpc/rpc-message-encoder.ts +190 -190
  520. package/src/common/message-rpc/rpc-protocol.ts +255 -255
  521. package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -41
  522. package/src/common/message-rpc/uint8-array-message-buffer.ts +213 -213
  523. package/src/common/message-service-protocol.ts +148 -148
  524. package/src/common/message-service.ts +226 -226
  525. package/src/common/messaging/connection-error-handler.ts +73 -73
  526. package/src/common/messaging/connection-management.ts +43 -43
  527. package/src/common/messaging/handler.ts +26 -26
  528. package/src/common/messaging/index.ts +19 -19
  529. package/src/common/messaging/proxy-factory.spec.ts +108 -108
  530. package/src/common/messaging/proxy-factory.ts +336 -336
  531. package/src/common/messaging/socket-write-buffer.ts +52 -52
  532. package/src/common/messaging/web-socket-channel.ts +76 -76
  533. package/src/common/nls.ts +151 -151
  534. package/src/common/numbers.ts +21 -21
  535. package/src/common/objects.spec.ts +112 -112
  536. package/src/common/objects.ts +123 -123
  537. package/src/common/os.ts +82 -82
  538. package/src/common/path.spec.ts +415 -415
  539. package/src/common/path.ts +334 -334
  540. package/src/common/paths.ts +250 -250
  541. package/src/common/performance/index.ts +19 -19
  542. package/src/common/performance/measurement-protocol.ts +104 -104
  543. package/src/common/performance/measurement.ts +130 -130
  544. package/src/common/performance/stopwatch.ts +183 -183
  545. package/src/common/preferences/preference-schema.ts +101 -101
  546. package/src/common/preferences/preference-scope.spec.ts +48 -48
  547. package/src/common/preferences/preference-scope.ts +68 -68
  548. package/src/common/prioritizeable.ts +58 -58
  549. package/src/common/progress-service-protocol.ts +35 -35
  550. package/src/common/progress-service.ts +82 -82
  551. package/src/common/promise-util.spec.ts +102 -102
  552. package/src/common/promise-util.ts +143 -143
  553. package/src/common/quick-pick-service.ts +353 -353
  554. package/src/common/reference.spec.ts +145 -145
  555. package/src/common/reference.ts +230 -230
  556. package/src/common/resource.ts +430 -430
  557. package/src/common/selection-command-handler.ts +101 -101
  558. package/src/common/selection-service.spec.ts +43 -43
  559. package/src/common/selection-service.ts +49 -49
  560. package/src/common/selection.ts +50 -50
  561. package/src/common/severity.ts +111 -111
  562. package/src/common/stream.ts +718 -718
  563. package/src/common/strings.ts +231 -231
  564. package/src/common/telemetry.ts +45 -45
  565. package/src/common/ternary-search-tree.ts +417 -417
  566. package/src/common/test/expect.ts +34 -34
  567. package/src/common/test/mock-logger.ts +118 -118
  568. package/src/common/test/mock-menu.ts +35 -35
  569. package/src/common/test/mock-resource-provider.ts +33 -33
  570. package/src/common/theme.ts +68 -68
  571. package/src/common/types.spec.ts +86 -86
  572. package/src/common/types.ts +140 -140
  573. package/src/common/uri-command-handler.spec.ts +90 -90
  574. package/src/common/uri-command-handler.ts +148 -148
  575. package/src/common/uri.spec.ts +278 -278
  576. package/src/common/uri.ts +279 -279
  577. package/src/common/uuid.ts +45 -45
  578. package/src/common/version.ts +17 -17
  579. package/src/common/view-column.ts +33 -33
  580. package/src/common/window.ts +34 -34
  581. package/src/electron-browser/electron-clipboard-service.ts +32 -32
  582. package/src/electron-browser/electron-uri-handler.ts +42 -0
  583. package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +39 -39
  584. package/src/electron-browser/keyboard/electron-keyboard-module.ts +28 -28
  585. package/src/electron-browser/menu/electron-context-menu-renderer.ts +122 -122
  586. package/src/electron-browser/menu/electron-main-menu-factory.ts +339 -338
  587. package/src/electron-browser/menu/electron-menu-contribution.ts +506 -506
  588. package/src/electron-browser/menu/electron-menu-module.ts +40 -40
  589. package/src/electron-browser/menu/electron-menu-style.css +110 -110
  590. package/src/electron-browser/messaging/electron-frontend-id-provider.ts +25 -25
  591. package/src/electron-browser/messaging/electron-ipc-connection-source.ts +65 -65
  592. package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +45 -45
  593. package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +78 -78
  594. package/src/electron-browser/messaging/electron-ws-connection-source.ts +38 -38
  595. package/src/electron-browser/preload.ts +264 -249
  596. package/src/electron-browser/request/electron-browser-request-module.ts +26 -26
  597. package/src/electron-browser/token/electron-token-frontend-module.ts +22 -22
  598. package/src/electron-browser/window/electron-frontend-application-state.ts +26 -26
  599. package/src/electron-browser/window/electron-secondary-window-service.ts +35 -35
  600. package/src/electron-browser/window/electron-window-module.ts +48 -45
  601. package/src/electron-browser/window/electron-window-preferences.ts +76 -76
  602. package/src/electron-browser/window/electron-window-service.ts +109 -109
  603. package/src/electron-browser/window/external-app-open-handler.ts +42 -42
  604. package/src/electron-common/electron-api.ts +157 -154
  605. package/src/electron-common/electron-main-window-service.ts +24 -24
  606. package/src/electron-common/electron-token.ts +27 -27
  607. package/src/electron-main/electron-api-main.ts +373 -347
  608. package/src/electron-main/electron-main-application-module.ts +65 -65
  609. package/src/electron-main/electron-main-application.ts +860 -818
  610. package/src/electron-main/electron-main-constants.ts +23 -23
  611. package/src/electron-main/electron-main-window-service-impl.ts +44 -44
  612. package/src/electron-main/electron-security-token-service.ts +36 -36
  613. package/src/electron-main/event-utils.ts +36 -36
  614. package/src/electron-main/messaging/electron-connection-handler.ts +21 -21
  615. package/src/electron-main/messaging/electron-messaging-contribution.ts +143 -143
  616. package/src/electron-main/messaging/electron-messaging-service.ts +35 -35
  617. package/src/electron-main/theia-electron-window.ts +219 -214
  618. package/src/electron-node/cli/electron-backend-cli-module.ts +24 -24
  619. package/src/electron-node/cli/electron-cli-contribution.ts +35 -35
  620. package/src/electron-node/hosting/electron-backend-hosting-module.ts +24 -24
  621. package/src/electron-node/hosting/electron-ws-origin-validator.ts +37 -37
  622. package/src/electron-node/keyboard/electron-backend-keyboard-module.ts +30 -30
  623. package/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +35 -35
  624. package/src/electron-node/request/electron-backend-request-module.ts +23 -23
  625. package/src/electron-node/request/electron-backend-request-service.ts +78 -78
  626. package/src/electron-node/token/electron-token-backend-contribution.ts +48 -48
  627. package/src/electron-node/token/electron-token-backend-module.ts +28 -28
  628. package/src/electron-node/token/electron-token-validator.ts +93 -93
  629. package/src/node/application-server.ts +59 -59
  630. package/src/node/backend-application-config-provider.spec.ts +29 -29
  631. package/src/node/backend-application-config-provider.ts +48 -48
  632. package/src/node/backend-application-module.ts +139 -139
  633. package/src/node/backend-application.ts +374 -374
  634. package/src/node/cli.spec.ts +94 -94
  635. package/src/node/cli.ts +63 -63
  636. package/src/node/console-logger-server.spec.ts +59 -59
  637. package/src/node/console-logger-server.ts +76 -76
  638. package/src/node/debug.ts +30 -30
  639. package/src/node/dynamic-require.ts +56 -56
  640. package/src/node/env-variables/env-variables-server.ts +123 -123
  641. package/src/node/env-variables/index.ts +17 -17
  642. package/src/node/environment-utils.spec.ts +92 -92
  643. package/src/node/environment-utils.ts +66 -66
  644. package/src/node/file-uri.spec.ts +76 -76
  645. package/src/node/filesystem-locking.ts +77 -77
  646. package/src/node/hosting/backend-application-hosts.ts +60 -60
  647. package/src/node/hosting/backend-hosting-module.ts +26 -26
  648. package/src/node/hosting/ws-origin-validator.ts +36 -36
  649. package/src/node/i18n/i18n-backend-module.ts +42 -42
  650. package/src/node/i18n/localization-contribution.ts +112 -112
  651. package/src/node/i18n/localization-provider.ts +125 -125
  652. package/src/node/i18n/localization-server.ts +52 -52
  653. package/src/node/i18n/theia-localization-contribution.ts +40 -36
  654. package/src/node/index.ts +22 -22
  655. package/src/node/key-store-server.ts +162 -162
  656. package/src/node/logger-backend-module.ts +88 -88
  657. package/src/node/logger-cli-contribution.spec.ts +245 -245
  658. package/src/node/logger-cli-contribution.ts +168 -168
  659. package/src/node/main.ts +33 -33
  660. package/src/node/messaging/binary-message-pipe.ts +168 -168
  661. package/src/node/messaging/connection-container-module.ts +96 -96
  662. package/src/node/messaging/default-messaging-service.ts +129 -129
  663. package/src/node/messaging/frontend-connection-service.ts +24 -24
  664. package/src/node/messaging/index.ts +19 -19
  665. package/src/node/messaging/ipc-bootstrap.ts +27 -27
  666. package/src/node/messaging/ipc-channel.ts +77 -77
  667. package/src/node/messaging/ipc-connection-provider.ts +107 -107
  668. package/src/node/messaging/ipc-protocol.ts +76 -76
  669. package/src/node/messaging/messaging-backend-module.ts +52 -52
  670. package/src/node/messaging/messaging-listeners.ts +52 -52
  671. package/src/node/messaging/messaging-service.ts +46 -46
  672. package/src/node/messaging/test/test-web-socket-channel.ts +61 -61
  673. package/src/node/messaging/websocket-endpoint.ts +79 -79
  674. package/src/node/messaging/websocket-frontend-connection-service.ts +186 -186
  675. package/src/node/os-backend-provider.ts +25 -25
  676. package/src/node/performance/index.ts +18 -18
  677. package/src/node/performance/measurement-backend-bindings.ts +35 -35
  678. package/src/node/performance/node-stopwatch.ts +40 -40
  679. package/src/node/process-utils.spec.ts +48 -48
  680. package/src/node/process-utils.ts +102 -102
  681. package/src/node/remote/backend-remote-service.ts +25 -25
  682. package/src/node/remote/remote-cli-contribution.ts +34 -34
  683. package/src/node/remote/remote-copy-contribution.ts +45 -45
  684. package/src/node/request/backend-request-facade.ts +39 -39
  685. package/src/node/request/backend-request-module.ts +25 -25
  686. package/src/node/request/proxy-cli-contribution.ts +65 -65
  687. package/src/node/ws-request-validators.ts +56 -56
  688. package/src/typings/native-keymap.d.ts +108 -108
  689. package/i18n/nls.pt-pt.json +0 -552
@@ -1,613 +1,613 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2018 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
- /* eslint-disable @typescript-eslint/no-explicit-any */
18
-
19
- import { enableJSDOM } from '../test/jsdom';
20
-
21
- let disableJSDOM = enableJSDOM();
22
-
23
- import * as assert from 'assert';
24
- import { Container } from 'inversify';
25
- import { bindPreferenceService } from '../frontend-application-bindings';
26
- import { bindMockPreferenceProviders, MockPreferenceProvider } from './test';
27
- import { PreferenceService, PreferenceServiceImpl, PreferenceChange, PreferenceChanges } from './preference-service';
28
- import { PreferenceSchemaProvider, PreferenceSchema } from './preference-contribution';
29
- import { PreferenceScope } from './preference-scope';
30
- import { PreferenceProvider } from './preference-provider';
31
- import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
32
- import { createPreferenceProxy, PreferenceChangeEvent } from './preference-proxy';
33
-
34
- disableJSDOM();
35
-
36
- process.on('unhandledRejection', (reason, promise) => {
37
- console.error(reason);
38
- throw reason;
39
- });
40
-
41
- const { expect } = require('chai');
42
- let testContainer: Container;
43
-
44
- function createTestContainer(): Container {
45
- const result = new Container();
46
- bindPreferenceService(result.bind.bind(result));
47
- bindMockPreferenceProviders(result.bind.bind(result), result.unbind.bind(result));
48
- return result;
49
- }
50
-
51
- describe('Preference Service', () => {
52
- let prefService: PreferenceServiceImpl;
53
- let prefSchema: PreferenceSchemaProvider;
54
-
55
- before(() => {
56
- disableJSDOM = enableJSDOM();
57
- FrontendApplicationConfigProvider.set({});
58
- });
59
-
60
- after(() => {
61
- disableJSDOM();
62
- });
63
-
64
- beforeEach(async () => {
65
- testContainer = createTestContainer();
66
- prefSchema = testContainer.get(PreferenceSchemaProvider);
67
- prefService = testContainer.get<PreferenceService>(PreferenceService) as PreferenceServiceImpl;
68
- getProvider(PreferenceScope.User).markReady();
69
- getProvider(PreferenceScope.Workspace).markReady();
70
- getProvider(PreferenceScope.Folder).markReady();
71
- console.log('before ready');
72
- try {
73
- await prefService.ready;
74
- } catch (e) {
75
- console.error(e);
76
- }
77
- console.log('done');
78
- });
79
-
80
- afterEach(() => {
81
- });
82
-
83
- function getProvider(scope: PreferenceScope): MockPreferenceProvider {
84
- return testContainer.getNamed(PreferenceProvider, scope) as MockPreferenceProvider;
85
- }
86
-
87
- it('should return the preference from the more specific scope (user > workspace)', () => {
88
- prefSchema.setSchema({
89
- properties: {
90
- 'test.number': {
91
- type: 'number',
92
- scope: 'resource'
93
- }
94
- }
95
- });
96
- const userProvider = getProvider(PreferenceScope.User);
97
- const workspaceProvider = getProvider(PreferenceScope.Workspace);
98
- const folderProvider = getProvider(PreferenceScope.Folder);
99
- userProvider.setPreference('test.number', 1);
100
- expect(prefService.get('test.number')).equals(1);
101
- workspaceProvider.setPreference('test.number', 0);
102
- expect(prefService.get('test.number')).equals(0);
103
- folderProvider.setPreference('test.number', 2);
104
- expect(prefService.get('test.number')).equals(2);
105
-
106
- // remove property on lower scope
107
- folderProvider.setPreference('test.number', undefined);
108
- expect(prefService.get('test.number')).equals(0);
109
- });
110
-
111
- it('should throw a TypeError if the preference (reference object) is modified', () => {
112
- prefSchema.setSchema({
113
- properties: {
114
- 'test.immutable': {
115
- type: 'array',
116
- items: {
117
- type: 'string'
118
- },
119
- scope: 'resource'
120
- }
121
- }
122
- });
123
- const userProvider = getProvider(PreferenceScope.User);
124
- userProvider.setPreference('test.immutable', [
125
- 'test', 'test', 'test'
126
- ]);
127
- const immutablePref: string[] | undefined = prefService.get('test.immutable');
128
- expect(immutablePref).to.not.be.undefined;
129
- if (immutablePref !== undefined) {
130
- expect(() => immutablePref.push('fails')).to.throw(TypeError);
131
- }
132
- });
133
-
134
- it('should still report the more specific preference even though the less specific one changed', () => {
135
- prefSchema.setSchema({
136
- properties: {
137
- 'test.number': {
138
- type: 'number',
139
- scope: 'resource'
140
- }
141
- }
142
- });
143
- const userProvider = getProvider(PreferenceScope.User);
144
- const workspaceProvider = getProvider(PreferenceScope.Workspace);
145
- userProvider.setPreference('test.number', 1);
146
- workspaceProvider.setPreference('test.number', 0);
147
- expect(prefService.get('test.number')).equals(0);
148
-
149
- userProvider.setPreference('test.number', 4);
150
- expect(prefService.get('test.number')).equals(0);
151
- });
152
-
153
- it('should not fire events if preference schema is unset in the same tick ', async () => {
154
- const events: PreferenceChange[] = [];
155
- prefService.onPreferenceChanged(event => events.push(event));
156
- prefSchema.registerOverrideIdentifier('go');
157
-
158
- const toUnset = prefSchema.setSchema({
159
- properties: {
160
- 'editor.insertSpaces': {
161
- type: 'boolean',
162
- default: true,
163
- overridable: true
164
- },
165
- '[go]': {
166
- type: 'object',
167
- default: {
168
- 'editor.insertSpaces': false
169
- }
170
- }
171
- }
172
- });
173
- assert.deepStrictEqual([], events.map(e => ({
174
- preferenceName: e.preferenceName,
175
- newValue: e.newValue,
176
- oldValue: e.oldValue
177
- })), 'events after set in the same tick');
178
- assert.strictEqual(prefService.get('editor.insertSpaces'), true, 'get before');
179
- assert.strictEqual(prefService.get('[go].editor.insertSpaces'), false, 'get before overridden');
180
-
181
- toUnset.dispose();
182
-
183
- assert.deepStrictEqual([], events.map(e => ({
184
- preferenceName: e.preferenceName,
185
- newValue: e.newValue,
186
- oldValue: e.oldValue
187
- })), 'events after unset in the same tick');
188
- assert.strictEqual(prefService.get('editor.insertSpaces'), undefined, 'get after');
189
- assert.strictEqual(prefService.get('[go].editor.insertSpaces'), undefined, 'get after overridden');
190
-
191
- assert.deepStrictEqual([], events.map(e => ({
192
- preferenceName: e.preferenceName,
193
- newValue: e.newValue,
194
- oldValue: e.oldValue
195
- })), 'events in next tick');
196
- });
197
-
198
- it('should fire events if preference schema is unset in another tick', async () => {
199
- prefSchema.registerOverrideIdentifier('go');
200
-
201
- let pending = new Promise<PreferenceChanges>(resolve => prefService.onPreferencesChanged(resolve));
202
- const toUnset = prefSchema.setSchema({
203
- properties: {
204
- 'editor.insertSpaces': {
205
- type: 'boolean',
206
- default: true,
207
- overridable: true
208
- },
209
- '[go]': {
210
- type: 'object',
211
- default: {
212
- 'editor.insertSpaces': false
213
- }
214
- }
215
- }
216
- });
217
- let changes = await pending;
218
-
219
- assert.deepStrictEqual([{
220
- preferenceName: 'editor.insertSpaces',
221
- newValue: true,
222
- oldValue: undefined
223
- }, {
224
- preferenceName: '[go].editor.insertSpaces',
225
- newValue: false,
226
- oldValue: undefined
227
- }], Object.keys(changes).map(key => {
228
- const { preferenceName, newValue, oldValue } = changes[key];
229
- return { preferenceName, newValue, oldValue };
230
- }), 'events before');
231
- assert.strictEqual(prefService.get('editor.insertSpaces'), true, 'get before');
232
- assert.strictEqual(prefService.get('[go].editor.insertSpaces'), false, 'get before overridden');
233
-
234
- pending = new Promise<PreferenceChanges>(resolve => prefService.onPreferencesChanged(resolve));
235
- toUnset.dispose();
236
- changes = await pending;
237
-
238
- assert.deepStrictEqual([{
239
- preferenceName: 'editor.insertSpaces',
240
- newValue: undefined,
241
- oldValue: true
242
- }, {
243
- preferenceName: '[go].editor.insertSpaces',
244
- newValue: undefined,
245
- oldValue: false
246
- }], Object.keys(changes).map(key => {
247
- const { preferenceName, newValue, oldValue } = changes[key];
248
- return { preferenceName, newValue, oldValue };
249
- }), 'events after');
250
- assert.strictEqual(prefService.get('editor.insertSpaces'), undefined, 'get after');
251
- assert.strictEqual(prefService.get('[go].editor.insertSpaces'), undefined, 'get after overridden');
252
- });
253
-
254
- function prepareServices(options?: { schema: PreferenceSchema }): {
255
- preferences: PreferenceServiceImpl;
256
- schema: PreferenceSchemaProvider;
257
- } {
258
- prefSchema.setSchema(options && options.schema || {
259
- properties: {
260
- 'editor.tabSize': {
261
- type: 'number',
262
- description: '',
263
- overridable: true,
264
- default: 4
265
- }
266
- }
267
- });
268
-
269
- return { preferences: prefService, schema: prefSchema };
270
- }
271
-
272
- describe('PreferenceService.updateValues()', () => {
273
- const TAB_SIZE = 'editor.tabSize';
274
- const DUMMY_URI = 'dummy_uri';
275
- async function generateAndCheckValues(
276
- preferences: PreferenceService,
277
- globalValue: number | undefined,
278
- workspaceValue: number | undefined,
279
- workspaceFolderValue: number | undefined
280
- ): Promise<void> {
281
- await preferences.set(TAB_SIZE, globalValue, PreferenceScope.User);
282
- await preferences.set(TAB_SIZE, workspaceValue, PreferenceScope.Workspace);
283
- await preferences.set(TAB_SIZE, workspaceFolderValue, PreferenceScope.Folder, DUMMY_URI);
284
- const expectedValue = workspaceFolderValue ?? workspaceValue ?? globalValue ?? 4;
285
- checkValues(preferences, globalValue, workspaceValue, workspaceFolderValue, expectedValue);
286
- }
287
-
288
- function checkValues(
289
- preferences: PreferenceService,
290
- globalValue: number | undefined,
291
- workspaceValue: number | undefined,
292
- workspaceFolderValue: number | undefined,
293
- value: number = 4,
294
- ): void {
295
- const expected = {
296
- preferenceName: 'editor.tabSize',
297
- defaultValue: 4,
298
- globalValue,
299
- workspaceValue,
300
- workspaceFolderValue,
301
- value,
302
- };
303
- const inspection = preferences.inspect(TAB_SIZE, DUMMY_URI);
304
- assert.deepStrictEqual(inspection, expected);
305
- }
306
-
307
- it('should modify the narrowest scope.', async () => {
308
- const { preferences } = prepareServices();
309
-
310
- await generateAndCheckValues(preferences, 1, 2, 3);
311
- await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
312
- checkValues(preferences, 1, 2, 8, 8);
313
-
314
- await generateAndCheckValues(preferences, 1, 2, undefined);
315
- await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
316
- checkValues(preferences, 1, 8, undefined, 8);
317
-
318
- await generateAndCheckValues(preferences, 1, undefined, undefined);
319
- await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
320
- checkValues(preferences, 8, undefined, undefined, 8);
321
- });
322
-
323
- it('defaults to user scope.', async () => {
324
- const { preferences } = prepareServices();
325
- checkValues(preferences, undefined, undefined, undefined);
326
- await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
327
- checkValues(preferences, 8, undefined, undefined, 8);
328
- });
329
-
330
- it('clears all settings when input is undefined.', async () => {
331
- const { preferences } = prepareServices();
332
-
333
- await generateAndCheckValues(preferences, 1, 2, 3);
334
- await preferences.updateValue(TAB_SIZE, undefined, DUMMY_URI);
335
- checkValues(preferences, undefined, undefined, undefined);
336
- });
337
-
338
- it('deletes user setting if user is only defined scope and target is default value', async () => {
339
- const { preferences } = prepareServices();
340
-
341
- await generateAndCheckValues(preferences, 8, undefined, undefined);
342
- await preferences.updateValue(TAB_SIZE, 4, DUMMY_URI);
343
- checkValues(preferences, undefined, undefined, undefined);
344
- });
345
-
346
- it('does not delete setting in lower scopes, even if target is default', async () => {
347
- const { preferences } = prepareServices();
348
-
349
- await generateAndCheckValues(preferences, undefined, 2, undefined);
350
- await preferences.updateValue(TAB_SIZE, 4, DUMMY_URI);
351
- checkValues(preferences, undefined, 4, undefined);
352
- });
353
- });
354
-
355
- describe('overridden preferences', () => {
356
-
357
- it('get #0', () => {
358
- const { preferences, schema } = prepareServices();
359
-
360
- preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
361
-
362
- expect(preferences.get('editor.tabSize')).to.equal(4);
363
- expect(preferences.get('[json].editor.tabSize')).to.equal(undefined);
364
-
365
- schema.registerOverrideIdentifier('json');
366
-
367
- expect(preferences.get('editor.tabSize')).to.equal(4);
368
- expect(preferences.get('[json].editor.tabSize')).to.equal(2);
369
- });
370
-
371
- it('get #1', () => {
372
- const { preferences, schema } = prepareServices();
373
- schema.registerOverrideIdentifier('json');
374
-
375
- expect(preferences.get('editor.tabSize')).to.equal(4);
376
- expect(preferences.get('[json].editor.tabSize')).to.equal(4);
377
-
378
- preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
379
-
380
- expect(preferences.get('editor.tabSize')).to.equal(4);
381
- expect(preferences.get('[json].editor.tabSize')).to.equal(2);
382
- });
383
-
384
- it('get #2', () => {
385
- const { preferences, schema } = prepareServices();
386
- schema.registerOverrideIdentifier('json');
387
-
388
- expect(preferences.get('editor.tabSize')).to.equal(4);
389
- expect(preferences.get('[json].editor.tabSize')).to.equal(4);
390
-
391
- preferences.set('editor.tabSize', 2, PreferenceScope.User);
392
-
393
- expect(preferences.get('editor.tabSize')).to.equal(2);
394
- expect(preferences.get('[json].editor.tabSize')).to.equal(2);
395
- });
396
-
397
- it('has', () => {
398
- const { preferences, schema } = prepareServices();
399
-
400
- expect(preferences.has('editor.tabSize')).to.be.true;
401
- expect(preferences.has('[json].editor.tabSize')).to.be.false;
402
-
403
- schema.registerOverrideIdentifier('json');
404
-
405
- expect(preferences.has('editor.tabSize')).to.be.true;
406
- expect(preferences.has('[json].editor.tabSize')).to.be.true;
407
- });
408
-
409
- it('inspect #0', () => {
410
- const { preferences, schema } = prepareServices();
411
-
412
- const expected = {
413
- preferenceName: 'editor.tabSize',
414
- defaultValue: 4,
415
- globalValue: undefined,
416
- workspaceValue: undefined,
417
- workspaceFolderValue: undefined,
418
- value: 4,
419
- };
420
- assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
421
- assert.ok(!preferences.has('[json].editor.tabSize'));
422
-
423
- schema.registerOverrideIdentifier('json');
424
-
425
- assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
426
- assert.deepStrictEqual({
427
- ...expected,
428
- preferenceName: '[json].editor.tabSize'
429
- }, preferences.inspect('[json].editor.tabSize'));
430
- });
431
-
432
- it('inspect #1', () => {
433
- const { preferences, schema } = prepareServices();
434
-
435
- const expected = {
436
- preferenceName: 'editor.tabSize',
437
- defaultValue: 4,
438
- globalValue: 2,
439
- workspaceValue: undefined,
440
- workspaceFolderValue: undefined,
441
- value: 2
442
- };
443
- preferences.set('editor.tabSize', 2, PreferenceScope.User);
444
-
445
- assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
446
- assert.ok(!preferences.has('[json].editor.tabSize'));
447
-
448
- schema.registerOverrideIdentifier('json');
449
-
450
- assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
451
- assert.deepStrictEqual({
452
- ...expected,
453
- preferenceName: '[json].editor.tabSize'
454
- }, preferences.inspect('[json].editor.tabSize'));
455
- });
456
-
457
- it('inspect #2', () => {
458
- const { preferences, schema } = prepareServices();
459
-
460
- const expected = {
461
- preferenceName: 'editor.tabSize',
462
- defaultValue: 4,
463
- globalValue: undefined,
464
- workspaceValue: undefined,
465
- workspaceFolderValue: undefined,
466
- value: 4
467
- };
468
- assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
469
- assert.ok(!preferences.has('[json].editor.tabSize'));
470
-
471
- schema.registerOverrideIdentifier('json');
472
- preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
473
-
474
- assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
475
- assert.deepStrictEqual({
476
- ...expected,
477
- preferenceName: '[json].editor.tabSize',
478
- globalValue: 2,
479
- value: 2,
480
- }, preferences.inspect('[json].editor.tabSize'));
481
- });
482
-
483
- it('onPreferenceChanged #0', async () => {
484
- const { preferences, schema } = prepareServices();
485
-
486
- const events: PreferenceChange[] = [];
487
- preferences.onPreferenceChanged(event => events.push(event));
488
-
489
- schema.registerOverrideIdentifier('json');
490
- preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
491
- await preferences.set('editor.tabSize', 3, PreferenceScope.User);
492
-
493
- assert.deepStrictEqual([{
494
- preferenceName: '[json].editor.tabSize',
495
- newValue: 2
496
- }, {
497
- preferenceName: 'editor.tabSize',
498
- newValue: 3
499
- }], events.map(e => ({
500
- preferenceName: e.preferenceName,
501
- newValue: e.newValue
502
- })));
503
- });
504
-
505
- it('onPreferenceChanged #1', async () => {
506
- const { preferences, schema } = prepareServices();
507
-
508
- const events: PreferenceChange[] = [];
509
- preferences.onPreferenceChanged(event => events.push(event));
510
-
511
- schema.registerOverrideIdentifier('json');
512
- await preferences.set('editor.tabSize', 2, PreferenceScope.User);
513
-
514
- assert.deepStrictEqual([{
515
- preferenceName: 'editor.tabSize',
516
- newValue: 2
517
- }, {
518
- preferenceName: '[json].editor.tabSize',
519
- newValue: 2
520
- }], events.map(e => ({
521
- preferenceName: e.preferenceName,
522
- newValue: e.newValue
523
- })));
524
- });
525
-
526
- it('onPreferenceChanged #2', async function (): Promise<void> {
527
- const { preferences, schema } = prepareServices();
528
-
529
- schema.registerOverrideIdentifier('json');
530
- schema.registerOverrideIdentifier('javascript');
531
- preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
532
- await preferences.set('editor.tabSize', 3, PreferenceScope.User);
533
-
534
- const events: PreferenceChangeEvent<{ [key: string]: any }>[] = [];
535
- const proxy = createPreferenceProxy<{ [key: string]: any }>(preferences, schema.getCombinedSchema(), { overrideIdentifier: 'json' });
536
- proxy.onPreferenceChanged(event => events.push(event));
537
-
538
- await preferences.set('[javascript].editor.tabSize', 4, PreferenceScope.User);
539
-
540
- assert.deepStrictEqual([], events.map(e => ({
541
- preferenceName: e.preferenceName,
542
- newValue: e.newValue
543
- })), 'changes not relevant to json override should be ignored');
544
- });
545
-
546
- it('onPreferenceChanged #3', async () => {
547
- const { preferences, schema } = prepareServices();
548
-
549
- schema.registerOverrideIdentifier('json');
550
- preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
551
- await preferences.set('editor.tabSize', 3, PreferenceScope.User);
552
-
553
- const events: PreferenceChange[] = [];
554
- preferences.onPreferenceChanged(event => events.push(event));
555
-
556
- await preferences.set('[json].editor.tabSize', undefined, PreferenceScope.User);
557
-
558
- assert.deepStrictEqual([{
559
- preferenceName: '[json].editor.tabSize',
560
- newValue: 3
561
- }], events.map(e => ({
562
- preferenceName: e.preferenceName,
563
- newValue: e.newValue
564
- })));
565
- });
566
-
567
- it('defaultOverrides [go].editor.formatOnSave', () => {
568
- const { preferences, schema } = prepareServices({
569
- schema: {
570
- properties: {
571
- 'editor.insertSpaces': {
572
- type: 'boolean',
573
- default: true,
574
- overridable: true
575
- },
576
- 'editor.formatOnSave': {
577
- type: 'boolean',
578
- default: false,
579
- overridable: true
580
- }
581
- }
582
- }
583
- });
584
-
585
- assert.strictEqual(true, preferences.get('editor.insertSpaces'));
586
- assert.strictEqual(undefined, preferences.get('[go].editor.insertSpaces'));
587
- assert.strictEqual(false, preferences.get('editor.formatOnSave'));
588
- assert.strictEqual(undefined, preferences.get('[go].editor.formatOnSave'));
589
-
590
- schema.registerOverrideIdentifier('go');
591
- schema.setSchema({
592
- id: 'defaultOverrides',
593
- title: 'Default Configuration Overrides',
594
- properties: {
595
- '[go]': {
596
- type: 'object',
597
- default: {
598
- 'editor.insertSpaces': false,
599
- 'editor.formatOnSave': true
600
- },
601
- description: 'Configure editor settings to be overridden for go language.'
602
- }
603
- }
604
- });
605
-
606
- assert.strictEqual(true, preferences.get('editor.insertSpaces'));
607
- assert.strictEqual(false, preferences.get('[go].editor.insertSpaces'));
608
- assert.strictEqual(false, preferences.get('editor.formatOnSave'));
609
- assert.strictEqual(true, preferences.get('[go].editor.formatOnSave'));
610
- });
611
- });
612
-
613
- });
1
+ // *****************************************************************************
2
+ // Copyright (C) 2018 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
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+
19
+ import { enableJSDOM } from '../test/jsdom';
20
+
21
+ let disableJSDOM = enableJSDOM();
22
+
23
+ import * as assert from 'assert';
24
+ import { Container } from 'inversify';
25
+ import { bindPreferenceService } from '../frontend-application-bindings';
26
+ import { bindMockPreferenceProviders, MockPreferenceProvider } from './test';
27
+ import { PreferenceService, PreferenceServiceImpl, PreferenceChange, PreferenceChanges } from './preference-service';
28
+ import { PreferenceSchemaProvider, PreferenceSchema } from './preference-contribution';
29
+ import { PreferenceScope } from './preference-scope';
30
+ import { PreferenceProvider } from './preference-provider';
31
+ import { FrontendApplicationConfigProvider } from '../frontend-application-config-provider';
32
+ import { createPreferenceProxy, PreferenceChangeEvent } from './preference-proxy';
33
+
34
+ disableJSDOM();
35
+
36
+ process.on('unhandledRejection', (reason, promise) => {
37
+ console.error(reason);
38
+ throw reason;
39
+ });
40
+
41
+ const { expect } = require('chai');
42
+ let testContainer: Container;
43
+
44
+ function createTestContainer(): Container {
45
+ const result = new Container();
46
+ bindPreferenceService(result.bind.bind(result));
47
+ bindMockPreferenceProviders(result.bind.bind(result), result.unbind.bind(result));
48
+ return result;
49
+ }
50
+
51
+ describe('Preference Service', () => {
52
+ let prefService: PreferenceServiceImpl;
53
+ let prefSchema: PreferenceSchemaProvider;
54
+
55
+ before(() => {
56
+ disableJSDOM = enableJSDOM();
57
+ FrontendApplicationConfigProvider.set({});
58
+ });
59
+
60
+ after(() => {
61
+ disableJSDOM();
62
+ });
63
+
64
+ beforeEach(async () => {
65
+ testContainer = createTestContainer();
66
+ prefSchema = testContainer.get(PreferenceSchemaProvider);
67
+ prefService = testContainer.get<PreferenceService>(PreferenceService) as PreferenceServiceImpl;
68
+ getProvider(PreferenceScope.User).markReady();
69
+ getProvider(PreferenceScope.Workspace).markReady();
70
+ getProvider(PreferenceScope.Folder).markReady();
71
+ console.log('before ready');
72
+ try {
73
+ await prefService.ready;
74
+ } catch (e) {
75
+ console.error(e);
76
+ }
77
+ console.log('done');
78
+ });
79
+
80
+ afterEach(() => {
81
+ });
82
+
83
+ function getProvider(scope: PreferenceScope): MockPreferenceProvider {
84
+ return testContainer.getNamed(PreferenceProvider, scope) as MockPreferenceProvider;
85
+ }
86
+
87
+ it('should return the preference from the more specific scope (user > workspace)', () => {
88
+ prefSchema.setSchema({
89
+ properties: {
90
+ 'test.number': {
91
+ type: 'number',
92
+ scope: 'resource'
93
+ }
94
+ }
95
+ });
96
+ const userProvider = getProvider(PreferenceScope.User);
97
+ const workspaceProvider = getProvider(PreferenceScope.Workspace);
98
+ const folderProvider = getProvider(PreferenceScope.Folder);
99
+ userProvider.setPreference('test.number', 1);
100
+ expect(prefService.get('test.number')).equals(1);
101
+ workspaceProvider.setPreference('test.number', 0);
102
+ expect(prefService.get('test.number')).equals(0);
103
+ folderProvider.setPreference('test.number', 2);
104
+ expect(prefService.get('test.number')).equals(2);
105
+
106
+ // remove property on lower scope
107
+ folderProvider.setPreference('test.number', undefined);
108
+ expect(prefService.get('test.number')).equals(0);
109
+ });
110
+
111
+ it('should throw a TypeError if the preference (reference object) is modified', () => {
112
+ prefSchema.setSchema({
113
+ properties: {
114
+ 'test.immutable': {
115
+ type: 'array',
116
+ items: {
117
+ type: 'string'
118
+ },
119
+ scope: 'resource'
120
+ }
121
+ }
122
+ });
123
+ const userProvider = getProvider(PreferenceScope.User);
124
+ userProvider.setPreference('test.immutable', [
125
+ 'test', 'test', 'test'
126
+ ]);
127
+ const immutablePref: string[] | undefined = prefService.get('test.immutable');
128
+ expect(immutablePref).to.not.be.undefined;
129
+ if (immutablePref !== undefined) {
130
+ expect(() => immutablePref.push('fails')).to.throw(TypeError);
131
+ }
132
+ });
133
+
134
+ it('should still report the more specific preference even though the less specific one changed', () => {
135
+ prefSchema.setSchema({
136
+ properties: {
137
+ 'test.number': {
138
+ type: 'number',
139
+ scope: 'resource'
140
+ }
141
+ }
142
+ });
143
+ const userProvider = getProvider(PreferenceScope.User);
144
+ const workspaceProvider = getProvider(PreferenceScope.Workspace);
145
+ userProvider.setPreference('test.number', 1);
146
+ workspaceProvider.setPreference('test.number', 0);
147
+ expect(prefService.get('test.number')).equals(0);
148
+
149
+ userProvider.setPreference('test.number', 4);
150
+ expect(prefService.get('test.number')).equals(0);
151
+ });
152
+
153
+ it('should not fire events if preference schema is unset in the same tick ', async () => {
154
+ const events: PreferenceChange[] = [];
155
+ prefService.onPreferenceChanged(event => events.push(event));
156
+ prefSchema.registerOverrideIdentifier('go');
157
+
158
+ const toUnset = prefSchema.setSchema({
159
+ properties: {
160
+ 'editor.insertSpaces': {
161
+ type: 'boolean',
162
+ default: true,
163
+ overridable: true
164
+ },
165
+ '[go]': {
166
+ type: 'object',
167
+ default: {
168
+ 'editor.insertSpaces': false
169
+ }
170
+ }
171
+ }
172
+ });
173
+ assert.deepStrictEqual([], events.map(e => ({
174
+ preferenceName: e.preferenceName,
175
+ newValue: e.newValue,
176
+ oldValue: e.oldValue
177
+ })), 'events after set in the same tick');
178
+ assert.strictEqual(prefService.get('editor.insertSpaces'), true, 'get before');
179
+ assert.strictEqual(prefService.get('[go].editor.insertSpaces'), false, 'get before overridden');
180
+
181
+ toUnset.dispose();
182
+
183
+ assert.deepStrictEqual([], events.map(e => ({
184
+ preferenceName: e.preferenceName,
185
+ newValue: e.newValue,
186
+ oldValue: e.oldValue
187
+ })), 'events after unset in the same tick');
188
+ assert.strictEqual(prefService.get('editor.insertSpaces'), undefined, 'get after');
189
+ assert.strictEqual(prefService.get('[go].editor.insertSpaces'), undefined, 'get after overridden');
190
+
191
+ assert.deepStrictEqual([], events.map(e => ({
192
+ preferenceName: e.preferenceName,
193
+ newValue: e.newValue,
194
+ oldValue: e.oldValue
195
+ })), 'events in next tick');
196
+ });
197
+
198
+ it('should fire events if preference schema is unset in another tick', async () => {
199
+ prefSchema.registerOverrideIdentifier('go');
200
+
201
+ let pending = new Promise<PreferenceChanges>(resolve => prefService.onPreferencesChanged(resolve));
202
+ const toUnset = prefSchema.setSchema({
203
+ properties: {
204
+ 'editor.insertSpaces': {
205
+ type: 'boolean',
206
+ default: true,
207
+ overridable: true
208
+ },
209
+ '[go]': {
210
+ type: 'object',
211
+ default: {
212
+ 'editor.insertSpaces': false
213
+ }
214
+ }
215
+ }
216
+ });
217
+ let changes = await pending;
218
+
219
+ assert.deepStrictEqual([{
220
+ preferenceName: 'editor.insertSpaces',
221
+ newValue: true,
222
+ oldValue: undefined
223
+ }, {
224
+ preferenceName: '[go].editor.insertSpaces',
225
+ newValue: false,
226
+ oldValue: undefined
227
+ }], Object.keys(changes).map(key => {
228
+ const { preferenceName, newValue, oldValue } = changes[key];
229
+ return { preferenceName, newValue, oldValue };
230
+ }), 'events before');
231
+ assert.strictEqual(prefService.get('editor.insertSpaces'), true, 'get before');
232
+ assert.strictEqual(prefService.get('[go].editor.insertSpaces'), false, 'get before overridden');
233
+
234
+ pending = new Promise<PreferenceChanges>(resolve => prefService.onPreferencesChanged(resolve));
235
+ toUnset.dispose();
236
+ changes = await pending;
237
+
238
+ assert.deepStrictEqual([{
239
+ preferenceName: 'editor.insertSpaces',
240
+ newValue: undefined,
241
+ oldValue: true
242
+ }, {
243
+ preferenceName: '[go].editor.insertSpaces',
244
+ newValue: undefined,
245
+ oldValue: false
246
+ }], Object.keys(changes).map(key => {
247
+ const { preferenceName, newValue, oldValue } = changes[key];
248
+ return { preferenceName, newValue, oldValue };
249
+ }), 'events after');
250
+ assert.strictEqual(prefService.get('editor.insertSpaces'), undefined, 'get after');
251
+ assert.strictEqual(prefService.get('[go].editor.insertSpaces'), undefined, 'get after overridden');
252
+ });
253
+
254
+ function prepareServices(options?: { schema: PreferenceSchema }): {
255
+ preferences: PreferenceServiceImpl;
256
+ schema: PreferenceSchemaProvider;
257
+ } {
258
+ prefSchema.setSchema(options && options.schema || {
259
+ properties: {
260
+ 'editor.tabSize': {
261
+ type: 'number',
262
+ description: '',
263
+ overridable: true,
264
+ default: 4
265
+ }
266
+ }
267
+ });
268
+
269
+ return { preferences: prefService, schema: prefSchema };
270
+ }
271
+
272
+ describe('PreferenceService.updateValues()', () => {
273
+ const TAB_SIZE = 'editor.tabSize';
274
+ const DUMMY_URI = 'dummy_uri';
275
+ async function generateAndCheckValues(
276
+ preferences: PreferenceService,
277
+ globalValue: number | undefined,
278
+ workspaceValue: number | undefined,
279
+ workspaceFolderValue: number | undefined
280
+ ): Promise<void> {
281
+ await preferences.set(TAB_SIZE, globalValue, PreferenceScope.User);
282
+ await preferences.set(TAB_SIZE, workspaceValue, PreferenceScope.Workspace);
283
+ await preferences.set(TAB_SIZE, workspaceFolderValue, PreferenceScope.Folder, DUMMY_URI);
284
+ const expectedValue = workspaceFolderValue ?? workspaceValue ?? globalValue ?? 4;
285
+ checkValues(preferences, globalValue, workspaceValue, workspaceFolderValue, expectedValue);
286
+ }
287
+
288
+ function checkValues(
289
+ preferences: PreferenceService,
290
+ globalValue: number | undefined,
291
+ workspaceValue: number | undefined,
292
+ workspaceFolderValue: number | undefined,
293
+ value: number = 4,
294
+ ): void {
295
+ const expected = {
296
+ preferenceName: 'editor.tabSize',
297
+ defaultValue: 4,
298
+ globalValue,
299
+ workspaceValue,
300
+ workspaceFolderValue,
301
+ value,
302
+ };
303
+ const inspection = preferences.inspect(TAB_SIZE, DUMMY_URI);
304
+ assert.deepStrictEqual(inspection, expected);
305
+ }
306
+
307
+ it('should modify the narrowest scope.', async () => {
308
+ const { preferences } = prepareServices();
309
+
310
+ await generateAndCheckValues(preferences, 1, 2, 3);
311
+ await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
312
+ checkValues(preferences, 1, 2, 8, 8);
313
+
314
+ await generateAndCheckValues(preferences, 1, 2, undefined);
315
+ await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
316
+ checkValues(preferences, 1, 8, undefined, 8);
317
+
318
+ await generateAndCheckValues(preferences, 1, undefined, undefined);
319
+ await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
320
+ checkValues(preferences, 8, undefined, undefined, 8);
321
+ });
322
+
323
+ it('defaults to user scope.', async () => {
324
+ const { preferences } = prepareServices();
325
+ checkValues(preferences, undefined, undefined, undefined);
326
+ await preferences.updateValue(TAB_SIZE, 8, DUMMY_URI);
327
+ checkValues(preferences, 8, undefined, undefined, 8);
328
+ });
329
+
330
+ it('clears all settings when input is undefined.', async () => {
331
+ const { preferences } = prepareServices();
332
+
333
+ await generateAndCheckValues(preferences, 1, 2, 3);
334
+ await preferences.updateValue(TAB_SIZE, undefined, DUMMY_URI);
335
+ checkValues(preferences, undefined, undefined, undefined);
336
+ });
337
+
338
+ it('deletes user setting if user is only defined scope and target is default value', async () => {
339
+ const { preferences } = prepareServices();
340
+
341
+ await generateAndCheckValues(preferences, 8, undefined, undefined);
342
+ await preferences.updateValue(TAB_SIZE, 4, DUMMY_URI);
343
+ checkValues(preferences, undefined, undefined, undefined);
344
+ });
345
+
346
+ it('does not delete setting in lower scopes, even if target is default', async () => {
347
+ const { preferences } = prepareServices();
348
+
349
+ await generateAndCheckValues(preferences, undefined, 2, undefined);
350
+ await preferences.updateValue(TAB_SIZE, 4, DUMMY_URI);
351
+ checkValues(preferences, undefined, 4, undefined);
352
+ });
353
+ });
354
+
355
+ describe('overridden preferences', () => {
356
+
357
+ it('get #0', () => {
358
+ const { preferences, schema } = prepareServices();
359
+
360
+ preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
361
+
362
+ expect(preferences.get('editor.tabSize')).to.equal(4);
363
+ expect(preferences.get('[json].editor.tabSize')).to.equal(undefined);
364
+
365
+ schema.registerOverrideIdentifier('json');
366
+
367
+ expect(preferences.get('editor.tabSize')).to.equal(4);
368
+ expect(preferences.get('[json].editor.tabSize')).to.equal(2);
369
+ });
370
+
371
+ it('get #1', () => {
372
+ const { preferences, schema } = prepareServices();
373
+ schema.registerOverrideIdentifier('json');
374
+
375
+ expect(preferences.get('editor.tabSize')).to.equal(4);
376
+ expect(preferences.get('[json].editor.tabSize')).to.equal(4);
377
+
378
+ preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
379
+
380
+ expect(preferences.get('editor.tabSize')).to.equal(4);
381
+ expect(preferences.get('[json].editor.tabSize')).to.equal(2);
382
+ });
383
+
384
+ it('get #2', () => {
385
+ const { preferences, schema } = prepareServices();
386
+ schema.registerOverrideIdentifier('json');
387
+
388
+ expect(preferences.get('editor.tabSize')).to.equal(4);
389
+ expect(preferences.get('[json].editor.tabSize')).to.equal(4);
390
+
391
+ preferences.set('editor.tabSize', 2, PreferenceScope.User);
392
+
393
+ expect(preferences.get('editor.tabSize')).to.equal(2);
394
+ expect(preferences.get('[json].editor.tabSize')).to.equal(2);
395
+ });
396
+
397
+ it('has', () => {
398
+ const { preferences, schema } = prepareServices();
399
+
400
+ expect(preferences.has('editor.tabSize')).to.be.true;
401
+ expect(preferences.has('[json].editor.tabSize')).to.be.false;
402
+
403
+ schema.registerOverrideIdentifier('json');
404
+
405
+ expect(preferences.has('editor.tabSize')).to.be.true;
406
+ expect(preferences.has('[json].editor.tabSize')).to.be.true;
407
+ });
408
+
409
+ it('inspect #0', () => {
410
+ const { preferences, schema } = prepareServices();
411
+
412
+ const expected = {
413
+ preferenceName: 'editor.tabSize',
414
+ defaultValue: 4,
415
+ globalValue: undefined,
416
+ workspaceValue: undefined,
417
+ workspaceFolderValue: undefined,
418
+ value: 4,
419
+ };
420
+ assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
421
+ assert.ok(!preferences.has('[json].editor.tabSize'));
422
+
423
+ schema.registerOverrideIdentifier('json');
424
+
425
+ assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
426
+ assert.deepStrictEqual({
427
+ ...expected,
428
+ preferenceName: '[json].editor.tabSize'
429
+ }, preferences.inspect('[json].editor.tabSize'));
430
+ });
431
+
432
+ it('inspect #1', () => {
433
+ const { preferences, schema } = prepareServices();
434
+
435
+ const expected = {
436
+ preferenceName: 'editor.tabSize',
437
+ defaultValue: 4,
438
+ globalValue: 2,
439
+ workspaceValue: undefined,
440
+ workspaceFolderValue: undefined,
441
+ value: 2
442
+ };
443
+ preferences.set('editor.tabSize', 2, PreferenceScope.User);
444
+
445
+ assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
446
+ assert.ok(!preferences.has('[json].editor.tabSize'));
447
+
448
+ schema.registerOverrideIdentifier('json');
449
+
450
+ assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
451
+ assert.deepStrictEqual({
452
+ ...expected,
453
+ preferenceName: '[json].editor.tabSize'
454
+ }, preferences.inspect('[json].editor.tabSize'));
455
+ });
456
+
457
+ it('inspect #2', () => {
458
+ const { preferences, schema } = prepareServices();
459
+
460
+ const expected = {
461
+ preferenceName: 'editor.tabSize',
462
+ defaultValue: 4,
463
+ globalValue: undefined,
464
+ workspaceValue: undefined,
465
+ workspaceFolderValue: undefined,
466
+ value: 4
467
+ };
468
+ assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
469
+ assert.ok(!preferences.has('[json].editor.tabSize'));
470
+
471
+ schema.registerOverrideIdentifier('json');
472
+ preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
473
+
474
+ assert.deepStrictEqual(expected, preferences.inspect('editor.tabSize'));
475
+ assert.deepStrictEqual({
476
+ ...expected,
477
+ preferenceName: '[json].editor.tabSize',
478
+ globalValue: 2,
479
+ value: 2,
480
+ }, preferences.inspect('[json].editor.tabSize'));
481
+ });
482
+
483
+ it('onPreferenceChanged #0', async () => {
484
+ const { preferences, schema } = prepareServices();
485
+
486
+ const events: PreferenceChange[] = [];
487
+ preferences.onPreferenceChanged(event => events.push(event));
488
+
489
+ schema.registerOverrideIdentifier('json');
490
+ preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
491
+ await preferences.set('editor.tabSize', 3, PreferenceScope.User);
492
+
493
+ assert.deepStrictEqual([{
494
+ preferenceName: '[json].editor.tabSize',
495
+ newValue: 2
496
+ }, {
497
+ preferenceName: 'editor.tabSize',
498
+ newValue: 3
499
+ }], events.map(e => ({
500
+ preferenceName: e.preferenceName,
501
+ newValue: e.newValue
502
+ })));
503
+ });
504
+
505
+ it('onPreferenceChanged #1', async () => {
506
+ const { preferences, schema } = prepareServices();
507
+
508
+ const events: PreferenceChange[] = [];
509
+ preferences.onPreferenceChanged(event => events.push(event));
510
+
511
+ schema.registerOverrideIdentifier('json');
512
+ await preferences.set('editor.tabSize', 2, PreferenceScope.User);
513
+
514
+ assert.deepStrictEqual([{
515
+ preferenceName: 'editor.tabSize',
516
+ newValue: 2
517
+ }, {
518
+ preferenceName: '[json].editor.tabSize',
519
+ newValue: 2
520
+ }], events.map(e => ({
521
+ preferenceName: e.preferenceName,
522
+ newValue: e.newValue
523
+ })));
524
+ });
525
+
526
+ it('onPreferenceChanged #2', async function (): Promise<void> {
527
+ const { preferences, schema } = prepareServices();
528
+
529
+ schema.registerOverrideIdentifier('json');
530
+ schema.registerOverrideIdentifier('javascript');
531
+ preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
532
+ await preferences.set('editor.tabSize', 3, PreferenceScope.User);
533
+
534
+ const events: PreferenceChangeEvent<{ [key: string]: any }>[] = [];
535
+ const proxy = createPreferenceProxy<{ [key: string]: any }>(preferences, schema.getCombinedSchema(), { overrideIdentifier: 'json' });
536
+ proxy.onPreferenceChanged(event => events.push(event));
537
+
538
+ await preferences.set('[javascript].editor.tabSize', 4, PreferenceScope.User);
539
+
540
+ assert.deepStrictEqual([], events.map(e => ({
541
+ preferenceName: e.preferenceName,
542
+ newValue: e.newValue
543
+ })), 'changes not relevant to json override should be ignored');
544
+ });
545
+
546
+ it('onPreferenceChanged #3', async () => {
547
+ const { preferences, schema } = prepareServices();
548
+
549
+ schema.registerOverrideIdentifier('json');
550
+ preferences.set('[json].editor.tabSize', 2, PreferenceScope.User);
551
+ await preferences.set('editor.tabSize', 3, PreferenceScope.User);
552
+
553
+ const events: PreferenceChange[] = [];
554
+ preferences.onPreferenceChanged(event => events.push(event));
555
+
556
+ await preferences.set('[json].editor.tabSize', undefined, PreferenceScope.User);
557
+
558
+ assert.deepStrictEqual([{
559
+ preferenceName: '[json].editor.tabSize',
560
+ newValue: 3
561
+ }], events.map(e => ({
562
+ preferenceName: e.preferenceName,
563
+ newValue: e.newValue
564
+ })));
565
+ });
566
+
567
+ it('defaultOverrides [go].editor.formatOnSave', () => {
568
+ const { preferences, schema } = prepareServices({
569
+ schema: {
570
+ properties: {
571
+ 'editor.insertSpaces': {
572
+ type: 'boolean',
573
+ default: true,
574
+ overridable: true
575
+ },
576
+ 'editor.formatOnSave': {
577
+ type: 'boolean',
578
+ default: false,
579
+ overridable: true
580
+ }
581
+ }
582
+ }
583
+ });
584
+
585
+ assert.strictEqual(true, preferences.get('editor.insertSpaces'));
586
+ assert.strictEqual(undefined, preferences.get('[go].editor.insertSpaces'));
587
+ assert.strictEqual(false, preferences.get('editor.formatOnSave'));
588
+ assert.strictEqual(undefined, preferences.get('[go].editor.formatOnSave'));
589
+
590
+ schema.registerOverrideIdentifier('go');
591
+ schema.setSchema({
592
+ id: 'defaultOverrides',
593
+ title: 'Default Configuration Overrides',
594
+ properties: {
595
+ '[go]': {
596
+ type: 'object',
597
+ default: {
598
+ 'editor.insertSpaces': false,
599
+ 'editor.formatOnSave': true
600
+ },
601
+ description: 'Configure editor settings to be overridden for go language.'
602
+ }
603
+ }
604
+ });
605
+
606
+ assert.strictEqual(true, preferences.get('editor.insertSpaces'));
607
+ assert.strictEqual(false, preferences.get('[go].editor.insertSpaces'));
608
+ assert.strictEqual(false, preferences.get('editor.formatOnSave'));
609
+ assert.strictEqual(true, preferences.get('[go].editor.formatOnSave'));
610
+ });
611
+ });
612
+
613
+ });