package com.jetbrains.lang.dart.ide.runner.util; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.lang.dart.psi.DartArgumentList; import com.jetbrains.lang.dart.psi.DartArguments; import com.jetbrains.lang.dart.psi.DartCallExpression; import com.jetbrains.lang.dart.psi.DartExpression; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class TestUtil { @Nullable public static String findGroupOrTestName(@Nullable final DartCallExpression expression) { String testName; final DartArguments arguments = expression == null ? null : expression.getArguments(); final DartArgumentList dartArgumentList = arguments == null ? null : arguments.getArgumentList(); if (dartArgumentList == null || dartArgumentList.getExpressionList().isEmpty()) { return null; } final DartExpression dartExpression = dartArgumentList.getExpressionList().get(0); testName = dartExpression == null ? "" : StringUtil.unquoteString(dartExpression.getText()); return testName; } @Nullable public static PsiElement findTestElement(@Nullable PsiElement element) { DartCallExpression callExpression = PsiTreeUtil.getParentOfType(element, DartCallExpression.class, false); while (callExpression != null) { if (isGroup(callExpression) || isTest(callExpression)) { return callExpression; } callExpression = PsiTreeUtil.getParentOfType(callExpression, DartCallExpression.class, true); } return element != null ? element.getContainingFile() : null; } public static boolean isTest(@NotNull final DartCallExpression expression) { return checkCalledFunctionName(expression, "test"); } public static boolean isGroup(@NotNull final DartCallExpression expression) { return checkCalledFunctionName(expression, "group"); } private static boolean checkCalledFunctionName(@NotNull final DartCallExpression callExpression, @NotNull final String expectedName) { return expectedName.equals(callExpression.getExpression().getText()); } }