Commit 66421be9 authored by Skylot's avatar Skylot

test: add tests for some known issues

parent 9695291e
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<String>) new ArrayList<String>());
}
public void test2(Object obj) {
if (obj instanceof String) {
call((String) obj);
}
}
public void call(String str) {
c += 1;
}
public void call(List<String> list) {
c += 2;
}
public void call(ArrayList<String> 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<String>) new ArrayList<String>());"));
assertThat(code, containsOne("call((String) obj);"));
}
}
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) {"));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment