@sentry/wizard 4.8.0 → 5.0.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/CHANGELOG.md +20 -0
- package/dist/e2e-tests/tests/angular-17.test.js +41 -41
- package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
- package/dist/e2e-tests/tests/angular-19.test.js +39 -39
- package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
- package/dist/e2e-tests/tests/expo.test.js +10 -2
- package/dist/e2e-tests/tests/expo.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-native.test.js +38 -3
- package/dist/e2e-tests/tests/react-native.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.js +14 -6
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/lib/Helper/SentryCli.d.ts +0 -11
- package/dist/lib/Helper/SentryCli.js +0 -52
- package/dist/lib/Helper/SentryCli.js.map +1 -1
- package/dist/lib/Steps/Integrations/Cordova.js +13 -30
- package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
- package/dist/src/android/templates.js +2 -0
- package/dist/src/android/templates.js.map +1 -1
- package/dist/src/angular/angular-wizard.js +1 -1
- package/dist/src/angular/angular-wizard.js.map +1 -1
- package/dist/src/angular/sdk-setup.d.ts +1 -1
- package/dist/src/angular/sdk-setup.js +3 -3
- package/dist/src/angular/sdk-setup.js.map +1 -1
- package/dist/src/apple/code-tools.d.ts +4 -2
- package/dist/src/apple/code-tools.js +21 -11
- package/dist/src/apple/code-tools.js.map +1 -1
- package/dist/src/apple/inject-code-snippet.js +5 -3
- package/dist/src/apple/inject-code-snippet.js.map +1 -1
- package/dist/src/apple/macos-system-helper.d.ts +5 -0
- package/dist/src/apple/macos-system-helper.js +86 -0
- package/dist/src/apple/macos-system-helper.js.map +1 -0
- package/dist/src/apple/templates.js +10 -0
- package/dist/src/apple/templates.js.map +1 -1
- package/dist/src/apple/xcode-manager.d.ts +237 -11
- package/dist/src/apple/xcode-manager.js +736 -65
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/apple/xcode-project-object-with-id.d.ts +5 -0
- package/dist/src/apple/xcode-project-object-with-id.js +3 -0
- package/dist/src/apple/xcode-project-object-with-id.js.map +1 -0
- package/dist/src/flutter/templates.js +7 -1
- package/dist/src/flutter/templates.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +1 -3
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +1 -3
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/react-native/expo-env-file.js +5 -0
- package/dist/src/react-native/expo-env-file.js.map +1 -1
- package/dist/src/react-native/expo-metro.js +18 -5
- package/dist/src/react-native/expo-metro.js.map +1 -1
- package/dist/src/react-native/expo.js +6 -0
- package/dist/src/react-native/expo.js.map +1 -1
- package/dist/src/react-native/glob.js +14 -4
- package/dist/src/react-native/glob.js.map +1 -1
- package/dist/src/react-native/gradle.d.ts +0 -1
- package/dist/src/react-native/gradle.js +15 -9
- package/dist/src/react-native/gradle.js.map +1 -1
- package/dist/src/react-native/javascript.d.ts +9 -4
- package/dist/src/react-native/javascript.js +44 -22
- package/dist/src/react-native/javascript.js.map +1 -1
- package/dist/src/react-native/metro.d.ts +1 -5
- package/dist/src/react-native/metro.js +18 -120
- package/dist/src/react-native/metro.js.map +1 -1
- package/dist/src/react-native/options.d.ts +1 -3
- package/dist/src/react-native/options.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.d.ts +1 -19
- package/dist/src/react-native/react-native-wizard.js +27 -101
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-native/xcode.d.ts +0 -7
- package/dist/src/react-native/xcode.js +15 -108
- package/dist/src/react-native/xcode.js.map +1 -1
- package/dist/src/remix/remix-wizard.js +1 -3
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/run.js +1 -4
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/utils/sdk-version.js +3 -0
- package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +1 -3
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/utils/ast-utils.d.ts +0 -7
- package/dist/src/utils/ast-utils.js +1 -27
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack/index.d.ts +2 -12
- package/dist/src/utils/clack/index.js +8 -47
- package/dist/src/utils/clack/index.js.map +1 -1
- package/dist/src/utils/git.d.ts +11 -0
- package/dist/src/utils/git.js +69 -0
- package/dist/src/utils/git.js.map +1 -0
- package/dist/src/utils/sentrycli-utils.js +13 -4
- package/dist/src/utils/sentrycli-utils.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/apple/code-tools.test.js +54 -35
- package/dist/test/apple/code-tools.test.js.map +1 -1
- package/dist/test/apple/configure-sentry-cli.test.d.ts +1 -0
- package/dist/test/apple/configure-sentry-cli.test.js +131 -0
- package/dist/test/apple/configure-sentry-cli.test.js.map +1 -0
- package/dist/test/apple/macos-system-helper-mocked.test.d.ts +1 -0
- package/dist/test/apple/macos-system-helper-mocked.test.js +46 -0
- package/dist/test/apple/macos-system-helper-mocked.test.js.map +1 -0
- package/dist/test/apple/macos-system-helper.test.d.ts +1 -0
- package/dist/test/apple/macos-system-helper.test.js +88 -0
- package/dist/test/apple/macos-system-helper.test.js.map +1 -0
- package/dist/test/apple/templates.test.js +10 -0
- package/dist/test/apple/templates.test.js.map +1 -1
- package/dist/test/apple/xcode-manager.test.js +745 -379
- package/dist/test/apple/xcode-manager.test.js.map +1 -1
- package/dist/test/flutter/templates.test.js +9 -0
- package/dist/test/flutter/templates.test.js.map +1 -1
- package/dist/test/react-native/gradle.test.js +0 -119
- package/dist/test/react-native/gradle.test.js.map +1 -1
- package/dist/test/react-native/javascript.test.js +119 -0
- package/dist/test/react-native/javascript.test.js.map +1 -1
- package/dist/test/react-native/metro.test.js +0 -90
- package/dist/test/react-native/metro.test.js.map +1 -1
- package/dist/test/react-native/xcode.test.js +0 -81
- package/dist/test/react-native/xcode.test.js.map +1 -1
- package/dist/test/utils/git.test.d.ts +1 -0
- package/dist/test/utils/git.test.js +70 -0
- package/dist/test/utils/git.test.js.map +1 -0
- package/package.json +1 -1
- package/dist/src/react-native/uninstall.d.ts +0 -2
- package/dist/src/react-native/uninstall.js +0 -94
- package/dist/src/react-native/uninstall.js.map +0 -1
|
@@ -22,13 +22,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
const fs = __importStar(require("node:fs"));
|
|
27
30
|
const os = __importStar(require("node:os"));
|
|
28
31
|
const path = __importStar(require("node:path"));
|
|
32
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
33
|
+
const vitest_1 = require("vitest");
|
|
29
34
|
const templates_1 = require("../../src/apple/templates");
|
|
30
35
|
const xcode_manager_1 = require("../../src/apple/xcode-manager");
|
|
31
|
-
const vitest_1 = require("vitest");
|
|
32
36
|
vitest_1.vi.mock('node:fs', async () => ({
|
|
33
37
|
__esModule: true,
|
|
34
38
|
...(await vitest_1.vi.importActual('node:fs')),
|
|
@@ -43,6 +47,8 @@ vitest_1.vi.mock('@clack/prompts', () => ({
|
|
|
43
47
|
const appleProjectsPath = path.resolve(__dirname, '../../fixtures/test-applications/apple');
|
|
44
48
|
const damagedProjectPath = path.join(appleProjectsPath, 'damaged-missing-configuration-list/Project.xcodeproj/project.pbxproj');
|
|
45
49
|
const noTargetsProjectPath = path.join(appleProjectsPath, 'no-targets/Project.xcodeproj/project.pbxproj');
|
|
50
|
+
const noFilesInTargetProjectPath = path.join(appleProjectsPath, 'no-files-in-target/Project.xcodeproj/project.pbxproj');
|
|
51
|
+
const projectWithSynchronizedFolders = path.join(appleProjectsPath, 'project-with-synchronized-folders/Project.xcodeproj/project.pbxproj');
|
|
46
52
|
const singleTargetProjectPath = path.join(appleProjectsPath, 'spm-swiftui-single-target/Project.xcodeproj/project.pbxproj');
|
|
47
53
|
const multiTargetProjectPath = path.join(appleProjectsPath, 'spm-swiftui-multi-targets/Project.xcodeproj/project.pbxproj');
|
|
48
54
|
const projectData = {
|
|
@@ -56,6 +62,22 @@ const projectData = {
|
|
|
56
62
|
keys: [{ dsn: { public: 'https://sentry.io/1234567890' } }],
|
|
57
63
|
};
|
|
58
64
|
(0, vitest_1.describe)('XcodeManager', () => {
|
|
65
|
+
(0, vitest_1.beforeEach)(() => {
|
|
66
|
+
if (node_process_1.default.platform !== 'darwin') {
|
|
67
|
+
// The macOS system helpers are only available on macOS
|
|
68
|
+
// As the test suite is also run on non-macOS platforms, we need to mock the system helpers
|
|
69
|
+
// The path to the Xcode.app can be different on different machines, so we allow overwriting it using environment variables
|
|
70
|
+
vitest_1.vi.mock('../../src/apple/macos-system-helper', () => ({
|
|
71
|
+
MacOSSystemHelpers: {
|
|
72
|
+
findSDKRootDirectoryPath: vitest_1.vi.fn(() => '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk'),
|
|
73
|
+
findDeveloperDirectoryPath: vitest_1.vi.fn(() => '/Applications/Xcode.app/Contents/Developer'),
|
|
74
|
+
readXcodeBuildSettings: vitest_1.vi.fn(() => ({
|
|
75
|
+
CONFIGURATION_BUILD_DIR: path.join(appleProjectsPath, 'project-with-synchronized-folders/build/Release-unknown'),
|
|
76
|
+
})),
|
|
77
|
+
},
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
59
81
|
(0, vitest_1.afterEach)(() => {
|
|
60
82
|
vitest_1.vi.clearAllMocks();
|
|
61
83
|
});
|
|
@@ -376,475 +398,819 @@ const projectData = {
|
|
|
376
398
|
});
|
|
377
399
|
});
|
|
378
400
|
});
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
});
|
|
391
|
-
});
|
|
392
|
-
(0, vitest_1.describe)('target not found', () => {
|
|
393
|
-
(0, vitest_1.it)('should return undefined', () => {
|
|
394
|
-
// -- Arrange --
|
|
395
|
-
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
396
|
-
// -- Act --
|
|
397
|
-
const files = xcodeProject.filesForTarget('NonExistentTarget');
|
|
398
|
-
// -- Assert --
|
|
399
|
-
(0, vitest_1.expect)(files).toBeUndefined();
|
|
400
|
-
});
|
|
401
|
-
});
|
|
402
|
-
(0, vitest_1.describe)('target build phases are undefined', () => {
|
|
403
|
-
(0, vitest_1.it)('should return undefined', () => {
|
|
404
|
-
// -- Arrange --
|
|
405
|
-
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
406
|
-
xcodeProject.objects.PBXNativeTarget = {
|
|
407
|
-
Project: {
|
|
408
|
-
isa: 'PBXNativeTarget',
|
|
409
|
-
name: 'Project',
|
|
410
|
-
buildPhases: undefined,
|
|
411
|
-
},
|
|
412
|
-
};
|
|
413
|
-
// -- Act --
|
|
414
|
-
const files = xcodeProject.filesForTarget('Project');
|
|
415
|
-
// -- Assert --
|
|
416
|
-
(0, vitest_1.expect)(files).toBeUndefined();
|
|
417
|
-
});
|
|
418
|
-
});
|
|
419
|
-
(0, vitest_1.describe)('build phases are undefined', () => {
|
|
420
|
-
(0, vitest_1.it)('should return undefined', () => {
|
|
421
|
-
// -- Arrange --
|
|
422
|
-
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
423
|
-
xcodeProject.objects.PBXNativeTarget = {
|
|
424
|
-
Project: {
|
|
425
|
-
isa: 'PBXNativeTarget',
|
|
426
|
-
name: 'Project',
|
|
427
|
-
buildPhases: undefined,
|
|
428
|
-
},
|
|
429
|
-
};
|
|
430
|
-
xcodeProject.objects.PBXSourcesBuildPhase = undefined;
|
|
431
|
-
// -- Act --
|
|
432
|
-
const files = xcodeProject.filesForTarget('Project');
|
|
433
|
-
// -- Assert --
|
|
434
|
-
(0, vitest_1.expect)(files).toBeUndefined();
|
|
401
|
+
(0, vitest_1.describe)('getSourceFilesForTarget', () => {
|
|
402
|
+
(0, vitest_1.describe)('targets are undefined', () => {
|
|
403
|
+
(0, vitest_1.it)('should return undefined', () => {
|
|
404
|
+
// -- Arrange --
|
|
405
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
406
|
+
xcodeProject.objects.PBXNativeTarget = undefined;
|
|
407
|
+
// -- Act --
|
|
408
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
409
|
+
// -- Assert --
|
|
410
|
+
(0, vitest_1.expect)(files).toBeUndefined();
|
|
411
|
+
});
|
|
435
412
|
});
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
buildPhases: [
|
|
446
|
-
{
|
|
447
|
-
value: 'random-build-phase',
|
|
448
|
-
},
|
|
449
|
-
],
|
|
450
|
-
},
|
|
451
|
-
};
|
|
452
|
-
// -- Act --
|
|
453
|
-
const files = xcodeProject.filesForTarget('Project');
|
|
454
|
-
// -- Assert --
|
|
455
|
-
(0, vitest_1.expect)(files).toBeUndefined();
|
|
413
|
+
(0, vitest_1.describe)('target not found', () => {
|
|
414
|
+
(0, vitest_1.it)('should return undefined', () => {
|
|
415
|
+
// -- Arrange --
|
|
416
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
417
|
+
// -- Act --
|
|
418
|
+
const files = xcodeProject.getSourceFilesForTarget('NonExistentTarget');
|
|
419
|
+
// -- Assert --
|
|
420
|
+
(0, vitest_1.expect)(files).toBeUndefined();
|
|
421
|
+
});
|
|
456
422
|
});
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
};
|
|
473
|
-
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
474
|
-
'build-phase-key': {
|
|
475
|
-
isa: 'PBXSourcesBuildPhase',
|
|
476
|
-
files: undefined,
|
|
477
|
-
},
|
|
478
|
-
};
|
|
479
|
-
// -- Act --
|
|
480
|
-
const files = xcodeProject.filesForTarget('Project');
|
|
481
|
-
// -- Assert --
|
|
482
|
-
(0, vitest_1.expect)(files).toEqual([]);
|
|
423
|
+
(0, vitest_1.describe)('target build phases are undefined', () => {
|
|
424
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
425
|
+
// -- Arrange --
|
|
426
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
427
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
428
|
+
Project: {
|
|
429
|
+
isa: 'PBXNativeTarget',
|
|
430
|
+
name: 'Project',
|
|
431
|
+
buildPhases: undefined,
|
|
432
|
+
},
|
|
433
|
+
};
|
|
434
|
+
// -- Act --
|
|
435
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
436
|
+
// -- Assert --
|
|
437
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
438
|
+
});
|
|
483
439
|
});
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
440
|
+
(0, vitest_1.describe)('build phases are undefined', () => {
|
|
441
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
442
|
+
// -- Arrange --
|
|
443
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
444
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
445
|
+
Project: {
|
|
446
|
+
isa: 'PBXNativeTarget',
|
|
447
|
+
name: 'Project',
|
|
448
|
+
buildPhases: undefined,
|
|
449
|
+
},
|
|
450
|
+
};
|
|
451
|
+
xcodeProject.objects.PBXSourcesBuildPhase = undefined;
|
|
452
|
+
// -- Act --
|
|
453
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
454
|
+
// -- Assert --
|
|
455
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
456
|
+
});
|
|
493
457
|
});
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
{
|
|
515
|
-
value: 'file-key',
|
|
516
|
-
},
|
|
517
|
-
],
|
|
518
|
-
},
|
|
519
|
-
};
|
|
520
|
-
xcodeProject.objects.PBXBuildFile = {
|
|
521
|
-
'file-key': {
|
|
522
|
-
isa: 'PBXBuildFile',
|
|
523
|
-
fileRef: 'file-ref-key',
|
|
524
|
-
},
|
|
525
|
-
};
|
|
526
|
-
xcodeProject.files = [
|
|
527
|
-
{
|
|
528
|
-
key: 'file-ref-key',
|
|
529
|
-
path: 'file-path',
|
|
530
|
-
},
|
|
531
|
-
];
|
|
458
|
+
(0, vitest_1.describe)('referenced build phase is undefined', () => {
|
|
459
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
460
|
+
// -- Arrange --
|
|
461
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
462
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
463
|
+
Project: {
|
|
464
|
+
isa: 'PBXNativeTarget',
|
|
465
|
+
name: 'Project',
|
|
466
|
+
buildPhases: [
|
|
467
|
+
{
|
|
468
|
+
value: 'random-build-phase',
|
|
469
|
+
},
|
|
470
|
+
],
|
|
471
|
+
},
|
|
472
|
+
};
|
|
473
|
+
// -- Act --
|
|
474
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
475
|
+
// -- Assert --
|
|
476
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
477
|
+
});
|
|
532
478
|
});
|
|
533
|
-
(0, vitest_1.describe)('build
|
|
479
|
+
(0, vitest_1.describe)('build phase files are undefined', () => {
|
|
534
480
|
(0, vitest_1.it)('should return empty array', () => {
|
|
535
481
|
// -- Arrange --
|
|
536
|
-
xcodeProject
|
|
482
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
483
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
484
|
+
Project: {
|
|
485
|
+
isa: 'PBXNativeTarget',
|
|
486
|
+
name: 'Project',
|
|
487
|
+
buildPhases: [
|
|
488
|
+
{
|
|
489
|
+
value: 'build-phase-key',
|
|
490
|
+
},
|
|
491
|
+
],
|
|
492
|
+
},
|
|
493
|
+
};
|
|
494
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
495
|
+
'build-phase-key': {
|
|
496
|
+
isa: 'PBXSourcesBuildPhase',
|
|
497
|
+
files: undefined,
|
|
498
|
+
},
|
|
499
|
+
};
|
|
537
500
|
// -- Act --
|
|
538
|
-
const files = xcodeProject.
|
|
501
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
539
502
|
// -- Assert --
|
|
540
503
|
(0, vitest_1.expect)(files).toEqual([]);
|
|
541
504
|
});
|
|
542
505
|
});
|
|
543
|
-
(0, vitest_1.describe)('build
|
|
506
|
+
(0, vitest_1.describe)('build phase has no files', () => {
|
|
544
507
|
(0, vitest_1.it)('should return empty array', () => {
|
|
545
508
|
// -- Arrange --
|
|
546
|
-
xcodeProject
|
|
509
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(noFilesInTargetProjectPath);
|
|
547
510
|
// -- Act --
|
|
548
|
-
const files = xcodeProject.
|
|
511
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
549
512
|
// -- Assert --
|
|
550
513
|
(0, vitest_1.expect)(files).toEqual([]);
|
|
551
514
|
});
|
|
552
515
|
});
|
|
553
|
-
(0, vitest_1.describe)('build
|
|
554
|
-
|
|
555
|
-
|
|
516
|
+
(0, vitest_1.describe)('build phase with files', () => {
|
|
517
|
+
let xcodeProject;
|
|
518
|
+
(0, vitest_1.beforeEach)(() => {
|
|
519
|
+
xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
520
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
521
|
+
'some-target': {
|
|
522
|
+
isa: 'PBXNativeTarget',
|
|
523
|
+
name: 'some-target',
|
|
524
|
+
buildPhases: [
|
|
525
|
+
{
|
|
526
|
+
value: 'build-phase-key',
|
|
527
|
+
},
|
|
528
|
+
],
|
|
529
|
+
},
|
|
530
|
+
};
|
|
531
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
532
|
+
'build-phase-key': {
|
|
533
|
+
isa: 'PBXSourcesBuildPhase',
|
|
534
|
+
files: [
|
|
535
|
+
{
|
|
536
|
+
value: 'file-key',
|
|
537
|
+
},
|
|
538
|
+
],
|
|
539
|
+
},
|
|
540
|
+
};
|
|
541
|
+
xcodeProject.objects.PBXBuildFile = {
|
|
542
|
+
'file-key': {
|
|
543
|
+
isa: 'PBXBuildFile',
|
|
544
|
+
fileRef: 'file-ref-key',
|
|
545
|
+
},
|
|
546
|
+
};
|
|
547
|
+
});
|
|
548
|
+
(0, vitest_1.describe)('build file objects are not defined', () => {
|
|
549
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
550
|
+
// -- Arrange --
|
|
551
|
+
xcodeProject.objects.PBXBuildFile = undefined;
|
|
552
|
+
// -- Act --
|
|
553
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
554
|
+
// -- Assert --
|
|
555
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
556
|
+
});
|
|
557
|
+
});
|
|
558
|
+
(0, vitest_1.describe)('build file object is not found', () => {
|
|
559
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
560
|
+
// -- Arrange --
|
|
561
|
+
xcodeProject.objects.PBXBuildFile = {};
|
|
562
|
+
// -- Act --
|
|
563
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
564
|
+
// -- Assert --
|
|
565
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
566
|
+
});
|
|
567
|
+
});
|
|
568
|
+
(0, vitest_1.describe)('build file object is invalid', () => {
|
|
569
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
570
|
+
// -- Arrange --
|
|
571
|
+
xcodeProject.objects.PBXBuildFile = {
|
|
572
|
+
'file-key': 'invalid-object',
|
|
573
|
+
};
|
|
574
|
+
// -- Act --
|
|
575
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
576
|
+
// -- Assert --
|
|
577
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
578
|
+
});
|
|
579
|
+
});
|
|
580
|
+
(0, vitest_1.describe)('file reference is missing', () => {
|
|
581
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
556
582
|
// -- Arrange --
|
|
557
|
-
xcodeProject.
|
|
583
|
+
xcodeProject.objects.PBXBuildFile = {
|
|
584
|
+
'file-key': {
|
|
585
|
+
isa: 'PBXBuildFile',
|
|
586
|
+
},
|
|
587
|
+
};
|
|
588
|
+
// -- Act --
|
|
589
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
590
|
+
// -- Assert --
|
|
591
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
592
|
+
});
|
|
593
|
+
});
|
|
594
|
+
(0, vitest_1.describe)('file reference is invalid', () => {
|
|
595
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
596
|
+
// -- Arrange --
|
|
597
|
+
xcodeProject.objects.PBXFileReference = {
|
|
598
|
+
'file-ref-key': 'invalid-object',
|
|
599
|
+
};
|
|
600
|
+
// -- Act --
|
|
601
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
602
|
+
// -- Assert --
|
|
603
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
604
|
+
});
|
|
605
|
+
});
|
|
606
|
+
(0, vitest_1.describe)('file reference path is missing', () => {
|
|
607
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
608
|
+
// -- Arrange --
|
|
609
|
+
xcodeProject.objects.PBXFileReference = {
|
|
610
|
+
'file-ref-key': {
|
|
611
|
+
isa: 'PBXFileReference',
|
|
612
|
+
path: undefined,
|
|
613
|
+
sourceTree: 'SOURCE_ROOT',
|
|
614
|
+
},
|
|
615
|
+
};
|
|
558
616
|
// -- Act --
|
|
559
|
-
const files = xcodeProject.
|
|
617
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
560
618
|
// -- Assert --
|
|
561
619
|
(0, vitest_1.expect)(files).toEqual([]);
|
|
562
620
|
});
|
|
563
621
|
});
|
|
564
|
-
(0, vitest_1.
|
|
622
|
+
(0, vitest_1.describe)('valid file reference', () => {
|
|
623
|
+
(0, vitest_1.it)('should return array with file path', () => {
|
|
624
|
+
// -- Arrange --
|
|
625
|
+
xcodeProject.objects.PBXFileReference = {
|
|
626
|
+
'file-ref-key': {
|
|
627
|
+
isa: 'PBXFileReference',
|
|
628
|
+
path: 'test.swift',
|
|
629
|
+
sourceTree: 'SOURCE_ROOT',
|
|
630
|
+
},
|
|
631
|
+
};
|
|
632
|
+
// -- Act --
|
|
633
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
634
|
+
// -- Assert --
|
|
635
|
+
(0, vitest_1.expect)(files).toEqual([
|
|
636
|
+
path.join(xcodeProject.baseDir, 'test.swift'),
|
|
637
|
+
]);
|
|
638
|
+
});
|
|
639
|
+
});
|
|
640
|
+
});
|
|
641
|
+
(0, vitest_1.describe)('synchronized root groups', () => {
|
|
642
|
+
(0, vitest_1.it)('should handle missing fileSystemSynchronizedGroups', () => {
|
|
643
|
+
// -- Arrange --
|
|
644
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
645
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
646
|
+
'some-target': {
|
|
647
|
+
isa: 'PBXNativeTarget',
|
|
648
|
+
name: 'some-target',
|
|
649
|
+
},
|
|
650
|
+
};
|
|
565
651
|
// -- Act --
|
|
566
|
-
const files = xcodeProject.
|
|
652
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
567
653
|
// -- Assert --
|
|
568
|
-
(0, vitest_1.expect)(files).toEqual([
|
|
569
|
-
|
|
570
|
-
|
|
654
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
655
|
+
});
|
|
656
|
+
(0, vitest_1.it)('should handle empty fileSystemSynchronizedGroups', () => {
|
|
657
|
+
// -- Arrange --
|
|
658
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
659
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
660
|
+
'some-target': {
|
|
661
|
+
isa: 'PBXNativeTarget',
|
|
662
|
+
name: 'some-target',
|
|
663
|
+
fileSystemSynchronizedGroups: [],
|
|
664
|
+
},
|
|
665
|
+
};
|
|
666
|
+
// -- Act --
|
|
667
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
668
|
+
// -- Assert --
|
|
669
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
670
|
+
});
|
|
671
|
+
(0, vitest_1.it)('should handle invalid synchronized root group', () => {
|
|
672
|
+
// -- Arrange --
|
|
673
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
674
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
675
|
+
'some-target': {
|
|
676
|
+
isa: 'PBXNativeTarget',
|
|
677
|
+
name: 'some-target',
|
|
678
|
+
fileSystemSynchronizedGroups: [
|
|
679
|
+
{
|
|
680
|
+
value: 'invalid-group',
|
|
681
|
+
},
|
|
682
|
+
],
|
|
683
|
+
},
|
|
684
|
+
};
|
|
685
|
+
// -- Act --
|
|
686
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
687
|
+
// -- Assert --
|
|
688
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
689
|
+
});
|
|
690
|
+
(0, vitest_1.it)('should handle synchronized root group with missing path', () => {
|
|
691
|
+
// -- Arrange --
|
|
692
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
693
|
+
xcodeProject.objects.PBXNativeTarget = {
|
|
694
|
+
'some-target': {
|
|
695
|
+
isa: 'PBXNativeTarget',
|
|
696
|
+
name: 'some-target',
|
|
697
|
+
fileSystemSynchronizedGroups: [
|
|
698
|
+
{
|
|
699
|
+
value: 'group-key',
|
|
700
|
+
},
|
|
701
|
+
],
|
|
702
|
+
},
|
|
703
|
+
};
|
|
704
|
+
xcodeProject.objects.PBXFileSystemSynchronizedRootGroup = {
|
|
705
|
+
'group-key': {
|
|
706
|
+
isa: 'PBXFileSystemSynchronizedRootGroup',
|
|
707
|
+
path: undefined,
|
|
708
|
+
sourceTree: 'SOURCE_ROOT',
|
|
709
|
+
},
|
|
710
|
+
};
|
|
711
|
+
// -- Act --
|
|
712
|
+
const files = xcodeProject.getSourceFilesForTarget('some-target');
|
|
713
|
+
// -- Assert --
|
|
714
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
715
|
+
});
|
|
716
|
+
(0, vitest_1.it)('should exclude files in membership exceptions', () => {
|
|
717
|
+
// -- Arrange --
|
|
718
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
719
|
+
// The subfolder 1-1-1 is a synchronized root group containing two files:
|
|
720
|
+
// - File-1-1-1-1.swift
|
|
721
|
+
// - File-1-1-1-2.swift
|
|
722
|
+
//
|
|
723
|
+
// The membership exceptions are:
|
|
724
|
+
// - File-1-1-1-2.swift
|
|
725
|
+
//
|
|
726
|
+
// The expected result is that File-1-1-1-1.swift is excluded from the build, but
|
|
727
|
+
// included due to the membership exception.
|
|
728
|
+
// The File-1-1-1-2.swift is excluded from the build due to the membership exception.
|
|
729
|
+
// Pre-condition: File-1-1-1-1.swift exists
|
|
730
|
+
const file1111 = path.join(xcodeProject.baseDir, 'Group 1', 'Subgroup 1-1', 'Subfolder 1-1-1', 'File-1-1-1-1.swift');
|
|
731
|
+
(0, vitest_1.expect)(fs.existsSync(file1111)).toBe(true);
|
|
732
|
+
// Pre-condition: File-1-1-1-2.swift exists
|
|
733
|
+
const file1112 = path.join(xcodeProject.baseDir, 'Group 1', 'Subgroup 1-1', 'Subfolder 1-1-1', 'File-1-1-1-2.swift');
|
|
734
|
+
(0, vitest_1.expect)(fs.existsSync(file1112)).toBe(true);
|
|
735
|
+
// -- Act --
|
|
736
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
737
|
+
// -- Assert --
|
|
738
|
+
// Known Issue:
|
|
739
|
+
// The file `File-1-1-1-1.swift` is included in the source build phase, but not in the list of files.
|
|
740
|
+
//
|
|
741
|
+
// This is the group structure:
|
|
742
|
+
// <main group> / Group 1 / Subgroup 1-1 / Subfolder 1-1-1 / File-1-1-1-1.swift
|
|
743
|
+
//
|
|
744
|
+
// - <main group> is the root group
|
|
745
|
+
// - Group 1 is a group
|
|
746
|
+
// - Subgroup 1-1 is a nested group
|
|
747
|
+
// - Subfolder 1-1-1 is a synchronized root group
|
|
748
|
+
// - File-1-1-1-1.swift is a file in the synchronized root group Subfolder 1-1-1
|
|
749
|
+
//
|
|
750
|
+
// For no apparent reason, Xcode is picking up the file, but Group 1 is not mentioned anywhere other then the main group.
|
|
751
|
+
// This would require us to consider every root group as a potential source of files, which seems excessive if a project has multiple targets.
|
|
752
|
+
// expect(files).toContain(file1111);
|
|
753
|
+
(0, vitest_1.expect)(files).not.toContain(file1112);
|
|
754
|
+
});
|
|
755
|
+
(0, vitest_1.it)('should return synchronized files and files in main group', () => {
|
|
756
|
+
// -- Arrange --
|
|
757
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
758
|
+
// -- Act --
|
|
759
|
+
const files = xcodeProject.getSourceFilesForTarget('Project');
|
|
760
|
+
// -- Assert --
|
|
761
|
+
// The order is not guaranteed, so we need to check for each file individually
|
|
762
|
+
// The order in this test case is the one displayed in the Xcode UI
|
|
763
|
+
const group1DirPath = path.join(xcodeProject.baseDir, 'Group 1');
|
|
764
|
+
const subgroup1_1DirPath = path.join(group1DirPath, 'Subgroup 1-1');
|
|
765
|
+
const subgroup1_2DirPath = path.join(group1DirPath, 'Subgroup 1-2');
|
|
766
|
+
const subgroup1_1_2DirPath = path.join(subgroup1_1DirPath, 'Subgroup 1-1-2');
|
|
767
|
+
const sourcesDirPath = path.join(xcodeProject.baseDir, 'Sources');
|
|
768
|
+
const subfolder1DirPath = path.join(sourcesDirPath, 'Subfolder 1');
|
|
769
|
+
const subfolder2DirPath = path.join(sourcesDirPath, 'Subfolder 2');
|
|
770
|
+
const groupRef1_3DirPath = path.join(xcodeProject.baseDir, 'Group Reference 1-3');
|
|
771
|
+
(0, vitest_1.expect)(files).toContain(path.join(subgroup1_2DirPath, 'File-1-2-2.swift'));
|
|
772
|
+
(0, vitest_1.expect)(files).toContain(path.join(subfolder1DirPath, 'ContentView.swift'));
|
|
773
|
+
(0, vitest_1.expect)(files).toContain(path.join(subgroup1_2DirPath, 'File-1-2-3--relative-to-group.swift'));
|
|
774
|
+
(0, vitest_1.expect)(files).toContain(path.join(sourcesDirPath, 'MainApp.swift'));
|
|
775
|
+
(0, vitest_1.expect)(files).toContain(path.join(subfolder2DirPath, 'File.swift'));
|
|
776
|
+
// Absolute path
|
|
777
|
+
(0, vitest_1.expect)(files).toContain('/System/Library/CoreServices/SystemVersion.plist');
|
|
778
|
+
// Path relative to the SDK
|
|
779
|
+
(0, vitest_1.expect)(files).toContain('/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/SDKSettings.plist');
|
|
780
|
+
// Path relative to the developer directory
|
|
781
|
+
(0, vitest_1.expect)(files).toContain('/Applications/Xcode.app/Contents/Developer/usr/bin/git');
|
|
782
|
+
// Path relative to the build products directory
|
|
783
|
+
// NOT SUPPORTED YET
|
|
784
|
+
// Path relative to the project
|
|
785
|
+
(0, vitest_1.expect)(files).toContain(path.join(subgroup1_2DirPath, 'File-1-2-1.swift'));
|
|
786
|
+
(0, vitest_1.expect)(files).toContain(path.join(groupRef1_3DirPath, 'File-1-3-1.swift'));
|
|
787
|
+
(0, vitest_1.expect)(files).toContain(path.join(subgroup1_2DirPath, 'File-1-2-3--relative-to-project.swift'));
|
|
788
|
+
(0, vitest_1.expect)(files).toContain(path.join(subgroup1_1_2DirPath, 'File-1-1-2-1.swift'));
|
|
789
|
+
// Known Issue:
|
|
790
|
+
// The file `File-1-1-1-1.swift` is included in the source build phase, but not in the list of files.
|
|
791
|
+
//
|
|
792
|
+
// This is the group structure:
|
|
793
|
+
// <main group> / Group 1 / Subgroup 1-1 / Subfolder 1-1-1 / File-1-1-1-1.swift
|
|
794
|
+
//
|
|
795
|
+
// - <main group> is the root group
|
|
796
|
+
// - Group 1 is a group
|
|
797
|
+
// - Subgroup 1-1 is a nested group
|
|
798
|
+
// - Subfolder 1-1-1 is a synchronized root group
|
|
799
|
+
// - File-1-1-1-1.swift is a file in the synchronized root group Subfolder 1-1-1
|
|
800
|
+
//
|
|
801
|
+
// For no apparent reason, Xcode is picking up the file, but Group 1 is not mentioned anywhere other then the main group.
|
|
802
|
+
// This would require us to consider every root group as a potential source of files, which seems excessive if a project has multiple targets.
|
|
803
|
+
// expect(files).toContain(
|
|
804
|
+
// path.join(
|
|
805
|
+
// xcodeProject.baseDir,
|
|
806
|
+
// 'Group 1',
|
|
807
|
+
// 'Subgroup 1-1',
|
|
808
|
+
// 'Subfolder 1-1-1',
|
|
809
|
+
// 'File-1-1-1-1.swift',
|
|
810
|
+
// ),
|
|
811
|
+
// );
|
|
812
|
+
// Assert that there are no other file paths in the list
|
|
813
|
+
(0, vitest_1.expect)(files).toHaveLength(12);
|
|
571
814
|
});
|
|
572
815
|
});
|
|
573
816
|
});
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
591
|
-
const project = xcodeProject.objects.PBXProject?.['D4E604C52D50CEEC00CAB00F'];
|
|
592
|
-
if (project) {
|
|
593
|
-
delete project.mainGroup;
|
|
594
|
-
}
|
|
595
|
-
// -- Act --
|
|
596
|
-
const files = xcodeProject.projectFiles();
|
|
597
|
-
// -- Assert --
|
|
598
|
-
(0, vitest_1.expect)(files).toEqual([]);
|
|
817
|
+
(0, vitest_1.describe)('findFilesInSourceBuildPhase', () => {
|
|
818
|
+
(0, vitest_1.describe)('when build phase is not found', () => {
|
|
819
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
820
|
+
// -- Arrange --
|
|
821
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
822
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
823
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
824
|
+
nativeTarget.buildPhases = undefined;
|
|
825
|
+
// -- Act --
|
|
826
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
827
|
+
id: nativeTargetId,
|
|
828
|
+
obj: nativeTarget,
|
|
829
|
+
});
|
|
830
|
+
// -- Assert --
|
|
831
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
832
|
+
});
|
|
599
833
|
});
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
834
|
+
(0, vitest_1.describe)('build phase files are undefined', () => {
|
|
835
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
836
|
+
// -- Arrange --
|
|
837
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
838
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
839
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
840
|
+
nativeTarget.buildPhases = [
|
|
841
|
+
{
|
|
842
|
+
value: 'build-phase-key',
|
|
843
|
+
},
|
|
844
|
+
];
|
|
845
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
846
|
+
'build-phase-key': {
|
|
847
|
+
isa: 'PBXSourcesBuildPhase',
|
|
848
|
+
files: undefined,
|
|
849
|
+
},
|
|
850
|
+
};
|
|
851
|
+
// -- Act --
|
|
852
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
853
|
+
id: nativeTargetId,
|
|
854
|
+
obj: nativeTarget,
|
|
855
|
+
});
|
|
856
|
+
// -- Assert --
|
|
857
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
858
|
+
});
|
|
614
859
|
});
|
|
615
|
-
(0, vitest_1.
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
860
|
+
(0, vitest_1.describe)('build phase files are empty', () => {
|
|
861
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
862
|
+
// -- Arrange --
|
|
863
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
864
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
865
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
866
|
+
nativeTarget.buildPhases = [
|
|
867
|
+
{
|
|
868
|
+
value: 'build-phase-key',
|
|
869
|
+
},
|
|
870
|
+
];
|
|
871
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
872
|
+
'build-phase-key': {
|
|
873
|
+
isa: 'PBXSourcesBuildPhase',
|
|
874
|
+
files: [],
|
|
875
|
+
},
|
|
876
|
+
};
|
|
877
|
+
// -- Act --
|
|
878
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
879
|
+
id: nativeTargetId,
|
|
880
|
+
obj: nativeTarget,
|
|
881
|
+
});
|
|
882
|
+
// -- Assert --
|
|
883
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
884
|
+
});
|
|
625
885
|
});
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
886
|
+
(0, vitest_1.describe)('build phase file is a comment', () => {
|
|
887
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
888
|
+
// -- Arrange --
|
|
889
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
890
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
891
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
892
|
+
nativeTarget.buildPhases = [
|
|
893
|
+
{
|
|
894
|
+
value: 'build-phase-key',
|
|
895
|
+
},
|
|
896
|
+
];
|
|
897
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
898
|
+
'build-phase-key': 'this is a comment',
|
|
899
|
+
};
|
|
900
|
+
// Smoke test to ensure native target is defined
|
|
901
|
+
(0, vitest_1.expect)(nativeTarget).toBeDefined();
|
|
902
|
+
// -- Act --
|
|
903
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
904
|
+
id: nativeTargetId,
|
|
905
|
+
obj: nativeTarget,
|
|
906
|
+
});
|
|
907
|
+
// -- Assert --
|
|
908
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
909
|
+
});
|
|
642
910
|
});
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
911
|
+
(0, vitest_1.describe)('build phase file is not found', () => {
|
|
912
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
913
|
+
// -- Arrange --
|
|
914
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
915
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
916
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
917
|
+
nativeTarget.buildPhases = [
|
|
918
|
+
{
|
|
919
|
+
value: 'build-phase-key',
|
|
920
|
+
},
|
|
921
|
+
];
|
|
922
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
923
|
+
'build-phase-key': {
|
|
924
|
+
isa: 'PBXSourcesBuildPhase',
|
|
925
|
+
files: [],
|
|
926
|
+
},
|
|
927
|
+
};
|
|
928
|
+
// -- Act --
|
|
929
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
930
|
+
id: nativeTargetId,
|
|
931
|
+
obj: nativeTarget,
|
|
932
|
+
});
|
|
933
|
+
// -- Assert --
|
|
934
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
935
|
+
});
|
|
655
936
|
});
|
|
656
|
-
|
|
657
|
-
(0, vitest_1.describe)('group child is file reference', () => {
|
|
658
|
-
const group = {
|
|
659
|
-
isa: 'PBXGroup',
|
|
660
|
-
children: [
|
|
661
|
-
{
|
|
662
|
-
value: 'D4E604CD2D50CEEC00CAB00F',
|
|
663
|
-
},
|
|
664
|
-
],
|
|
665
|
-
path: '',
|
|
666
|
-
};
|
|
667
|
-
(0, vitest_1.describe)('file references are undefined', () => {
|
|
937
|
+
(0, vitest_1.describe)('build phase file reference is a comment', () => {
|
|
668
938
|
(0, vitest_1.it)('should return empty array', () => {
|
|
669
939
|
// -- Arrange --
|
|
670
|
-
const xcodeProject = new xcode_manager_1.XcodeProject(
|
|
671
|
-
|
|
940
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
941
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
942
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
943
|
+
nativeTarget.buildPhases = [
|
|
944
|
+
{
|
|
945
|
+
value: 'build-phase-key',
|
|
946
|
+
},
|
|
947
|
+
];
|
|
948
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
949
|
+
'build-phase-key': {
|
|
950
|
+
isa: 'PBXSourcesBuildPhase',
|
|
951
|
+
files: [
|
|
952
|
+
{
|
|
953
|
+
value: 'file-key',
|
|
954
|
+
},
|
|
955
|
+
],
|
|
956
|
+
},
|
|
957
|
+
};
|
|
958
|
+
xcodeProject.objects.PBXBuildFile = {
|
|
959
|
+
'file-key': {
|
|
960
|
+
isa: 'PBXBuildFile',
|
|
961
|
+
fileRef: 'file-ref-key',
|
|
962
|
+
},
|
|
963
|
+
};
|
|
964
|
+
xcodeProject.objects.PBXFileReference = {
|
|
965
|
+
'file-ref-key': 'this is a comment',
|
|
966
|
+
};
|
|
672
967
|
// -- Act --
|
|
673
|
-
const files = xcodeProject.
|
|
968
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
969
|
+
id: nativeTargetId,
|
|
970
|
+
obj: nativeTarget,
|
|
971
|
+
});
|
|
674
972
|
// -- Assert --
|
|
675
973
|
(0, vitest_1.expect)(files).toEqual([]);
|
|
676
974
|
});
|
|
677
975
|
});
|
|
678
|
-
(0, vitest_1.describe)('file reference
|
|
976
|
+
(0, vitest_1.describe)('build phase file reference has no path', () => {
|
|
679
977
|
(0, vitest_1.it)('should be ignored', () => {
|
|
680
978
|
// -- Arrange --
|
|
681
|
-
const xcodeProject = new xcode_manager_1.XcodeProject(
|
|
682
|
-
const
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
979
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
980
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
981
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
982
|
+
nativeTarget.buildPhases = [
|
|
983
|
+
{
|
|
984
|
+
value: 'build-phase-key',
|
|
985
|
+
},
|
|
986
|
+
];
|
|
987
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
988
|
+
'build-phase-key': {
|
|
989
|
+
isa: 'PBXSourcesBuildPhase',
|
|
990
|
+
files: [
|
|
991
|
+
{
|
|
992
|
+
value: 'file-key',
|
|
993
|
+
},
|
|
994
|
+
],
|
|
995
|
+
},
|
|
996
|
+
};
|
|
997
|
+
xcodeProject.objects.PBXBuildFile = {
|
|
998
|
+
'file-key': {
|
|
999
|
+
isa: 'PBXBuildFile',
|
|
1000
|
+
fileRef: 'file-ref-key',
|
|
1001
|
+
},
|
|
1002
|
+
};
|
|
1003
|
+
xcodeProject.objects.PBXFileReference = {
|
|
1004
|
+
'file-ref-key': {
|
|
1005
|
+
isa: 'PBXFileReference',
|
|
1006
|
+
path: undefined,
|
|
1007
|
+
sourceTree: 'SOURCE_ROOT',
|
|
1008
|
+
},
|
|
690
1009
|
};
|
|
691
1010
|
// -- Act --
|
|
692
|
-
const files = xcodeProject.
|
|
1011
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
1012
|
+
id: nativeTargetId,
|
|
1013
|
+
obj: nativeTarget,
|
|
1014
|
+
});
|
|
693
1015
|
// -- Assert --
|
|
694
1016
|
(0, vitest_1.expect)(files).toEqual([]);
|
|
695
1017
|
});
|
|
696
1018
|
});
|
|
697
|
-
(0, vitest_1.describe)('file reference
|
|
698
|
-
(0, vitest_1.it)('should
|
|
1019
|
+
(0, vitest_1.describe)('when file reference path contains doublequotes', () => {
|
|
1020
|
+
(0, vitest_1.it)('should be removed', () => {
|
|
699
1021
|
// -- Arrange --
|
|
700
|
-
const xcodeProject = new xcode_manager_1.XcodeProject(
|
|
1022
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
1023
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1024
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1025
|
+
nativeTarget.buildPhases = [
|
|
1026
|
+
{
|
|
1027
|
+
value: 'build-phase-key',
|
|
1028
|
+
},
|
|
1029
|
+
];
|
|
1030
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {
|
|
1031
|
+
'build-phase-key': {
|
|
1032
|
+
isa: 'PBXSourcesBuildPhase',
|
|
1033
|
+
files: [
|
|
1034
|
+
{
|
|
1035
|
+
value: 'file-key',
|
|
1036
|
+
},
|
|
1037
|
+
],
|
|
1038
|
+
},
|
|
1039
|
+
};
|
|
1040
|
+
xcodeProject.objects.PBXBuildFile = {
|
|
1041
|
+
'file-key': {
|
|
1042
|
+
isa: 'PBXBuildFile',
|
|
1043
|
+
fileRef: 'file-ref-key',
|
|
1044
|
+
},
|
|
1045
|
+
};
|
|
701
1046
|
xcodeProject.objects.PBXFileReference = {
|
|
702
|
-
|
|
1047
|
+
'file-ref-key': {
|
|
703
1048
|
isa: 'PBXFileReference',
|
|
704
|
-
path: '"
|
|
1049
|
+
path: '"path/with/quotes.swift"',
|
|
705
1050
|
sourceTree: 'SOURCE_ROOT',
|
|
706
1051
|
},
|
|
707
1052
|
};
|
|
708
|
-
const group = {
|
|
709
|
-
isa: 'PBXGroup',
|
|
710
|
-
children: [
|
|
711
|
-
{
|
|
712
|
-
value: 'D4E604CD2D50CEEC00CAB00F',
|
|
713
|
-
},
|
|
714
|
-
],
|
|
715
|
-
path: '',
|
|
716
|
-
};
|
|
717
1053
|
// -- Act --
|
|
718
|
-
const files = xcodeProject.
|
|
1054
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
1055
|
+
id: nativeTargetId,
|
|
1056
|
+
obj: nativeTarget,
|
|
1057
|
+
});
|
|
719
1058
|
// -- Assert --
|
|
720
1059
|
(0, vitest_1.expect)(files).toEqual([
|
|
721
|
-
|
|
722
|
-
key: 'D4E604CD2D50CEEC00CAB00F',
|
|
723
|
-
path: 'some/path/to/file.swift',
|
|
724
|
-
},
|
|
1060
|
+
path.join(xcodeProject.baseDir, 'path/with/quotes.swift'),
|
|
725
1061
|
]);
|
|
726
1062
|
});
|
|
727
1063
|
});
|
|
1064
|
+
(0, vitest_1.it)('should return all files in build phase', () => {
|
|
1065
|
+
// -- Arrange --
|
|
1066
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
1067
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1068
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1069
|
+
// -- Act --
|
|
1070
|
+
const files = xcodeProject.findFilesInSourceBuildPhase({
|
|
1071
|
+
id: nativeTargetId,
|
|
1072
|
+
obj: nativeTarget,
|
|
1073
|
+
});
|
|
1074
|
+
// -- Assert --
|
|
1075
|
+
// The list should reflect exactly the list of `files` in the `PBXSourcesBuildPhase` in the project.pbxproj file
|
|
1076
|
+
(0, vitest_1.expect)(files).toEqual([
|
|
1077
|
+
// Absolute paths
|
|
1078
|
+
'/System/Library/CoreServices/SystemVersion.plist',
|
|
1079
|
+
// Path relative to the build directory
|
|
1080
|
+
// NOT SUPPORTED YET
|
|
1081
|
+
// Path relative to the SDK
|
|
1082
|
+
'/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/SDKSettings.plist',
|
|
1083
|
+
// Path relative to the developer directory
|
|
1084
|
+
'/Applications/Xcode.app/Contents/Developer/usr/bin/git',
|
|
1085
|
+
path.join(xcodeProject.baseDir, 'Group 1', 'Subgroup 1-2', 'File-1-2-2.swift'),
|
|
1086
|
+
path.join(xcodeProject.baseDir, 'Group 1', 'Subgroup 1-2', 'File-1-2-3--relative-to-group.swift'),
|
|
1087
|
+
path.join(xcodeProject.baseDir, 'Group 1', 'Subgroup 1-2', 'File-1-2-1.swift'),
|
|
1088
|
+
path.join(xcodeProject.baseDir, 'Group 1', 'Subgroup 1-1', 'Subgroup 1-1-2', 'File-1-1-2-1.swift'),
|
|
1089
|
+
path.join(xcodeProject.baseDir, 'Group Reference 1-3', 'File-1-3-1.swift'),
|
|
1090
|
+
path.join(xcodeProject.baseDir, 'Group 1', 'Subgroup 1-2', 'File-1-2-3--relative-to-project.swift'),
|
|
1091
|
+
]);
|
|
1092
|
+
});
|
|
728
1093
|
});
|
|
729
|
-
(0, vitest_1.describe)('
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
children: [
|
|
733
|
-
{
|
|
734
|
-
value: 'D4E604C42D50CEEC00CAB00F',
|
|
735
|
-
},
|
|
736
|
-
],
|
|
737
|
-
path: '',
|
|
738
|
-
};
|
|
739
|
-
(0, vitest_1.describe)('groups are undefined', () => {
|
|
740
|
-
(0, vitest_1.it)('should return empty array', () => {
|
|
1094
|
+
(0, vitest_1.describe)('findSourceBuildPhaseInTarget', () => {
|
|
1095
|
+
(0, vitest_1.describe)('when build phases are undefined', () => {
|
|
1096
|
+
(0, vitest_1.it)('should return undefined', () => {
|
|
741
1097
|
// -- Arrange --
|
|
742
1098
|
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
743
|
-
|
|
1099
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1100
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1101
|
+
nativeTarget.buildPhases = undefined;
|
|
744
1102
|
// -- Act --
|
|
745
|
-
const
|
|
1103
|
+
const buildPhase = xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);
|
|
746
1104
|
// -- Assert --
|
|
747
|
-
(0, vitest_1.expect)(
|
|
1105
|
+
(0, vitest_1.expect)(buildPhase).toBeUndefined();
|
|
748
1106
|
});
|
|
749
1107
|
});
|
|
750
|
-
(0, vitest_1.describe)('
|
|
751
|
-
(0, vitest_1.it)('should return
|
|
1108
|
+
(0, vitest_1.describe)('when build phases are empty', () => {
|
|
1109
|
+
(0, vitest_1.it)('should return undefined', () => {
|
|
752
1110
|
// -- Arrange --
|
|
753
1111
|
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
754
|
-
const
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
{
|
|
758
|
-
value: 'D4E604CE2D50CEEC00CAB00F_comment',
|
|
759
|
-
},
|
|
760
|
-
],
|
|
761
|
-
path: '',
|
|
762
|
-
};
|
|
1112
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1113
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1114
|
+
nativeTarget.buildPhases = [];
|
|
763
1115
|
// -- Act --
|
|
764
|
-
const
|
|
1116
|
+
const buildPhase = xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);
|
|
765
1117
|
// -- Assert --
|
|
766
|
-
(0, vitest_1.expect)(
|
|
1118
|
+
(0, vitest_1.expect)(buildPhase).toBeUndefined();
|
|
767
1119
|
});
|
|
768
1120
|
});
|
|
769
|
-
(0, vitest_1.describe)('
|
|
770
|
-
(0, vitest_1.it)('should
|
|
1121
|
+
(0, vitest_1.describe)('when referenced build phase is not found', () => {
|
|
1122
|
+
(0, vitest_1.it)('should ignore it', () => {
|
|
771
1123
|
// -- Arrange --
|
|
772
1124
|
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
773
|
-
|
|
774
|
-
const
|
|
775
|
-
|
|
776
|
-
(0, vitest_1.expect)(files).toEqual([
|
|
1125
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1126
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1127
|
+
nativeTarget.buildPhases = [
|
|
777
1128
|
{
|
|
778
|
-
|
|
779
|
-
path: 'Project.app',
|
|
1129
|
+
value: 'build-phase-key',
|
|
780
1130
|
},
|
|
781
|
-
]
|
|
1131
|
+
];
|
|
1132
|
+
xcodeProject.objects.PBXSourcesBuildPhase = {};
|
|
1133
|
+
// -- Act --
|
|
1134
|
+
const buildPhase = xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);
|
|
1135
|
+
// -- Assert --
|
|
1136
|
+
(0, vitest_1.expect)(buildPhase).toBeUndefined();
|
|
782
1137
|
});
|
|
783
1138
|
});
|
|
784
|
-
(0, vitest_1.describe)('
|
|
785
|
-
(0, vitest_1.it)('should
|
|
1139
|
+
(0, vitest_1.describe)('when referenced build phase is found', () => {
|
|
1140
|
+
(0, vitest_1.it)('should return the build phase', () => {
|
|
786
1141
|
// -- Arrange --
|
|
787
1142
|
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
788
|
-
const
|
|
789
|
-
|
|
790
|
-
children: [
|
|
791
|
-
{
|
|
792
|
-
value: 'sub-group',
|
|
793
|
-
},
|
|
794
|
-
],
|
|
795
|
-
path: '"some/path/to/group"',
|
|
796
|
-
};
|
|
797
|
-
const subgroup = {
|
|
798
|
-
isa: 'PBXGroup',
|
|
799
|
-
children: [
|
|
800
|
-
{
|
|
801
|
-
value: 'file-at-path',
|
|
802
|
-
},
|
|
803
|
-
],
|
|
804
|
-
};
|
|
805
|
-
const file = {
|
|
806
|
-
isa: 'PBXFileReference',
|
|
807
|
-
path: '"some/file/at/path.swift"',
|
|
808
|
-
sourceTree: '<group>',
|
|
809
|
-
};
|
|
810
|
-
xcodeProject.objects.PBXGroup = {
|
|
811
|
-
'main-group': group,
|
|
812
|
-
'sub-group': subgroup,
|
|
813
|
-
};
|
|
814
|
-
xcodeProject.objects.PBXFileReference = {
|
|
815
|
-
'file-at-path': file,
|
|
816
|
-
};
|
|
1143
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1144
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
817
1145
|
// -- Act --
|
|
818
|
-
const
|
|
1146
|
+
const buildPhase = xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);
|
|
819
1147
|
// -- Assert --
|
|
820
|
-
(0, vitest_1.expect)(
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
1148
|
+
(0, vitest_1.expect)(buildPhase).toEqual({
|
|
1149
|
+
id: 'D4E604C92D50CEEC00CAB00F',
|
|
1150
|
+
obj: {
|
|
1151
|
+
isa: 'PBXSourcesBuildPhase',
|
|
1152
|
+
files: [],
|
|
1153
|
+
buildActionMask: 2147483647,
|
|
1154
|
+
runOnlyForDeploymentPostprocessing: 0,
|
|
824
1155
|
},
|
|
825
|
-
|
|
1156
|
+
});
|
|
826
1157
|
});
|
|
827
1158
|
});
|
|
828
1159
|
});
|
|
829
|
-
(0, vitest_1.describe)('
|
|
830
|
-
(0, vitest_1.
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
1160
|
+
(0, vitest_1.describe)('findFilesInSynchronizedRootGroups', () => {
|
|
1161
|
+
(0, vitest_1.describe)('when synchronized root groups are undefined', () => {
|
|
1162
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
1163
|
+
// -- Arrange --
|
|
1164
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
1165
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1166
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1167
|
+
nativeTarget.fileSystemSynchronizedGroups = undefined;
|
|
1168
|
+
// -- Act --
|
|
1169
|
+
const files = xcodeProject.findFilesInSynchronizedRootGroups({
|
|
1170
|
+
id: nativeTargetId,
|
|
1171
|
+
obj: nativeTarget,
|
|
1172
|
+
});
|
|
1173
|
+
// -- Assert --
|
|
1174
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
1175
|
+
});
|
|
1176
|
+
});
|
|
1177
|
+
(0, vitest_1.describe)('when synchronized root groups are empty', () => {
|
|
1178
|
+
(0, vitest_1.it)('should return empty array', () => {
|
|
1179
|
+
// -- Arrange --
|
|
1180
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(singleTargetProjectPath);
|
|
1181
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1182
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1183
|
+
nativeTarget.fileSystemSynchronizedGroups = [];
|
|
1184
|
+
// -- Act --
|
|
1185
|
+
const files = xcodeProject.findFilesInSynchronizedRootGroups({
|
|
1186
|
+
id: nativeTargetId,
|
|
1187
|
+
obj: nativeTarget,
|
|
1188
|
+
});
|
|
1189
|
+
// -- Assert --
|
|
1190
|
+
(0, vitest_1.expect)(files).toEqual([]);
|
|
1191
|
+
});
|
|
1192
|
+
});
|
|
1193
|
+
(0, vitest_1.describe)('when synchronized root groups are not found', () => {
|
|
1194
|
+
(0, vitest_1.it)('should ignore files in them', () => {
|
|
1195
|
+
// -- Arrange --
|
|
1196
|
+
const xcodeProject = new xcode_manager_1.XcodeProject(projectWithSynchronizedFolders);
|
|
1197
|
+
const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';
|
|
1198
|
+
const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[nativeTargetId];
|
|
1199
|
+
// Add an invalid group reference to the native target
|
|
1200
|
+
nativeTarget.fileSystemSynchronizedGroups = [
|
|
1201
|
+
...(nativeTarget.fileSystemSynchronizedGroups || []),
|
|
838
1202
|
{
|
|
839
|
-
value: '
|
|
1203
|
+
value: 'invalid-group-key',
|
|
840
1204
|
},
|
|
841
|
-
]
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
1205
|
+
];
|
|
1206
|
+
// -- Act --
|
|
1207
|
+
const files = xcodeProject.findFilesInSynchronizedRootGroups({
|
|
1208
|
+
id: nativeTargetId,
|
|
1209
|
+
obj: nativeTarget,
|
|
1210
|
+
});
|
|
1211
|
+
// -- Assert --
|
|
1212
|
+
(0, vitest_1.expect)(files).not.toContain(path.join(xcodeProject.baseDir, 'Sources', 'Subfolder 1', 'Excluded-File.swift'));
|
|
1213
|
+
});
|
|
848
1214
|
});
|
|
849
1215
|
});
|
|
850
1216
|
});
|