@Nullable private static JstdTestCaseStructure createTestCaseStructure( @NotNull JstdTestFileStructure jsTestFileStructure, @NotNull JSCallExpression testCaseCallExpression) { JSReferenceExpression referenceExpression = ObjectUtils.tryCast( testCaseCallExpression.getMethodExpression(), JSReferenceExpression.class); if (referenceExpression != null) { String referenceName = referenceExpression.getReferencedName(); if (TEST_CASE_NAME.equals(referenceName) || ASYNC_TEST_CASE_NAME.equals(referenceName)) { JSExpression[] arguments = JsPsiUtils.getArguments(testCaseCallExpression); if (arguments.length >= 1) { String testCaseName = JsPsiUtils.extractStringValue(arguments[0]); if (testCaseName != null) { JSObjectLiteralExpression testsObjectLiteral = null; if (arguments.length >= 2) { testsObjectLiteral = JsPsiUtils.extractObjectLiteralExpression(arguments[1]); } JstdTestCaseStructure testCaseStructure = new JstdTestCaseStructure( jsTestFileStructure, testCaseName, testCaseCallExpression, testsObjectLiteral); jsTestFileStructure.addTestCaseStructure(testCaseStructure); if (testsObjectLiteral != null) { fillTestCaseStructureByObjectLiteral(testCaseStructure, testsObjectLiteral); } return testCaseStructure; } } } } return null; }
@Override public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file) throws IncorrectOperationException { JSCallExpression jsCallExpression = SignalsUtils.getCallExpressionFromCaret(editor, file); JSArgumentList argumentList = jsCallExpression.getArgumentList(); PsiElement signal = SignalsUtils.getSignalFromCallExpression(jsCallExpression); JSArgumentList signalParams = SignalsUtils.getStringParametersFromSignalReference(signal.getReference()); String signalHandlerName = replaceParamsWithArgs(project, argumentList, signal); PsiElement psiElement = generateHandlerFromParams(project, (JSFile) file, signalHandlerName, signalParams); moveCursorInsideMethod(editor, psiElement); }
@Override public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { JSCallExpression jsCallExpression = PsiTreeUtil.getParentOfType(element, JSCallExpression.class); if (jsCallExpression == null) { return false; } JSExpression methodExpression = jsCallExpression.getMethodExpression(); if (methodExpression instanceof JSReferenceExpression) { String referencedName = ((JSReferenceExpression) methodExpression).getReferencedName(); return "add".equals(referencedName); } return false; }
@Override protected boolean isSuitableElement( @NotNull JSFile jsFile, @NotNull JSCallExpression callExpression) { JstdTestFileStructure structure = JstdTestFileStructureBuilder.getInstance().fetchCachedTestFileStructure(jsFile); String name = structure.getNameByPsiElement(callExpression.getMethodExpression()); return name != null; }