From 66421be942c33bcf77f7f3378b3e65590f064661 Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 22 Mar 2019 20:57:53 +0300 Subject: [PATCH] test: add tests for some known issues --- .../invoke/TestCastInOverloadedInvoke.java | 67 +++++++++++++++++++ .../loops/TestSynchronizedInEndlessLoop.java | 51 ++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 jadx-core/src/test/java/jadx/tests/integration/invoke/TestCastInOverloadedInvoke.java create mode 100644 jadx-core/src/test/java/jadx/tests/integration/loops/TestSynchronizedInEndlessLoop.java diff --git a/jadx-core/src/test/java/jadx/tests/integration/invoke/TestCastInOverloadedInvoke.java b/jadx-core/src/test/java/jadx/tests/integration/invoke/TestCastInOverloadedInvoke.java new file mode 100644 index 00000000..30ccc357 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/invoke/TestCastInOverloadedInvoke.java @@ -0,0 +1,67 @@ +package jadx.tests.integration.invoke; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import jadx.NotYetImplemented; +import jadx.NotYetImplementedExtension; +import jadx.core.dex.nodes.ClassNode; +import jadx.tests.api.IntegrationTest; + +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; + +@ExtendWith(NotYetImplementedExtension.class) +public class TestCastInOverloadedInvoke extends IntegrationTest { + + public static class TestCls { + int c = 0; + + public void test() { + call(new ArrayList<>()); + call((List) new ArrayList()); + } + + public void test2(Object obj) { + if (obj instanceof String) { + call((String) obj); + } + } + + public void call(String str) { + c += 1; + } + + public void call(List list) { + c += 2; + } + + public void call(ArrayList list) { + c += 4; + } + + public void check() { + test(); + assertThat(c, is(2 + 4)); + c = 0; + test2("str"); + assertThat(c, is(1)); + } + } + + @Test + @NotYetImplemented + public void test() { + ClassNode cls = getClassNode(TestCls.class); + String code = cls.getCode().toString(); + + assertThat(code, containsOne("call(new ArrayList<>());")); + assertThat(code, containsOne("call((List) new ArrayList());")); + + assertThat(code, containsOne("call((String) obj);")); + } +} diff --git a/jadx-core/src/test/java/jadx/tests/integration/loops/TestSynchronizedInEndlessLoop.java b/jadx-core/src/test/java/jadx/tests/integration/loops/TestSynchronizedInEndlessLoop.java new file mode 100644 index 00000000..4edb7bd3 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/loops/TestSynchronizedInEndlessLoop.java @@ -0,0 +1,51 @@ +package jadx.tests.integration.loops; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import jadx.NotYetImplemented; +import jadx.NotYetImplementedExtension; +import jadx.core.dex.nodes.ClassNode; +import jadx.tests.api.IntegrationTest; + +import static jadx.tests.api.utils.JadxMatchers.containsOne; +import static org.hamcrest.MatcherAssert.assertThat; + +@ExtendWith(NotYetImplementedExtension.class) +public class TestSynchronizedInEndlessLoop extends IntegrationTest { + + public static class TestCls { + int f = 5; + + int test() { + while (true) { + synchronized (this) { + if (f > 7) { + return 7; + } else if (f < 3) { + return 3; + } + } + try { + f++; + Thread.sleep(100); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } + + @Test + @NotYetImplemented + public void test() { + ClassNode cls = getClassNode(TestCls.class); + String code = cls.getCode().toString(); + + assertThat(code, containsOne("synchronized (this) {")); + assertThat(code, containsOne("try {")); + assertThat(code, containsOne("f++;")); + assertThat(code, containsOne("Thread.sleep(100);")); + assertThat(code, containsOne("} catch (Exception e) {")); + } +} -- GitLab