package org.eclipse.recommenders.completion.rcp.it;
import static com.google.common.collect.Iterables.getOnlyElement;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Set;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.recommenders.completion.rcp.CompletionContextFunctions.ImportedPackagesFunction;
import org.eclipse.recommenders.completion.rcp.CompletionContextKey;
import org.eclipse.recommenders.completion.rcp.IRecommendersCompletionContext;
import org.eclipse.recommenders.testing.rcp.completion.rules.TemporaryWorkspace;
import org.eclipse.recommenders.utils.names.IPackageName;
import org.eclipse.recommenders.utils.names.VmPackageName;
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.base.Optional;
import com.google.common.collect.Lists;
@RunWith(Parameterized.class)
public class ImportedPackagesContextFunctionTest {
@ClassRule
public static final TemporaryWorkspace WORKSPACE = new TemporaryWorkspace();
private static final IPackageName JAVA_UTIL = VmPackageName.get("java/util");
private final String importDeclaration;
private final IPackageName expectedPackage;
public ImportedPackagesContextFunctionTest(String importDeclaration, IPackageName expectedPackage) {
this.importDeclaration = importDeclaration;
this.expectedPackage = expectedPackage;
}
@Parameters(name = "{index}: {0}")
public static Collection<Object[]> scenarios() {
LinkedList<Object[]> scenarios = Lists.newLinkedList();
scenarios.add(scenario("import java.util.List;", JAVA_UTIL));
scenarios.add(scenario("import java.util.*;", JAVA_UTIL));
scenarios.add(scenario("import static java.util.Collections.singleton;", JAVA_UTIL));
scenarios.add(scenario("import static java.util.Collections.*;", JAVA_UTIL));
return scenarios;
}
private static Object[] scenario(String importDeclaration, IPackageName expectedPackage) {
return new Object[] { importDeclaration, expectedPackage };
}
@Test
public void test() throws Exception {
CompilationUnit ast = WORKSPACE.createProject().createFile(importDeclaration + "public class Importer {}").getAst();
IRecommendersCompletionContext context = mock(IRecommendersCompletionContext.class);
when(context.getAST()).thenReturn(Optional.of(ast));
ImportedPackagesFunction sut = new ImportedPackagesFunction();
Set<IPackageName> packages = sut.compute(context, CompletionContextKey.IMPORTED_PACKAGES);
assertThat(getOnlyElement(packages), is(equalTo(expectedPackage)));
}
}