vibetunnel/mac/VibeTunnelTests/PathSplittingTests.swift
Peter Steinberger dfe0cfda25 Fix test failures and resolve all linting warnings
- Fix notification preference tests to match default enabled: false
- Fix PtyManager initialization in integration tests
- Fix path splitting tests for macOS URL behavior
- Add hour formatting to duration display (1h 23m 45s format)
- Fix non-optional URL nil comparison warning
- Fix force unwrapping warning in EventSource.swift
- Apply SwiftFormat formatting fixes
- Update test expectations to match actual behavior
2025-07-27 17:44:50 +02:00

100 lines
3.6 KiB
Swift

import Foundation
import Testing
@Suite("Path Splitting Tests")
struct PathSplittingTests {
@Test("Path expansion with tilde")
func pathExpansion() {
// Test 1: Expanding "~/Pr"
let shortPath = "~/Pr"
let expandedPath = NSString(string: shortPath).expandingTildeInPath
// Verify expansion
#expect(expandedPath.hasPrefix("/"))
#expect(expandedPath.contains("/Pr"))
#expect(expandedPath == "\(NSHomeDirectory())/Pr")
}
@Test("URL handling of non-existent paths")
func urlWithNonExistentPath() {
// Test 2: How URL handles non-existent paths
let nonExistentPath = NSString(string: "~/Pr").expandingTildeInPath
let url = URL(fileURLWithPath: nonExistentPath)
// Check file existence
let fileManager = FileManager.default
let exists = fileManager.fileExists(atPath: nonExistentPath)
// URL is always created for any path (even non-existent ones)
#expect(url.path == nonExistentPath)
#expect(!exists)
}
@Test("Path components extraction", arguments: [
"~/Pr",
"/Users/steipete/Pr",
"/Users/steipete/Projects",
"/Users/steipete/Projects/vibetunnel"
])
func pathComponents(path: String) {
// Test 3: deletingLastPathComponent and lastPathComponent
let url = URL(fileURLWithPath: path.starts(with: "~") ? NSString(string: path).expandingTildeInPath : path)
let parent = url.deletingLastPathComponent()
let lastComponent = url.lastPathComponent
// Basic validation
#expect(!lastComponent.isEmpty)
#expect(parent.path.count <= url.path.count)
}
@Test("Special path cases")
func specialCases() {
// Test with trailing slash
let pathWithSlash = "~/Pr/"
let expandedWithSlash = NSString(string: pathWithSlash).expandingTildeInPath
let urlWithSlash = URL(fileURLWithPath: expandedWithSlash)
#expect(urlWithSlash.lastPathComponent == "Pr")
// Test root directory
let rootUrl = URL(fileURLWithPath: "/")
#expect(rootUrl.path == "/")
// Root URL's parent is "/.." on macOS
#expect(rootUrl.deletingLastPathComponent().path == "/..")
// Root URL's last component is "/" on macOS
#expect(rootUrl.lastPathComponent == "/")
// Test single component after root
let singleComponent = URL(fileURLWithPath: "/Users")
#expect(singleComponent.path == "/Users")
#expect(singleComponent.deletingLastPathComponent().path == "/")
#expect(singleComponent.lastPathComponent == "Users")
}
@Test("Autocomplete scenario")
func autocompleteScenario() throws {
// Test the actual autocomplete scenario
let input = "~/Pr"
let expandedInput = NSString(string: input).expandingTildeInPath
let inputURL = URL(fileURLWithPath: expandedInput)
let parentURL = inputURL.deletingLastPathComponent()
let prefix = inputURL.lastPathComponent
#expect(prefix == "Pr")
#expect(parentURL.path == NSHomeDirectory())
// List contents of parent directory
let fileManager = FileManager.default
let contents = try #require(try? fileManager.contentsOfDirectory(
at: parentURL,
includingPropertiesForKeys: nil
))
let matching = contents.filter { $0.lastPathComponent.hasPrefix(prefix) }
// We can't assert specific matches as they depend on the user's home directory
// But we can verify the filtering logic works
for item in matching {
#expect(item.lastPathComponent.hasPrefix(prefix))
}
}
}