diff --git a/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/selectors/ImplicitSelector.java b/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/selectors/ImplicitSelector.java index f04f82bdca..605d5c1847 100644 --- a/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/selectors/ImplicitSelector.java +++ b/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/selectors/ImplicitSelector.java @@ -28,7 +28,7 @@ public QueryOperation getOperation(Object query) { } protected List parseConditions(Object query) { - Set fields = keySet(query); + Set fields = documentKeys(query); ArrayList conditions = new ArrayList<>(); fields.forEach(fieldName -> { Object newQuery = newDocument(query); diff --git a/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/utils/BsonHelper.java b/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/utils/BsonHelper.java index 85ae9bb44c..f8c37edc20 100644 --- a/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/utils/BsonHelper.java +++ b/client-java/controller/src/main/java/org/evomaster/client/java/controller/mongo/utils/BsonHelper.java @@ -31,14 +31,6 @@ public static Object getValue(Object document, String fieldName) { } } - public static Set keySet(Object document) { - try { - return (Set) document.getClass().getMethod("keySet").invoke(document); - } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - public static Boolean documentContainsField(Object document, String field) { try { return (Boolean) document.getClass().getMethod("containsKey", Object.class).invoke(document, field); @@ -67,7 +59,7 @@ public static String getType(Object bsonType) { Object bsonTypeClassMap = bsonTypeClassMapClass.getDeclaredConstructor().newInstance(); Method get = bsonTypeClassMapClass.getMethod("get", bsonTypeClass); Object type = get.invoke(bsonTypeClassMap, bsonType); - return (String) type.getClass().getMethod("getTypeName").invoke(type, null); + return (String) type.getClass().getMethod("getTypeName").invoke(type); } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); diff --git a/core/src/main/kotlin/org/evomaster/core/BaseModule.kt b/core/src/main/kotlin/org/evomaster/core/BaseModule.kt index 372164494c..feb73fe612 100644 --- a/core/src/main/kotlin/org/evomaster/core/BaseModule.kt +++ b/core/src/main/kotlin/org/evomaster/core/BaseModule.kt @@ -3,7 +3,6 @@ package org.evomaster.core import com.google.inject.AbstractModule import com.google.inject.Provides import com.google.inject.Singleton -import org.evomaster.core.output.service.PartialOracles import org.evomaster.core.search.service.mutator.genemutation.ArchiveImpactSelector import org.evomaster.core.search.service.* import org.evomaster.core.search.service.monitor.SearchProcessMonitor @@ -80,9 +79,6 @@ class BaseModule(val args: Array, val noTests: Boolean = false) : Abstra bind(MutationWeightControl::class.java) .asEagerSingleton() - bind(PartialOracles::class.java) - .asEagerSingleton() - bind(ExecutionInfoReporter::class.java) .asEagerSingleton() diff --git a/core/src/main/kotlin/org/evomaster/core/output/TestSuiteSplitter.kt b/core/src/main/kotlin/org/evomaster/core/output/TestSuiteSplitter.kt index 98dfbfb736..83883eb809 100644 --- a/core/src/main/kotlin/org/evomaster/core/output/TestSuiteSplitter.kt +++ b/core/src/main/kotlin/org/evomaster/core/output/TestSuiteSplitter.kt @@ -2,7 +2,6 @@ package org.evomaster.core.output import org.evomaster.core.EMConfig import org.evomaster.core.output.clustering.SplitResult -import org.evomaster.core.output.service.PartialOracles import org.evomaster.core.problem.graphql.GraphQlCallResult import org.evomaster.core.problem.httpws.HttpWsCallResult import org.evomaster.core.problem.rpc.RPCCallResult @@ -111,12 +110,12 @@ object TestSuiteSplitter { return splitResult } - private fun faultIndividuals(sol: Solution, oracles: PartialOracles, config: EMConfig) = + private fun faultIndividuals(sol: Solution, config: EMConfig) = sol.individuals.filter { ind -> ind.hasAnyPotentialFault() }.toMutableList() - private fun successIndividuals(solution: Solution, oracles: PartialOracles, config: EMConfig) = + private fun successIndividuals(solution: Solution, config: EMConfig) = solution.individuals.filter { ind -> !ind.hasAnyPotentialFault() && @@ -258,9 +257,9 @@ object TestSuiteSplitter { * if any further action or investigation is required. */ private fun splitByFault(solution: Solution, config: EMConfig): List> { - val faults = faultIndividuals(solution, PartialOracles(), config) + val faults = faultIndividuals(solution, config) - val successes = successIndividuals(solution, PartialOracles(), config) + val successes = successIndividuals(solution, config) val remainder = solution.individuals.filter { !faults.contains(it) && !successes.contains(it) diff --git a/core/src/main/kotlin/org/evomaster/core/output/service/PartialOracles.kt b/core/src/main/kotlin/org/evomaster/core/output/service/PartialOracles.kt deleted file mode 100644 index 2ecd832c00..0000000000 --- a/core/src/main/kotlin/org/evomaster/core/output/service/PartialOracles.kt +++ /dev/null @@ -1,167 +0,0 @@ -package org.evomaster.core.output.service - - -/** - * [PartialOracles] are meant to be a way to handle different types of soft assertions/expectations (name may change in future) - * - * The idea is that any new type of expectation is a partial oracle (again, name may change, if anything more appropriate - * emerges). For example, if a return object is specified in the Swagger for a given endpoint with a given status code, - * then the object returned should have the same structure as the Swagger reference (see [responseStructure] below. - * - * They are "partial" because failing such a test is not necessarily indicative of a bug, as it could be some sort - * or shortcut or something (and since REST semantics are not strictly enforced, it cannot be an assert). Nevertheless, - * it would be a break with expected semantics and could be indicative of a fault or design problem. - * - * The [PartialOracles] would (in future) each receive their own variable to turn on or off, and only those selected - * would be added to the code. So they should be independent from each other. The idea is that, either during generation - * or during execution, the user can decide if certain partial oracles are of interest at the moment, and turn then - * on or off as required. - * - */ -@Deprecated("No longer used") -class PartialOracles { - -// @Inject -// private lateinit var config: EMConfig -// -// private val objectGenerator = ObjectGenerator() -// -// private val oracles = mutableListOf() -// private val expectationsMasterSwitch = "ems" -// -// fun setupForRest(schema: OpenAPI, config: EMConfig){ -// -// oracles.add(SupportedCodeOracle()) -// oracles.add(SchemaOracle()) -// -// oracles.forEach { -// it.setObjectGenerator(objectGenerator) -// } -// -// objectGenerator.setSwagger(schema, config.enableSchemaConstraintHandling) -// } -// -// /** -// * The [variableDeclaration] method handles the generation of auxiliary variables for the partial oracles. -// * The parameters [lines] and [format] are received from the [TestCaseWriter]. -// * The parameter [active] records which partial oracles are active (i.e. which actually generate -// * a failing expectation). [active] is a mutable map, where the key is a string containing the name of -// * an [ImplementedOracle], and the key is a boolean indicating whether the oracle is active (i.e. will -// * generate a failing expectation, and thus require the additional variables) or inactive (i.e. it will -// * not generate a failing expectation and thus can be skipped). -// * -// * The goal of this method is to ensure that only relevant variables are generated (i.e. to avoid -// * generating stub variables that are never used). -// */ -// fun variableDeclaration(lines: Lines, format: OutputFormat, active: Map){ -// for (oracle in oracles){ -// if(active.get(oracle.getName()) == true) { -// oracle.variableDeclaration(lines, format) -// } -// } -// } -// -// fun addExpectations(call: RestCallAction, lines: Lines, res: HttpWsCallResult, name: String, format: OutputFormat) { -// val generates = oracles.any { -// it.generatesExpectation(call, res) -// } -// if (!generates) return -// lines.add("expectationHandler.expect($expectationsMasterSwitch)") -// lines.indented { -// for (oracle in oracles) { oracle.addExpectations(call, lines, res, name, format) } -// if (format.isJava()) { lines.append(";") } -// } -// } -// -// -// -// -// fun selectForClustering(action: EvaluatedAction): Boolean{ -// return oracles.any { oracle -> -// oracle.selectForClustering(action) -// } -// } -// -// /** -// * The [generatesExpectation] method evaluates is, for any given test case, any expectation is generated. -// * This is used in the [ExpectationsWriter] to ensure that, if no (failing) expectation is generated, -// * the variable [ExpectationHandler] is not added to the generated code. -// */ -// -// fun generatesExpectation(individual: EvaluatedIndividual): Boolean{ -// return oracles.any { oracle -> -// individual.evaluatedMainActions().any { -// oracle.generatesExpectation( -// (it.action as RestCallAction), -// (it.result as HttpWsCallResult) -// ) -// } -// } -// } -// -// fun generatesExpectation(call: RestCallAction, res: HttpWsCallResult): Boolean{ -// return oracles.any { oracle -> -// oracle.generatesExpectation( call, res) -// } -// } -// -// /** -// * [failByOracle] is an auxiliary method that generates a mutable map. The key for each entry in this -// * mutable map is the name of an [ImplementedOracle], and the value is a list of [EvaluatedIndividual] -// * that are selected for clustering (i.e. for which a failing expectation is generated) by that -// * specific oracle. -// * -// * The values are sorted by size, measured in terms of number of [EvaluatedAction] in the respective -// * [EvaluatedIndividual]. This sorting ensures that the shortest of the available Individuals is selected -// * for the executive summary. -// * -// * The method is used to create the executive summary in the [TestSuiteSplitter]. The executive -// * summary is created by selecting from each of the sets returned by the [failByOracle] method that -// * [EvaluatedIndividual] fulfils some additional requirements (for example, does not repeat - if an -// * [EvaluatedIndividual] has failing expectations generated by more than one oracle, it should not be -// * repeated in the executive summary, but the next shortest candidate (if available) will be selected -// * instead. -// * -// * The method uses MutableMap and MutableList only as a necessity for selection and sorting, and no -// * changes are made to the [EvaluatedIndividual] objects themselves. -// * -// */ -// fun failByOracle(individuals: List>): MutableMap>>{ -// val oracleInds = mutableMapOf>>() -// oracles.forEach { oracle -> -// val failindInds = individuals.filter { -// it.evaluatedMainActions().any { oracle.selectForClustering(it) } -// }.toMutableList() -// failindInds.sortBy { it.evaluatedMainActions().size } -// oracleInds.put(oracle.getName(), failindInds) -// } -// return oracleInds -// } -// -// fun activeOracles(individuals: List>): MutableMap{ -// val active = mutableMapOf() -// oracles.forEach { oracle -> -// active.put(oracle.getName(), individuals.any { individual -> -// individual.evaluatedMainActions().any { -// it.action is RestCallAction && oracle.generatesExpectation( -// (it.action as RestCallAction), -// (it.result as HttpWsCallResult) -// ) -// } }) -// } -// return active -// } -// -// fun activeOracles(call: RestCallAction, res: HttpWsCallResult): MutableMap{ -// val active = mutableMapOf() -// oracles.forEach { oracle -> -// active.put(oracle.getName(), oracle.generatesExpectation(call, res)) -// } -// return active -// } -// -// fun adjustName(): MutableList{ -// return oracles.filter { !it.adjustName().isNullOrBlank() }.toMutableList() -// } - -} \ No newline at end of file diff --git a/core/src/main/kotlin/org/evomaster/core/output/service/RestTestCaseWriter.kt b/core/src/main/kotlin/org/evomaster/core/output/service/RestTestCaseWriter.kt index 0a592c26f0..0789792586 100644 --- a/core/src/main/kotlin/org/evomaster/core/output/service/RestTestCaseWriter.kt +++ b/core/src/main/kotlin/org/evomaster/core/output/service/RestTestCaseWriter.kt @@ -35,9 +35,6 @@ class RestTestCaseWriter : HttpWsTestCaseWriter { private val log = LoggerFactory.getLogger(RestTestCaseWriter::class.java) } - @Inject - private lateinit var partialOracles: PartialOracles - @Inject private lateinit var callGraphService: CallGraphService @@ -47,9 +44,8 @@ class RestTestCaseWriter : HttpWsTestCaseWriter { /** * ONLY for tests */ - constructor(config: EMConfig, partialOracles: PartialOracles) : super() { + constructor(config: EMConfig) : super() { this.config = config - this.partialOracles = partialOracles } diff --git a/core/src/main/kotlin/org/evomaster/core/output/service/TestSuiteWriter.kt b/core/src/main/kotlin/org/evomaster/core/output/service/TestSuiteWriter.kt index 3d80d3d5c7..922b4c68af 100644 --- a/core/src/main/kotlin/org/evomaster/core/output/service/TestSuiteWriter.kt +++ b/core/src/main/kotlin/org/evomaster/core/output/service/TestSuiteWriter.kt @@ -79,9 +79,6 @@ class TestSuiteWriter { @Inject private lateinit var testCaseWriter: TestCaseWriter - @Inject - private lateinit var partialOracles: PartialOracles - @Inject(optional = true) private lateinit var sampler: Sampler<*> @@ -1148,16 +1145,6 @@ class TestSuiteWriter { lines.addStatement(statement) } - - /** - * FIXME replace with direct injection - */ - @Deprecated("replace with direct injection") - fun getPartialOracles(): PartialOracles { - return partialOracles - } - - private fun useRestAssured() = config.problemType == EMConfig.ProblemType.REST || config.problemType == EMConfig.ProblemType.GRAPHQL //TODO better check. need to review use in RPC and GraphQL diff --git a/core/src/main/kotlin/org/evomaster/core/parser/GenePostgresSimilarToVisitor.kt b/core/src/main/kotlin/org/evomaster/core/parser/GenePostgresSimilarToVisitor.kt index b9239c4fca..790ccaf980 100644 --- a/core/src/main/kotlin/org/evomaster/core/parser/GenePostgresSimilarToVisitor.kt +++ b/core/src/main/kotlin/org/evomaster/core/parser/GenePostgresSimilarToVisitor.kt @@ -1,6 +1,5 @@ package org.evomaster.core.parser -import org.evomaster.core.search.gene.Gene import org.evomaster.core.search.gene.regex.* import org.evomaster.core.utils.CharacterRange @@ -10,7 +9,7 @@ import org.evomaster.core.utils.CharacterRange class GenePostgresSimilarToVisitor : PostgresSimilarToBaseVisitor() { /* - WARNING: lot of code here is similar/adapted from ECMA262 visitor. + WARNING: lots of code here is similar/adapted from the ECMA262 visitor. But, as the parser objects are different, it does not seem simple to reuse the code without avoiding copy&paste&adapt :( */ @@ -36,7 +35,7 @@ class GenePostgresSimilarToVisitor : PostgresSimilarToBaseVisitor() val altRes = ctx.alternative().accept(this) - val disj = DisjunctionRxGene("disj", altRes.genes.map { it as Gene }, true, true) + val disj = DisjunctionRxGene("disj", altRes.genes.map { it }, true, true) val res = VisitResult(disj) @@ -182,7 +181,7 @@ class GenePostgresSimilarToVisitor : PostgresSimilarToBaseVisitor() val negated = ctx.CARET() != null - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() val gene = CharacterRangeRxGene(negated, ranges) @@ -195,7 +194,7 @@ class GenePostgresSimilarToVisitor : PostgresSimilarToBaseVisitor() val list = mutableListOf() if(ctx.nonemptyClassRanges() != null){ - val ranges = ctx.nonemptyClassRanges().accept(this).data as List + val ranges = ctx.nonemptyClassRanges().accept(this).requireDataList() list.addAll(ranges) } @@ -222,12 +221,12 @@ class GenePostgresSimilarToVisitor : PostgresSimilarToBaseVisitor() list.add(CharacterRange(start, end)) if(ctx.nonemptyClassRangesNoDash() != null){ - val ranges = ctx.nonemptyClassRangesNoDash().accept(this).data as List + val ranges = ctx.nonemptyClassRangesNoDash().accept(this).requireDataList() list.addAll(ranges) } if(ctx.classRanges() != null){ - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() list.addAll(ranges) } @@ -255,12 +254,12 @@ class GenePostgresSimilarToVisitor : PostgresSimilarToBaseVisitor() } if(ctx.nonemptyClassRangesNoDash() != null){ - val ranges = ctx.nonemptyClassRangesNoDash().accept(this).data as List + val ranges = ctx.nonemptyClassRangesNoDash().accept(this).requireDataList() list.addAll(ranges) } if(ctx.classRanges() != null){ - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() list.addAll(ranges) } diff --git a/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexEcma262Visitor.kt b/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexEcma262Visitor.kt index 0cc90c972e..23c44f3c59 100644 --- a/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexEcma262Visitor.kt +++ b/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexEcma262Visitor.kt @@ -211,7 +211,7 @@ class GeneRegexEcma262Visitor : RegexEcma262BaseVisitor(){ val negated = ctx.CARET() != null - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() val gene = CharacterRangeRxGene(negated, ranges) @@ -224,7 +224,7 @@ class GeneRegexEcma262Visitor : RegexEcma262BaseVisitor(){ val list = mutableListOf() if(ctx.nonemptyClassRanges() != null){ - val ranges = ctx.nonemptyClassRanges().accept(this).data as List + val ranges = ctx.nonemptyClassRanges().accept(this).requireDataList() list.addAll(ranges) } @@ -239,7 +239,7 @@ class GeneRegexEcma262Visitor : RegexEcma262BaseVisitor(){ if (ctx.classAtom()[0]?.classAtomNoDash()?.classEscape() != null){ if (ctx.classAtom().size == 2) throw IllegalArgumentException("Not implemented yet") - val rec = ctx.classAtom()[0].accept(this).data as List + val rec = ctx.classAtom()[0].accept(this).requireDataList() list.addAll(rec) } else { val startText = ctx.classAtom()[0].text @@ -269,12 +269,12 @@ class GeneRegexEcma262Visitor : RegexEcma262BaseVisitor(){ } if(ctx.nonemptyClassRangesNoDash() != null){ - val ranges = ctx.nonemptyClassRangesNoDash().accept(this).data as List + val ranges = ctx.nonemptyClassRangesNoDash().accept(this).requireDataList() list.addAll(ranges) } if(ctx.classRanges() != null){ - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() list.addAll(ranges) } @@ -298,7 +298,7 @@ class GeneRegexEcma262Visitor : RegexEcma262BaseVisitor(){ } else { if (ctx.classAtom()?.classAtomNoDash()?.classEscape() != null || ctx.classAtomNoDash()?.classEscape() != null){ - val rec = (ctx.classAtom() ?: ctx.classAtomNoDash()).accept(this).data as List + val rec = (ctx.classAtom() ?: ctx.classAtomNoDash()).accept(this).requireDataList() list.addAll(rec) } else { val char = (ctx.classAtom() ?: ctx.classAtomNoDash()).text[0] @@ -307,12 +307,12 @@ class GeneRegexEcma262Visitor : RegexEcma262BaseVisitor(){ } if(ctx.nonemptyClassRangesNoDash() != null){ - val ranges = ctx.nonemptyClassRangesNoDash().accept(this).data as List + val ranges = ctx.nonemptyClassRangesNoDash().accept(this).requireDataList() list.addAll(ranges) } if(ctx.classRanges() != null){ - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() list.addAll(ranges) } diff --git a/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexJavaVisitor.kt b/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexJavaVisitor.kt index c4b224edfa..3cebf2c3b5 100644 --- a/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexJavaVisitor.kt +++ b/core/src/main/kotlin/org/evomaster/core/parser/GeneRegexJavaVisitor.kt @@ -227,7 +227,7 @@ class GeneRegexJavaVisitor : RegexJavaBaseVisitor(){ val negated = ctx.CARET() != null - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList(); val gene = CharacterRangeRxGene(negated, ranges) @@ -240,7 +240,7 @@ class GeneRegexJavaVisitor : RegexJavaBaseVisitor(){ val list = mutableListOf() if(ctx.nonemptyClassRanges() != null){ - val ranges = ctx.nonemptyClassRanges().accept(this).data as List + val ranges = ctx.nonemptyClassRanges().accept(this).requireDataList() list.addAll(ranges) } @@ -255,7 +255,7 @@ class GeneRegexJavaVisitor : RegexJavaBaseVisitor(){ if (ctx.classAtom()[0]?.classAtomNoDash()?.classEscape() != null){ if (ctx.classAtom().size == 2) throw IllegalArgumentException("Not implemented yet") - val rec = ctx.classAtom()[0].accept(this).data as List + val rec = ctx.classAtom()[0].accept(this).requireDataList() list.addAll(rec) } else { val startText = ctx.classAtom()[0].text @@ -284,12 +284,12 @@ class GeneRegexJavaVisitor : RegexJavaBaseVisitor(){ } if(ctx.nonemptyClassRangesNoDash() != null){ - val ranges = ctx.nonemptyClassRangesNoDash().accept(this).data as List + val ranges = ctx.nonemptyClassRangesNoDash().accept(this).requireDataList() list.addAll(ranges) } if(ctx.classRanges() != null){ - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() list.addAll(ranges) } @@ -313,7 +313,7 @@ class GeneRegexJavaVisitor : RegexJavaBaseVisitor(){ } else { if (ctx.classAtom()?.classAtomNoDash()?.classEscape() != null || ctx.classAtomNoDash()?.classEscape() != null){ - val rec = (ctx.classAtom() ?: ctx.classAtomNoDash()).accept(this).data as List + val rec = (ctx.classAtom() ?: ctx.classAtomNoDash()).accept(this).requireDataList() list.addAll(rec) } else { val text = (ctx.classAtom() ?: ctx.classAtomNoDash()).text @@ -327,12 +327,12 @@ class GeneRegexJavaVisitor : RegexJavaBaseVisitor(){ } if(ctx.nonemptyClassRangesNoDash() != null){ - val ranges = ctx.nonemptyClassRangesNoDash().accept(this).data as List + val ranges = ctx.nonemptyClassRangesNoDash().accept(this).requireDataList() list.addAll(ranges) } if(ctx.classRanges() != null){ - val ranges = ctx.classRanges().accept(this).data as List + val ranges = ctx.classRanges().accept(this).requireDataList() list.addAll(ranges) } diff --git a/core/src/main/kotlin/org/evomaster/core/parser/VisitResult.kt b/core/src/main/kotlin/org/evomaster/core/parser/VisitResult.kt index 61f6bd4987..22f7df6ad9 100644 --- a/core/src/main/kotlin/org/evomaster/core/parser/VisitResult.kt +++ b/core/src/main/kotlin/org/evomaster/core/parser/VisitResult.kt @@ -9,8 +9,26 @@ class VisitResult( val genes: MutableList = mutableListOf(), var data: Any? = null ){ - constructor(gene: Gene) : this() { genes.add(gene) } + + inline fun requireDataList(): List { + val values = data + ?: throw IllegalStateException("Expected List<${T::class.simpleName}> in VisitResult, but it was null") + + if (values !is List<*>) { + throw IllegalStateException( + "Expected List<${T::class.simpleName}> in VisitResult, but got ${values::class.qualifiedName}" + ) + } + + @Suppress("UNCHECKED_CAST") + return values.mapIndexed { index, value -> + value as? T + ?: throw IllegalStateException( + "Expected ${T::class.simpleName} entry at VisitResult[$index], but got " + + (value?.let { it::class.qualifiedName } ?: "null")) + } as List + } } \ No newline at end of file diff --git a/core/src/main/kotlin/org/evomaster/core/problem/api/service/ApiWsStructureMutator.kt b/core/src/main/kotlin/org/evomaster/core/problem/api/service/ApiWsStructureMutator.kt index 63c436151b..43c9531871 100644 --- a/core/src/main/kotlin/org/evomaster/core/problem/api/service/ApiWsStructureMutator.kt +++ b/core/src/main/kotlin/org/evomaster/core/problem/api/service/ApiWsStructureMutator.kt @@ -258,7 +258,7 @@ abstract class ApiWsStructureMutator : StructureMutator() { } // Removing the existing action added for RESERVED_RESOLVED_LOCAL_IP - val defaultActions = old.filter { it.hostname == a.hostname && it.localIPAddress == ExternalServiceSharedUtils.RESERVED_RESOLVED_LOCAL_IP }; + val defaultActions = old.filter { it.hostname == a.hostname && it.localIPAddress == ExternalServiceSharedUtils.RESERVED_RESOLVED_LOCAL_IP } if (defaultActions.isNotEmpty()) { ind.removeHostnameResolutionAction(defaultActions) } @@ -369,7 +369,7 @@ abstract class ApiWsStructureMutator : StructureMutator() { we might remove the condition check on representExistingData. */ if (ind.seeSqlDbActions().isEmpty() - || !ind.seeSqlDbActions().any { it is SqlAction && it.representExistingData } + || !ind.seeSqlDbActions().any { it.representExistingData } ) { /* diff --git a/core/src/main/kotlin/org/evomaster/core/problem/enterprise/EnterpriseIndividual.kt b/core/src/main/kotlin/org/evomaster/core/problem/enterprise/EnterpriseIndividual.kt index b195be0d58..3f62858522 100644 --- a/core/src/main/kotlin/org/evomaster/core/problem/enterprise/EnterpriseIndividual.kt +++ b/core/src/main/kotlin/org/evomaster/core/problem/enterprise/EnterpriseIndividual.kt @@ -317,7 +317,7 @@ abstract class EnterpriseIndividual( } /** - * return a list of all db actions in [this] individual + * return a list of all db actions in this individual * that include all initializing actions plus db actions among main actions. * */ diff --git a/core/src/main/kotlin/org/evomaster/core/problem/rest/service/sampler/AbstractRestSampler.kt b/core/src/main/kotlin/org/evomaster/core/problem/rest/service/sampler/AbstractRestSampler.kt index 05b4a40231..a0e812c671 100644 --- a/core/src/main/kotlin/org/evomaster/core/problem/rest/service/sampler/AbstractRestSampler.kt +++ b/core/src/main/kotlin/org/evomaster/core/problem/rest/service/sampler/AbstractRestSampler.kt @@ -8,7 +8,6 @@ import org.evomaster.core.AnsiColor import org.evomaster.core.EMConfig import org.evomaster.core.config.ConfigProblemException import org.evomaster.core.logging.LoggingUtil -import org.evomaster.core.output.service.PartialOracles import org.evomaster.core.problem.enterprise.SampleType import org.evomaster.core.problem.externalservice.ExternalService import org.evomaster.core.problem.externalservice.HostnameResolutionInfo diff --git a/core/src/main/kotlin/org/evomaster/core/utils/CharacterRange.kt b/core/src/main/kotlin/org/evomaster/core/utils/CharacterRange.kt index 3e8da0e2ab..fe537b5167 100644 --- a/core/src/main/kotlin/org/evomaster/core/utils/CharacterRange.kt +++ b/core/src/main/kotlin/org/evomaster/core/utils/CharacterRange.kt @@ -1,6 +1,6 @@ package org.evomaster.core.utils -class CharacterRange constructor(val start: Char, val end: Char){ +class CharacterRange(val start: Char, val end: Char){ constructor(a: Int, b: Int) : this(a.toChar(), b.toChar()) init { diff --git a/core/src/test/kotlin/org/evomaster/core/output/PythonTestCaseWriterTest.kt b/core/src/test/kotlin/org/evomaster/core/output/PythonTestCaseWriterTest.kt index d90f4c43a1..859e41ad51 100644 --- a/core/src/test/kotlin/org/evomaster/core/output/PythonTestCaseWriterTest.kt +++ b/core/src/test/kotlin/org/evomaster/core/output/PythonTestCaseWriterTest.kt @@ -4,7 +4,6 @@ import org.evomaster.core.TestUtils import org.evomaster.core.sql.SqlAction import org.evomaster.core.sql.SqlActionResult import org.evomaster.core.output.EvaluatedIndividualBuilder.Companion.buildResourceEvaluatedIndividual -import org.evomaster.core.output.service.PartialOracles import org.evomaster.core.output.service.RestTestCaseWriter import org.evomaster.core.problem.enterprise.SampleType import org.evomaster.core.problem.rest.data.* @@ -27,7 +26,7 @@ class PythonTestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -79,7 +78,7 @@ class PythonTestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -157,7 +156,7 @@ class PythonTestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -231,7 +230,7 @@ class PythonTestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -290,7 +289,7 @@ class PythonTestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -389,7 +388,7 @@ class PythonTestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) assertEquals(5, getNumberOfFlakyComment(config,lines.toString())) diff --git a/core/src/test/kotlin/org/evomaster/core/output/TestCaseWriterTest.kt b/core/src/test/kotlin/org/evomaster/core/output/TestCaseWriterTest.kt index d2454da456..12d3e56666 100644 --- a/core/src/test/kotlin/org/evomaster/core/output/TestCaseWriterTest.kt +++ b/core/src/test/kotlin/org/evomaster/core/output/TestCaseWriterTest.kt @@ -11,7 +11,6 @@ import org.evomaster.core.sql.schema.ColumnDataType.* import org.evomaster.core.sql.schema.ForeignKey import org.evomaster.core.sql.schema.Table import org.evomaster.core.output.EvaluatedIndividualBuilder.Companion.buildResourceEvaluatedIndividual -import org.evomaster.core.output.service.PartialOracles import org.evomaster.core.output.service.RestTestCaseWriter import org.evomaster.core.problem.enterprise.SampleType import org.evomaster.core.problem.rest.data.* @@ -48,7 +47,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -80,7 +79,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -147,7 +146,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -194,7 +193,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -238,7 +237,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -284,7 +283,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -337,7 +336,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -410,7 +409,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -464,7 +463,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -514,7 +513,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -565,7 +564,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -613,7 +612,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -672,7 +671,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -733,7 +732,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -779,7 +778,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -822,7 +821,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -865,7 +864,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -909,7 +908,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -951,7 +950,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -993,7 +992,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -1036,7 +1035,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -1126,7 +1125,7 @@ class TestCaseWriterTest : WriterTestBase(){ val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -1205,7 +1204,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -1255,7 +1254,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -1324,7 +1323,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -1397,7 +1396,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -1455,7 +1454,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) val expectedLines = """ @@ -1556,7 +1555,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) assertEquals(6, getNumberOfFlakyComment(config,lines.toString())) @@ -1598,7 +1597,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) assertEquals(3, getNumberOfFlakyComment(config,lines.toString())) @@ -1632,7 +1631,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) lines.toString().apply { assertTrue(contains("numberMatches(3000000000L)")) @@ -1672,7 +1671,7 @@ public void test() throws Exception { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) diff --git a/core/src/test/kotlin/org/evomaster/core/output/WriteJsonTest.kt b/core/src/test/kotlin/org/evomaster/core/output/WriteJsonTest.kt index d55f9e2197..2231845220 100644 --- a/core/src/test/kotlin/org/evomaster/core/output/WriteJsonTest.kt +++ b/core/src/test/kotlin/org/evomaster/core/output/WriteJsonTest.kt @@ -1,14 +1,12 @@ package org.evomaster.core.output import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType -import org.evomaster.core.EMConfig import org.evomaster.core.sql.SqlAction import org.evomaster.core.sql.schema.Column import org.evomaster.core.sql.schema.ColumnDataType import org.evomaster.core.sql.schema.ForeignKey import org.evomaster.core.sql.schema.Table import org.evomaster.core.output.EvaluatedIndividualBuilder.Companion.buildEvaluatedIndividual -import org.evomaster.core.output.service.PartialOracles import org.evomaster.core.output.service.RestTestCaseWriter import org.evomaster.core.search.gene.BooleanGene import org.evomaster.core.search.gene.numeric.IntegerGene @@ -44,7 +42,7 @@ class WriteJsonTest : WriterTestBase() { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -90,7 +88,7 @@ class WriteJsonTest : WriterTestBase() { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -134,7 +132,7 @@ class WriteJsonTest : WriterTestBase() { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -178,7 +176,7 @@ class WriteJsonTest : WriterTestBase() { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) diff --git a/core/src/test/kotlin/org/evomaster/core/output/WriteXMLTest.kt b/core/src/test/kotlin/org/evomaster/core/output/WriteXMLTest.kt index be3316d9a4..034ae82ee8 100644 --- a/core/src/test/kotlin/org/evomaster/core/output/WriteXMLTest.kt +++ b/core/src/test/kotlin/org/evomaster/core/output/WriteXMLTest.kt @@ -1,13 +1,11 @@ package org.evomaster.core.output import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType -import org.evomaster.core.EMConfig import org.evomaster.core.sql.SqlAction import org.evomaster.core.sql.schema.Column import org.evomaster.core.sql.schema.ColumnDataType import org.evomaster.core.sql.schema.Table import org.evomaster.core.output.EvaluatedIndividualBuilder.Companion.buildEvaluatedIndividual -import org.evomaster.core.output.service.PartialOracles import org.evomaster.core.output.service.RestTestCaseWriter import org.evomaster.core.search.gene.ObjectGene import org.evomaster.core.search.gene.sql.SqlXMLGene @@ -35,7 +33,7 @@ class WriteXMLTest : WriterTestBase() { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode(test, baseUrlOfSut) @@ -82,7 +80,7 @@ class WriteXMLTest : WriterTestBase() { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) @@ -125,7 +123,7 @@ class WriteXMLTest : WriterTestBase() { val test = TestCase(test = ei, name = "test") - val writer = RestTestCaseWriter(config, PartialOracles()) + val writer = RestTestCaseWriter(config) val lines = writer.convertToCompilableTestCode( test, baseUrlOfSut) diff --git a/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterRPCTest.kt b/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterRPCTest.kt index 10daf6c6a2..e27afbbe09 100644 --- a/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterRPCTest.kt +++ b/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterRPCTest.kt @@ -27,10 +27,7 @@ class TestSuiteWriterRPCTest{ bind(TestCaseWriter::class.java) .to(RPCTestCaseWriter::class.java) .asEagerSingleton() - - bind(PartialOracles::class.java) - .asEagerSingleton() - } + } } diff --git a/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterTest.kt b/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterTest.kt index c6044a0066..6c9829e4f8 100644 --- a/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterTest.kt +++ b/core/src/test/kotlin/org/evomaster/core/output/service/TestSuiteWriterTest.kt @@ -4,7 +4,6 @@ import com.google.inject.AbstractModule import com.google.inject.Guice import com.google.inject.Injector import com.google.inject.Provider -import com.netflix.governator.guice.LifecycleInjector import org.evomaster.core.BaseModule import org.evomaster.core.EMConfig import org.evomaster.core.output.OutputFormat @@ -38,9 +37,6 @@ class TestSuiteWriterTest{ .to(RestTestCaseWriter::class.java) .asEagerSingleton() - bind(PartialOracles::class.java) - .asEagerSingleton() - //will crash if methods called on it bind(CallGraphService::class.java) // avoid dependency injection on the instance, as it would require Sampler and 30+ other dependencies