Skip to content

Commit 623252a

Browse files
committed
Add TestCase methods generators for test*(), setUp(), tearDown()
1 parent d839510 commit 623252a

File tree

5 files changed

+157
-0
lines changed

5 files changed

+157
-0
lines changed

resources/META-INF/plugin.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@
6464
<action id="TesterNewTestCase" class="cz.jiripudil.intellij.nette.tester.codeGeneration.TesterNewTestCaseAction"/>
6565
<add-to-group group-id="NewGroup" anchor="last"/>
6666
</group>
67+
68+
<group id="TesterGenerateGroup">
69+
<action id="TesterGenerateTestMethod" class="cz.jiripudil.intellij.nette.tester.codeGeneration.TesterGenerateTestMethodAction"/>
70+
<action id="TesterGenerateSetupMethod" class="cz.jiripudil.intellij.nette.tester.codeGeneration.TesterGenerateSetupMethodAction"/>
71+
<action id="TesterGenerateTeardownMethod" class="cz.jiripudil.intellij.nette.tester.codeGeneration.TesterGenerateTeardownMethodAction"/>
72+
<separator/>
73+
<add-to-group group-id="GenerateGroup" anchor="first"/>
74+
</group>
6775
</actions>
6876

6977
<application-components>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package cz.jiripudil.intellij.nette.tester.codeGeneration;
2+
3+
import com.intellij.codeInsight.CodeInsightActionHandler;
4+
import com.intellij.codeInsight.actions.CodeInsightAction;
5+
import com.intellij.openapi.editor.Editor;
6+
import com.intellij.openapi.project.Project;
7+
import com.intellij.openapi.util.TextRange;
8+
import com.intellij.psi.PsiDocumentManager;
9+
import com.intellij.psi.PsiElement;
10+
import com.intellij.psi.PsiFile;
11+
import com.jetbrains.php.lang.psi.PhpCodeEditUtil;
12+
import com.jetbrains.php.lang.psi.PhpPsiElementFactory;
13+
import com.jetbrains.php.lang.psi.elements.Method;
14+
import com.jetbrains.php.lang.psi.elements.PhpClass;
15+
import cz.jiripudil.intellij.nette.tester.TesterUtil;
16+
import org.jetbrains.annotations.NotNull;
17+
import org.jetbrains.annotations.Nullable;
18+
19+
abstract public class TesterAbstractGenerateMethodAction extends CodeInsightAction implements CodeInsightActionHandler {
20+
@NotNull
21+
@Override
22+
protected CodeInsightActionHandler getHandler() {
23+
return this;
24+
}
25+
26+
@Override
27+
protected boolean isValidForFile(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
28+
return findTestClass(editor, file) != null;
29+
}
30+
31+
@Nullable
32+
private static PhpClass findTestClass(@NotNull Editor editor, @NotNull PsiFile file) {
33+
PhpClass testClass = PhpCodeEditUtil.findClassAtCaret(editor, file);
34+
return testClass != null && TesterUtil.isTestClass(testClass) ? testClass : null;
35+
}
36+
37+
@Override
38+
public void invoke(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile psiFile) {
39+
PhpClass phpClass = findTestClass(editor, psiFile);
40+
Method method = PhpPsiElementFactory.createMethod(project, "public function testFoo(){}");
41+
42+
assert phpClass != null;
43+
44+
PsiElement element = PhpCodeEditUtil.insertClassMember(phpClass, method);
45+
PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(editor.getDocument());
46+
TextRange range = element.getTextRange();
47+
editor.getDocument().replaceString(range.getStartOffset(), range.getEndOffset(), "");
48+
editor.getCaretModel().moveToOffset(range.getStartOffset());
49+
insertMethod(project, editor);
50+
}
51+
52+
abstract protected void insertMethod(@NotNull Project project, @NotNull Editor editor);
53+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cz.jiripudil.intellij.nette.tester.codeGeneration;
2+
3+
import com.intellij.codeInsight.template.Template;
4+
import com.intellij.codeInsight.template.TemplateManager;
5+
import com.intellij.openapi.editor.Editor;
6+
import com.intellij.openapi.project.Project;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
public class TesterGenerateSetupMethodAction extends TesterAbstractGenerateMethodAction {
10+
public TesterGenerateSetupMethodAction() {
11+
getTemplatePresentation().setText("TestCase setUp() method");
12+
getTemplatePresentation().setDescription("Creates a Nette Tester setUp() method");
13+
}
14+
15+
@Override
16+
protected void insertMethod(@NotNull Project project, @NotNull Editor editor) {
17+
Template template = TemplateManager.getInstance(project).createTemplate("", "");
18+
template.addTextSegment("protected function setUp()\n{\n");
19+
template.addTextSegment("parent::setUp();\n");
20+
template.addEndVariable();
21+
template.addTextSegment("\n}");
22+
template.setToIndent(true);
23+
template.setToReformat(true);
24+
template.setToShortenLongNames(true);
25+
TemplateManager.getInstance(project).startTemplate(editor, template, null);
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cz.jiripudil.intellij.nette.tester.codeGeneration;
2+
3+
import com.intellij.codeInsight.template.Template;
4+
import com.intellij.codeInsight.template.TemplateManager;
5+
import com.intellij.openapi.editor.Editor;
6+
import com.intellij.openapi.project.Project;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
public class TesterGenerateTeardownMethodAction extends TesterAbstractGenerateMethodAction {
10+
public TesterGenerateTeardownMethodAction() {
11+
getTemplatePresentation().setText("TestCase tearDown() method");
12+
getTemplatePresentation().setDescription("Creates a Nette Tester tearDown() method");
13+
}
14+
15+
@Override
16+
protected void insertMethod(@NotNull Project project, @NotNull Editor editor) {
17+
Template template = TemplateManager.getInstance(project).createTemplate("", "");
18+
template.addTextSegment("protected function tearDown()\n{\n");
19+
template.addTextSegment("parent::tearDown();\n");
20+
template.addEndVariable();
21+
template.addTextSegment("\n}");
22+
template.setToIndent(true);
23+
template.setToReformat(true);
24+
template.setToShortenLongNames(true);
25+
TemplateManager.getInstance(project).startTemplate(editor, template, null);
26+
}
27+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package cz.jiripudil.intellij.nette.tester.codeGeneration;
2+
3+
import com.intellij.codeInsight.template.Expression;
4+
import com.intellij.codeInsight.template.Template;
5+
import com.intellij.codeInsight.template.TemplateManager;
6+
import com.intellij.codeInsight.template.impl.ConstantNode;
7+
import com.intellij.openapi.editor.Editor;
8+
import com.intellij.openapi.project.Project;
9+
import com.jetbrains.php.config.PhpLanguageFeature;
10+
import com.jetbrains.php.config.PhpLanguageLevel;
11+
import com.jetbrains.php.config.PhpProjectConfigurationFacade;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
public class TesterGenerateTestMethodAction extends TesterAbstractGenerateMethodAction {
15+
public TesterGenerateTestMethodAction() {
16+
getTemplatePresentation().setText("TestCase test method");
17+
getTemplatePresentation().setDescription("Creates a Nette Tester test method");
18+
}
19+
20+
@Override
21+
protected void insertMethod(@NotNull Project project, @NotNull Editor editor) {
22+
Template template = TemplateManager.getInstance(project).createTemplate("", "");
23+
template.addTextSegment("public function test");
24+
25+
Expression nameExpr = new ConstantNode("");
26+
template.addVariable("name", nameExpr, nameExpr, true);
27+
template.addTextSegment("()");
28+
29+
PhpLanguageLevel languageLevel = PhpProjectConfigurationFacade.getInstance(project).getLanguageLevel();
30+
if (languageLevel.hasFeature(PhpLanguageFeature.RETURN_VOID)) {
31+
template.addTextSegment(": void");
32+
}
33+
34+
template.addTextSegment("\n{\n");
35+
template.addEndVariable();
36+
template.addTextSegment("\n}");
37+
template.setToIndent(true);
38+
template.setToReformat(true);
39+
template.setToShortenLongNames(true);
40+
TemplateManager.getInstance(project).startTemplate(editor, template, null);
41+
}
42+
}

0 commit comments

Comments
 (0)