package jadx.tests.integration.debuginfo;

import jadx.core.codegen.CodeWriter;
import jadx.core.dex.nodes.ClassNode;
import jadx.tests.api.IntegrationTest;

import java.lang.ref.WeakReference;
import java.util.Map;

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class TestLineNumbers2 extends IntegrationTest {

	public static class TestCls {
		private WeakReference<TestCls> f;

		public TestCls(TestCls s) {
		}

		TestCls test(TestCls s) {
			TestCls store = f != null ? f.get() : null;
			if (store == null) {
				store = new TestCls(s);
				f = new WeakReference<TestCls>(store);
			}
			return store;
		}

		public Object test2() {
			return new Object();
		}
	}

	@Test
	public void test() {
		ClassNode cls = getClassNode(TestCls.class);
		CodeWriter codeWriter = cls.getCode();
		String code = codeWriter.toString();

		Map<Integer, Integer> lineMapping = codeWriter.getLineMapping();
		assertEquals("{8=18, 11=22, 12=23, 13=24, 14=28, 16=25, 17=26, 18=28, 21=31, 22=32}",
				lineMapping.toString());
	}
}
