@@ -5,6 +5,7 @@ final class UserDefaultsTests: XCTestCase {
55
66 enum C {
77
8+ static let userDefaultsObjectTestMonitorKey = " Test Monitor "
89 static let firstCondition = [ 1 ]
910 static let secondCondition = [ 1 , 2 ]
1011 static let userDefaultsObjectKey = " numbers3 "
@@ -26,9 +27,107 @@ final class UserDefaultsTests: XCTestCase {
2627
2728 }
2829
29- override class func tearDown( ) {
30+ func testUserDefaultsStoresStructureIsNotRetrievedBecauseIsEmpty( ) {
31+ struct EmptyTest : Codable {
32+ let value : String
33+ }
34+
35+ let monitor = TestMonitor ( )
36+ GoodPersistence . Configuration. configure ( monitors: [ monitor] )
37+
38+ @UserDefaultValue ( C . userDefaultsObjectTestMonitorKey, defaultValue: . init( value: " " ) )
39+ var test : EmptyTest
40+
41+ let _ = test
42+
43+ XCTAssert (
44+ monitor. message == " Default UserDefaults value [EmptyTest(value: \" \" )] for key [Test Monitor] used. Reason: Data not retrieved. " ,
45+ " Monitor should contain message for using default value. Contains: \( monitor. message) . "
46+ )
47+ }
48+
49+ func testUserDefaultsStoresStructureDataHasChanged( ) {
50+ struct EmptyTest : Codable {
51+ let value : String
52+ }
53+
54+ let monitor = TestMonitor ( )
55+ GoodPersistence . Configuration. configure ( monitors: [ monitor] )
56+
57+ @UserDefaultValue ( C . userDefaultsObjectTestMonitorKey, defaultValue: . init( value: " " ) )
58+ var test : EmptyTest
59+
60+ test = . init( value: " newValue " )
61+
62+ XCTAssert (
63+ monitor. message == " UserDefaults data for key [Test Monitor] has changed to EmptyTest(value: \" newValue \" ). " ,
64+ " Monitor should contain message for using default value. Contains: \( monitor. message) . "
65+ )
66+ }
67+
68+ func testMessageForUserDefaultsStoresStructureIsNotDecodedCorrectly( ) {
69+ struct EmptyTest : Codable {
70+ let value : String
71+ }
72+
73+ struct EmptyTestFailure : Codable {
74+ let value : String
75+ let secondValue : String
76+ }
77+
78+ let monitor = TestMonitor ( )
79+ GoodPersistence . Configuration. configure ( monitors: [ monitor] )
80+
81+ @UserDefaultValue ( C . userDefaultsObjectTestMonitorKey, defaultValue: . init( value: " " ) )
82+ var test : EmptyTest
83+ test = . init( value: " value " )
84+
85+ @UserDefaultValue ( C . userDefaultsObjectTestMonitorKey, defaultValue: . init( value: " " , secondValue: " " ) )
86+ var testFailure : EmptyTestFailure
87+ let _ = testFailure
88+
89+ XCTAssert (
90+ monitor. message == " Default UserDefaults value [EmptyTestFailure(value: \" \" , secondValue: \" \" )] for key [Test Monitor] used. Reason: Decoding error. " ,
91+ " Monitor should contain message for using default value. Contains: \( monitor. message) . "
92+ )
93+
94+ XCTAssert (
95+ monitor. error != nil ,
96+ " Monitor should contain error for using default value. Contains error: \( monitor. error) . "
97+ )
98+ }
99+
100+ func testErrorForDefaultsStoresStructureIsNotDecodedCorrectly( ) {
101+ struct EmptyTest : Codable {
102+ let value : String
103+ }
104+
105+ struct EmptyTestFailure : Codable {
106+ let value : String
107+ let secondValue : String
108+ }
109+
110+ let monitor = TestMonitor ( )
111+ GoodPersistence . Configuration. configure ( monitors: [ monitor] )
112+
113+ @UserDefaultValue ( C . userDefaultsObjectTestMonitorKey, defaultValue: . init( value: " " ) )
114+ var test : EmptyTest
115+ test = . init( value: " value " )
116+
117+ @UserDefaultValue ( C . userDefaultsObjectTestMonitorKey, defaultValue: . init( value: " " , secondValue: " " ) )
118+ var testFailure : EmptyTestFailure
119+ let _ = testFailure
120+
121+ XCTAssert (
122+ monitor. error != nil ,
123+ " Monitor should contain error for using default value. Contains error: \( monitor. error) . "
124+ )
125+ }
126+
127+ override func tearDown( ) {
30128 UserDefaults . standard. removeObject ( forKey: C . userDefaultsObjectKey)
31- UserDefaults . standard. synchronize ( )
129+ UserDefaults . standard. removeObject ( forKey: C . userDefaultsObjectTestMonitorKey)
130+ GoodPersistence . Configuration. configure ( monitors: [ ] )
32131 }
33132
34133}
0 commit comments