package org.eclipse.recommenders.completion.rcp.it;
import static org.eclipse.recommenders.testing.CodeBuilder.classbody;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import java.util.Collection;
import java.util.LinkedList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IType;
import org.eclipse.recommenders.completion.rcp.IRecommendersCompletionContext;
import org.eclipse.recommenders.testing.rcp.completion.rules.TemporaryWorkspace;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import com.google.common.collect.Lists;
/**
* Test that the enclosing type is computed correctly when completion is triggered for the generic argument of a field.
*
* @see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=399800">Bug 399800</a>
*/
@RunWith(Parameterized.class)
public class Bug399800Test {
@ClassRule
public static final TemporaryWorkspace WORKSPACE = new TemporaryWorkspace();
private final String fieldDeclaration;
public Bug399800Test(String fieldDeclaration) {
this.fieldDeclaration = fieldDeclaration;
}
@Parameters
public static Collection<Object[]> fieldDeclarations() {
LinkedList<Object[]> fieldDeclarations = Lists.newLinkedList();
fieldDeclarations.add(fieldDeclaration("List<S$>"));
fieldDeclarations.add(fieldDeclaration("List<S$>;"));
fieldDeclarations.add(fieldDeclaration("List<S$> field"));
fieldDeclarations.add(fieldDeclaration("List<S$> field;"));
fieldDeclarations.add(fieldDeclaration("Map<String, S$>"));
fieldDeclarations.add(fieldDeclaration("Map<String, S$>;"));
fieldDeclarations.add(fieldDeclaration("Map<String, S$> field"));
fieldDeclarations.add(fieldDeclaration("Map<String, S$> field;"));
fieldDeclarations.add(fieldDeclaration("Map<String, List<S$>>"));
fieldDeclarations.add(fieldDeclaration("Map<String, List<S$>>;"));
fieldDeclarations.add(fieldDeclaration("Map<String, List<S$>> field"));
fieldDeclarations.add(fieldDeclaration("Map<String, List<S$>> field;"));
return fieldDeclarations;
}
private static Object[] fieldDeclaration(String... fieldDeclaration) {
return fieldDeclaration;
}
@Test
public void testEnclosingType() throws CoreException {
CharSequence code = classbody("TestClass", fieldDeclaration);
IRecommendersCompletionContext sut = WORKSPACE.createProject().createFile(code).triggerContentAssist();
IType enclosingType = sut.getEnclosingType().get();
assertThat(enclosingType.getElementName(), is(equalTo("TestClass")));
}
}