@@ -19,21 +19,21 @@ package zio
19
19
import zio .test ._
20
20
21
21
@ scala.annotation.experimental
22
- object ServiceProxySpec extends ZIOSpecDefault {
22
+ object IsReloadableSpec extends ZIOSpecDefault {
23
23
24
- val spec = suite(" ServiceProxy " )(
25
- suite(" generates a proxy " )(
24
+ val spec = suite(" IsReloadable " )(
25
+ suite(" creates a reloadable service " )(
26
26
test(" switches underlying service in runtime" ) {
27
27
trait Foo { def bar : UIO [String ] }
28
28
29
29
val service1 : Foo = new Foo { def bar = ZIO .succeed(" zio1" ) }
30
30
val service2 : Foo = new Foo { def bar = ZIO .succeed(" zio2" ) }
31
31
for {
32
- ref <- ScopedRef .make(service1)
33
- proxy = ServiceProxy .generate (ref)
34
- res1 <- proxy .bar
35
- _ <- ref.set(ZIO .succeed(service2))
36
- res2 <- proxy .bar
32
+ ref <- ScopedRef .make(service1)
33
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
34
+ res1 <- reloadable .bar
35
+ _ <- ref.set(ZIO .succeed(service2))
36
+ res2 <- reloadable .bar
37
37
} yield assertTrue(res1 == " zio1" && res2 == " zio2" )
38
38
},
39
39
test(" the type out of the current lexical scope" ) {
@@ -42,9 +42,9 @@ object ServiceProxySpec extends ZIOSpecDefault {
42
42
}
43
43
val service : foo.Foo = new foo.Foo { def bar = ZIO .succeed(" zio" ) }
44
44
for {
45
- ref <- ScopedRef .make(service)
46
- proxy = ServiceProxy .generate (ref)
47
- res1 <- proxy .bar
45
+ ref <- ScopedRef .make(service)
46
+ reloadable = IsReloadable [foo. Foo ].reloadable (ref)
47
+ res1 <- reloadable .bar
48
48
} yield assertTrue(res1 == " zio" )
49
49
},
50
50
test(" multiple methods" ) {
@@ -57,37 +57,37 @@ object ServiceProxySpec extends ZIOSpecDefault {
57
57
override def baz : UIO [Int ] = ZIO .succeed(1 )
58
58
}
59
59
for {
60
- ref <- ScopedRef .make(service)
61
- proxy = ServiceProxy .generate (ref)
62
- res1 <- proxy .bar
63
- res2 <- proxy .baz
60
+ ref <- ScopedRef .make(service)
61
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
62
+ res1 <- reloadable .bar
63
+ res2 <- reloadable .baz
64
64
} yield assertTrue(res1 == " zio" && res2 == 1 )
65
65
},
66
66
test(" trait with type parameter" ) {
67
67
trait Foo [A ] { def bar : UIO [A ] }
68
68
val service : Foo [String ] = new Foo [String ] { def bar = ZIO .succeed(" baz" ) }
69
69
for {
70
- ref <- ScopedRef .make(service)
71
- proxy = ServiceProxy .generate (ref)
72
- res <- proxy .bar
70
+ ref <- ScopedRef .make(service)
71
+ reloadable = IsReloadable [ Foo [ String ]].reloadable (ref)
72
+ res <- reloadable .bar
73
73
} yield assertTrue(res == " baz" )
74
74
},
75
75
test(" trait with higher kinded type parameter" ) {
76
76
trait Foo [F [_]] { def bar : UIO [F [String ]] }
77
77
val service : Foo [List ] = new Foo [List ] { def bar = ZIO .succeed(" baz" :: Nil ) }
78
78
for {
79
- ref <- ScopedRef .make(service)
80
- proxy = ServiceProxy .generate (ref)
81
- res <- proxy .bar
79
+ ref <- ScopedRef .make(service)
80
+ reloadable = IsReloadable [ Foo [ List ]].reloadable (ref)
81
+ res <- reloadable .bar
82
82
} yield assertTrue(res == " baz" :: Nil )
83
83
},
84
84
test(" abstract class" ) {
85
85
abstract class Foo { def bar : UIO [String ] }
86
86
val service : Foo = new Foo { def bar = ZIO .succeed(" zio" ) }
87
87
for {
88
- ref <- ScopedRef .make(service)
89
- proxy = ServiceProxy .generate (ref)
90
- res <- proxy .bar
88
+ ref <- ScopedRef .make(service)
89
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
90
+ res <- reloadable .bar
91
91
} yield assertTrue(res == " zio" )
92
92
},
93
93
test(" class" ) {
@@ -96,9 +96,9 @@ object ServiceProxySpec extends ZIOSpecDefault {
96
96
override def bar = ZIO .succeed(" zio2" )
97
97
}
98
98
for {
99
- ref <- ScopedRef .make(service)
100
- proxy = ServiceProxy .generate (ref)
101
- res <- proxy .bar
99
+ ref <- ScopedRef .make(service)
100
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
101
+ res <- reloadable .bar
102
102
} yield assertTrue(res == " zio2" )
103
103
}
104
104
),
@@ -107,37 +107,37 @@ object ServiceProxySpec extends ZIOSpecDefault {
107
107
trait Foo { def bar (a : String ): UIO [Int ] }
108
108
val service : Foo = new Foo { def bar (a : String ) = ZIO .succeed(a.length) }
109
109
for {
110
- ref <- ScopedRef .make(service)
111
- proxy = ServiceProxy .generate (ref)
112
- res <- proxy .bar(" zio" )
110
+ ref <- ScopedRef .make(service)
111
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
112
+ res <- reloadable .bar(" zio" )
113
113
} yield assertTrue(res == 3 )
114
114
},
115
115
test(" generic methods" ) {
116
116
trait Foo { def bar [A ](a : A ): UIO [A ] }
117
117
val service : Foo = new Foo { def bar [A ](a : A ) = ZIO .succeed(a) }
118
118
for {
119
- ref <- ScopedRef .make(service)
120
- proxy = ServiceProxy .generate (ref)
121
- res <- proxy .bar[String ](" zio" )
119
+ ref <- ScopedRef .make(service)
120
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
121
+ res <- reloadable .bar[String ](" zio" )
122
122
} yield assertTrue(res == " zio" )
123
123
},
124
124
test(" curried methods" ) {
125
125
trait Foo { def bar (a : Int )(b : String ): UIO [String ] }
126
126
val service : Foo = new Foo { def bar (a : Int )(b : String ) = ZIO .succeed(b * a) }
127
127
for {
128
- ref <- ScopedRef .make(service)
129
- proxy = ServiceProxy .generate (ref)
130
- res <- proxy .bar(3 )(" zio" )
128
+ ref <- ScopedRef .make(service)
129
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
130
+ res <- reloadable .bar(3 )(" zio" )
131
131
} yield assertTrue(res == " zioziozio" )
132
132
},
133
133
test(" implicit clauses" ) {
134
134
trait Foo { def bar (a : Int )(implicit b : String ): UIO [String ] }
135
135
val service : Foo = new Foo { def bar (a : Int )(implicit b : String ) = ZIO .succeed(b * a) }
136
136
implicit val b : String = " zio"
137
137
for {
138
- ref <- ScopedRef .make(service)
139
- proxy = ServiceProxy .generate (ref)
140
- res <- proxy .bar(3 )
138
+ ref <- ScopedRef .make(service)
139
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
140
+ res <- reloadable .bar(3 )
141
141
} yield assertTrue(res == " zioziozio" )
142
142
},
143
143
test(" inherited abstract methods" ) {
@@ -146,48 +146,48 @@ object ServiceProxySpec extends ZIOSpecDefault {
146
146
147
147
val service : Foo = new Foo { def bar (a : Int ) = ZIO .succeed(" zio" * a) }
148
148
for {
149
- ref <- ScopedRef .make(service)
150
- proxy = ServiceProxy .generate (ref)
151
- res <- proxy .bar(3 )
149
+ ref <- ScopedRef .make(service)
150
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
151
+ res <- reloadable .bar(3 )
152
152
} yield assertTrue(res == " zioziozio" )
153
153
},
154
154
test(" overridden methods with default implementation" ) {
155
155
trait Foo { def bar : UIO [String ] = ZIO .succeed(" zio1" ) }
156
156
val service : Foo = new Foo { override def bar = ZIO .succeed(" zio2" ) }
157
157
for {
158
- ref <- ScopedRef .make(service)
159
- proxy = ServiceProxy .generate (ref)
160
- res <- proxy .bar
158
+ ref <- ScopedRef .make(service)
159
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
160
+ res <- reloadable .bar
161
161
} yield assertTrue(res == " zio2" )
162
162
},
163
163
test(" package private methods" ) {
164
164
trait Foo { private [zio] def bar : UIO [String ] }
165
165
val service : Foo = new Foo { private [zio] def bar : UIO [String ] = ZIO .succeed(" zio" ) }
166
166
for {
167
- ref <- ScopedRef .make(service)
168
- proxy = ServiceProxy .generate (ref)
169
- res <- proxy .bar
167
+ ref <- ScopedRef .make(service)
168
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
169
+ res <- reloadable .bar
170
170
} yield assertTrue(res == " zio" )
171
171
},
172
172
test(" ZIO vals" ) {
173
173
trait Foo { val bar : UIO [String ] }
174
174
val service1 : Foo = new Foo { val bar : UIO [String ] = ZIO .succeed(" zio1" ) }
175
175
val service2 : Foo = new Foo { val bar : UIO [String ] = ZIO .succeed(" zio2" ) }
176
176
for {
177
- ref <- ScopedRef .make(service1)
178
- proxy = ServiceProxy .generate (ref)
179
- res1 <- proxy .bar
180
- _ <- ref.set(ZIO .succeed(service2))
181
- res2 <- proxy .bar
177
+ ref <- ScopedRef .make(service1)
178
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
179
+ res1 <- reloadable .bar
180
+ _ <- ref.set(ZIO .succeed(service2))
181
+ res2 <- reloadable .bar
182
182
} yield assertTrue(res1 == " zio1" && res2 == " zio2" )
183
183
},
184
184
test(" ZIO vals with default implementation" ) {
185
185
trait Foo { val bar : UIO [String ] = ZIO .succeed(" zio" ) }
186
186
val service : Foo = new Foo { override val bar : UIO [String ] = ZIO .succeed(" zio1" ) }
187
187
for {
188
- ref <- ScopedRef .make(service)
189
- proxy = ServiceProxy .generate (ref)
190
- res1 <- proxy .bar
188
+ ref <- ScopedRef .make(service)
189
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
190
+ res1 <- reloadable .bar
191
191
} yield assertTrue(res1 == " zio1" )
192
192
},
193
193
test(" keeps non-ZIO default implementations" ) {
@@ -197,9 +197,9 @@ object ServiceProxySpec extends ZIOSpecDefault {
197
197
}
198
198
val service : Foo = new Foo { def bar = ZIO .succeed(" baz" ) }
199
199
for {
200
- ref <- ScopedRef .make(service)
201
- proxy = ServiceProxy .generate (ref)
202
- } yield assertTrue(proxy .qux == " quux" )
200
+ ref <- ScopedRef .make(service)
201
+ reloadable = IsReloadable [ Foo ].reloadable (ref)
202
+ } yield assertTrue(reloadable .qux == " quux" )
203
203
}
204
204
),
205
205
suite(" fails to compile" )(
@@ -211,7 +211,7 @@ object ServiceProxySpec extends ZIOSpecDefault {
211
211
val service: Foo = new Foo { def qux = "quux" }
212
212
for {
213
213
ref <- ScopedRef.make(service)
214
- } yield ServiceProxy.generate (ref)
214
+ } yield IsReloadable[Foo].reloadable (ref)
215
215
"""
216
216
)
217
217
} yield
@@ -227,9 +227,9 @@ object ServiceProxySpec extends ZIOSpecDefault {
227
227
class Foo(s: String) { def bar: UIO[String] = ZIO.succeed(s) }
228
228
val service: Foo = new Foo("zio")
229
229
for {
230
- ref <- ScopedRef.make(service)
231
- proxy = ServiceProxy.generate (ref)
232
- res <- proxy .bar
230
+ ref <- ScopedRef.make(service)
231
+ reloadable = IsReloadable[Foo].reloadable (ref)
232
+ res <- reloadable .bar
233
233
} yield res
234
234
"""
235
235
)
@@ -253,9 +253,9 @@ object ServiceProxySpec extends ZIOSpecDefault {
253
253
def bar: UIO[String] = ZIO.succeed("zio")
254
254
}
255
255
for {
256
- ref <- ScopedRef.make(service)
257
- proxy = ServiceProxy.generate (ref)
258
- res <- proxy .bar
256
+ ref <- ScopedRef.make(service)
257
+ reloadable = IsReloadable[Foo].reloadable (ref)
258
+ res <- reloadable .bar
259
259
} yield assertTrue(res == "zio")
260
260
"""
261
261
)
0 commit comments