1
1
package org.utbot.framework.codegen.tree
2
2
3
3
import org.utbot.framework.codegen.domain.builtin.TestClassUtilMethodProvider
4
- import org.utbot.framework.codegen.domain.builtin.injectMocksClassId
5
- import org.utbot.framework.codegen.domain.builtin.mockClassId
4
+ import org.utbot.framework.codegen.domain.builtin.closeMethodId
5
+ import org.utbot.framework.codegen.domain.builtin.openMocksMethodId
6
6
import org.utbot.framework.codegen.domain.context.CgContext
7
+ import org.utbot.framework.codegen.domain.models.CgAssignment
7
8
import org.utbot.framework.codegen.domain.models.CgClassBody
8
9
import org.utbot.framework.codegen.domain.models.CgDeclaration
9
- import org.utbot.framework.codegen.domain.models.CgFieldDeclaration
10
+ import org.utbot.framework.codegen.domain.models.CgFrameworkUtilMethod
10
11
import org.utbot.framework.codegen.domain.models.CgMethod
12
+ import org.utbot.framework.codegen.domain.models.CgMethodCall
11
13
import org.utbot.framework.codegen.domain.models.CgMethodTestSet
12
14
import org.utbot.framework.codegen.domain.models.CgMethodsCluster
13
15
import org.utbot.framework.codegen.domain.models.CgRegion
16
+ import org.utbot.framework.codegen.domain.models.CgSimpleRegion
17
+ import org.utbot.framework.codegen.domain.models.CgStatementExecutableCall
14
18
import org.utbot.framework.codegen.domain.models.CgStaticsRegion
19
+ import org.utbot.framework.codegen.domain.models.CgVariable
15
20
import org.utbot.framework.codegen.domain.models.SpringTestClassModel
16
- import org.utbot.framework.codegen.domain.models.builders.SpringTestClassModelBuilder
21
+ import org.utbot.framework.plugin.api.UtCompositeModel
22
+ import org.utbot.framework.plugin.api.util.id
23
+ import org.utbot.framework.plugin.api.util.objectClassId
17
24
18
25
class CgSpringTestClassConstructor (context : CgContext ): CgAbstractTestClassConstructor<SpringTestClassModel>(context) {
19
26
27
+ private val variableConstructor: CgVariableConstructor = CgComponents .getVariableConstructorBy(context)
28
+ private val statementConstructor: CgStatementConstructor = CgComponents .getStatementConstructorBy(context)
29
+
20
30
override fun constructTestClassBody (testClassModel : SpringTestClassModel ): CgClassBody {
21
31
return buildClassBody(currentTestClass) {
22
32
@@ -56,7 +66,7 @@ class CgSpringTestClassConstructor(context: CgContext): CgAbstractTestClassConst
56
66
57
67
fields + = CgFieldDeclaration (mockClassId, declaration, annotationInjectMock)
58
68
val value = vc.getOrCreateVariable(listOfUtModels.first(), name)
59
- CgSpringVariableConstructor .injectingMocksModelsVariables + = listOfUtModels to value
69
+ CgSpringVariableConstructor .fromListToVariableList + = Pair ( listOfUtModels, value)
60
70
}
61
71
62
72
// endregion
@@ -79,20 +89,16 @@ class CgSpringTestClassConstructor(context: CgContext): CgAbstractTestClassConst
79
89
)
80
90
fields + = CgFieldDeclaration (mockClassId, declaration, annotationMock)
81
91
val value = vc.getOrCreateVariable(listOfUtModels.first(), name)
82
- CgSpringVariableConstructor .mockedModelsVariables + = listOfUtModels to value
92
+ CgSpringVariableConstructor .fromListToVariableList + = Pair ( listOfUtModels, value)
83
93
}
84
94
85
95
// endregion
86
96
87
97
88
98
89
- // TODO: create beforeEach/ afterEach methods
90
- // Requires new implementation of CgMethod for test framework builtins
91
-
92
- // Render the following things here?
93
- // private AutoCloseable mockitoCloseable;
94
- // @BeforeEach ...
95
- // @AfterEach ...
99
+ val (closeableField, closeableMethods) = constructMockitoCloseables()
100
+ fields + = closeableField
101
+ methodRegions + = closeableMethods
96
102
97
103
for (testSet in testClassModel.methodTestSets) {
98
104
updateCurrentExecutable(testSet.executableId)
@@ -132,4 +138,57 @@ class CgSpringTestClassConstructor(context: CgContext): CgAbstractTestClassConst
132
138
133
139
return if (regions.any()) regions else null
134
140
}
141
+
142
+ private fun constructMockitoCloseables (): Pair <CgDeclaration , CgMethodsCluster > {
143
+ val mockitoCloseableVarName = " mockitoCloseable"
144
+ val mockitoCloseableVarType = java.lang.AutoCloseable ::class .id
145
+
146
+ val mockitoCloseableModel = UtCompositeModel (
147
+ id = null ,
148
+ classId = mockitoCloseableVarType,
149
+ isMock = false ,
150
+ )
151
+
152
+ val mockitoCloseableVariable =
153
+ variableConstructor.getOrCreateVariable(mockitoCloseableModel, mockitoCloseableVarName)
154
+ val mockitoCloseableField = CgDeclaration (mockitoCloseableVarType, mockitoCloseableVarName, initializer = null )
155
+
156
+ importIfNeeded(openMocksMethodId)
157
+
158
+ val openMocksCall = CgMethodCall (
159
+ caller = null ,
160
+ executableId = openMocksMethodId,
161
+ // TODO: this is a hack of this
162
+ arguments = listOf (CgVariable (" this" , objectClassId))
163
+ )
164
+
165
+ val closeCall = CgMethodCall (
166
+ caller = mockitoCloseableVariable,
167
+ executableId = closeMethodId,
168
+ arguments = emptyList(),
169
+ )
170
+
171
+ val openMocksStatement = CgAssignment (mockitoCloseableVariable, openMocksCall)
172
+ val beforeMethod = CgFrameworkUtilMethod (
173
+ name = " setUp" ,
174
+ statements = listOf (openMocksStatement),
175
+ exceptions = emptySet(),
176
+ annotations = listOf (statementConstructor.annotation(context.testFramework.beforeMethodId)),
177
+ )
178
+
179
+ val closeStatement = CgStatementExecutableCall (closeCall)
180
+ val afterMethod = CgFrameworkUtilMethod (
181
+ name = " tearDown" ,
182
+ statements = listOf (closeStatement),
183
+ exceptions = setOf (java.lang.Exception ::class .id),
184
+ annotations = listOf (statementConstructor.annotation(context.testFramework.afterMethodId)),
185
+ )
186
+
187
+ val methodCluster = CgMethodsCluster (
188
+ " Test run utility methods" ,
189
+ listOf (CgSimpleRegion (" Mocking utils" , listOf (beforeMethod, afterMethod)))
190
+ )
191
+
192
+ return mockitoCloseableField to methodCluster
193
+ }
135
194
}
0 commit comments