package jadx.tests.integration.switches;
import jadx.core.dex.nodes.ClassNode;
import jadx.tests.api.IntegrationTest;
import org.junit.Test;
import static jadx.tests.api.utils.JadxMatchers.containsOne;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
public class TestSwitchWithFallThroughCase2 extends IntegrationTest {
@SuppressWarnings("fallthrough")
public static class TestCls {
public String test(int a, boolean b, boolean c) {
String str = "";
if (a > 0) {
switch (a % 4) {
case 1:
str += ">";
if (a == 5 && b) {
if (c) {
str += "1";
} else {
str += "!c";
}
break;
}
case 2:
if (b) {
str += "2";
}
break;
case 3:
break;
default:
str += "default";
break;
}
str += "+";
}
if (b && c) {
str += "-";
}
return str;
}
public void check() {
assertEquals(">1+-", test(5, true, true));
assertEquals(">2+-", test(1, true, true));
assertEquals("+-", test(3, true, true));
assertEquals("default+-", test(16, true, true));
assertEquals("-", test(-1, true, true));
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
String code = cls.getCode().toString();
assertThat(code, containsOne("switch (a % 4) {"));
assertThat(code, containsOne("if (a == 5 && b) {"));
assertThat(code, containsOne("if (b) {"));
}
}