package spoon.test.sourcePosition;
import org.junit.Test;
import spoon.reflect.cu.SourcePosition;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.factory.Factory;
import spoon.reflect.visitor.Filter;
import spoon.reflect.visitor.filter.TypeFilter;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static spoon.testing.utils.ModelUtils.build;
public class SourcePositionTest {
@Test
public void equalPositionsHaveSameHashcode() throws Exception {
String packageName = "spoon.test";
String sampleClassName = "SampleClass";
String qualifiedName = packageName + "." + sampleClassName;
Filter<CtMethod<?>> methodFilter = new TypeFilter<CtMethod<?>>(CtMethod.class);
Factory aFactory = factoryFor(packageName, sampleClassName);
List<CtMethod<?>> methods = aFactory.Class().get(qualifiedName).getElements(methodFilter);
Factory newInstanceOfSameFactory = factoryFor(packageName, sampleClassName);
List<CtMethod<?>> newInstanceOfSameMethods = newInstanceOfSameFactory.Class().get(qualifiedName).getElements(methodFilter);
assertEquals(methods.size(), newInstanceOfSameMethods.size());
for (int i = 0; i < methods.size(); i += 1) {
SourcePosition aPosition = methods.get(i).getPosition();
SourcePosition newInstanceOfSamePosition = newInstanceOfSameMethods.get(i).getPosition();
assertTrue(aPosition.equals(newInstanceOfSamePosition));
assertEquals(aPosition.hashCode(), newInstanceOfSamePosition.hashCode());
}
}
private Factory factoryFor(String packageName, String className) throws Exception {
return build(packageName, className).getFactory();
}
}