@@ -9,12 +9,15 @@ import org.utbot.framework.codegen.domain.StaticsMocking
9
9
import org.utbot.framework.codegen.domain.TestFramework
10
10
import org.utbot.framework.codegen.domain.models.CgMethodTestSet
11
11
import org.utbot.framework.codegen.domain.context.CgContext
12
- import org.utbot.framework.codegen.domain.models.TestClassModelBuilder
12
+ import org.utbot.framework.codegen.domain.models.CgClassFile
13
+ import org.utbot.framework.codegen.domain.models.builders.SimpleTestClassModelBuilder
14
+ import org.utbot.framework.codegen.domain.models.builders.SpringTestClassModelBuilder
13
15
import org.utbot.framework.codegen.renderer.CgAbstractRenderer
14
16
import org.utbot.framework.codegen.reports.TestsGenerationReport
15
17
import org.utbot.framework.codegen.tree.CgSimpleTestClassConstructor
16
18
import org.utbot.framework.codegen.tree.ututils.UtilClassKind
17
19
import org.utbot.framework.codegen.services.language.CgLanguageAssistant
20
+ import org.utbot.framework.codegen.tree.CgSpringTestClassConstructor
18
21
import org.utbot.framework.plugin.api.ClassId
19
22
import org.utbot.framework.plugin.api.CodegenLanguage
20
23
import org.utbot.framework.plugin.api.ExecutableId
@@ -73,31 +76,60 @@ open class CodeGenerator(
73
76
val cgTestSets = testSets.map { CgMethodTestSet (it) }.toList()
74
77
return withCustomContext(testClassCustomName) {
75
78
context.withTestClassFileScope {
76
- val astConstructor = CgSimpleTestClassConstructor (context)
77
- val renderer = CgAbstractRenderer .makeRenderer(context)
78
- val testClassModelBuilder = TestClassModelBuilder (context.isSpringClass)
79
+ if (context.isSpringClass) {
80
+ generateForSpringClass(cgTestSets)
81
+ } else {
82
+ generateForSimpleClass(cgTestSets)
83
+ }
84
+ }
85
+ }
86
+ }
79
87
80
- val testClassModel = testClassModelBuilder.createClassModel(classUnderTest, cgTestSets)
88
+ private fun generateForSimpleClass (testSets : List <CgMethodTestSet >): CodeGeneratorResult {
89
+ val astConstructor = CgSimpleTestClassConstructor (context)
90
+ val testClassModel = SimpleTestClassModelBuilder ().createTestClassModel(classUnderTest, testSets)
81
91
82
- fun now () = LocalDateTime .now().format(DateTimeFormatter .ofPattern(" HH:mm:ss.SSS" ))
92
+ logger.info { " Code generation phase started at ${now()} " }
93
+ val testClassFile = astConstructor.construct(testClassModel)
94
+ logger.info { " Code generation phase finished at ${now()} " }
83
95
84
- logger.info { " Code generation phase started at ${now()} " }
85
- val testClassFile = astConstructor.construct(testClassModel)
86
- logger.info { " Code generation phase finished at ${now()} " }
96
+ val generatedCode = renderToString(testClassFile)
87
97
88
- logger.info { " Rendering phase started at ${now()} " }
89
- testClassFile.accept(renderer)
90
- logger.info { " Rendering phase finished at ${now()} " }
98
+ return CodeGeneratorResult (
99
+ generatedCode = generatedCode,
100
+ utilClassKind = UtilClassKind .fromCgContextOrNull(context),
101
+ testsGenerationReport = astConstructor.testsGenerationReport
102
+ )
103
+ }
91
104
92
- CodeGeneratorResult (
93
- generatedCode = renderer.toString(),
94
- utilClassKind = UtilClassKind .fromCgContextOrNull(context),
95
- testsGenerationReport = astConstructor.testsGenerationReport
96
- )
97
- }
98
- }
105
+ private fun generateForSpringClass (testSets : List <CgMethodTestSet >): CodeGeneratorResult {
106
+ val astConstructor = CgSpringTestClassConstructor (context)
107
+ val testClassModel = SpringTestClassModelBuilder ().createTestClassModel(classUnderTest, testSets)
108
+
109
+ logger.info { " Code generation phase started at ${now()} " }
110
+ val testClassFile = astConstructor.construct(testClassModel)
111
+ logger.info { " Code generation phase finished at ${now()} " }
112
+
113
+ val generatedCode = renderToString(testClassFile)
114
+
115
+ return CodeGeneratorResult (
116
+ generatedCode = generatedCode,
117
+ utilClassKind = UtilClassKind .fromCgContextOrNull(context),
118
+ testsGenerationReport = TestsGenerationReport ()
119
+ )
120
+ }
121
+
122
+ private fun renderToString (testClassFile : CgClassFile ): String {
123
+ logger.info { " Rendering phase started at ${now()} " }
124
+ val renderer = CgAbstractRenderer .makeRenderer(context)
125
+ testClassFile.accept(renderer)
126
+ logger.info { " Rendering phase finished at ${now()} " }
127
+
128
+ return renderer.toString()
99
129
}
100
130
131
+ private fun now () = LocalDateTime .now().format(DateTimeFormatter .ofPattern(" HH:mm:ss.SSS" ))
132
+
101
133
/* *
102
134
* Wrapper function that configures context as needed for utbot-online:
103
135
* - turns on imports optimization in code generator
0 commit comments