package jadx.tests.integration.annotations;

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.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;

public class TestAnnotations extends IntegrationTest {

	public static class TestCls {
		private static @interface A {
			int a();
		}

		@A(a = -1)
		public void methodA1() {
		}

		@A(a = -253)
		public void methodA2() {
		}

		@A(a = -11253)
		public void methodA3() {
		}

		private static @interface V {
			boolean value();
		}

		@V(false)
		public void methodV() {
		}

		private static @interface D {
			float value() default 1.1f;
		}

		@D
		public void methodD() {
		}
	}

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

		assertThat(code, not(containsString("@A(a = 255)")));
		assertThat(code, containsOne("@A(a = -1)"));
		assertThat(code, containsOne("@A(a = -253)"));
		assertThat(code, containsOne("@A(a = -11253)"));
		assertThat(code, containsOne("@V(false)"));
		assertThat(code, not(containsString("@D()")));
		assertThat(code, containsOne("@D"));

		assertThat(code, containsOne("int a();"));
		assertThat(code, containsOne("float value() default 1.1f;"));
	}
}
