Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,23 @@ public void collectSlowLineMarkers(@NotNull List<PsiElement> psiElements, @NotNu
}

private void classNameMarker(PhpClass currentClass, Collection<? super RelatedItemLineMarkerInfo> result, Project project) {
PhpClass target;
Collection<PhpClass> target;
String tooltip;

if (Utils.isClassAtoumTest(currentClass)) {
target = Utils.locateTestedClass(project, currentClass);
target = Utils.locateTestedClasses(project, currentClass);
tooltip = "Navigate to tested class";
} else {
target = Utils.locateTestClass(project, currentClass);
target = Utils.locateTestClasses(project, currentClass);
tooltip = "Navigate to test";
}

if (target == null) {
if (target.size() == 0) {
return;
}

NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder.create(Icons.ATOUM).
setTarget(target).
setTargets(target).
setTooltipText(tooltip);
result.add(builder.createLineMarkerInfo(currentClass));
}
Expand Down
40 changes: 32 additions & 8 deletions src/pl/projectspace/idea/plugins/php/atoum/actions/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

Expand All @@ -21,41 +22,64 @@ public static Boolean isClassAtoumTest(PhpClass checkedClass)

@Nullable
public static PhpClass locateTestClass(Project project, PhpClass testedClass) {
Collection<PhpClass> possibleClasses = locateTestClasses(project, testedClass);
if (possibleClasses.size() > 0) {
return (PhpClass)possibleClasses.toArray()[0];
}

return null;
}

@Nullable
public static Collection<PhpClass> locateTestClasses(Project project, PhpClass testedClass) {
String[] namespaceParts = testedClass.getNamespaceName().split("\\\\");

for(int i=namespaceParts.length; i>=1; i--){
List<String> foo = Lists.newArrayList(namespaceParts);
foo.add(i, getTestsNamespaceSuffix().substring(0, getTestsNamespaceSuffix().length() - 1));

String possibleClassname = StringUtils.join(foo, "\\") + "\\" + testedClass.getName();
System.out.println(possibleClassname);
PhpClass possibleClass = locatePhpClass(project, possibleClassname);
if (null != possibleClass) {
return possibleClass;
Collection<PhpClass> foundClasses = locatePhpClasses(project, possibleClassname);
if (foundClasses.size() > 0) {
return foundClasses;
}
}

return null;
return new ArrayList<PhpClass>();
}

@Nullable
public static PhpClass locateTestedClass(Project project, PhpClass testClass) {
Collection<PhpClass> possibleClasses = locateTestedClasses(project, testClass);
if (possibleClasses.size() > 0) {
return (PhpClass)possibleClasses.toArray()[0];
}

return null;
}

@Nullable
public static Collection<PhpClass> locateTestedClasses(Project project, PhpClass testClass) {
String testClassNamespaceName = testClass.getNamespaceName();
String testedClassname = testClassNamespaceName.replace(getTestsNamespaceSuffix(), "") + testClass.getName();
return locatePhpClass(project, testedClassname);

return locatePhpClasses(project, testedClassname);
}

@Nullable
protected static PhpClass locatePhpClass(Project project, String name) {
Collection<PhpClass> phpClasses = PhpIndex.getInstance(project).getAnyByFQN(name);
Collection<PhpClass> phpClasses = locatePhpClasses(project, name);
if (phpClasses.size() != 1) {
return null;
}

return (PhpClass)phpClasses.toArray()[0];
}

@Nullable
protected static Collection<PhpClass> locatePhpClasses(Project project, String name) {
return PhpIndex.getInstance(project).getAnyByFQN(name);
}

private static String getTestsNamespaceSuffix()
{
return "tests\\units\\";
Expand Down