package jadx.tests.integration.enums;

import jadx.core.dex.nodes.ClassNode;
import jadx.tests.api.IntegrationTest;
import jadx.tests.api.utils.JadxMatchers;

import org.junit.Test;

import static org.junit.Assert.assertThat;

public class TestEnums2 extends IntegrationTest {

	public static class TestCls {

		public enum Operation {
			PLUS {
				int apply(int x, int y) {
					return x + y;
				}
			},
			MINUS {
				int apply(int x, int y) {
					return x - y;
				}
			};

			abstract int apply(int x, int y);
		}
	}

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

		assertThat(code, JadxMatchers.containsLines(1,
				"public enum Operation {",
				indent(1) + "PLUS {",
				indent(2) + "int apply(int x, int y) {",
				indent(3) + "return x + y;",
				indent(2) + "}",
				indent(1) + "},",
				indent(1) + "MINUS {",
				indent(2) + "int apply(int x, int y) {",
				indent(3) + "return x - y;",
				indent(2) + "}",
				indent(1) + "};",
				"",
				indent(1) + "abstract int apply(int i, int i2);",
				"}"
		));
	}
}
