package org.junit.tests.experimental.rules;

import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.rules.TestName;
import org.junit.runner.RunWith;

@RunWith(Enclosed.class)
public class NameRulesTest {
	public static class TestNames {
		@Rule
		public TestName name= new TestName();

		@Test
		public void testA() {
			assertEquals("testA", name.getMethodName());
		}

		@Test
		public void testB() {
			assertEquals("testB", name.getMethodName());
		}
	}
	
	public static class BeforeAndAfterTest {
		@Rule
		public TestName name= new TestName();

		private final String expectedName= "x";

		@Before
		public void setUp() {
			assertEquals(expectedName, name.getMethodName());
		}

		@Test
		public void x() {
			assertEquals(expectedName, name.getMethodName());
		}

		@After
		public void tearDown() {
			assertEquals(expectedName, name.getMethodName());
		}
	}
}
