private static boolean isTestMethod(@NotNull PsiMethod method) { if (isTestMethodWithAnnotation(method)) { return true; } final List<String> files = TestDataGuessByExistingFilesUtil.collectTestDataByExistingFiles(method); return files != null && !files.isEmpty(); }
@Nullable public static List<String> findTestDataFiles(@NotNull DataContext context) { final PsiMethod method = findTargetMethod(context); if (method == null) { return null; } final String name = method.getName(); if (name.startsWith("test")) { String testDataPath = TestDataLineMarkerProvider.getTestDataBasePath(method.getContainingClass()); final TestDataReferenceCollector collector = new TestDataReferenceCollector(testDataPath, name.substring(4)); return collector.collectTestDataReferences(method); } final Location<?> location = Location.DATA_KEY.getData(context); if (location instanceof PsiMemberParameterizedLocation) { PsiClass containingClass = ((PsiMemberParameterizedLocation) location).getContainingClass(); if (containingClass == null) { containingClass = PsiTreeUtil.getParentOfType(location.getPsiElement(), PsiClass.class, false); } if (containingClass != null) { final PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy( containingClass, Collections.singleton(JUnitUtil.RUN_WITH)); if (annotation != null) { final PsiAnnotationMemberValue memberValue = annotation.findAttributeValue("value"); if (memberValue instanceof PsiClassObjectAccessExpression) { final PsiTypeElement operand = ((PsiClassObjectAccessExpression) memberValue).getOperand(); if (operand.getType().equalsToText(Parameterized.class.getName())) { final String testDataPath = TestDataLineMarkerProvider.getTestDataBasePath(containingClass); final String paramSetName = ((PsiMemberParameterizedLocation) location).getParamSetName(); final String baseFileName = StringUtil.trimEnd(StringUtil.trimStart(paramSetName, "["), "]"); final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(containingClass.getProject()).getFileIndex(); return TestDataGuessByExistingFilesUtil.suggestTestDataFiles( fileIndex, baseFileName, testDataPath, containingClass); } } } } } return null; }
@Nullable List<String> collectTestDataReferences(@NotNull final PsiMethod method) { myContainingClass = method.getContainingClass(); List<String> result = collectTestDataReferences(method, new HashMap<String, Computable<String>>()); if (!myFoundTestDataParameters) { myLogMessages.add("Found no parameters annotated with @TestDataFile"); } if (result == null || result.isEmpty()) { result = TestDataGuessByExistingFilesUtil.collectTestDataByExistingFiles(method); } return result; }
private static boolean isTestMethodWithAnnotation(@NotNull PsiMethod method) { String name = method.getName(); if (!name.startsWith("test")) { return false; } String testDataPath = getTestDataBasePath(method.getContainingClass()); if (testDataPath == null) { return false; } List<String> fileNames = new TestDataReferenceCollector( testDataPath, TestDataGuessByExistingFilesUtil.getTestName(name)) .collectTestDataReferences(method); return fileNames != null && !fileNames.isEmpty(); }