package org.eclipse.recommenders.completion.rcp.it;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import java.util.Collection;
import java.util.LinkedList;
import org.eclipse.jdt.core.IType;
import org.eclipse.recommenders.completion.rcp.IRecommendersCompletionContext;
import org.eclipse.recommenders.testing.CodeBuilder;
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 receiver types of static method calls are handled correctly.
*/
@RunWith(Parameterized.class)
public class ReceiverTypeOfStaticMethodCallsTest {
@ClassRule
public static final TemporaryWorkspace WORKSPACE = new TemporaryWorkspace();
private final String type;
public ReceiverTypeOfStaticMethodCallsTest(String type) {
this.type = type;
}
@Parameters(name = "{index}: {0}")
public static Collection<Object[]> scenarios() {
LinkedList<Object[]> scenarios = Lists.newLinkedList();
scenarios.add(scenario("System"));
scenarios.add(scenario("Class")); // <T>
scenarios.add(scenario("AtomicReferenceFieldUpdater")); // <T, V>
return scenarios;
}
private static Object[] scenario(String type) {
return new Object[] { type };
}
@Test
public void testReceiverTypeOfStaticMethodCall() throws Exception {
CharSequence code = CodeBuilder.method(type + ".$;");
IRecommendersCompletionContext sut = WORKSPACE.createProject().createFile(code).triggerContentAssist();
IType receiverType = sut.getReceiverType().get();
assertThat(receiverType.getElementName(), is(equalTo(type)));
}
}