@theia/api-tests 1.22.0-next.7 → 1.22.1
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 +3 -3
- package/src/launch-preferences.spec.js +61 -27
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/api-tests",
|
|
3
|
-
"version": "1.22.
|
|
3
|
+
"version": "1.22.1",
|
|
4
4
|
"description": "Theia API tests",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.22.
|
|
6
|
+
"@theia/core": "1.22.1"
|
|
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": "
|
|
23
|
+
"gitHead": "49910aeaecf520a54b253db0215b28c2268bb2f3"
|
|
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(
|
|
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
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
return;
|
|
446
|
+
if (provider) {
|
|
447
|
+
if (provider.valid) {
|
|
448
|
+
await waitForEvent(provider.onDidChangeValidity, 5000);
|
|
407
449
|
}
|
|
408
|
-
await
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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}
|
|
506
|
+
* @param {Record<string, unknown>} value
|
|
469
507
|
*/
|
|
470
|
-
const ensureConfigModel = (name,
|
|
508
|
+
const ensureConfigModel = (name, value) => {
|
|
471
509
|
for (const configPath of configPaths) {
|
|
472
510
|
promises.push((async () => {
|
|
473
511
|
try {
|
|
474
|
-
const
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
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',
|
|
526
|
+
ensureConfigModel('settings', settings);
|
|
492
527
|
}
|
|
493
528
|
if (launch) {
|
|
494
|
-
ensureConfigModel('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 {
|