17
17
import StdlibUnittest
18
18
import Observation
19
19
20
+ @available ( SwiftStdlib 5 . 9 , * )
21
+ @attached ( member, names: named ( _$observationRegistrar) , named ( access) , named ( withMutation) , arbitrary)
22
+ @attached ( memberAttribute)
23
+ @attached ( extension, conformances: Observable)
24
+ public macro ObservableTest( ) =
25
+ #externalMacro( module: " ObservationMacros " , type: " ObservableMacro " )
26
+
20
27
@usableFromInline
21
28
@inline ( never)
22
29
func _blackHole< T> ( _ value: T ) { }
23
30
24
- @Observable
25
- class ContainsNothing { }
31
+ @ObservableTest
32
+ public class ContainsNothing : Observable { }
26
33
27
- @Observable
34
+ @ObservableTest
28
35
class ContainsWeak {
29
36
weak var obj : AnyObject ? = nil
30
37
}
31
38
32
- @Observable
33
- public class PublicContainsWeak {
34
- public weak var obj : AnyObject ? = nil
39
+ @ObservableTest
40
+ class PublicContainsWeak {
41
+ weak var obj : AnyObject ? = nil
35
42
}
36
43
37
- @Observable
44
+ @ObservableTest
38
45
class ContainsUnowned {
39
46
unowned var obj : AnyObject ? = nil
40
47
}
41
48
42
- @Observable
49
+ @ObservableTest
43
50
class ContainsIUO {
44
51
var obj : Int ! = nil
45
52
}
@@ -48,7 +55,7 @@ class NonObservable {
48
55
49
56
}
50
57
51
- @Observable
58
+ @ObservableTest
52
59
class InheritsFromNonObservable : NonObservable {
53
60
54
61
}
@@ -57,29 +64,29 @@ protocol NonObservableProtocol {
57
64
58
65
}
59
66
60
- @Observable
67
+ @ObservableTest
61
68
class ConformsToNonObservableProtocol : NonObservableProtocol {
62
69
63
70
}
64
71
65
72
struct NonObservableContainer {
66
- @Observable
73
+ @ObservableTest
67
74
class ObservableContents {
68
75
var field : Int = 3
69
76
}
70
77
}
71
78
72
- @Observable
79
+ @ObservableTest
73
80
final class SendableClass : Sendable {
74
81
var field : Int = 3
75
82
}
76
83
77
- @Observable
84
+ @ObservableTest
78
85
class CodableClass : Codable {
79
86
var field : Int = 3
80
87
}
81
88
82
- @Observable
89
+ @ObservableTest
83
90
final class HashableClass {
84
91
var field : Int = 3
85
92
}
@@ -94,7 +101,7 @@ extension HashableClass: Hashable {
94
101
}
95
102
}
96
103
97
- @Observable
104
+ @ObservableTest
98
105
class ImplementsAccessAndMutation {
99
106
var field = 3
100
107
let accessCalled : ( PartialKeyPath < ImplementsAccessAndMutation > ) -> Void
@@ -121,18 +128,18 @@ class ImplementsAccessAndMutation {
121
128
}
122
129
}
123
130
124
- @Observable
131
+ @ObservableTest
125
132
class HasIgnoredProperty {
126
133
var field = 3
127
134
@ObservationIgnored var ignored = 4
128
135
}
129
136
130
- @Observable
137
+ @ObservableTest
131
138
class Entity {
132
139
var age : Int = 0
133
140
}
134
141
135
- @Observable
142
+ @ObservableTest
136
143
class Person : Entity {
137
144
var firstName = " "
138
145
var lastName = " "
@@ -142,30 +149,30 @@ class Person : Entity {
142
149
var fullName : String { firstName + " " + lastName }
143
150
}
144
151
145
- @Observable
152
+ @ObservableTest
146
153
class MiddleNamePerson : Person {
147
154
var middleName = " "
148
155
149
156
override var fullName : String { firstName + " " + middleName + " " + lastName }
150
157
}
151
158
152
- @Observable
159
+ @ObservableTest
153
160
class IsolatedClass {
154
161
@MainActor var test = " hello "
155
162
}
156
163
157
164
@MainActor
158
- @Observable
165
+ @ObservableTest
159
166
class IsolatedInstance {
160
167
var test = " hello "
161
168
}
162
169
163
- @Observable
170
+ @ObservableTest
164
171
class ClassHasExistingConformance : Observable { }
165
172
166
173
protocol Intermediary : Observable { }
167
174
168
- @Observable
175
+ @ObservableTest
169
176
class HasIntermediaryConformance : Intermediary { }
170
177
171
178
class CapturedState < State> : @unchecked Sendable {
0 commit comments