diff --git a/utbot-js/src/main/kotlin/api/JsTestGenerator.kt b/utbot-js/src/main/kotlin/api/JsTestGenerator.kt index eafa82384b..fa6d76d5ec 100644 --- a/utbot-js/src/main/kotlin/api/JsTestGenerator.kt +++ b/utbot-js/src/main/kotlin/api/JsTestGenerator.kt @@ -4,6 +4,7 @@ import codegen.JsCodeGenerator import com.google.javascript.rhino.Node import framework.api.js.JsClassId import framework.api.js.JsMethodId +import framework.api.js.JsUtFuzzedExecution import framework.api.js.util.isJsBasic import framework.api.js.util.jsErrorClassId import framework.api.js.util.jsUndefinedClassId @@ -26,9 +27,8 @@ import org.utbot.framework.plugin.api.UtExecution import org.utbot.framework.plugin.api.UtExecutionResult import org.utbot.framework.plugin.api.UtExecutionSuccess import org.utbot.framework.plugin.api.UtExplicitlyThrownException +import org.utbot.framework.plugin.api.UtModel import org.utbot.framework.plugin.api.UtTimeoutException -import org.utbot.fuzzer.FuzzedValue -import org.utbot.fuzzer.UtFuzzedExecution import org.utbot.fuzzing.Control import org.utbot.fuzzing.utils.Trie import parser.JsClassAstVisitor @@ -187,7 +187,7 @@ class JsTestGenerator( private fun getUtModelResult( execId: JsMethodId, resultData: ResultData, - fuzzedValues: List + fuzzedValues: List ): UtExecutionResult { if (resultData.isError && resultData.rawString == "Timeout") return UtTimeoutException( TimeoutException(" Timeout in generating test for ${ @@ -197,7 +197,7 @@ class JsTestGenerator( prefix = "${execId.name}(", separator = ", ", postfix = ")" - ) { (_, value) -> value.model.toString() } + ) { (_, value) -> value.toString() } }") ) val (returnValue, valueClassId) = resultData.toJsAny( @@ -221,11 +221,11 @@ class JsTestGenerator( val jsDescription = JsMethodDescription( name = funcNode.getAbstractFunctionName(), parameters = execId.parameters, - execId.classId, + classId = execId.classId, concreteValues = fuzzerVisitor.fuzzedConcreteValues, tracer = Trie(JsStatement::number) ) - val collectedValues = mutableListOf>() + val collectedValues = mutableListOf>() // .location field gets us "jsFile:A:B", then we get A and B as ints val funcLocation = funcNode.firstChild!!.location.substringAfter("jsFile:") .split(":").map { it.toInt() } @@ -265,13 +265,13 @@ class JsTestGenerator( return@runFuzzing JsFeedback(Control.PASS) } else if (!currentlyCoveredStmts.containsAll(covData.additionalCoverage)) { val (thisObject, modelList) = if (!funcNode.parent!!.isClassMembers) { - null to params.map { it.model } - } else params[0].model to params.drop(1).map { it.model } + null to params + } else params[0] to params.drop(1) val initEnv = EnvironmentModels(thisObject, modelList, mapOf()) emit( JsValidExecution( - UtFuzzedExecution( + JsUtFuzzedExecution( stateBefore = initEnv, stateAfter = initEnv, result = result, diff --git a/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt b/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt index 5de6a87971..8df0625040 100644 --- a/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt +++ b/utbot-js/src/main/kotlin/api/JsUtModelConstructor.kt @@ -7,17 +7,15 @@ import framework.api.js.JsPrimitiveModel import framework.api.js.JsUndefinedModel import framework.api.js.util.jsErrorClassId import framework.api.js.util.jsUndefinedClassId +import fuzzer.JsIdProvider import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.UtAssembleModel import org.utbot.framework.plugin.api.UtExecutableCallModel import org.utbot.framework.plugin.api.UtModel -import org.utbot.fuzzer.ReferencePreservingIntIdGenerator import org.utbot.instrumentation.instrumentation.execution.constructors.UtModelConstructorInterface class JsUtModelConstructor : UtModelConstructorInterface { - private val idGenerator = ReferencePreservingIntIdGenerator() - // TODO SEVERE: Requires substantial expansion to other types @Suppress("NAME_SHADOWING") override fun construct(value: Any?, classId: ClassId): UtModel { @@ -52,7 +50,7 @@ class JsUtModelConstructor : UtModelConstructorInterface { val values = (value as Map).values.map { construct(it, JsEmptyClassId()) } - val id = idGenerator.createId() + val id = JsIdProvider.createId() val instantiationCall = UtExecutableCallModel(null, constructor, values) return UtAssembleModel( id = id, diff --git a/utbot-js/src/main/kotlin/framework/api/js/JsApi.kt b/utbot-js/src/main/kotlin/framework/api/js/JsApi.kt index 1e7f19b528..ee5eb7858b 100644 --- a/utbot-js/src/main/kotlin/framework/api/js/JsApi.kt +++ b/utbot-js/src/main/kotlin/framework/api/js/JsApi.kt @@ -93,11 +93,7 @@ class JsConstructorId( get() = 0 } -class JsMultipleClassId(private val jsJoinedName: String) : JsClassId(jsJoinedName) { - - val types: Sequence - get() = jsJoinedName.split('|').map { JsClassId(it) }.asSequence() -} +class JsMultipleClassId(jsJoinedName: String) : JsClassId(jsJoinedName) open class JsUtModel( override val classId: JsClassId diff --git a/utbot-js/src/main/kotlin/framework/api/js/JsUtFuzzedExecution.kt b/utbot-js/src/main/kotlin/framework/api/js/JsUtFuzzedExecution.kt new file mode 100644 index 0000000000..e1540955dc --- /dev/null +++ b/utbot-js/src/main/kotlin/framework/api/js/JsUtFuzzedExecution.kt @@ -0,0 +1,11 @@ +package framework.api.js + +import org.utbot.framework.plugin.api.EnvironmentModels +import org.utbot.framework.plugin.api.UtExecution +import org.utbot.framework.plugin.api.UtExecutionResult + +class JsUtFuzzedExecution( + stateBefore: EnvironmentModels, + stateAfter: EnvironmentModels, + result: UtExecutionResult +) : UtExecution(stateBefore, stateAfter, result, null, null, null, null) diff --git a/utbot-js/src/main/kotlin/fuzzer/JsFuzzerApi.kt b/utbot-js/src/main/kotlin/fuzzer/JsFuzzerApi.kt index 150a9343a6..cbef94b64c 100644 --- a/utbot-js/src/main/kotlin/fuzzer/JsFuzzerApi.kt +++ b/utbot-js/src/main/kotlin/fuzzer/JsFuzzerApi.kt @@ -1,25 +1,26 @@ package fuzzer import framework.api.js.JsClassId +import framework.api.js.JsUtFuzzedExecution import framework.api.js.util.isClass +import org.utbot.framework.plugin.api.ClassId +import org.utbot.framework.plugin.api.UtModel import org.utbot.framework.plugin.api.UtTimeoutException -import org.utbot.fuzzer.FuzzedConcreteValue -import org.utbot.fuzzer.FuzzedValue -import org.utbot.fuzzer.UtFuzzedExecution import org.utbot.fuzzing.Control import org.utbot.fuzzing.Description import org.utbot.fuzzing.Feedback import org.utbot.fuzzing.utils.Trie +import java.util.concurrent.atomic.AtomicInteger sealed interface JsFuzzingExecutionFeedback -class JsValidExecution(val utFuzzedExecution: UtFuzzedExecution) : JsFuzzingExecutionFeedback +class JsValidExecution(val utFuzzedExecution: JsUtFuzzedExecution) : JsFuzzingExecutionFeedback class JsTimeoutExecution(val utTimeout: UtTimeoutException) : JsFuzzingExecutionFeedback class JsMethodDescription( val name: String, parameters: List, - val concreteValues: Collection, + val concreteValues: Collection, val thisInstance: JsClassId? = null, val tracer: Trie ) : Description(parameters) { @@ -28,7 +29,7 @@ class JsMethodDescription( name: String, parameters: List, classId: JsClassId, - concreteValues: Collection, + concreteValues: Collection, tracer: Trie ) : this( name, @@ -39,21 +40,43 @@ class JsMethodDescription( ) } -class JsFeedback( +data class JsFeedback( override val control: Control = Control.CONTINUE, val result: Trie.Node = Trie.emptyNode() -) : Feedback { +) : Feedback - override fun equals(other: Any?): Boolean { - val castOther = other as? JsFeedback - return control == castOther?.control - } +data class JsStatement( + val number: Int +) + +data class JsFuzzedConcreteValue( + val classId: ClassId, + val value: Any, + val fuzzedContext: JsFuzzedContext = JsFuzzedContext.Unknown, +) - override fun hashCode(): Int { - return control.hashCode() +enum class JsFuzzedContext { + EQ, + NE, + GT, + GE, + LT, + LE, + Unknown; + + fun reverse(): JsFuzzedContext = when (this) { + EQ -> NE + NE -> EQ + GT -> LE + LT -> GE + LE -> GT + GE -> LT + Unknown -> Unknown } } -data class JsStatement( - val number: Int -) +object JsIdProvider { + private var id = AtomicInteger(0) + + fun createId() = id.incrementAndGet() +} diff --git a/utbot-js/src/main/kotlin/fuzzer/JsFuzzing.kt b/utbot-js/src/main/kotlin/fuzzer/JsFuzzing.kt index cc3420a45c..024aa860b8 100644 --- a/utbot-js/src/main/kotlin/fuzzer/JsFuzzing.kt +++ b/utbot-js/src/main/kotlin/fuzzer/JsFuzzing.kt @@ -5,7 +5,7 @@ import fuzzer.providers.BoolValueProvider import fuzzer.providers.NumberValueProvider import fuzzer.providers.ObjectValueProvider import fuzzer.providers.StringValueProvider -import org.utbot.fuzzer.FuzzedValue +import org.utbot.framework.plugin.api.UtModel import org.utbot.fuzzing.Fuzzing import org.utbot.fuzzing.Seed import org.utbot.fuzzing.fuzz @@ -18,10 +18,10 @@ fun defaultValueProviders() = listOf( ) class JsFuzzing( - val exec: suspend (JsMethodDescription, List) -> JsFeedback -) : Fuzzing { + val exec: suspend (JsMethodDescription, List) -> JsFeedback +) : Fuzzing { - override fun generate(description: JsMethodDescription, type: JsClassId): Sequence> { + override fun generate(description: JsMethodDescription, type: JsClassId): Sequence> { return defaultValueProviders().asSequence().flatMap { provider -> if (provider.accept(type)) { provider.generate(description, type) @@ -31,12 +31,12 @@ class JsFuzzing( } } - override suspend fun handle(description: JsMethodDescription, values: List): JsFeedback { + override suspend fun handle(description: JsMethodDescription, values: List): JsFeedback { return exec(description, values) } } suspend fun runFuzzing( description: JsMethodDescription, - exec: suspend (JsMethodDescription, List) -> JsFeedback + exec: suspend (JsMethodDescription, List) -> JsFeedback ) = JsFuzzing(exec).fuzz(description) diff --git a/utbot-js/src/main/kotlin/fuzzer/providers/BoolValueProvider.kt b/utbot-js/src/main/kotlin/fuzzer/providers/BoolValueProvider.kt index 3c889bdb41..e4d8f9246e 100644 --- a/utbot-js/src/main/kotlin/fuzzer/providers/BoolValueProvider.kt +++ b/utbot-js/src/main/kotlin/fuzzer/providers/BoolValueProvider.kt @@ -1,32 +1,28 @@ package fuzzer.providers + import framework.api.js.JsClassId import framework.api.js.JsPrimitiveModel import framework.api.js.util.isJsBasic import fuzzer.JsMethodDescription -import org.utbot.fuzzer.FuzzedValue -import org.utbot.fuzzer.providers.PrimitivesModelProvider.fuzzed +import org.utbot.framework.plugin.api.UtModel import org.utbot.fuzzing.Seed import org.utbot.fuzzing.ValueProvider import org.utbot.fuzzing.seeds.Bool -object BoolValueProvider : ValueProvider { +object BoolValueProvider : ValueProvider { override fun accept(type: JsClassId): Boolean { return type.isJsBasic } - override fun generate(description: JsMethodDescription, type: JsClassId): Sequence> = + override fun generate(description: JsMethodDescription, type: JsClassId): Sequence> = sequence { yield(Seed.Known(Bool.TRUE()) { - JsPrimitiveModel(true).fuzzed { - summary = "%var% = true" - } + JsPrimitiveModel(true) }) yield(Seed.Known(Bool.FALSE()) { - JsPrimitiveModel(false).fuzzed { - summary = "%var% = false" - } + JsPrimitiveModel(false) }) } } diff --git a/utbot-js/src/main/kotlin/fuzzer/providers/NumberValueProvider.kt b/utbot-js/src/main/kotlin/fuzzer/providers/NumberValueProvider.kt index 33862d3019..b82f06bdfd 100644 --- a/utbot-js/src/main/kotlin/fuzzer/providers/NumberValueProvider.kt +++ b/utbot-js/src/main/kotlin/fuzzer/providers/NumberValueProvider.kt @@ -3,26 +3,25 @@ package fuzzer.providers import framework.api.js.JsClassId import framework.api.js.JsPrimitiveModel import framework.api.js.util.isJsBasic +import fuzzer.JsFuzzedContext.EQ +import fuzzer.JsFuzzedContext.GE +import fuzzer.JsFuzzedContext.GT +import fuzzer.JsFuzzedContext.LE +import fuzzer.JsFuzzedContext.LT import fuzzer.JsMethodDescription -import org.utbot.fuzzer.FuzzedContext.Comparison.EQ -import org.utbot.fuzzer.FuzzedContext.Comparison.GE -import org.utbot.fuzzer.FuzzedContext.Comparison.GT -import org.utbot.fuzzer.FuzzedContext.Comparison.LE -import org.utbot.fuzzer.FuzzedContext.Comparison.LT -import org.utbot.fuzzer.FuzzedValue -import org.utbot.fuzzer.providers.PrimitivesModelProvider.fuzzed +import org.utbot.framework.plugin.api.UtModel import org.utbot.fuzzing.Seed import org.utbot.fuzzing.ValueProvider import org.utbot.fuzzing.seeds.DefaultFloatBound import org.utbot.fuzzing.seeds.IEEE754Value -object NumberValueProvider : ValueProvider { +object NumberValueProvider : ValueProvider { override fun accept(type: JsClassId): Boolean { return type.isJsBasic } - override fun generate(description: JsMethodDescription, type: JsClassId): Sequence> = + override fun generate(description: JsMethodDescription, type: JsClassId): Sequence> = sequence { description.concreteValues.forEach { (_, v, c) -> if (v is Double) { @@ -33,18 +32,14 @@ object NumberValueProvider : ValueProvider - JsPrimitiveModel(known.toDouble() + balance).fuzzed { - summary = "%var% = ${known.toDouble() + balance}" - } + JsPrimitiveModel(known.toDouble() + balance) }) } } DefaultFloatBound.values().forEach { bound -> // All numbers in JavaScript are like Double in Java/Kotlin yield(Seed.Known(bound(52, 11)) { known -> - JsPrimitiveModel(known.toDouble()).fuzzed { - summary = "%var% = ${known.toDouble()}" - } + JsPrimitiveModel(known.toDouble()) }) } } diff --git a/utbot-js/src/main/kotlin/fuzzer/providers/ObjectValueProvider.kt b/utbot-js/src/main/kotlin/fuzzer/providers/ObjectValueProvider.kt index a9d02cf7df..12ea5e6ab6 100644 --- a/utbot-js/src/main/kotlin/fuzzer/providers/ObjectValueProvider.kt +++ b/utbot-js/src/main/kotlin/fuzzer/providers/ObjectValueProvider.kt @@ -3,21 +3,18 @@ package fuzzer.providers import framework.api.js.JsClassId import framework.api.js.JsConstructorId import framework.api.js.util.isClass +import fuzzer.JsIdProvider import fuzzer.JsMethodDescription import org.utbot.framework.plugin.api.UtAssembleModel import org.utbot.framework.plugin.api.UtExecutableCallModel +import org.utbot.framework.plugin.api.UtModel import org.utbot.framework.plugin.api.UtNullModel -import org.utbot.fuzzer.FuzzedValue -import org.utbot.fuzzer.ReferencePreservingIntIdGenerator -import org.utbot.fuzzer.providers.ConstantsModelProvider.fuzzed import org.utbot.fuzzing.Routine import org.utbot.fuzzing.Seed import org.utbot.fuzzing.ValueProvider import org.utbot.fuzzing.utils.hex -class ObjectValueProvider : ValueProvider { - - private val idGenerator = ReferencePreservingIntIdGenerator() +class ObjectValueProvider : ValueProvider { override fun accept(type: JsClassId): Boolean { return type.isClass @@ -31,10 +28,13 @@ class ObjectValueProvider : ValueProvider { + private fun createValue( + classId: JsClassId, + constructorId: JsConstructorId + ): Seed.Recursive { return Seed.Recursive( construct = Routine.Create(constructorId.parameters) { values -> - val id = idGenerator.createId() + val id = JsIdProvider.createId() UtAssembleModel( id = id, classId = classId, @@ -42,18 +42,15 @@ class ObjectValueProvider : ValueProvider { +object StringValueProvider : ValueProvider { override fun accept(type: JsClassId): Boolean { return type.isJsBasic @@ -20,7 +19,7 @@ object StringValueProvider : ValueProvider> = sequence { + ): Sequence> = sequence { val constants = description.concreteValues.asSequence() .filter { it.classId == jsStringClassId } val values = constants @@ -28,9 +27,7 @@ object StringValueProvider : ValueProvider yield(Seed.Known(StringValue(value)) { known -> - JsPrimitiveModel(known.value).fuzzed { - summary = "%var% = '${known.value}'" - } + JsPrimitiveModel(known.value) }) } } diff --git a/utbot-js/src/main/kotlin/parser/JsFuzzerAstVisitor.kt b/utbot-js/src/main/kotlin/parser/JsFuzzerAstVisitor.kt index 08a6c41d49..d60be4316f 100644 --- a/utbot-js/src/main/kotlin/parser/JsFuzzerAstVisitor.kt +++ b/utbot-js/src/main/kotlin/parser/JsFuzzerAstVisitor.kt @@ -1,12 +1,13 @@ package parser + import com.google.javascript.jscomp.NodeUtil import com.google.javascript.rhino.Node import framework.api.js.util.jsBooleanClassId import framework.api.js.util.jsDoubleClassId import framework.api.js.util.jsStringClassId -import org.utbot.fuzzer.FuzzedConcreteValue -import org.utbot.fuzzer.FuzzedContext +import fuzzer.JsFuzzedConcreteValue +import fuzzer.JsFuzzedContext import parser.JsParserUtils.getAnyValue import parser.JsParserUtils.getBinaryExprLeftOperand import parser.JsParserUtils.getBinaryExprRightOperand @@ -14,8 +15,8 @@ import parser.JsParserUtils.toFuzzedContextComparisonOrNull class JsFuzzerAstVisitor : IAstVisitor { - private var lastFuzzedOpGlobal: FuzzedContext = FuzzedContext.Unknown - val fuzzedConcreteValues = mutableSetOf() + private var lastFuzzedOpGlobal: JsFuzzedContext = JsFuzzedContext.Unknown + val fuzzedConcreteValues = mutableSetOf() override fun accept(rootNode: Node) { NodeUtil.visitPreOrder(rootNode) { node -> @@ -25,8 +26,7 @@ class JsFuzzerAstVisitor : IAstVisitor { currentFuzzedOp != null -> { lastFuzzedOpGlobal = currentFuzzedOp validateNode(node.getBinaryExprLeftOperand().getAnyValue()) - lastFuzzedOpGlobal = if (lastFuzzedOpGlobal is FuzzedContext.Comparison) - (lastFuzzedOpGlobal as FuzzedContext.Comparison).reverse() else FuzzedContext.Unknown + lastFuzzedOpGlobal = lastFuzzedOpGlobal.reverse() validateNode(node.getBinaryExprRightOperand().getAnyValue()) } } @@ -38,7 +38,7 @@ class JsFuzzerAstVisitor : IAstVisitor { when (value) { is String -> { fuzzedConcreteValues.add( - FuzzedConcreteValue( + JsFuzzedConcreteValue( jsStringClassId, value.toString(), lastFuzzedOpGlobal @@ -48,7 +48,7 @@ class JsFuzzerAstVisitor : IAstVisitor { is Boolean -> { fuzzedConcreteValues.add( - FuzzedConcreteValue( + JsFuzzedConcreteValue( jsBooleanClassId, value, lastFuzzedOpGlobal @@ -57,8 +57,8 @@ class JsFuzzerAstVisitor : IAstVisitor { } is Double -> { - fuzzedConcreteValues.add(FuzzedConcreteValue(jsDoubleClassId, value, lastFuzzedOpGlobal)) + fuzzedConcreteValues.add(JsFuzzedConcreteValue(jsDoubleClassId, value, lastFuzzedOpGlobal)) } } } -} \ No newline at end of file +} diff --git a/utbot-js/src/main/kotlin/parser/JsParserUtils.kt b/utbot-js/src/main/kotlin/parser/JsParserUtils.kt index 05a3676a83..8e43e078d4 100644 --- a/utbot-js/src/main/kotlin/parser/JsParserUtils.kt +++ b/utbot-js/src/main/kotlin/parser/JsParserUtils.kt @@ -3,8 +3,10 @@ package parser import com.google.javascript.jscomp.Compiler import com.google.javascript.jscomp.SourceFile import com.google.javascript.rhino.Node -import org.utbot.fuzzer.FuzzedContext +import fuzzer.JsFuzzedContext +import parser.JsParserUtils.getMethodName +// TODO: make methods more safe by checking the Node method is called on. // Used for .children() calls. @Suppress("DEPRECATION") object JsParserUtils { @@ -73,14 +75,14 @@ object JsParserUtils { /** * Called upon node with any kind of binary comparison token. */ - fun Node.toFuzzedContextComparisonOrNull(): FuzzedContext.Comparison? = when { - this.isEQ -> FuzzedContext.Comparison.EQ - this.isNE -> FuzzedContext.Comparison.NE - this.token.name == "LT" -> FuzzedContext.Comparison.LT - this.token.name == "GT" -> FuzzedContext.Comparison.GT - this.token.name == "LE" -> FuzzedContext.Comparison.LE - this.token.name == "GE" -> FuzzedContext.Comparison.GE - this.token.name == "SHEQ" -> FuzzedContext.Comparison.EQ + fun Node.toFuzzedContextComparisonOrNull(): JsFuzzedContext? = when { + this.isEQ -> JsFuzzedContext.EQ + this.isNE -> JsFuzzedContext.NE + this.token.name == "LT" -> JsFuzzedContext.LT + this.token.name == "GT" -> JsFuzzedContext.GT + this.token.name == "LE" -> JsFuzzedContext.LE + this.token.name == "GE" -> JsFuzzedContext.GE + this.token.name == "SHEQ" -> JsFuzzedContext.EQ else -> null } diff --git a/utbot-js/src/main/kotlin/service/CoverageServiceProvider.kt b/utbot-js/src/main/kotlin/service/CoverageServiceProvider.kt index aaa401025c..0a879df01d 100644 --- a/utbot-js/src/main/kotlin/service/CoverageServiceProvider.kt +++ b/utbot-js/src/main/kotlin/service/CoverageServiceProvider.kt @@ -7,14 +7,12 @@ import fuzzer.JsMethodDescription import org.utbot.framework.plugin.api.UtAssembleModel import org.utbot.framework.plugin.api.UtModel import org.utbot.framework.plugin.api.util.isStatic -import org.utbot.fuzzer.FuzzedValue import settings.JsTestGenerationSettings import settings.JsTestGenerationSettings.tempFileName import utils.CoverageData import utils.ResultData import java.util.regex.Pattern -// TODO: Add "error" field in result json to not collide with "result" field upon error. class CoverageServiceProvider( private val context: ServiceContext, private val instrumentationService: InstrumentationService, @@ -58,7 +56,7 @@ function check_value(value, json) { } fun get( - fuzzedValues: List>, + fuzzedValues: List>, execId: JsMethodId, ): Pair, List> { return when (mode) { @@ -75,7 +73,7 @@ function check_value(value, json) { } private fun runBasicCoverageAnalysis( - fuzzedValues: List>, + fuzzedValues: List>, execId: JsMethodId, ): Pair, List> { val covFunName = instrumentationService.covFunName @@ -99,7 +97,7 @@ function check_value(value, json) { } private fun runFastCoverageAnalysis( - fuzzedValues: List>, + fuzzedValues: List>, execId: JsMethodId, ): Pair, List> { val covFunName = instrumentationService.covFunName @@ -134,7 +132,7 @@ fs.writeFileSync("$resFilePath", JSON.stringify(json)) } private fun makeStringForRunJs( - fuzzedValue: List, + fuzzedValue: List, method: JsMethodId, containingClass: String?, covFunName: String, @@ -166,22 +164,22 @@ fs.writeFileSync("$resFilePath$index.json", JSON.stringify(json$index)) } private fun makeCallFunctionString( - fuzzedValue: List, + fuzzedValue: List, method: JsMethodId, containingClass: String? ): String { - val actualParams = description.thisInstance?.let{ fuzzedValue.drop(1) } ?: fuzzedValue + val actualParams = description.thisInstance?.let { fuzzedValue.drop(1) } ?: fuzzedValue val initClass = containingClass?.let { if (!method.isStatic) { - description.thisInstance?.let { fuzzedValue[0].model.toCallString() } ?: - "new ${JsTestGenerationSettings.fileUnderTestAliases}.${it}()" + description.thisInstance?.let { fuzzedValue[0].toCallString() } + ?: "new ${JsTestGenerationSettings.fileUnderTestAliases}.${it}()" } else "${JsTestGenerationSettings.fileUnderTestAliases}.$it" } ?: JsTestGenerationSettings.fileUnderTestAliases var callString = "$initClass.${method.name}" callString += actualParams.joinToString( prefix = "(", postfix = ")", - ) { value -> value.model.toCallString() } + ) { value -> value.toCallString() } return callString }