Skip to content

Commit e3e6f34

Browse files
committed
Add overrideWithStaticBuildConfigurationFile test case
1 parent 8690e90 commit e3e6f34

3 files changed

Lines changed: 90 additions & 3 deletions

File tree

Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin {
4646
// The name of the configuration file SwiftJava.config from the target for
4747
// which we are generating Swift wrappers for Java classes.
4848
let configFile = sourceDir.appending(path: "swift-java.config")
49-
let configuration = try readConfiguration(sourceDir: sourceDir)
49+
let configuration = try readConfiguration(configPath: configFile)
5050

5151
// We use the the usual maven-style structure of "src/[generated|main|test]/java/..."
5252
// that is common in JVM ecosystem
@@ -71,6 +71,13 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin {
7171
// We'll have to make up some caching inside the tool so we don't re-parse files which have not changed etc.
7272
]
7373

74+
if let staticBuildConfig = configuration?.staticBuildConfigurationFile {
75+
guard let resolvedURL = URL(string: staticBuildConfig, relativeTo: configFile) else {
76+
fatalError("Could not resolve 'staticBuildConfigurationFile' url")
77+
}
78+
arguments += ["--static-build-config", resolvedURL.absoluteURL.path(percentEncoded: false)]
79+
}
80+
7481
let dependentConfigFilesArguments = dependentConfigFiles.flatMap { moduleAndConfigFile in
7582
let (moduleName, configFile) = moduleAndConfigFile
7683
return [

Tests/JExtractSwiftTests/Asserts/TextAssertions.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,17 @@ func assertOutput(
8787

8888
let sourceLocation = SourceLocation(fileID: fileID, filePath: filePath, line: line, column: column)
8989
for notExpectedChunk in notExpectedChunks {
90+
let outputNotContainsNotExpectedChunk = !output.contains(notExpectedChunk)
9091
#expect(
91-
!output.contains(notExpectedChunk),
92-
"Output must not contain:\n\(notExpectedChunk)\n\nGot output:\n\(output)",
92+
outputNotContainsNotExpectedChunk,
93+
"""
94+
\("error: Output must not contain not expected chunk!".red)
95+
==== Not Expected output -----------------------------------------------
96+
\(notExpectedChunk.yellow)
97+
==== Got output ----------------------------------------------------
98+
\(output)
99+
==== ---------------------------------------------------------------
100+
""",
93101
sourceLocation: sourceLocation
94102
)
95103
}

Tests/JExtractSwiftTests/IfConfigTests.swift

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
import JExtractSwiftLib
1616
import Testing
17+
import SwiftJavaConfigurationShared
18+
import Foundation
1719

1820
@Suite
1921
struct IfConfigTests {
@@ -68,6 +70,60 @@ struct IfConfigTests {
6870
)
6971
}
7072

73+
@Test
74+
func overrideWithStaticBuildConfigurationFile() throws {
75+
try withTemporaryFile(
76+
suffix: "json",
77+
contents: """
78+
{
79+
"attributes": [],
80+
"compilerVersion": {
81+
"components": [6, 3]
82+
},
83+
"customConditions": [
84+
"DEBUG"
85+
],
86+
"endianness": "little",
87+
"features": [],
88+
"languageMode": {
89+
"components": [5, 10]
90+
},
91+
"targetArchitectures": [],
92+
"targetAtomicBitWidths": [],
93+
"targetEnvironments": [],
94+
"targetOSs": [],
95+
"targetObjectFileFormats": [],
96+
"targetPointerAuthenticationSchemes": [],
97+
"targetPointerBitWidth": 64,
98+
"targetRuntimes": []
99+
}
100+
"""
101+
) { staticBuildConfigFile in
102+
var config = Configuration()
103+
config.staticBuildConfigurationFile = staticBuildConfigFile.absoluteURL.path(percentEncoded: false)
104+
105+
try assertOutput(
106+
input: """
107+
#if DEBUG
108+
public struct IsDebug {}
109+
#else
110+
public struct IsNotDebug {}
111+
#endif
112+
""",
113+
config: config,
114+
.ffm,
115+
.java,
116+
detectChunkByInitialLines: 1,
117+
expectedChunks: [
118+
"public final class IsDebug",
119+
],
120+
notExpectedChunks: [
121+
"public final class IsNotDebug",
122+
]
123+
)
124+
}
125+
}
126+
71127
@Test
72128
func swiftinterfaceCommonPattern() throws {
73129
try assertOutput(
@@ -97,3 +153,19 @@ struct IfConfigTests {
97153
)
98154
}
99155
}
156+
157+
private func withTemporaryFile(
158+
suffix: String,
159+
contents: String = "",
160+
in tempDirectory: URL = FileManager.default.temporaryDirectory,
161+
_ perform: (URL) throws -> Void
162+
) throws {
163+
let tempFileName = "tmp_\(UUID().uuidString).\(suffix)"
164+
let tempFileURL = tempDirectory.appendingPathComponent(tempFileName)
165+
166+
try contents.write(to: tempFileURL, atomically: true, encoding: .utf8)
167+
defer {
168+
try? FileManager.default.removeItem(at: tempFileURL)
169+
}
170+
try perform(tempFileURL)
171+
}

0 commit comments

Comments
 (0)