Skip to content

Commit 99159af

Browse files
authored
feat: allow to pass path to swift tests file (#24)
Allow to provide a path for pointing to the plugin tests file. Also fixes the plugin tests import.
1 parent 17b0cc6 commit 99159af

File tree

5 files changed

+48
-4
lines changed

5 files changed

+48
-4
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ OPTIONS:
2727
--objc-file <objc-file> Objective-C file containing CAP_PLUGIN macro
2828
--swift-file <swift-file>
2929
Swift file containing class inheriting from CAPPlugin
30+
--swift-tests-file <swift-tests-file>
31+
Swift file containing plugin tests
3032
-h, --help Show help information.
3133
```
3234

Sources/CapacitorPluginTools/CapacitorPluginPackage.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,25 @@ public class CapacitorPluginPackage {
110110
throw .cantFindPluginSwift(fileName)
111111
}
112112

113+
public func findSwiftTestsPluginFile() -> URL? {
114+
if let oldPlugin {
115+
let fileName = "\(oldPlugin.capacitorPlugin.identifier)Tests.swift"
116+
let fileURL = iosSrcDirectoryURL.appending(path: "PluginTests").appending(path: fileName)
117+
if (try? fileURL.checkResourceIsReachable()) == true {
118+
return fileURL
119+
} else {
120+
print("Warning: file \(fileURL.path()) not found, trying PluginTests.swift")
121+
}
122+
123+
let backupFileURL = iosSrcDirectoryURL.appending(path: "PluginTests").appending(path: "PluginTests.swift")
124+
125+
if (try? backupFileURL.checkResourceIsReachable()) == true {
126+
return backupFileURL
127+
}
128+
}
129+
return nil
130+
}
131+
113132
public func findPodspecFile() throws -> URL {
114133
let fileName = packageJSONParser.podspec
115134

Sources/CommandLineTool/CLIArguments.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ extension Cap2SPM {
55
func getUrlsForArgs(package: CapacitorPluginPackage,
66
objcHeader: String?,
77
objcFile: String?,
8-
swiftFile: String?) throws -> (URL, URL, URL) {
8+
swiftFile: String?,
9+
swiftTestsFile: String?) throws -> (URL, URL, URL, URL?) {
910

1011
let mFileURL: URL
1112
let swiftFileURL: URL
13+
let swiftTestsFileURL: URL?
1214
let hFileURL: URL
1315

1416
if let objcHeader {
@@ -30,6 +32,12 @@ extension Cap2SPM {
3032
swiftFileURL = try package.findSwiftPluginFile()
3133
}
3234

33-
return (mFileURL, swiftFileURL, hFileURL)
35+
if let swiftTestsFile {
36+
swiftTestsFileURL = URL(filePath: swiftTestsFile, directoryHint: .notDirectory)
37+
} else {
38+
swiftTestsFileURL = package.findSwiftTestsPluginFile()
39+
}
40+
41+
return (mFileURL, swiftFileURL, hFileURL, swiftTestsFileURL)
3442
}
3543
}

Sources/CommandLineTool/CLIFileOperations.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,10 @@ extension Cap2SPM {
8989
}
9090
try gitignoreText.write(to: fileURL, atomically: true, encoding: .utf8)
9191
}
92+
93+
func modifyTestsFile(at fileURL: URL, with target: String) throws {
94+
var testsText = try String(contentsOf: fileURL, encoding: .utf8)
95+
testsText.replace("@testable import Plugin\n", with: "@testable import \(target)\n")
96+
try testsText.write(to: fileURL, atomically: true, encoding: .utf8)
97+
}
9298
}

Sources/CommandLineTool/cap2spm.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,25 @@ struct Cap2SPM: ParsableCommand {
1818
@Option(help: "Swift file containing class inheriting from CAPPlugin")
1919
var swiftFile: String?
2020

21+
@Option(help: "Swift file containing plugin tests")
22+
var swiftTestsFile: String?
23+
2124
@Argument(help: "Plugin Directory")
2225
var pluginDirectory: String
2326

2427
mutating func run() throws {
2528
let mFileURL: URL
2629
let swiftFileURL: URL
30+
let swiftTestsFileURL: URL?
2731
let hFileURL: URL
2832

2933
let capacitorPluginPackage = try CapacitorPluginPackage(directoryName: pluginDirectory)
3034

31-
(mFileURL, swiftFileURL, hFileURL) = try getUrlsForArgs(package: capacitorPluginPackage,
35+
(mFileURL, swiftFileURL, hFileURL, swiftTestsFileURL) = try getUrlsForArgs(package: capacitorPluginPackage,
3236
objcHeader: objcHeader,
3337
objcFile: objcFile,
34-
swiftFile: swiftFile)
38+
swiftFile: swiftFile,
39+
swiftTestsFile: swiftTestsFile)
3540

3641

3742
let podspecFileURL = try capacitorPluginPackage.findPodspecFile()
@@ -41,6 +46,10 @@ struct Cap2SPM: ParsableCommand {
4146

4247
try capPlugin.modifySwiftFile(at: swiftFileURL)
4348

49+
if let swiftTestsFileURL {
50+
try? modifyTestsFile(at: swiftTestsFileURL, with: capPlugin.identifier)
51+
}
52+
4453
let packageGenerator = PackageFileGenerator(packageName: podspec.podName, targetName: capPlugin.identifier)
4554

4655
try packageGenerator.generateFile(at: podspecFileURL)

0 commit comments

Comments
 (0)