UTBotJava icon indicating copy to clipboard operation
UTBotJava copied to clipboard

Using util method via reflection

Open Damtev opened this issue 2 years ago • 0 comments

Consider the following class com.google.common.primitives.Booleans$LexicographicalComparator in guava-26.0:

private static enum LexicographicalComparator implements Comparator<boolean[]> { ... }

In tests for methods of this class in some specific conditions we generate the following code:

        Class booleansLexicographicalComparatorTestClazz = Class.forName("com.google.common.primitives.Booleans_LexicographicalComparatorTest");
        Class classType = Class.forName("java.lang.Class");
        Class stringType = Class.forName("java.lang.String");
        Method getStaticFieldValueMethod = booleansLexicographicalComparatorTestClazz.getDeclaredMethod("getStaticFieldValue", classType, stringType);
        getStaticFieldValueMethod.setAccessible(true);
        java.lang.Object[] getStaticFieldValueMethodArguments = new java.lang.Object[2];
        getStaticFieldValueMethodArguments[0] = "com.google.common.primitives.Booleans$LexicographicalComparator";
        getStaticFieldValueMethodArguments[1] = "INSTANCE";
        Object lexicographicalComparator = getStaticFieldValueMethod.invoke(null, getStaticFieldValueMethodArguments);

Steps to reproduce:

  1. Checkout to usvm_competitions_2024 branch, at least one reproducable commit 5503f43ede037b732bfad0d0f7fc2ec5e0e16d01
  2. Use the following settings in ContestEstimator:
        val timeLimit = 120
        methodFilter = "com.google.common.primitives.Booleans\$LexicographicalComparator.toString"
        projectFilter = listOf("guava-26.0")
    
  3. Add the following line com.google.common.primitives.Booleans$LexicographicalComparator to the utbot-junit-contest/src/main/resources/classes/guava-26.0/list
  4. Always use symbolicResult and ignore concreteResult in org.utbot.contest.usvm.jc.JcTestExecutor#execute

Damtev avatar Dec 07 '23 08:12 Damtev