diff --git a/lang-java-reach-soot/src/test/java/SootCallGraphTest.java b/lang-java-reach-soot/src/test/java/SootCallGraphTest.java index 89d724506..27494bfb5 100644 --- a/lang-java-reach-soot/src/test/java/SootCallGraphTest.java +++ b/lang-java-reach-soot/src/test/java/SootCallGraphTest.java @@ -54,12 +54,12 @@ private GoalContext getGoalContext() { return ctx; } - private void runSootAnalysis() { + private void runSootAnalysis(String jarPAth) { final ReachabilityAnalyzer ra = new ReachabilityAnalyzer(this.getGoalContext()); ra.setCallgraphConstructor(SootCallgraphConstructor.FRAMEWORK, false); // Set classpaths final Set app_paths = new HashSet(), dep_paths = new HashSet(); - app_paths.add(Paths.get("./src/test/resources/examples.jar")); + app_paths.add(Paths.get(jarPAth)); dep_paths.add(Paths.get("./src/test/resources/empty.jar")); ra.setAppClasspaths(app_paths); ra.setDependencyClasspaths(dep_paths); @@ -111,7 +111,13 @@ public void callgraphServiceRegistered() { @Test public void examplesSootTestNoneEntrypointGenerator() { VulasConfiguration.getGlobal().setProperty("vulas.reach.soot.entrypointGenerator", "none"); - runSootAnalysis(); + runSootAnalysis("./src/test/resources/examples.jar"); + } + + @Test + public void examplesSootTestNoneEntrypointGeneratorJDK17() { + VulasConfiguration.getGlobal().setProperty("vulas.reach.soot.entrypointGenerator", "none"); + runSootAnalysis("./src/test/resources/examples17.jar"); } @Test @@ -120,7 +126,16 @@ public void examplesSootTestDefaultEntryPointGenerator() { .setProperty( "vulas.reach.soot.entrypointGenerator", "soot.jimple.infoflow.entryPointCreators.DefaultEntryPointCreator"); - runSootAnalysis(); + runSootAnalysis("./src/test/resources/examples.jar"); + } + + @Test + public void examplesSootTestDefaultEntryPointGeneratorJDK17() { + VulasConfiguration.getGlobal() + .setProperty( + "vulas.reach.soot.entrypointGenerator", + "soot.jimple.infoflow.entryPointCreators.DefaultEntryPointCreator"); + runSootAnalysis("./src/test/resources/examples17.jar"); } @Test @@ -129,6 +144,15 @@ public void examplesSootTestCustomEntryPointGenerator() { .setProperty( "vulas.reach.soot.entrypointGenerator", "org.eclipse.steady.cg.soot.CustomEntryPointCreator"); - runSootAnalysis(); + runSootAnalysis("./src/test/resources/examples.jar"); + } + + @Test + public void examplesSootTestCustomEntryPointGeneratorJDK17() { + VulasConfiguration.getGlobal() + .setProperty( + "vulas.reach.soot.entrypointGenerator", + "org.eclipse.steady.cg.soot.CustomEntryPointCreator"); + runSootAnalysis("./src/test/resources/examples17.jar"); } } diff --git a/lang-java-reach-soot/src/test/resources/Examples17.java b/lang-java-reach-soot/src/test/resources/Examples17.java new file mode 100644 index 000000000..b88e41935 --- /dev/null +++ b/lang-java-reach-soot/src/test/resources/Examples17.java @@ -0,0 +1,63 @@ +package com.sap.psr.vulas.cg.test; + +import java.util.SortedSet; +import java.util.TreeSet; + +sealed abstract class Animal implements Comparable permits Cat, Dog, Fish { + + public abstract void saySomething(); + + public int compareTo(Animal _a) { + return getClass().getName().compareTo(_a.getClass().getName()); + } +} + +final class Cat extends Animal { + public void saySomething() { + System.out.println("purr"); + } +} + +final class Dog extends Animal { + public void saySomething() { + System.out.println("woof"); + } +} + +final class Fish extends Animal { + public void saySomething() { + System.out.println("..."); + } +} + +class Car { + public void saySomething() { + System.out.println("honk!"); + } +} + +public class Examples { + static SortedSet animals = new TreeSet<>(); + + private static Animal createFish() { + return new Fish(); + } + + private static Animal createCat() { + Animal cat = new Cat(); + animals.add(cat); + return cat; + } + + public static void main(String[] args) { + Animal animal; + if (args.length == 0) { + animal = createCat(); + animal.saySomething(); + } else { + animal = createFish(); + animal.saySomething(); + } + } +} + diff --git a/lang-java-reach-soot/src/test/resources/examples17.jar b/lang-java-reach-soot/src/test/resources/examples17.jar new file mode 100644 index 000000000..215b20326 Binary files /dev/null and b/lang-java-reach-soot/src/test/resources/examples17.jar differ