package org.junit.runners.parameterized; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.rules.ExpectedException.none; import java.util.Arrays; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runners.model.TestClass; public class TestWithParametersTest { private static final String DUMMY_NAME = "dummy name"; private static final TestClass DUMMY_TEST_CLASS = new TestClass( DummyClass.class); private static final List<Object> DUMMY_PARAMETERS = Arrays .<Object> asList("a", "b"); @Rule public final ExpectedException thrown = none(); @Test public void cannotBeCreatedWithoutAName() { thrown.expect(NullPointerException.class); thrown.expectMessage("The name is missing."); new TestWithParameters(null, DUMMY_TEST_CLASS, DUMMY_PARAMETERS); } @Test public void cannotBeCreatedWithoutTestClass() { thrown.expect(NullPointerException.class); thrown.expectMessage("The test class is missing."); new TestWithParameters(DUMMY_NAME, null, DUMMY_PARAMETERS); } @Test public void cannotBeCreatedWithoutParameters() { thrown.expect(NullPointerException.class); thrown.expectMessage("The parameters are missing."); new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, (List<Object>) null); } @Test public void doesNotAllowToModifyProvidedParameters() { TestWithParameters test = new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, DUMMY_PARAMETERS); thrown.expect(UnsupportedOperationException.class); test.getParameters().set(0, "another parameter"); } @Test public void doesNotConsiderParametersWhichChangedAfterTestInstantiation() { List<Object> parameters = Arrays.<Object> asList("dummy parameter"); TestWithParameters test = new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, parameters); parameters.set(0, "another parameter"); assertEquals(asList("dummy parameter"), test.getParameters()); } @Test public void isEqualToTestWithSameNameAndTestClassAndParameters() { TestWithParameters firstTest = new TestWithParameters(DUMMY_NAME, new TestClass(DummyClass.class), Arrays.<Object> asList("a", "b")); TestWithParameters secondTest = new TestWithParameters(DUMMY_NAME, new TestClass(DummyClass.class), Arrays.<Object> asList("a", "b")); assertEquals(firstTest, secondTest); } @Test public void isNotEqualToTestWithDifferentName() { TestWithParameters firstTest = new TestWithParameters("name", DUMMY_TEST_CLASS, DUMMY_PARAMETERS); TestWithParameters secondTest = new TestWithParameters("another name", DUMMY_TEST_CLASS, DUMMY_PARAMETERS); assertNotEquals(firstTest, secondTest); } @Test public void isNotEqualToTestWithDifferentTestClass() { TestWithParameters firstTest = new TestWithParameters(DUMMY_NAME, new TestClass(DummyClass.class), DUMMY_PARAMETERS); TestWithParameters secondTest = new TestWithParameters(DUMMY_NAME, new TestClass(AnotherDummyClass.class), DUMMY_PARAMETERS); assertNotEquals(firstTest, secondTest); } @Test public void isNotEqualToTestWithDifferentParameters() { TestWithParameters firstTest = new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, Arrays.<Object> asList("a")); TestWithParameters secondTest = new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, Arrays.<Object> asList("b")); assertNotEquals(firstTest, secondTest); } @Test public void isNotEqualToObjectWithDifferentClass() { TestWithParameters test = new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, DUMMY_PARAMETERS); assertNotEquals(test, new Integer(3)); } @Test public void hasSameHashCodeAsEqualTest() { TestWithParameters firstTest = new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, DUMMY_PARAMETERS); TestWithParameters secondTest = new TestWithParameters(DUMMY_NAME, DUMMY_TEST_CLASS, DUMMY_PARAMETERS); assertEquals(firstTest.hashCode(), secondTest.hashCode()); } @Test public void hasMeaningfulToString() { TestWithParameters test = new TestWithParameters("name", new TestClass( DummyClass.class), Arrays.<Object> asList("first parameter", "second parameter")); assertEquals( "Wrong toString().", "org.junit.runners.parameterized.TestWithParametersTest$DummyClass 'name' with parameters [first parameter, second parameter]", test.toString()); } private static class DummyClass { } private static class AnotherDummyClass { } }