package jadx.tests.integration.trycatch; import jadx.core.dex.nodes.ClassNode; import jadx.tests.api.IntegrationTest; import org.junit.Test; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; public class TestTryCatch3 extends IntegrationTest { public static class TestCls { private int f = 0; private boolean test(Object obj) { boolean res; try { res = exc(obj); } catch (Exception e) { res = false; } finally { f++; } return res; } private boolean exc(Object obj) throws Exception { if ("r".equals(obj)) { throw new AssertionError(); } return true; } public void check() { f = 0; assertTrue(test(null)); assertEquals(1, f); f = 0; try { test("r"); } catch (AssertionError e) { // pass } assertEquals(1, f); } } @Test public void test() { ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); assertThat(code, containsString("try {")); assertThat(code, containsString("exc(obj);")); assertThat(code, containsString("} catch (Exception e) {")); assertThat(code, not(containsString("throw th;"))); } @Test public void test2() { noDebugInfo(); ClassNode cls = getClassNode(TestCls.class); String code = cls.getCode().toString(); assertThat(code, not(containsString("throw th;"))); } }