package samples.junit4.suppressfield;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import samples.suppressfield.SuppressField;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.powermock.api.support.membermodification.MemberMatcher.field;
import static org.powermock.api.support.membermodification.MemberMatcher.fields;
import static org.powermock.api.support.membermodification.MemberModifier.suppress;
/**
* Unit tests that asserts that field suppression works.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(SuppressField.class)
public class SuppressFieldTest {
@Test
public void assertThatSpecificStaticFinalFieldSuppressionWorks() throws Exception {
suppress(field(SuppressField.class, "MY_OBJECT"));
assertNull(SuppressField.getMyObject());
}
@Ignore("Final primitive types doesn't work, see issue at https://github.com/jayway/powermock/issues/105")
@Test
public void assertThatSpecificStaticFinalPrimitiveFieldSuppressionWorks() throws Exception {
suppress(field(SuppressField.class, "MY_VALUE"));
assertEquals(0, SuppressField.getMyValue());
}
@Ignore("Final primitive types doesn't work, see issue at https://github.com/jayway/powermock/issues/105")
@Test
public void assertThatSpecificInstanceFinalPrimitiveFieldSuppressionWorks() throws Exception {
suppress(field(SuppressField.class, "myBoolean"));
SuppressField suppressField = new SuppressField();
assertEquals(false, suppressField.isMyBoolean());
}
@Test
public void assertThatSpecificInstanceFinalFieldSuppressionWorks() throws Exception {
suppress(field(SuppressField.class, "myWrappedBoolean"));
SuppressField suppressField = new SuppressField();
assertNull(suppressField.getMyWrappedBoolean());
}
@Test
public void assertThatSpecificPrimitiveInstanceFieldSuppressionWorks() throws Exception {
suppress(field(SuppressField.class, "myChar"));
SuppressField suppressField = new SuppressField();
assertEquals(' ', suppressField.getMyChar());
}
@Test
public void assertThatSpecificInstanceFieldSuppressionWorks() throws Exception {
suppress(field(SuppressField.class, "mySecondValue"));
SuppressField suppressField = new SuppressField();
assertNull(suppressField.getMySecondValue());
}
@Test
public void assertThatSpecificInstanceFieldSuppressionWhenSpecifingClassAndFieldNameWorks() throws Exception {
suppress(field(SuppressField.class, "mySecondValue"));
SuppressField suppressField = new SuppressField();
assertNull(suppressField.getMySecondValue());
}
@Test
public void assertThatMultipleInstanceFieldSuppressionWorks() throws Exception {
suppress(fields(SuppressField.class, "mySecondValue", "myChar"));
SuppressField suppressField = new SuppressField();
assertNull(suppressField.getMySecondValue());
assertEquals(' ', suppressField.getMyChar());
assertEquals(Boolean.TRUE, suppressField.getMyWrappedBoolean());
}
// TODO Add final tests here as well when they work
@Test
public void assertThatAllFieldSuppressionWorks() throws Exception {
suppress(fields(SuppressField.class));
SuppressField suppressField = new SuppressField();
assertNull(suppressField.getMySecondValue());
assertEquals(' ', suppressField.getMyChar());
assertNull(suppressField.getMyWrappedBoolean());
assertNull(SuppressField.getMyObject());
}
@Test
public void assertThatObjectIsNeverInstansiated() throws Exception {
suppress(field(SuppressField.class, "domainObject"));
SuppressField suppressField = new SuppressField();
assertNull(suppressField.getDomainObject());
}
}