Files
ghostty/macos/GhosttyUITests/GhosttyCustomConfigCase.swift

63 lines
2.0 KiB
Swift

//
// GhosttyCustomConfigCase.swift
// Ghostty
//
// Created by luca on 16.10.2025.
//
import XCTest
class GhosttyCustomConfigCase: XCTestCase {
/// We only want run these UI tests
/// when testing manually with Xcode IDE
///
/// So that we don't have to wait for each ci check
/// to run these tedious tests
override class var defaultTestSuite: XCTestSuite {
// https://lldb.llvm.org/cpp_reference/PlatformDarwin_8cpp_source.html#:~:text==%20%22-,IDE_DISABLED_OS_ACTIVITY_DT_MODE
if ProcessInfo.processInfo.environment["IDE_DISABLED_OS_ACTIVITY_DT_MODE"] != nil {
return XCTestSuite(forTestCaseClass: Self.self)
} else {
return XCTestSuite(name: "Skipping \(className())")
}
}
override class var runsForEachTargetApplicationUIConfiguration: Bool {
true
}
static let defaultsSuiteName: String = "GHOSTTY_UI_TESTS"
var configFile: URL?
override func setUpWithError() throws {
continueAfterFailure = false
}
override func tearDown() async throws {
if let configFile {
try FileManager.default.removeItem(at: configFile)
}
}
func updateConfig(_ newConfig: String) throws {
if configFile == nil {
let temporaryConfig = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
.appendingPathExtension("ghostty")
configFile = temporaryConfig
}
try newConfig.write(to: configFile!, atomically: true, encoding: .utf8)
}
func ghosttyApplication(defaultsSuite: String = GhosttyCustomConfigCase.defaultsSuiteName) throws -> XCUIApplication {
let app = XCUIApplication()
app.launchArguments.append(contentsOf: ["-ApplePersistenceIgnoreState", "YES"])
guard let configFile else {
return app
}
app.launchEnvironment["GHOSTTY_CONFIG_PATH"] = configFile.path
app.launchEnvironment["GHOSTTY_USER_DEFAULTS_SUITE"] = defaultsSuite
return app
}
}