fix: improve blocks tree compare for finally extract (#1501)

This commit is contained in:
Skylot
2022-05-31 20:57:34 +01:00
parent fcd58ae76f
commit e6b6b93cbb
7 changed files with 147 additions and 34 deletions
@@ -79,8 +79,6 @@ public abstract class IntegrationTest extends TestUtils {
private static final String TEST_DIRECTORY = "src/test/java";
private static final String TEST_DIRECTORY2 = "jadx-core/" + TEST_DIRECTORY;
private static final String OUT_DIR = "test-out-tmp";
private static final String DEFAULT_INPUT_PLUGIN = "dx";
/**
* Set 'TEST_INPUT_PLUGIN' env variable to use 'java' or 'dx' input in tests
@@ -132,7 +130,7 @@ public abstract class IntegrationTest extends TestUtils {
this.useJavaInput = null;
args = new JadxArgs();
args.setOutDir(new File(OUT_DIR));
args.setOutDir(new File("test-out-tmp"));
args.setShowInconsistentCode(true);
args.setThreadsCount(1);
args.setSkipResources(true);
@@ -156,6 +154,10 @@ public abstract class IntegrationTest extends TestUtils {
}
}
public void setOutDirSuffix(String suffix) {
args.setOutDir(new File("test-out-" + suffix + "-tmp"));
}
public String getTestName() {
return this.getClass().getSimpleName();
}
@@ -31,6 +31,10 @@ public enum TestProfile implements Consumer<IntegrationTest> {
test.useTargetJavaVersion(11);
test.useJavaInput();
}),
JAVA17("java-17", test -> {
test.useTargetJavaVersion(17);
test.useJavaInput();
}),
ECJ_DX_J8("ecj-dx-j8", test -> {
test.useEclipseCompiler();
test.useTargetJavaVersion(8);
@@ -52,8 +56,9 @@ public enum TestProfile implements Consumer<IntegrationTest> {
}
@Override
public void accept(IntegrationTest integrationTest) {
this.setup.accept(integrationTest);
public void accept(IntegrationTest test) {
this.setup.accept(test);
test.setOutDirSuffix(description);
}
public String getDescription() {
@@ -0,0 +1,45 @@
package jadx.tests.integration.trycatch;
import jadx.tests.api.IntegrationTest;
import jadx.tests.api.extensions.profiles.TestProfile;
import jadx.tests.api.extensions.profiles.TestWithProfiles;
import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
public class TestTryCatchFinally14 extends IntegrationTest {
@SuppressWarnings("unused")
public static class TestCls {
private TCls t;
public void test() {
try {
if (t != null) {
t.doSomething();
}
} finally {
if (t != null) {
t.doFinally();
}
}
}
private static class TCls {
public void doSomething() {
}
public void doFinally() {
}
}
}
@TestWithProfiles({ TestProfile.DX_J8, TestProfile.D8_J11, TestProfile.JAVA8 })
public void test() {
assertThat(getClassNode(TestCls.class))
.code()
.containsOne(".doSomething();")
.containsOne("} finally {")
.containsOne(".doFinally();")
.countString(2, "!= null) {");
}
}