@theia/api-tests 1.22.0-next.8 → 1.23.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@theia/api-tests",
3
- "version": "1.22.0-next.8+2352920342d",
3
+ "version": "1.23.0-next.0+edeee9cfae1",
4
4
  "description": "Theia API tests",
5
5
  "dependencies": {
6
- "@theia/core": "1.22.0-next.8+2352920342d"
6
+ "@theia/core": "1.23.0-next.0+edeee9cfae1"
7
7
  },
8
8
  "license": "EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0",
9
9
  "repository": {
@@ -20,5 +20,5 @@
20
20
  "publishConfig": {
21
21
  "access": "public"
22
22
  },
23
- "gitHead": "2352920342db3322907f392c3d480b6d11fbe44c"
23
+ "gitHead": "edeee9cfae17e46a0c244b5e7b63de479e3d8031"
24
24
  }
@@ -26,20 +26,29 @@
26
26
  * See https://github.com/akosyakov/vscode-launch/blob/master/src/test/extension.test.ts
27
27
  */
28
28
  describe('Launch Preferences', function () {
29
- this.timeout(5000);
29
+ this.timeout(10_000);
30
30
 
31
31
  const { assert } = chai;
32
32
 
33
+ const { PreferenceProvider } = require('@theia/core/lib/browser');
33
34
  const { PreferenceService, PreferenceScope } = require('@theia/core/lib/browser/preferences/preference-service');
34
35
  const { WorkspaceService } = require('@theia/workspace/lib/browser/workspace-service');
35
36
  const { FileService } = require('@theia/filesystem/lib/browser/file-service');
36
37
  const { FileResourceResolver } = require('@theia/filesystem/lib/browser/file-resource');
37
38
  const { MonacoTextModelService } = require('@theia/monaco/lib/browser/monaco-text-model-service');
38
39
  const { MonacoWorkspace } = require('@theia/monaco/lib/browser/monaco-workspace');
40
+ const { AbstractResourcePreferenceProvider } = require('@theia/preferences/lib/browser/abstract-resource-preference-provider');
41
+ const { waitForEvent } = require('@theia/core/lib/common/promise-util');
39
42
 
40
43
  const container = window.theia.container;
41
44
  /** @type {import('@theia/core/lib/browser/preferences/preference-service').PreferenceService} */
42
45
  const preferences = container.get(PreferenceService);
46
+ /** @type {import('@theia/preferences/lib/browser/user-configs-preference-provider').UserConfigsPreferenceProvider} */
47
+ const userPreferences = container.getNamed(PreferenceProvider, PreferenceScope.User);
48
+ /** @type {import('@theia/preferences/lib/browser/workspace-preference-provider').WorkspacePreferenceProvider} */
49
+ const workspacePreferences = container.getNamed(PreferenceProvider, PreferenceScope.Workspace);
50
+ /** @type {import('@theia/preferences/lib/browser/folders-preferences-provider').FoldersPreferencesProvider} */
51
+ const folderPreferences = container.getNamed(PreferenceProvider, PreferenceScope.Folder);
43
52
  const workspaceService = container.get(WorkspaceService);
44
53
  const fileService = container.get(FileService);
45
54
  const textModelService = container.get(MonacoTextModelService);
@@ -394,25 +403,54 @@ describe('Launch Preferences', function () {
394
403
 
395
404
  const rootUri = workspaceService.tryGetRoots()[0].resource;
396
405
 
406
+ /**
407
+ * @param uri the URI of the file to modify
408
+ * @returns {AbstractResourcePreferenceProvider | undefined} The preference provider matching the provided URI.
409
+ */
410
+ function findProvider(uri) {
411
+ /**
412
+ * @param {PreferenceProvider} provider
413
+ * @returns {boolean} whether the provider matches the desired URI.
414
+ */
415
+ const isMatch = (provider) => {
416
+ const configUri = provider.getConfigUri();
417
+ return configUri && uri.isEqual(configUri);
418
+ };
419
+ for (const provider of userPreferences['providers'].values()) {
420
+ if (isMatch(provider) && provider instanceof AbstractResourcePreferenceProvider) {
421
+ return provider;
422
+ }
423
+ }
424
+ for (const provider of folderPreferences['providers'].values()) {
425
+ if (isMatch(provider) && provider instanceof AbstractResourcePreferenceProvider) {
426
+ return provider;
427
+ }
428
+ }
429
+ /** @type {PreferenceProvider} */
430
+ const workspaceDelegate = workspacePreferences['delegate'];
431
+ if (workspaceDelegate !== folderPreferences) {
432
+ if (isMatch(workspaceDelegate) && workspaceDelegate instanceof AbstractResourcePreferenceProvider) {
433
+ return workspaceDelegate;
434
+ }
435
+ }
436
+ }
437
+
397
438
  function deleteWorkspacePreferences() {
398
439
  const promises = [];
399
440
  for (const configPath of ['.theia', '.vscode']) {
400
441
  for (const name of ['settings', 'launch']) {
401
442
  promises.push((async () => {
443
+ const uri = rootUri.resolve(configPath + '/' + name + '.json');
444
+ const provider = findProvider(uri);
402
445
  try {
403
- const reference = await textModelService.createModelReference(rootUri.resolve(configPath + '/' + name + '.json'));
404
- try {
405
- if (!reference.object.valid) {
406
- return;
446
+ if (provider) {
447
+ if (provider.valid) {
448
+ await waitForEvent(provider.onDidChangeValidity, 5000);
407
449
  }
408
- await new Promise(resolve => {
409
- const listener = reference.object.onDidChangeValid(() => {
410
- listener.dispose();
411
- resolve();
412
- });
413
- });
414
- } finally {
415
- reference.dispose();
450
+ await provider['readPreferencesFromFile']();
451
+ await provider['fireDidPreferencesChanged']();
452
+ } else {
453
+ console.log('Unable to find provider for', uri.path.toString());
416
454
  }
417
455
  } catch (e) {
418
456
  console.error(e);
@@ -465,21 +503,18 @@ describe('Launch Preferences', function () {
465
503
  const promises = [];
466
504
  /**
467
505
  * @param {string} name
468
- * @param {string} text
506
+ * @param {Record<string, unknown>} value
469
507
  */
470
- const ensureConfigModel = (name, text) => {
508
+ const ensureConfigModel = (name, value) => {
471
509
  for (const configPath of configPaths) {
472
510
  promises.push((async () => {
473
511
  try {
474
- const reference = await textModelService.createModelReference(rootUri.resolve(configPath + '/' + name + '.json'));
475
- try {
476
- await workspace.applyBackgroundEdit(reference.object, [{
477
- text,
478
- range: reference.object.textEditorModel.getFullModelRange(),
479
- forceMoveMarkers: false
480
- }]);
481
- } finally {
482
- reference.dispose();
512
+ const uri = rootUri.resolve(configPath + '/' + name + '.json');
513
+ const provider = findProvider(uri);
514
+ if (provider) {
515
+ await provider['doSetPreference']('', [], value);
516
+ } else {
517
+ console.log('Unable to find provider for', uri.path.toString());
483
518
  }
484
519
  } catch (e) {
485
520
  console.error(e);
@@ -488,10 +523,10 @@ describe('Launch Preferences', function () {
488
523
  }
489
524
  };
490
525
  if (settings) {
491
- ensureConfigModel('settings', JSON.stringify(settings));
526
+ ensureConfigModel('settings', settings);
492
527
  }
493
528
  if (launch) {
494
- ensureConfigModel('launch', JSON.stringify(launch));
529
+ ensureConfigModel('launch', launch);
495
530
  }
496
531
  await Promise.all(promises);
497
532
  });
@@ -641,7 +676,6 @@ describe('Launch Preferences', function () {
641
676
  }
642
677
  if (settings) {
643
678
  let _settingsLaunch = undefined;
644
- // eslint-disable-next-line no-null/no-null
645
679
  if (typeof settingsLaunch === 'object' && !Array.isArray(settings['launch']) && settings['launch'] !== null) {
646
680
  _settingsLaunch = settingsLaunch;
647
681
  } else {
@@ -683,7 +683,8 @@ DIV {
683
683
  assert.equal(activeEditor.getControl().getModel().getWordAtPosition({ lineNumber, column }).word, 'Container');
684
684
  });
685
685
 
686
- it('run reference code lens', async function () {
686
+ // TODO: FIXME! As of 28/01/2022 this test is failing or timing out for unknown reasons.
687
+ it.skip('run reference code lens', async function () {
687
688
  this.timeout(300_000); // 5 min (give time to `tsserver` to initialize and then respond to make this test pass.)
688
689
  // @ts-ignore
689
690
  const globalValue = preferences.inspect('javascript.referencesCodeLens.enabled').globalValue;