package org.eclipse.recommenders.completion.rcp.processable; import static org.apache.commons.lang3.ArrayUtils.toArray; import static org.junit.Assert.*; import java.lang.reflect.Field; import java.util.Collection; import java.util.LinkedList; import org.eclipse.recommenders.utils.Reflections; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.mockito.Mockito; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @RunWith(Parameterized.class) public class ProcessableProposalTagsTest { private Class<IProcessableProposal> clazz; private IProcessableProposal sut; public ProcessableProposalTagsTest(Class<IProcessableProposal> clazz) { this.clazz = clazz; } @SuppressWarnings("unchecked") @Parameters(name = "{0}") public static Collection<Object[]> fieldDeclarations() { LinkedList<Object[]> classes = Lists.newLinkedList(); classes.add(toArray(ProcessableAnonymousTypeCompletionProposal.class)); classes.add(toArray(ProcessableFilledArgumentNamesMethodProposal.class)); classes.add(toArray(ProcessableJavaCompletionProposal.class)); classes.add(toArray(ProcessableGetterSetterCompletionProposal.class)); classes.add(toArray(ProcessableJavaFieldWithCastedReceiverCompletionProposal.class)); classes.add(toArray(ProcessableJavaMethodCompletionProposal.class)); classes.add(toArray(ProcessableLazyGenericTypeProposal.class)); classes.add(toArray(ProcessableLazyJavaTypeCompletionProposal.class)); classes.add(toArray(ProcessableLazyPackageCompletionProposal.class)); classes.add(toArray(ProcessableMethodDeclarationCompletionProposal.class)); classes.add(toArray(ProcessableOverrideCompletionProposal.class)); classes.add(toArray(ProcessableParameterGuessingProposal.class)); return classes; } @Before public void before() throws Exception { sut = Mockito.mock(clazz); Field f = Reflections.getDeclaredField(clazz, "tags").orNull(); f.set(sut, Maps.newHashMap()); Mockito.doCallRealMethod().when(sut).setTag(Mockito.any(IProposalTag.class), Mockito.anyObject()); Mockito.doCallRealMethod().when(sut).getTag(Mockito.any(IProposalTag.class), Mockito.anyObject()); Mockito.doCallRealMethod().when(sut).getTag(Mockito.any(IProposalTag.class)); } @Test public void testSetTagOptional() throws Exception { String expected = "value"; sut.setTag(TestTag.KEY, expected); Object actual = sut.getTag(TestTag.KEY).get(); assertSame(expected, actual); } @Test public void testRemoveTag() throws Exception { String expected = "value"; sut.setTag(TestTag.REMOVE, expected); sut.setTag(TestTag.REMOVE, null); assertFalse(sut.getTag(TestTag.REMOVE).isPresent()); } @Test public void testgetTagDefault01() throws Exception { String expected = "value"; sut.setTag(TestTag.DEFAULT, expected); assertEquals(expected, sut.getTag(TestTag.DEFAULT, expected)); } @Test public void testgetTagDefault02() throws Exception { assertEquals("default", sut.getTag(TestTag.DEFAULT_UNSET, "default")); } private static enum TestTag implements IProposalTag { KEY, REMOVE, DEFAULT, DEFAULT_UNSET } }