@@ -7,6 +7,7 @@ private let fixturesPath = URL(fileURLWithPath: #filePath)
77 . appendingPathComponent ( " Resources " )
88 . appendingPathComponent ( " Fixtures " )
99private let clangPackageWithUmbrellaDirectoryPath = fixturesPath. appendingPathComponent ( " ClangPackageWithUmbrellaDirectory " )
10+ private let clangPackageWithRelativePublicHeadersPath = fixturesPath. appendingPathComponent ( " ClangPackageWithRelativePublicHeadersPath " )
1011
1112private struct PackageLocatorMock : PackageLocator {
1213 let packageDirectory : URL
@@ -29,6 +30,8 @@ struct FrameworkModuleMapGeneratorTests {
2930 defer { try ? fileSystem. removeFileTree ( outputDirectory) }
3031
3132 let generatedModuleMapContents = try await generateModuleMap (
33+ for: clangPackageWithUmbrellaDirectoryPath,
34+ moduleName: " MyTarget " ,
3235 keepPublicHeadersStructure: false ,
3336 outputDirectory: outputDirectory
3437 )
@@ -51,6 +54,8 @@ framework module MyTarget {
5154 defer { try ? fileSystem. removeFileTree ( outputDirectory) }
5255
5356 let generatedModuleMapContents = try await generateModuleMap (
57+ for: clangPackageWithUmbrellaDirectoryPath,
58+ moduleName: " MyTarget " ,
5459 keepPublicHeadersStructure: true ,
5560 outputDirectory: outputDirectory
5661 )
@@ -67,7 +72,29 @@ framework module MyTarget {
6772 #expect( generatedModuleMapContents == expectedModuleMapContents)
6873 }
6974
75+ @Test
76+ func generate_keepPublicHeadersStructure_withRelativePublicHeadersPath_is_true( ) async throws {
77+ let outputDirectory = temporaryDirectory. appending ( component: #function)
78+ defer { try ? fileSystem. removeFileTree ( outputDirectory) }
79+
80+ let generatedModuleMapContents = try await generateModuleMap (
81+ for: clangPackageWithRelativePublicHeadersPath,
82+ moduleName: " ClangPackageWithRelativePublicHeadersPath " ,
83+ keepPublicHeadersStructure: true ,
84+ outputDirectory: outputDirectory
85+ )
86+ let expectedModuleMapContents = """
87+ framework module ClangPackageWithRelativePublicHeadersPath {
88+ header " ClangPackageWithRelativePublicHeadersPath/add.h "
89+ export *
90+ }
91+ """
92+ #expect( generatedModuleMapContents == expectedModuleMapContents)
93+ }
94+
7095 private func generateModuleMap(
96+ for packageDirectory: URL ,
97+ moduleName: String ,
7198 keepPublicHeadersStructure: Bool ,
7299 outputDirectory: URL
73100 ) async throws -> String {
@@ -78,12 +105,12 @@ framework module MyTarget {
78105 )
79106
80107 let descriptionPackage = try await DescriptionPackage (
81- packageDirectory: clangPackageWithUmbrellaDirectoryPath ,
108+ packageDirectory: packageDirectory ,
82109 mode: . createPackage,
83110 onlyUseVersionsFromResolvedFile: false
84111 )
85112 let generatedModuleMapPath = try generator. generate (
86- resolvedTarget: #require( descriptionPackage. graph. module ( for: " MyTarget " ) ) ,
113+ resolvedTarget: #require( descriptionPackage. graph. module ( for: moduleName ) ) ,
87114 sdk: SDK . macOS,
88115 keepPublicHeadersStructure: keepPublicHeadersStructure
89116 )
0 commit comments