Files
Termind/TFMTests/SettingsDetailControlTests.swift

55 lines
2.5 KiB
Swift

// SPDX-FileCopyrightText: 2026 Kaede Akino
// SPDX-License-Identifier: GPL-3.0-only
import Foundation
import TermindApplication
import TermindDomain
import TermindPersistence
import Testing
@Suite @MainActor
struct SettingsDetailControlTests {
@Test func themeSelectionPreservesIndependentTextAndPendingEdits() {
let model = TerminalSettingsModel()
#expect(model.set("background = ffffff", for: \TerminalPreferences.lightCustomConfiguration))
#expect(model.set("background = 000000", for: \TerminalPreferences.darkCustomConfiguration))
#expect(model.selectCustomTheme(isDark: false))
#expect(model.preferences.lightCustomEnabled)
#expect(!model.preferences.darkCustomEnabled)
// The editor's pending text arrives after selecting a preset.
#expect(model.selectTheme(named: SettingsKey.defaultTerminalThemeLight, isDark: false))
#expect(model.set("background = eeeeee", for: \TerminalPreferences.lightCustomConfiguration))
#expect(!model.preferences.lightCustomEnabled)
#expect(model.preferences.lightCustomConfiguration == "background = eeeeee")
#expect(model.preferences.darkCustomConfiguration == "background = 000000")
#expect(model.selectCustomTheme(isDark: true))
#expect(!model.preferences.lightCustomEnabled)
#expect(model.preferences.darkCustomEnabled)
#expect(model.preferences.lightCustomConfiguration == "background = eeeeee")
}
@Test func failedPresetSelectionRetainsPersistedStateAndText() {
let model = TerminalSettingsModel(persistence: RejectingCustomConfigurationStore())
#expect(!model.selectTheme(named: SettingsKey.defaultTerminalThemeLight, isDark: false))
#expect(model.preferences.lightCustomEnabled)
#expect(model.preferences.lightCustomConfiguration == "background = ffffff")
#expect(model.storageError != nil)
var remote = model.preferences
remote.lightCustomEnabled = false
model.applyRemoteSnapshot(remote)
#expect(!model.preferences.lightCustomEnabled)
#expect(model.storageError == nil)
}
}
@MainActor private final class RejectingCustomConfigurationStore: TerminalPreferencesPersisting {
func loadTerminal() throws -> TerminalPreferences {
var value = TerminalPreferences()
value.lightCustomEnabled = true
value.lightCustomConfiguration = "background = ffffff"
return value
}
func saveTerminal(_ value: TerminalPreferences) throws { throw CocoaError(.fileWriteNoPermission) }
}