@@ -170,6 +170,130 @@ final class ConvertStoredPropertyToComputedTest: XCTestCase {
170170
171171 try assertRefactorConvert ( baseline, expected: nil )
172172 }
173+
174+ func testRefactoringStoredPropertyWithLazyKeyword( ) throws {
175+ let baseline : DeclSyntax = """
176+ lazy var defaultColor: Color = .red
177+ """
178+
179+ let expected : DeclSyntax = """
180+ var defaultColor: Color { .red }
181+ """
182+
183+ try assertRefactorConvert ( baseline, expected: expected)
184+ }
185+
186+ func testRefactoringStoredPropertyWithModifiers( ) throws {
187+ let baseline : DeclSyntax = """
188+ private lazy var defaultColor: Color = .red
189+ """
190+
191+ let expected : DeclSyntax = """
192+ private var defaultColor: Color { .red }
193+ """
194+
195+ try assertRefactorConvert ( baseline, expected: expected)
196+ }
197+
198+ func testRefactoringStoredPropertyWithModifiers2( ) throws {
199+ let baseline : DeclSyntax = """
200+ lazy private var defaultColor: Color = .red
201+ """
202+
203+ let expected : DeclSyntax = """
204+ private var defaultColor: Color { .red }
205+ """
206+
207+ try assertRefactorConvert ( baseline, expected: expected)
208+ }
209+
210+ func testRefactoringStoredPropertyWithModifiersAndComment( ) throws {
211+ let baseline : DeclSyntax = """
212+ lazy /* some comment */ private var defaultColor: Color = .red
213+ """
214+
215+ let expected : DeclSyntax = """
216+ /* some comment */ private var defaultColor: Color { .red }
217+ """
218+
219+ try assertRefactorConvert ( baseline, expected: expected)
220+ }
221+
222+ func testRefactoringStoredPropertyWithModifiersAndComment2( ) throws {
223+ let baseline : DeclSyntax = """
224+ private /* comment */ lazy var defaultColor: Color = .red
225+ """
226+
227+ let expected : DeclSyntax = """
228+ private /* comment */ var defaultColor: Color { .red }
229+ """
230+
231+ try assertRefactorConvert ( baseline, expected: expected)
232+ }
233+
234+ func testRefactoringStoredPropertyWithModifierAndComment( ) throws {
235+ let baseline : DeclSyntax = """
236+ lazy /* comment */ var defaultColor: Color = .red
237+ """
238+
239+ let expected : DeclSyntax = """
240+ /* comment */ var defaultColor: Color { .red }
241+ """
242+
243+ try assertRefactorConvert ( baseline, expected: expected)
244+ }
245+
246+ func testRefactoringStructStoredPropertiyWithModifiers( ) throws {
247+ let baseline : DeclSyntax = """
248+ struct Foo {
249+ lazy private var defaultColor: Color = .red
250+ }
251+ """
252+
253+ let expected : DeclSyntax = """
254+ struct Foo {
255+ private var defaultColor: Color { .red }
256+ }
257+ """
258+
259+ try assertRefactorStructConvert ( baseline, expected: expected)
260+ }
261+
262+ func testRefactoringStructStoredPropertiyWithModifiers2( ) throws {
263+ let baseline : DeclSyntax = """
264+ struct Foo {
265+ private
266+ /* comment */ lazy var defaultColor: Color = .red
267+ }
268+ """
269+
270+ let expected : DeclSyntax = """
271+ struct Foo {
272+ private
273+ /* comment */ var defaultColor: Color { .red }
274+ }
275+ """
276+
277+ try assertRefactorStructConvert ( baseline, expected: expected)
278+ }
279+
280+ func testRefactoringStructStoredPropertiyWithModifiers3( ) throws {
281+ let baseline : DeclSyntax = """
282+ struct Foo {
283+ private /* comment */
284+ /* another comment */ lazy var defaultColor: Color = .red
285+ }
286+ """
287+
288+ let expected : DeclSyntax = """
289+ struct Foo {
290+ private /* comment */
291+ /* another comment */ var defaultColor: Color { .red }
292+ }
293+ """
294+
295+ try assertRefactorStructConvert ( baseline, expected: expected)
296+ }
173297}
174298
175299private func assertRefactorConvert(
@@ -187,3 +311,23 @@ private func assertRefactorConvert(
187311 line: line
188312 )
189313}
314+
315+ private func assertRefactorStructConvert(
316+ _ callDecl: DeclSyntax ,
317+ expected: DeclSyntax ,
318+ file: StaticString = #filePath,
319+ line: UInt = #line
320+ ) throws {
321+
322+ let structCallDecl = try XCTUnwrap ( callDecl. as ( StructDeclSyntax . self) )
323+ let variable = try XCTUnwrap ( structCallDecl. memberBlock. members. first? . decl. as ( VariableDeclSyntax . self) )
324+ let refactored = try ConvertStoredPropertyToComputed . refactor ( syntax: variable, in: ( ) )
325+
326+ let members = MemberBlockItemListSyntax {
327+ MemberBlockItemSyntax ( decl: DeclSyntax ( refactored) )
328+ }
329+
330+ let refactoredMemberBlock = structCallDecl. memberBlock. with ( \. members, members)
331+ let refactoredStruct = structCallDecl. with ( \. memberBlock, refactoredMemberBlock)
332+ assertStringsEqualWithDiff ( refactoredStruct. description, expected. description)
333+ }
0 commit comments