Add Path.source()
This commit is contained in:
3
.github/codecov.yml
vendored
3
.github/codecov.yml
vendored
@@ -1,2 +1,3 @@
|
|||||||
ignore:
|
ignore:
|
||||||
- Tests
|
- Tests/PathTests/etc.swift
|
||||||
|
- Tests/PathTests/TemporaryDirectory.swift
|
||||||
|
|||||||
29
.github/workflows/ci.yml
vendored
29
.github/workflows/ci.yml
vendored
@@ -14,10 +14,9 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
xcode:
|
xcode:
|
||||||
#- 10.3 # Swift 5.0 (doesn’t work on GHA macOS image :-/)
|
# - 10.3 # Swift 5.0 (doesn’t work on GHA macOS image :-/)
|
||||||
- 11.3 # Swift 5.1
|
- 11.3 # Swift 5.1
|
||||||
- ^11.4 # Swift 5.2
|
- ^11.4 # Swift 5.2
|
||||||
- latest # Swift 5.3
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: setup-xcode
|
- name: setup-xcode
|
||||||
@@ -34,9 +33,13 @@ jobs:
|
|||||||
destination:
|
destination:
|
||||||
- platform=iOS Simulator,OS=latest,name=iPhone 11
|
- platform=iOS Simulator,OS=latest,name=iPhone 11
|
||||||
- platform=tvOS Simulator,OS=latest,name=Apple TV
|
- platform=tvOS Simulator,OS=latest,name=Apple TV
|
||||||
- platform=macOS # for code-coverage
|
- platform=macOS
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
- uses: maxim-lobanov/setup-xcode@1.0
|
||||||
|
with:
|
||||||
|
xcode-version: 12 # Swift 5.3
|
||||||
|
- run: swift --version
|
||||||
- run: swift package generate-xcodeproj --enable-code-coverage
|
- run: swift package generate-xcodeproj --enable-code-coverage
|
||||||
- uses: sersoft-gmbh/xcodebuild-action@v1
|
- uses: sersoft-gmbh/xcodebuild-action@v1
|
||||||
with:
|
with:
|
||||||
@@ -50,36 +53,39 @@ jobs:
|
|||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- run: swift package generate-xcodeproj --enable-code-coverage
|
- run: swift package generate-xcodeproj
|
||||||
- uses: sersoft-gmbh/xcodebuild-action@v1
|
- uses: sersoft-gmbh/xcodebuild-action@v1
|
||||||
with:
|
with:
|
||||||
project: Path.swift.xcodeproj
|
project: Path.swift.xcodeproj
|
||||||
scheme: Path.swift-Package
|
scheme: Path.swift-Package
|
||||||
destination: platform=watchOS Simulator,OS=latest,name=Apple Watch Series 5 - 40mm
|
destination: platform=watchOS Simulator,OS=latest,name=Apple Watch Series 5 - 40mm
|
||||||
action: build
|
action: build
|
||||||
|
linux-4-2:
|
||||||
|
needs: smoke
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: fwal/setup-swift@v1
|
||||||
|
with:
|
||||||
|
swift-version: 4.2
|
||||||
|
- run: swift test --parallel # doesn’t support code coverage
|
||||||
linux:
|
linux:
|
||||||
needs: smoke
|
needs: smoke
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
swift:
|
swift:
|
||||||
# - 4.0.3 fails for some reason
|
|
||||||
- 4.2
|
|
||||||
- 5.0.3
|
- 5.0.3
|
||||||
- 5.1
|
- 5.1
|
||||||
- 5.2
|
- 5.2
|
||||||
# - 5.3 not available yet sigh
|
# - 5.3 not yet available sigh
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: fwal/setup-swift@v1
|
- uses: fwal/setup-swift@v1
|
||||||
with:
|
with:
|
||||||
swift-version: ${{ matrix.swift }}
|
swift-version: ${{ matrix.swift }}
|
||||||
- run: swift test --parallel --enable-code-coverage
|
- run: swift test --parallel --enable-code-coverage
|
||||||
if: ${{ matrix.swift != '4.2' }}
|
|
||||||
- run: swift test --parallel
|
|
||||||
if: ${{ matrix.swift == '4.2' }}
|
|
||||||
- name: Generate Coverage Report
|
- name: Generate Coverage Report
|
||||||
if: ${{ matrix.swift != '4.2' }}
|
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get -qq update && sudo apt-get -qq install llvm-10
|
sudo apt-get -qq update && sudo apt-get -qq install llvm-10
|
||||||
export b=$(swift build --show-bin-path) && llvm-cov-10 \
|
export b=$(swift build --show-bin-path) && llvm-cov-10 \
|
||||||
@@ -89,6 +95,5 @@ jobs:
|
|||||||
$b/Path.swiftPackageTests.xctest \
|
$b/Path.swiftPackageTests.xctest \
|
||||||
> info.lcov
|
> info.lcov
|
||||||
- uses: codecov/codecov-action@v1
|
- uses: codecov/codecov-action@v1
|
||||||
if: ${{ matrix.swift != '4.2' }}
|
|
||||||
with:
|
with:
|
||||||
file: ./info.lcov
|
file: ./info.lcov
|
||||||
@@ -14,6 +14,18 @@ extension Path {
|
|||||||
return .init(string: "/")
|
return .init(string: "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if swift(>=5.3)
|
||||||
|
public static func source(for filePath: String = #filePath) -> (file: DynamicPath, directory: DynamicPath) {
|
||||||
|
let file = DynamicPath(string: filePath)
|
||||||
|
return (file: file, directory: .init(file.parent))
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
public static func source(for filePath: String = #file) -> (file: DynamicPath, directory: DynamicPath) {
|
||||||
|
let file = DynamicPath(string: filePath)
|
||||||
|
return (file: file, directory: .init(file.parent))
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/// Returns a `Path` representing the user’s home directory
|
/// Returns a `Path` representing the user’s home directory
|
||||||
public static var home: DynamicPath {
|
public static var home: DynamicPath {
|
||||||
let string: String
|
let string: String
|
||||||
|
|||||||
@@ -305,6 +305,13 @@ class PathTests: XCTestCase {
|
|||||||
XCTAssertEqual(Path.root.string, "/")
|
XCTAssertEqual(Path.root.string, "/")
|
||||||
XCTAssertEqual(Path.home.string, NSHomeDirectory())
|
XCTAssertEqual(Path.home.string, NSHomeDirectory())
|
||||||
XCTAssertEqual(Path.documents.string, NSHomeDirectory() + "/Documents")
|
XCTAssertEqual(Path.documents.string, NSHomeDirectory() + "/Documents")
|
||||||
|
#if swift(>=5.3)
|
||||||
|
let filePath = Path(#filePath)!
|
||||||
|
#else
|
||||||
|
let filePath = Path(#file)!
|
||||||
|
#endif
|
||||||
|
XCTAssertEqual(Path.source().file, filePath)
|
||||||
|
XCTAssertEqual(Path.source().directory, filePath.parent)
|
||||||
#if !os(Linux)
|
#if !os(Linux)
|
||||||
XCTAssertEqual(Path.caches.string, NSHomeDirectory() + "/Library/Caches")
|
XCTAssertEqual(Path.caches.string, NSHomeDirectory() + "/Library/Caches")
|
||||||
XCTAssertEqual(Path.cwd.string, FileManager.default.currentDirectoryPath)
|
XCTAssertEqual(Path.cwd.string, FileManager.default.currentDirectoryPath)
|
||||||
@@ -660,11 +667,3 @@ class PathTests: XCTestCase {
|
|||||||
XCTAssertEqual(Path("/foo"), Path.root.foo)
|
XCTAssertEqual(Path("/foo"), Path.root.foo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func XCTAssertEqual<P: Pathish, Q: Pathish>(_ p: P, _ q: Q, file: StaticString = #file, line: UInt = #line) {
|
|
||||||
XCTAssertEqual(p.string, q.string, file: file, line: line)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func XCTAssertEqual<P: Pathish, Q: Pathish>(_ p: P?, _ q: Q?, file: StaticString = #file, line: UInt = #line) {
|
|
||||||
XCTAssertEqual(p?.string, q?.string, file: file, line: line)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,11 +1,43 @@
|
|||||||
import XCTest
|
import XCTest
|
||||||
import Path
|
import Path
|
||||||
|
|
||||||
|
#if swift(>=5.3)
|
||||||
|
func XCTAssertEqual<P: Pathish>(_ set1: Set<Path>, _ set2: Set<Path>, _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line, relativeTo: P) {
|
||||||
|
logic(set1, set2, relativeTo: relativeTo) {
|
||||||
|
XCTFail($0, file: file, line: line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
func XCTAssertEqual<P: Pathish>(_ set1: Set<Path>, _ set2: Set<Path>, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line, relativeTo: P) {
|
func XCTAssertEqual<P: Pathish>(_ set1: Set<Path>, _ set2: Set<Path>, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line, relativeTo: P) {
|
||||||
|
logic(set1, set2, relativeTo: relativeTo) {
|
||||||
|
XCTFail($0, file: file, line: line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private func logic<P: Pathish>(_ set1: Set<Path>, _ set2: Set<Path>, relativeTo: P, fail: (String) -> Void) {
|
||||||
if set1 != set2 {
|
if set1 != set2 {
|
||||||
let cvt: (Path) -> String = { $0.relative(to: relativeTo) }
|
let cvt: (Path) -> String = { $0.relative(to: relativeTo) }
|
||||||
let out1 = set1.map(cvt).sorted()
|
let out1 = set1.map(cvt).sorted()
|
||||||
let out2 = set1.map(cvt).sorted()
|
let out2 = set1.map(cvt).sorted()
|
||||||
XCTFail("Set(\(out1)) is not equal to Set(\(out2))", file: file, line: line)
|
fail("Set(\(out1)) is not equal to Set(\(out2))")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if swift(>=5.3)
|
||||||
|
func XCTAssertEqual<P: Pathish, Q: Pathish>(_ p: P, _ q: Q, file: StaticString = #filePath, line: UInt = #line) {
|
||||||
|
XCTAssertEqual(p.string, q.string, file: file, line: line)
|
||||||
|
}
|
||||||
|
|
||||||
|
func XCTAssertEqual<P: Pathish, Q: Pathish>(_ p: P?, _ q: Q?, file: StaticString = #filePath, line: UInt = #line) {
|
||||||
|
XCTAssertEqual(p?.string, q?.string, file: file, line: line)
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
func XCTAssertEqual<P: Pathish, Q: Pathish>(_ p: P, _ q: Q, file: StaticString = #file, line: UInt = #line) {
|
||||||
|
XCTAssertEqual(p.string, q.string, file: file, line: line)
|
||||||
|
}
|
||||||
|
|
||||||
|
func XCTAssertEqual<P: Pathish, Q: Pathish>(_ p: P?, _ q: Q?, file: StaticString = #file, line: UInt = #line) {
|
||||||
|
XCTAssertEqual(p?.string, q?.string, file: file, line: line)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user