Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
9fcf5c0
UTBotFamily
denis-fokin Oct 5, 2022
eee8f85
Add CodeGenLanguage.id
tamarinvs19 Oct 5, 2022
08ccb65
Update Renderers
tamarinvs19 Oct 5, 2022
301f2d5
Move codeGenLanguage to CgRenderContext
tamarinvs19 Oct 5, 2022
ddc57d9
Add init to CodeLanguage
tamarinvs19 Oct 5, 2022
8086a63
UTBotFamily
denis-fokin Oct 5, 2022
0708155
Fix after merge bugs
tamarinvs19 Oct 5, 2022
64ade72
Fix bug with variableConstructors and remove ExecutionStateAnalyzer from
tamarinvs19 Oct 6, 2022
50c9a57
Update generated_tests__dicts
tamarinvs19 Oct 6, 2022
6a6a337
Change targetCompatibility verstion
tamarinvs19 Oct 6, 2022
9e9725c
Refactor js
tamarinvs19 Oct 6, 2022
8a53d09
Fix PycharmUltimate code and uncomment js
tamarinvs19 Oct 6, 2022
8abe0b7
Fix Windows symbols problem
tamarinvs19 Oct 6, 2022
542aeae
Disable runIde tasks in modules where we need only Idea sdk dependencies
denis-fokin Oct 6, 2022
ee45191
Merge actual UTBot Go, set up and fix its CLI
GlebSolovev Oct 4, 2022
e44813d
Improve requirements description for UTBot Go
GlebSolovev Oct 4, 2022
a3ad833
Merge UTBot Go IntelliJ plugin support
tamarinvs19 Oct 7, 2022
a7b8d25
Fix Go
tamarinvs19 Oct 7, 2022
8def007
New file chooser in Python plugin
tochilinak Oct 7, 2022
0af38e8
Fixed bug in Python cli
tochilinak Oct 7, 2022
14ff580
Refactored Slava's CodegenLanguage
zishkaz Oct 7, 2022
d8328e2
disable go runIde
Markoutte Oct 10, 2022
8a91164
Change "\\" to File.separator
tamarinvs19 Oct 10, 2022
14ccaf6
Add relation sys.path support
tamarinvs19 Oct 10, 2022
894707b
Change cli result output
tamarinvs19 Oct 10, 2022
78e8f9d
[WIP] Linux cmd possible fix
rudolf101 Oct 11, 2022
99c5d8b
[WIP] universal JsCmdExec implementation
zishkaz Oct 14, 2022
e6b0168
Moved OsProvider for a wider access scope
zishkaz Oct 14, 2022
299452d
Getting node and npm from IDEA settings
zishkaz Oct 14, 2022
ba23868
JsDynamicSettings added
zishkaz Oct 14, 2022
4b3fb14
[WIP] Added nyc path field to dialog window
rudolf101 Oct 14, 2022
079e8d0
New js coverage algo implementation
zishkaz Oct 16, 2022
319bc54
Added nyc path field into dialog window
rudolf101 Oct 17, 2022
54f079c
Update samples
tamarinvs19 Oct 17, 2022
ff1b093
Added replace separator in Nyc validation
rudolf101 Oct 18, 2022
9ed03f0
Added new options to js CLI and fixed exports managers
zishkaz Oct 18, 2022
074d0d1
Fix after rebase problems
tamarinvs19 Oct 19, 2022
b11718f
Fixed js samples and help tips in js CLI
zishkaz Oct 19, 2022
18f514f
Fixed js exports managers regexes
zishkaz Oct 19, 2022
eae8efe
Move language-specific UtModels to utbo-<lang> and remove CodegenLang…
tamarinvs19 Oct 20, 2022
d99deb9
Fix cli bug
tamarinvs19 Oct 20, 2022
e74317f
Simle style fix
tamarinvs19 Oct 20, 2022
3887c93
Moved test directory chooser to ui-commons and fixed graal error
zishkaz Oct 20, 2022
1247455
Removing go from pr branch
zishkaz Oct 24, 2022
037098f
Added gitignore file for js samples
zishkaz Oct 24, 2022
97f4d6a
Fix changes
tamarinvs19 Oct 24, 2022
7688990
Fix testClassName bug
tamarinvs19 Oct 25, 2022
29180b9
Rebase FileUtil.kt onto main
tamarinvs19 Oct 26, 2022
3129d70
Rebase files onto main
tamarinvs19 Oct 26, 2022
0152df5
Remove internal UtilMethodProvider
tamarinvs19 Oct 26, 2022
84ec8fc
Rebase onto main
tamarinvs19 Oct 26, 2022
b24caf9
Update language settings
tamarinvs19 Oct 26, 2022
fc52711
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
52085ec
Update gradle files
tamarinvs19 Oct 26, 2022
eba7d57
Fix js npm path and nyc validator for linux
tamarinvs19 Oct 26, 2022
be1adc7
Add conditions for ideType
tamarinvs19 Oct 26, 2022
f997039
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
9e0b25a
Update ide settings
tamarinvs19 Oct 26, 2022
83a9dcd
Add docs page about IDE
tamarinvs19 Oct 26, 2022
fcca3bf
Add docs link
tamarinvs19 Oct 26, 2022
f21a1cb
Fix Coverage error
tamarinvs19 Oct 26, 2022
2d7d817
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
05af2c5
Rebase onto main
tamarinvs19 Oct 26, 2022
68c5d7d
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 26, 2022
92f6f72
Rebase onto main
tamarinvs19 Oct 26, 2022
55c278b
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 27, 2022
1f1b016
Rebase onto main
tamarinvs19 Oct 27, 2022
1d5b379
Make GgGetClass sealed
tamarinvs19 Oct 27, 2022
3d98f82
Fix deprecated showYesNoDialog and ProjectFileIndex.SERVICE
tamarinvs19 Oct 27, 2022
dc242fe
Change IU to IC
tamarinvs19 Oct 27, 2022
bdd4442
Remove open from ClassId.elementClassId
tamarinvs19 Oct 27, 2022
c7b69a1
Code style refactoring
tamarinvs19 Oct 27, 2022
4432359
Add file with changes description
tamarinvs19 Oct 27, 2022
284928b
Update gitignores
tamarinvs19 Oct 27, 2022
7ee92d1
Remove com.jetbrains.intellij.idea:ideaIC dependency
tamarinvs19 Oct 27, 2022
67b9fe0
Change IU to IC
tamarinvs19 Oct 27, 2022
6d9522a
Added coverage mode buttons | JS
rudolf101 Oct 27, 2022
54faab1
Update CLI docs
rudolf101 Oct 28, 2022
5a50a55
Fixed JS basic coverage service algo
zishkaz Oct 28, 2022
60e96e9
Fixes JsConstantsModelProvider after master merge
zishkaz Oct 28, 2022
972607e
Removed unnecessary check for Mocha framework that failed in built pl…
zishkaz Oct 28, 2022
05d7b4e
Removed lateinit modifier
zishkaz Oct 28, 2022
f578890
Removed export statements from js samples
zishkaz Oct 28, 2022
f8f064a
Merge branch 'tamarinvs19/UnitTestBot_Family_PR' of https://github.co…
zishkaz Oct 28, 2022
aa4c1a8
Fix in Python CLI
tochilinak Oct 28, 2022
3409678
JS cli naming fix
zishkaz Oct 31, 2022
289b6b9
Rename python cli class
tamarinvs19 Oct 31, 2022
5f205e3
Move comment line in CodeGeneratorResult
tamarinvs19 Oct 31, 2022
ec8f1dd
Remove jClass from python/js branch
tamarinvs19 Oct 31, 2022
d66c1ba
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Oct 31, 2022
6295f85
Reworked text annotations in Mocha object
zishkaz Oct 31, 2022
1781fa8
Merge remote-tracking branch 'origin/tamarinvs19/UnitTestBot_Family_P…
zishkaz Oct 31, 2022
d53325b
Remove soot dependency from utbot-python and implement new CgRender m…
tamarinvs19 Oct 31, 2022
18acd32
Merge remote-tracking branch 'origin/tamarinvs19/UnitTestBot_Family_P…
tamarinvs19 Oct 31, 2022
2385dc6
Used withUtContext in JsTestGenerator and reworked Mocha TestFramewor…
zishkaz Oct 31, 2022
20e416a
Locally fixed explicit File.separator replacements
zishkaz Oct 31, 2022
6dff767
Removed unnecessary catch
rudolf101 Nov 1, 2022
766616c
Fix weak comments
rudolf101 Nov 1, 2022
58415b3
Removed unnecessary try catch
rudolf101 Nov 1, 2022
f73d3fd
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 2, 2022
5c9e7fb
Fix CgRenderer bugs after merge
tamarinvs19 Nov 2, 2022
a8d4d92
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 2, 2022
0b66cab
Add README.md to utbot-python-cli
tamarinvs19 Nov 2, 2022
7a8893c
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 3, 2022
98ac84a
JS code refactoring
zishkaz Nov 3, 2022
d0815c8
Merge remote-tracking branch 'origin/tamarinvs19/UnitTestBot_Family_P…
zishkaz Nov 3, 2022
7e16b66
Removed unnecessary JS file parsing
zishkaz Nov 7, 2022
dcfa7eb
Refactor utbot-intellij-python
tamarinvs19 Nov 7, 2022
a781aa9
Refactor utbot-python
tamarinvs19 Nov 7, 2022
9074ed2
Fix "Language <> is disabled" problem from Issue #1329
tamarinvs19 Nov 9, 2022
f9698b3
Merge branch 'main' into tamarinvs19/UnitTestBot_Family_PR
tamarinvs19 Nov 9, 2022
37c9564
Change GenerateTestsModel to BaseTestsModel
tamarinvs19 Nov 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix after merge bugs
  • Loading branch information
