File tree Expand file tree Collapse file tree 5 files changed +49
-20
lines changed
CodeEditTests/Features/WorkspaceSettings
CodeEdit/Features/CEWorkspaceSettings Expand file tree Collapse file tree 5 files changed +49
-20
lines changed Original file line number Diff line number Diff line change @@ -17,8 +17,8 @@ final class CEWorkspaceSettings: ObservableObject {
17
17
18
18
private( set) var folderURL : URL
19
19
20
- private var settingsURL : URL {
21
- folderURL. appending ( path: " settings " ) . appending ( path : " json " )
20
+ var settingsURL : URL {
21
+ folderURL. appending ( path: " settings " ) . appendingPathExtension ( " json " )
22
22
}
23
23
24
24
init ( workspaceURL: URL ) {
@@ -54,7 +54,17 @@ final class CEWorkspaceSettings: ObservableObject {
54
54
/// Save``CEWorkspaceSettingsManager`` model to `.codeedit/settings.json`
55
55
func savePreferences( ) throws {
56
56
// If the user doesn't have any settings to save, don't save them.
57
- guard !settings. isEmpty ( ) else { return }
57
+ guard !settings. isEmpty ( ) else {
58
+ // Settings is empty, remove the file & directory if it's empty.
59
+ if fileManager. fileExists ( atPath: settingsURL. path ( ) ) {
60
+ try fileManager. removeItem ( at: settingsURL)
61
+
62
+ if try fileManager. contentsOfDirectory ( atPath: folderURL. path ( ) ) . isEmpty {
63
+ try fileManager. removeItem ( at: folderURL)
64
+ }
65
+ }
66
+ return
67
+ }
58
68
59
69
if !fileManager. fileExists ( atPath: folderURL. path ( ) ) {
60
70
try fileManager. createDirectory ( at: folderURL, withIntermediateDirectories: true )
Original file line number Diff line number Diff line change @@ -12,7 +12,6 @@ struct CETaskFormView: View {
12
12
@ObservedObject var task : CETask
13
13
@State private var selectedEnvID : UUID ?
14
14
15
- @StateObject var settingsViewModel = SettingsViewModel ( )
16
15
var body : some View {
17
16
Form {
18
17
Section {
@@ -85,7 +84,6 @@ struct CETaskFormView: View {
85
84
}
86
85
}
87
86
. formStyle ( . grouped)
88
- . environmentObject ( settingsViewModel)
89
87
}
90
88
91
89
func removeSelectedEnv( ) {
@@ -100,7 +98,3 @@ struct CETaskFormView: View {
100
98
} )
101
99
}
102
100
}
103
-
104
- // #Preview {
105
- // CETaskFormView()
106
- // }
Original file line number Diff line number Diff line change @@ -13,8 +13,6 @@ struct CEWorkspaceSettingsView: View {
13
13
@EnvironmentObject var workspaceSettingsManager : CEWorkspaceSettings
14
14
@EnvironmentObject var workspace : WorkspaceDocument
15
15
16
- @StateObject var settingsViewModel = SettingsViewModel ( )
17
-
18
16
@State var selectedTaskID : UUID ?
19
17
@State var showAddTaskSheet : Bool = false
20
18
@@ -68,7 +66,6 @@ struct CEWorkspaceSettingsView: View {
68
66
}
69
67
. padding ( )
70
68
}
71
- . environmentObject ( settingsViewModel)
72
69
. sheet ( isPresented: $showAddTaskSheet) {
73
70
if let selectedTaskIndex = workspaceSettingsManager. settings. tasks. firstIndex ( where: {
74
71
$0. id == selectedTaskID
Original file line number Diff line number Diff line change @@ -23,12 +23,16 @@ struct EditCETaskView: View {
23
23
Divider ( )
24
24
HStack {
25
25
Button ( role: . destructive) {
26
- workspaceSettingsManager. settings. tasks. removeAll ( where: {
27
- $0. id == task. id
28
- } )
29
- try ? workspaceSettingsManager. savePreferences ( )
30
- taskManager. deleteTask ( taskID: task. id)
31
- self . dismiss ( )
26
+ do {
27
+ workspaceSettingsManager. settings. tasks. removeAll ( where: {
28
+ $0. id == task. id
29
+ } )
30
+ try workspaceSettingsManager. savePreferences ( )
31
+ taskManager. deleteTask ( taskID: task. id)
32
+ self . dismiss ( )
33
+ } catch {
34
+ NSAlert ( error: error) . runModal ( )
35
+ }
32
36
} label: {
33
37
Text ( " Delete " )
34
38
. foregroundStyle ( . red)
@@ -38,8 +42,12 @@ struct EditCETaskView: View {
38
42
Spacer ( )
39
43
40
44
Button {
41
- try ? workspaceSettingsManager. savePreferences ( )
42
- self . dismiss ( )
45
+ do {
46
+ try workspaceSettingsManager. savePreferences ( )
47
+ self . dismiss ( )
48
+ } catch {
49
+ NSAlert ( error: error) . runModal ( )
50
+ }
43
51
} label: {
44
52
Text ( " Done " )
45
53
. frame ( minWidth: 56 )
Original file line number Diff line number Diff line change
1
+ //
2
+ // CEWorkspaceSettingsTests.swift
3
+ // CodeEditTests
4
+ //
5
+ // Created by Khan Winter on 4/21/25.
6
+ //
7
+
8
+ import Foundation
9
+ import Testing
10
+ @testable import CodeEdit
11
+
12
+ struct CEWorkspaceSettingsTests {
13
+ let settings : CEWorkspaceSettings = CEWorkspaceSettings ( workspaceURL: URL ( filePath: " / " ) )
14
+
15
+ @Test
16
+ func settingsURLNoSpace( ) async throws {
17
+ #expect( settings. folderURL. lastPathComponent == " .codeedit " )
18
+ #expect( settings. settingsURL. lastPathComponent == " settings.json " )
19
+ }
20
+ }
You can’t perform that action at this time.
0 commit comments