Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
Render collected exceptions in data provider methods of parametrized …
…tests
  • Loading branch information
sofurihafe committed Jul 7, 2022
commit b7293cf7b0d264baea89033fc0678d99086c324f
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ internal class CgCallableAccessManagerImpl(val context: CgContext) : CgCallableA
}
}

//WARN: if you make changes in the following sets of exceptions,
//don't forget to change them in hardcoded [UtilMethods] as well
private fun BuiltinMethodId.findExceptionTypes(): Set<ClassId> {
if (!this.isUtil) return emptySet()

Expand All @@ -164,9 +166,9 @@ internal class CgCallableAccessManagerImpl(val context: CgContext) : CgCallableA
getStaticFieldValueMethodId,
getFieldValueMethodId,
setStaticFieldMethodId,
setFieldMethodId,
createInstanceMethodId,
getUnsafeInstanceMethodId -> setOf(Exception::class.id)
setFieldMethodId -> setOf(IllegalAccessException::class.id, NoSuchFieldException::class.id)
createInstanceMethodId -> setOf(Exception::class.id)
getUnsafeInstanceMethodId -> setOf(ClassNotFoundException::class.id, NoSuchFieldException::class.id, IllegalAccessException::class.id)
createArrayMethodId -> setOf(ClassNotFoundException::class.id)
deepEqualsMethodId,
arraysDeepEqualsMethodId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1300,14 +1300,15 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c
utTestCase: UtTestCase,
dataProviderMethodName: String
): CgParameterizedTestDataProviderMethod {
val parametersStatements = mutableListOf<CgStatement>()
val dataProviderStatements = mutableListOf<CgStatement>()
val dataProviderExceptions = mutableSetOf<ClassId>()

val argListLength = utTestCase.executions.size
val argListDeclaration = createArgList(argListLength)
val argListVariable = argListDeclaration.variable

parametersStatements += argListDeclaration
parametersStatements += CgEmptyLine()
dataProviderStatements += argListDeclaration
dataProviderStatements += CgEmptyLine()

for ((execIndex, execution) in utTestCase.executions.withIndex()) {
withTestMethodScope(execution) {
Expand Down Expand Up @@ -1347,22 +1348,25 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c
}

//create a block for current test case
parametersStatements += innerBlock(
dataProviderStatements += innerBlock(
{},
block(executionArgumentsBody)
+ createArgumentsCallRepresentation(execIndex, argListVariable, arguments)
)

dataProviderExceptions += collectedExceptions
}
}

parametersStatements.addEmptyLineIfNeeded()
parametersStatements += CgReturnStatement(argListVariable)
dataProviderStatements.addEmptyLineIfNeeded()
dataProviderStatements += CgReturnStatement(argListVariable)

return buildParameterizedTestDataProviderMethod {
name = dataProviderMethodName
returnType = argListClassId()
statements = parametersStatements
statements = dataProviderStatements
annotations = createDataProviderAnnotations(dataProviderMethodName)
exceptions = dataProviderExceptions
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,10 @@ class CgParameterizedTestDataProviderBuilder : CgMethodBuilder<CgParameterizedTe
override val parameters: List<CgParameterDeclaration> = mutableListOf()
override lateinit var statements: List<CgStatement>
override lateinit var annotations: MutableList<CgAnnotation>
override val exceptions: MutableSet<ClassId> = mutableSetOf()
override lateinit var exceptions: MutableSet<ClassId>
override var documentation: CgDocumentationComment = CgDocumentationComment(emptyList())

override fun build() = CgParameterizedTestDataProviderMethod(name, statements, returnType, annotations)
override fun build() = CgParameterizedTestDataProviderMethod(name, statements, returnType, annotations, exceptions)
}

fun buildParameterizedTestDataProviderMethod(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,8 @@ class CgParameterizedTestDataProviderMethod(
override val statements: List<CgStatement>,
override val returnType: ClassId,
override val annotations: List<CgAnnotation>,
override val exceptions: Set<ClassId>,
) : CgMethod(isStatic = true) {
override val exceptions: Set<ClassId> = emptySet()

override val parameters: List<CgParameterDeclaration> = emptyList()
override val documentation: CgDocumentationComment = CgDocumentationComment(emptyList())
override val requiredFields: List<CgParameterDeclaration> = emptyList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@ internal class CgJavaRenderer(context: CgContext, printer: CgPrinter = CgPrinter
//we do not have a good string representation for two-dimensional array, so this strange if-else is required
val returnType =
if (element.returnType.simpleName == "Object[][]") "java.lang.Object[][]" else "${element.returnType}"
print("public static $returnType ${element.name}() throws Exception")
print("public static $returnType ${element.name}()")
renderExceptions(element)
}

override fun visit(element: CgInnerBlock) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,8 +329,7 @@ fun createInstance(language: CodegenLanguage): String =
when (language) {
CodegenLanguage.JAVA -> {
"""
private static Object createInstance(String className)
throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, IllegalAccessException, InvocationTargetException {
private static Object createInstance(String className) throws Exception {
Class<?> clazz = Class.forName(className);
return Class.forName("sun.misc.Unsafe").getDeclaredMethod("allocateInstance", Class.class)
.invoke(getUnsafeInstance(), clazz);
Expand Down