tamarinvs19 committed Oct 19, 2022
commit 07081554d3d9995c673a12e64873b4c11fae5e4a
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,6 @@ data class CgMethodTestSet constructor(
) {
executions = from.executions
}
/**
* For JavaScript purposes.
* todo: consider to remove
*/
constructor(
executableId: ExecutableId,
execs: List<UtExecution> = emptyList(),
errors: Map<String, Int> = emptyMap()
) : this(
executableId,
null,
errors,
listOf(null to execs.indices)
) {
executions = execs
}

constructor(
executableId: ExecutableId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ interface CgFieldStateManager {
fun rememberFinalEnvironmentState(info: StateModificationInfo)
}

internal class CgFieldStateManagerImpl(val context: CgContext)
class CgFieldStateManagerImpl(val context: CgContext)
: CgContextOwner by context,
CgFieldStateManager,
CgCallableAccessManager by getCallableAccessManagerBy(context),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
package org.utbot.framework.codegen.model.constructor.tree

import org.utbot.framework.codegen.Junit4
import org.utbot.framework.codegen.Junit5
import org.utbot.framework.codegen.ParametrizedTestSource
import org.utbot.framework.codegen.TestNg
import org.utbot.framework.codegen.model.constructor.CgMethodTestSet
import org.utbot.framework.codegen.model.constructor.TestClassModel
import org.utbot.framework.codegen.model.constructor.builtin.TestClassUtilMethodProvider
import org.utbot.framework.codegen.model.constructor.context.CgContext
import org.utbot.framework.codegen.model.constructor.context.CgContextOwner
import org.utbot.framework.codegen.model.constructor.name.CgNameGenerator
import org.utbot.framework.codegen.model.constructor.name.CgNameGeneratorImpl
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.clearContextRelatedStorage
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getMethodConstructorBy
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getTestFrameworkManagerBy
import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor
import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructorImpl
import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass
import org.utbot.framework.codegen.model.tree.CgExecutableUnderTestCluster
import org.utbot.framework.codegen.model.tree.CgMethod
Expand Down Expand Up @@ -293,7 +288,7 @@ open class CgTestClassConstructor(val context: CgContext) :
protected val CgMethodTestSet.allErrors: Map<String, Int>
get() = errors + codeGenerationErrors.getOrDefault(this, mapOf())

internal object CgComponents {
object CgComponents {
/**
* Clears all stored data for current [CgContext].
* As far as context is created per class under test,
Expand All @@ -318,20 +313,24 @@ open class CgTestClassConstructor(val context: CgContext) :
private val variableConstructors: MutableMap<CgContext, CgVariableConstructor> = mutableMapOf()
private val methodConstructors: MutableMap<CgContext, CgMethodConstructor> = mutableMapOf()

fun getNameGeneratorBy(context: CgContext) = nameGenerators.getOrPut(context) { CgNameGeneratorImpl(context) }
fun getCallableAccessManagerBy(context: CgContext) = callableAccessManagers.getOrPut(context) { CgCallableAccessManagerImpl(context) }
fun getStatementConstructorBy(context: CgContext) = statementConstructors.getOrPut(context) { CgStatementConstructorImpl(context) }

fun getTestFrameworkManagerBy(context: CgContext) = when (context.testFramework) {
is Junit4 -> testFrameworkManagers.getOrPut(context) { Junit4Manager(context) }
is Junit5 -> testFrameworkManagers.getOrPut(context) { Junit5Manager(context) }
is TestNg -> testFrameworkManagers.getOrPut(context) { TestNgManager(context) }
else -> throw UnsupportedOperationException()
fun getNameGeneratorBy(context: CgContext) = nameGenerators.getOrPut(context) {
context.codeGenLanguage.getNameGeneratorBy(context)
}
fun getCallableAccessManagerBy(context: CgContext) = callableAccessManagers.getOrPut(context) {
context.codeGenLanguage.getCallableAccessManagerBy(context)
}
fun getStatementConstructorBy(context: CgContext) = statementConstructors.getOrPut(context) {
context.codeGenLanguage.getStatementConstructorBy(context)
}

fun getTestFrameworkManagerBy(context: CgContext) =
testFrameworkManagers.getOrDefault(context, context.codeGenLanguage.managerByFramework(context))

fun getMockFrameworkManagerBy(context: CgContext) = mockFrameworkManagers.getOrPut(context) { MockFrameworkManager(context) }
fun getVariableConstructorBy(context: CgContext) = variableConstructors.getOrPut(context) { CgVariableConstructor(context) }
fun getMethodConstructorBy(context: CgContext) = methodConstructors.getOrPut(context) { CgMethodConstructor(context) }
fun getMethodConstructorBy(context: CgContext) = methodConstructors.getOrPut(context) {
context.codeGenLanguage.getMethodConstructorBy(context)
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,6 @@ private fun UtModel.calculateSize(used: MutableSet<UtModel> = mutableSetOf()): I
is PythonModel -> TODO()
is GoUtModel -> TODO()
is JsUtModel -> TODO()
else -> 0
is UtLambdaModel -> 1 + capturedValues.sumOf { it.calculateSize(used) }
// PythonModel, GoUtModel, JsUtModel may go here
else -> 0
Comment thread
denis-fokin marked this conversation as resolved.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,7 @@ object CodeGenerationController {
get() = when (this) {
CodegenLanguage.JAVA -> JavaFileType.INSTANCE
CodegenLanguage.KOTLIN -> KotlinFileType.INSTANCE
else -> throw UnsupportedOperationException()
}

private fun waitForCountDown(latch: CountDownLatch, timeout: Long = 5, timeUnit: TimeUnit = TimeUnit.SECONDS, indicator : ProgressIndicator, action: Runnable) {
Expand Down
7 changes: 2 additions & 5 deletions utbot-python/src/main/kotlin/org/utbot/python/PythonEngine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,12 @@ import org.utbot.framework.plugin.api.*
import org.utbot.framework.plugin.api.python.NormalizedPythonAnnotation
import org.utbot.framework.plugin.api.python.PythonTreeModel
import org.utbot.framework.plugin.api.python.pythonAnyClassId
import org.utbot.fuzzer.FuzzedConcreteValue
import org.utbot.fuzzer.FuzzedMethodDescription
import org.utbot.fuzzer.fuzz
import org.utbot.fuzzer.*
import org.utbot.python.code.AnnotationProcessor.getModulesFromAnnotation
import org.utbot.python.providers.defaultPythonModelProvider
import org.utbot.python.utils.camelToSnakeCase
import org.utbot.summary.fuzzer.names.MethodBasedNameSuggester
import org.utbot.summary.fuzzer.names.ModelBasedNameSuggester
import org.utbot.fuzzer.FuzzedValue
import java.lang.Long.max

private val logger = KotlinLogging.logger {}
Expand Down Expand Up @@ -138,7 +135,7 @@ class PythonEngine(
}

yield(
UtExecution(
UtFuzzedExecution(
stateBefore = EnvironmentModels(jobResult.thisObject, jobResult.modelList, emptyMap()),
stateAfter = EnvironmentModels(jobResult.thisObject, jobResult.modelList, emptyMap()),
result = result,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import org.utbot.framework.plugin.api.util.methodId
import org.utbot.framework.plugin.api.util.objectClassId
import org.utbot.framework.plugin.api.util.voidClassId

object Pytest : TestFramework(displayName = "pytest") {
object Pytest : TestFramework(displayName = "pytest", id = "pytest") {
override val mainPackage: String = "pytest"
override val assertionsClass: ClassId = pythonNoneClassId
override val arraysAssertionsClass: ClassId = assertionsClass
Expand Down Expand Up @@ -45,7 +45,7 @@ object Pytest : TestFramework(displayName = "pytest") {
}
}

object Unittest : TestFramework(displayName = "Unittest") {
object Unittest : TestFramework(displayName = "Unittest", id = "Unittest") {
override val testSuperClass: ClassId = PythonClassId("unittest.TestCase")
override val mainPackage: String = "unittest"
override val assertionsClass: ClassId = PythonClassId("self")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ class PythonCgCallableAccessManagerImpl(val context: CgContext) : CgCallableAcce
override fun ClassId.get(staticMethodId: MethodId): CgIncompleteMethodCall =
CgIncompleteMethodCall(staticMethodId, CgThisInstance(pythonAnyClassId))

override fun CgExpression.get(fieldId: FieldId): CgExpression {
TODO("Not yet implemented")
}

override fun ClassId.get(fieldId: FieldId): CgStaticFieldAccess {
TODO("Not yet implemented")
}

override fun ConstructorId.invoke(vararg args: Any?): CgExecutableCall {
val resolvedArgs = args.resolve()
val constructorCall = CgConstructorCall(this, resolvedArgs)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.utbot.python.framework.codegen.model.constructor.tree

import org.utbot.framework.codegen.model.constructor.context.CgContext
import org.utbot.framework.codegen.model.constructor.tree.CgFieldStateManagerImpl
import org.utbot.framework.codegen.model.constructor.tree.CgMethodConstructor
import org.utbot.framework.codegen.model.tree.*
import org.utbot.framework.fields.ExecutionStateAnalyzer
import org.utbot.framework.fields.StateModificationInfo
import org.utbot.framework.plugin.api.*
import org.utbot.framework.plugin.api.python.*
Expand Down Expand Up @@ -36,8 +38,9 @@ class PythonCgMethodConstructor(context: CgContext) : CgMethodConstructor(contex
rememberInitialStaticFields(statics)
context.codeGenLanguage.memoryObjects.clear()

// val stateAnalyzer = ExecutionStateAnalyzer(execution)
val modificationInfo = StateModificationInfo() // stateAnalyzer.findModifiedFields()
val stateAnalyzer = ExecutionStateAnalyzer(execution)
val modificationInfo = stateAnalyzer.findModifiedFields()
val fieldStateManager = CgFieldStateManagerImpl(context)
// TODO: move such methods to another class and leave only 2 public methods: remember initial and final states
val mainBody = {
substituteStaticFields(statics)
Expand All @@ -51,16 +54,10 @@ class PythonCgMethodConstructor(context: CgContext) : CgMethodConstructor(contex
val name = paramNames[executableId]?.get(index)
methodArguments += variableConstructor.getOrCreateVariable(param, name)
}
// if (executableId is PythonMethodId) {
// existingVariableNames += executableId.name
// executableId.moduleName.split('.').forEach {
// existingVariableNames += it
// }
// }
rememberInitialEnvironmentState(modificationInfo)
fieldStateManager.rememberInitialEnvironmentState(modificationInfo)
recordActualResult()
generateResultAssertions()
rememberFinalEnvironmentState(modificationInfo)
fieldStateManager.rememberFinalEnvironmentState(modificationInfo)
generateFieldStateAssertions()
if (executableId is PythonMethodId)
generatePythonTestComments(execution)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ import fj.data.Either
import org.utbot.framework.codegen.model.constructor.context.CgContext
import org.utbot.framework.codegen.model.constructor.context.CgContextOwner
import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManager
import org.utbot.framework.codegen.model.constructor.util.CgComponents
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy
import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor
import org.utbot.framework.codegen.model.constructor.util.ExpressionWithType
import org.utbot.framework.codegen.model.tree.*
import org.utbot.framework.codegen.model.util.buildExceptionHandler
import org.utbot.framework.codegen.model.util.isAccessibleFrom
import org.utbot.framework.codegen.model.util.resolve
import org.utbot.framework.plugin.api.ClassId
import org.utbot.framework.plugin.api.ExecutableId
import org.utbot.framework.plugin.api.FieldId
import org.utbot.framework.plugin.api.UtModel
import org.utbot.framework.plugin.api.util.*
import org.utbot.python.framework.codegen.model.constructor.util.*
Expand All @@ -20,9 +23,9 @@ import java.util.*
class PythonCgStatementConstructorImpl(context: CgContext) :
CgStatementConstructor,
CgContextOwner by context,
CgCallableAccessManager by CgComponents.getCallableAccessManagerBy(context) {
CgCallableAccessManager by getCallableAccessManagerBy(context) {

private val nameGenerator = CgComponents.getNameGeneratorBy(context)
private val nameGenerator = getNameGeneratorBy(context)

override fun newVar(
baseType: ClassId,
Expand Down Expand Up @@ -121,6 +124,18 @@ class PythonCgStatementConstructorImpl(context: CgContext) :
currentBlock += buildCgForEachLoop(init)
}

override fun getClassOf(classId: ClassId): CgExpression {
TODO("Not yet implemented")
}

override fun createFieldVariable(fieldId: FieldId): CgVariable {
TODO("Not yet implemented")
}

override fun createExecutableVariable(executableId: ExecutableId, arguments: List<CgExpression>): CgVariable {
TODO("Not yet implemented")
}

override fun tryBlock(init: () -> Unit): CgTryCatch = tryBlock(init, null)

override fun tryBlock(init: () -> Unit, resources: List<CgDeclaration>?): CgTryCatch =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.utbot.python.framework.codegen.model.constructor.tree

import org.utbot.framework.codegen.ParametrizedTestSource
import org.utbot.framework.codegen.model.constructor.CgMethodTestSet
import org.utbot.framework.codegen.model.constructor.TestClassModel
import org.utbot.framework.codegen.model.constructor.context.CgContext
import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor
Expand All @@ -10,104 +8,9 @@ import org.utbot.framework.codegen.model.tree.*
internal class PythonCgTestClassConstructor(context: CgContext) : CgTestClassConstructor(context) {
override fun construct(testClassModel: TestClassModel): CgTestClassFile {
return buildTestClassFile {
this.testClass = withTestClassScope { constructTestClass(testClassModel) }
this.declaredClass = withTestClassScope { constructTestClass(testClassModel) }
imports.addAll(context.collectedImports)
testsGenerationReport = this@PythonCgTestClassConstructor.testsGenerationReport
}
}

override fun constructTestClass(testClassModel: TestClassModel): CgTestClass {
return buildTestClass {
id = currentTestClass

if (currentTestClass != outerMostTestClass) {
isNested = true
isStatic = testFramework.nestedClassesShouldBeStatic
testFrameworkManager.annotationForNestedClasses?.let {
currentTestClassContext.collectedTestClassAnnotations += it
}
}
if (testClassModel.nestedClasses.isNotEmpty()) {
testFrameworkManager.annotationForOuterClasses?.let {
currentTestClassContext.collectedTestClassAnnotations += it
}
}

body = buildTestClassBody {
for (nestedClass in testClassModel.nestedClasses) {
nestedClassRegions += CgSimpleRegion(
"Tests for ${nestedClass.classUnderTest.simpleName}",
listOf(
withNestedClassScope(nestedClass) { constructTestClass(nestedClass) }
)
)
}

for (testSet in testClassModel.methodTestSets) {
updateCurrentExecutable(testSet.executableId)
val currentMethodUnderTestRegions = constructTestSet(testSet) ?: continue
val executableUnderTestCluster = CgExecutableUnderTestCluster(
"Test suites for executable $currentExecutable",
currentMethodUnderTestRegions
)
testMethodRegions += executableUnderTestCluster
}

val additionalMethods = currentTestClassContext.cgDataProviderMethods

dataProvidersAndUtilMethodsRegion += CgStaticsRegion(
"Data providers and utils methods",
additionalMethods
)
}
// It is important that annotations, superclass and interfaces assignment is run after
// all methods are generated so that all necessary info is already present in the context
with (currentTestClassContext) {
annotations += collectedTestClassAnnotations
superclass = testFramework.testSuperClass
interfaces += collectedTestClassInterfaces
}
}
}

override fun constructTestSet(testSet: CgMethodTestSet): List<CgRegion<CgMethod>>? {
if (testSet.executions.isEmpty()) {
return null
}

allExecutions = testSet.executions

val (methodUnderTest, _, _, clustersInfo) = testSet
val regions = mutableListOf<CgRegion<CgMethod>>()

when (context.parametrizedTestSource) {
ParametrizedTestSource.DO_NOT_PARAMETRIZE -> {
for ((clusterSummary, executionIndices) in clustersInfo) {
val currentTestCaseTestMethods = mutableListOf<CgTestMethod>()
emptyLineIfNeeded()
for (i in executionIndices) {
runCatching {
currentTestCaseTestMethods += methodConstructor.createTestMethod(methodUnderTest, testSet.executions[i])
}.onFailure { e -> processFailure(testSet, e) }
}
val clusterHeader = clusterSummary?.header
val clusterContent = clusterSummary?.content
?.split('\n')
?.let { CgTripleSlashMultilineComment(it) }
regions += CgTestMethodCluster(clusterHeader, clusterContent, currentTestCaseTestMethods)

testsGenerationReport.addTestsByType(testSet, currentTestCaseTestMethods)
}
}
ParametrizedTestSource.PARAMETRIZE -> {}
}

val errors = testSet.allErrors
if (errors.isNotEmpty()) {
regions += methodConstructor.errorMethod(testSet.executableId, errors)
testsGenerationReport.addMethodErrors(testSet, errors)
}

return regions
}
}
Loading