blob: 869558a79cb675e257cccf670d59e7fe52f2b7f4 [file] [log] [blame]
package org.jetbrains.plugins.groovy.lang.overriding;
import com.intellij.psi.PsiMethod;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
import org.jetbrains.plugins.groovy.util.TestUtils;
import java.util.Arrays;
import java.util.List;
/**
* User: Dmitry.Krasilschikov
* Date: 31.07.2007
*/
public abstract class OverridingTester extends LightCodeInsightFixtureTestCase {
@Override
protected String getBasePath() {
return TestUtils.getTestDataPath() + "overriding/";
}
public void doTest() throws Throwable {
final String testFile = getTestName(true) + ".test";
final List<String> strings = TestUtils.readInput(getTestDataPath() + "/" + testFile);
GroovyFileBase psiFile = (GroovyFileBase) myFixture.addFileToProject("foo.groovy", strings.get(0));
StringBuilder buffer = new StringBuilder();
GrTypeDefinition[] grTypeDefinitions = psiFile.getTypeDefinitions();
GrTypeDefinition lastTypeDefinition = psiFile.getTypeDefinitions()[grTypeDefinitions.length - 1];
PsiMethod[] psiMethods = lastTypeDefinition.getMethods();
for (PsiMethod method : psiMethods) {
PsiMethod[] superMethods = findMethod(method);
String[] classes = sortUseContainingClass(superMethods);
for (String classAsString : classes) {
buffer.append(classAsString);
buffer.append("\n"); //between different super methods
}
buffer.append("\n"); //between different methods
}
buffer.append("\n"); //between class definitions
assertEquals(strings.get(1), buffer.toString().trim());
}
private static String[] sortUseContainingClass(PsiMethod[] psiMethods) {
String[] classes = new String[psiMethods.length];
for (int i = 0; i < psiMethods.length; i++) {
PsiMethod psiMethod = psiMethods[i];
classes[i] = psiMethod.getContainingClass().toString() + ": " + psiMethod.getContainingClass().getName() +
"; " + psiMethod.getHierarchicalMethodSignature().toString();
}
Arrays.sort(classes);
return classes;
}
abstract PsiMethod[] findMethod(PsiMethod method);
}