From 4fba284f3f62f86c8625732b7ca17ac6f6795beb Mon Sep 17 00:00:00 2001 From: mesour Date: Mon, 13 Jan 2020 15:39:44 +0100 Subject: [PATCH 1/5] Added run line markers --- .gitignore | 1 - intellij-nette-tester.iml | 17 +++ intellij-nette-tester.jar | Bin 0 -> 3121 bytes resources/META-INF/plugin.xml | 43 +++++-- resources/icons/run.png | Bin 0 -> 338 bytes resources/icons/runClass.png | Bin 0 -> 432 bytes resources/icons/runMethod.png | Bin 0 -> 1874 bytes resources/icons/testConfig.png | Bin 0 -> 1815 bytes resources/messages/TesterBundle.properties | 15 +++ .../intellij/nette/tester/TesterIcons.java | 14 +++ ...er.java => TesterPostStartupActivity.java} | 17 +-- .../nette/tester/TesterTestFinder.java | 2 +- .../intellij/nette/tester/TesterUtil.java | 109 ++++++++++++++++++ .../tester/action/BaseTesterRunAction.java | 48 ++++++++ .../TesterCreateMethodRunTestAction.java | 98 ++++++++++++++++ .../action/TesterCreateRunTestAction.java | 75 ++++++++++++ .../action/TesterMethodRunTestAction.java | 32 +++++ .../tester/action/TesterRunTestAction.java | 32 +++++ .../configuration/TesterRunConfiguration.java | 66 +++++------ .../TesterRunConfigurationType.java | 17 ++- .../tester/configuration/TesterSettings.java | 2 +- .../TesterTestMethodRunConfiguration.java | 22 +++- .../TesterTestMethodRunConfigurationType.java | 21 +++- .../TesterMethodRunLineMarkerProvider.java | 31 +++++ .../TesterRunLineMarkerProvider.java | 26 +++++ 25 files changed, 611 insertions(+), 77 deletions(-) create mode 100644 intellij-nette-tester.iml create mode 100644 intellij-nette-tester.jar create mode 100644 resources/icons/run.png create mode 100644 resources/icons/runClass.png create mode 100644 resources/icons/runMethod.png create mode 100644 resources/icons/testConfig.png create mode 100644 src/cz/jiripudil/intellij/nette/tester/TesterIcons.java rename src/cz/jiripudil/intellij/nette/tester/{TesterTestCreatorEnabler.java => TesterPostStartupActivity.java} (53%) create mode 100644 src/cz/jiripudil/intellij/nette/tester/action/BaseTesterRunAction.java create mode 100644 src/cz/jiripudil/intellij/nette/tester/action/TesterCreateMethodRunTestAction.java create mode 100644 src/cz/jiripudil/intellij/nette/tester/action/TesterCreateRunTestAction.java create mode 100644 src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java create mode 100644 src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java create mode 100644 src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java create mode 100644 src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java diff --git a/.gitignore b/.gitignore index 5f57e69..1395c2d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ .idea/ out/ -intellij-nette-tester.iml diff --git a/intellij-nette-tester.iml b/intellij-nette-tester.iml new file mode 100644 index 0000000..ec45609 --- /dev/null +++ b/intellij-nette-tester.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/intellij-nette-tester.jar b/intellij-nette-tester.jar new file mode 100644 index 0000000000000000000000000000000000000000..1d22fe6b02d094495f3939568294f42da981c98a GIT binary patch literal 3121 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 literal 0 HcmV?d00001 diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index e2a01b4..e005db7 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ cz.jiripudil.intellij.nette.tester Nette Tester - 2.0.0-beta.3 + 2.0.0-beta.4 Jiří Pudil messages.TesterBundle @@ -13,6 +13,13 @@ ]]> 2.0.0-beta.4 +
    +
  • Added support for run line markers
  • +
  • Fixed Compatibility with PHPStorm 2019.2 (#43)
  • +
  • Fixed bug java.lang.NullPointerException on phpstorm startup (#45)
  • +
+

2.0.0-beta.3

  • The Create Test dialog does not autoupdate the target namespace and directory if invoked from the directory context (#26)
  • @@ -70,7 +77,7 @@
]]>
- + com.intellij.modules.lang com.jetbrains.php @@ -78,13 +85,18 @@ + + + + + - - - + + + @@ -114,10 +141,4 @@ - - - - cz.jiripudil.intellij.nette.tester.TesterTestCreatorEnabler - -
diff --git a/resources/icons/run.png b/resources/icons/run.png new file mode 100644 index 0000000000000000000000000000000000000000..d1325ffece2018ca5871d87b32087af8e17ecc45 GIT binary patch literal 338 zcmV-Y0j>UtP)D`B8V{7Ysf=&*( zwFq{DhL(n)rM4tnGIEbvTtfeWpfw~?zlO4Sf$0^$>B70+?;K!SF%_HMs$|!Fdus5Y z$Vy-J9yXmlGskwx8~Bb8*hLp@<7_E73g&!)K^6e)cc7Y?!*FL3;49>^2rrBaZ;cDr z{DEI-8{kvM1t+GQU7P>_0BC{iaklqtoQ+J$XkQ?a)M|(5!^ zb)^mxQ2RsaA1 literal 0 HcmV?d00001 diff --git a/resources/icons/runClass.png b/resources/icons/runClass.png new file mode 100644 index 0000000000000000000000000000000000000000..99d0117fdfca9f49e70b3ef709316258dc9db1c9 GIT binary patch literal 432 zcmV;h0Z;ykP)h^;{l~9V}=yON@${ulz=oXaTb_U07F;~hO zo#?NcU>=f$b6eCIS2xsFy#fFL0ak*%R%7lZ-=5D<;R^!!Q83@wqvH+sKI>W|j8-(heM7Kinlom=}Ho8<~GubbrPzJSNVyiYRq~Wad)jX_)4jYF5 ahkgKlxOn8WqEPYx0000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+T~YSvg9ZX{O1&N1SBDrys&~_JmU*)Oy=ervp@)qjj0~^ zl39(tUz1n?gL=RmvB7N1Qc;v1u_Xu3V%1=(vnyXHw5iz_CW>WXW+*{t> zVXft(+{!`F%tBy_3MoiGOz1Il%=29OQEPs>@V}&J1ezT#wV~`%a!O7?j87fKVh#|J zJ=)ou=k%>LAN}xAO9QbmyE+oii3EYTM$Sx0*2!wTFX>&EC&`Cs`TTkLYDKCnriWrX zCjKr)BiPw7z@!Lj{((=94r$O1&wIiyEG_dkl(aU~HTBD@hns44r!Sxprk%>#P+`>Y zZ$oGvfXI7*lx^B?gmF;Uyo@Tv(=oiv*?F&>c;*M5pTcQgaXUll0b9IU+SB|t!{k3w zbZ^~KL22(a=J|!NU38%9X@TMIyYy*mzB_U5tz6JKzC&mJj6YEHXZ(3T`@i-lokbvC z%gq<5UKqRX{-@v)r#^QtGgUEp8`V(pQS5vatx(@ zkO6N~1Si*Xj<3GsN9A#G6{C(`^L((VD(_yQ{PNfr5})@+P-dBxd7XSjHLJmAx24a)q7^X+={ zJMI5P5k8@k`4=R;%w5_cHU0nq0fcEoLr_UWLm+T+Z)Rz1WdHzpoPCi!NW)MRg-=tZ zB9#tyDB_TzI$01Eanvdlp+cw?T6Hja=^r#{NK#xJ1=oUuKZ{id7iV1^Tm?b!2gJ$I zNzp}0ye}!Vi1CI;KF+)6@ZNoZ(5y1e>KO+#-8M6+q?pUEilJ8o5T-AJn9M9=PLk5_ zt*?9Prn*b;EdRbgYd|en3=Vs6x2~c6*dy|*GaLEq5Y(ff5`Pqo z3=9w&hz)mh0002(NklY305{xSWvel7IvoZ|#9bFvIz zU|?Wi`2Sz~A0xvt`-z@29i}?)kZu420|O%i0}~?yV;aLBu1k&+J)DX6!vFs~3=9mv zkc1TfGcfITnBX=fq{|nD$~FJ$@>eopCma9nEo*z75cz#w7OySFNPrj0Qv4j0Magz4*&oF M07*qoM6N<$f+a zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-_blH@21{O1&N1SA21*sm5TZSqYhL?`gNWLlnb+fHsE;X_ZmZ_@rChll0thwFyj;McxW z1fzN22^;Q0V%M7wOL9CJ58+LMfi3&n`(yl!eT?BHfTwhcpS^h|_i!9Qw`GM(oVK3) zMK7lre)5R;w9JnljdGg!5Wg{69HSqr%Pts%E9^zxma-&FEC{Ep&jN16<00$16YglU ztzfNTsm0iWP9jFc2RUk#X;5Enr3x1vcUH8_m1XIoC?~Fq05@+MtVWVFiQuV%If0r_ zUufA)(;kdPSZ;)wOaKGN&$qcM-o2lI#+YeNWaAkt_{B57;KpQbzA+1g(AY8cE52lo z#$K;Utbjqk!W^-{Y|8;rJl%6k7SCe6!Bl6D{X*I{073-Y9?p<}0UJm>1+vPlM2KSq zKN+60I4)p-yz$)NB|DJ-aw1RL_(o~XWzUBiZLkp=gOEm0XcN)m2|Z)f#K6xp9+*5@1?r+G0yBcj`!`?z-=xYmYtkJdkTc zh8uo_p(Bno^2yp}^_jIRbFW#W%^EMF<~+T#2DR!9f@V4KlQS^Jj=;E129VG^IkS9j)I!H|!m%c6B0vwm=uappo~=GW8LcjJowzYqmfGrDT0KC}6*$mMp*^ zHw%tldUksByOs`MoD}i%+6V!$tasL2J@h@e(W>h`uOS>MIx65AOJ6VPwj%r>kH~_; zs_!O|3(edDV{uMSJscEi<21{csz3Ua1`bGVS&yH>nMXz58COsqC0>L3x;3YQCFGqy zQMz>_<(*HB>u6dZ674pz+!GD|eu`;BU76ziut)mqc$){s5g(VVM%oAk`4#?XZ3coi z94c3EYM_xRw(ohCZa^DZr0y&p9#yJ-F9nQ!v1`9mSImdP@@8Ezf1bs!YqEK}lD+TI zU!eaG2nQ-uM)M2w(bf-v!aN=T00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIe)6opSy zr6Mg3b`WvMP@OD@6>-!m6rn<>6x!iXiAT+B?vw9`~O}EWVDkkfHmekAK+pOXO0>RRJT%0&378yMFLL_?@j)OiX%{!bza_ z#c@7HfzU3{YB4lwj&$foQ{ zK{`UQ2)v)sH|2rBTcCf<%dLHn(+40+S*34)gF|4fM6=g@-rd)o+rK^S{C)s@g>tJ* z9>mN5000JJOGiWi{{a60|De66lK=n!32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rf z0Sy2%G+We@+yDRo>#))%;fomqU6Gy&^W{uCWZr#)y!RLQgp}=VRtD@IRFlmbhn^2aHemDi3Lt zCB-YGQ5+gL9y%jZ`>$WQw0v=DI9rbh-K6d{KcryrY z68f{7*3}rmD9BwqN~fOTXY)@|#RijL*toDMikMXcHv+odALS;XD&T%Ih~RwatAj(A zBk0N@emh|+87(~MHn1i0-8TPo7%j2eUJ3FGy~YKRJ%a|Vxa&4002ovPDHLk FV1is3PXzz~ literal 0 HcmV?d00001 diff --git a/resources/messages/TesterBundle.properties b/resources/messages/TesterBundle.properties index 9dcc71e..f7a18b1 100644 --- a/resources/messages/TesterBundle.properties +++ b/resources/messages/TesterBundle.properties @@ -3,6 +3,9 @@ action.generateSetupMethod.name=TestCase setUp() method action.generateSetupMethod.description=Creates a TestCase setUp() method +action.runTestAction.name=Run +action.createRunTestAction.name=Create + action.generateTeardownMethod.name=TestCase tearDown() method action.generateTeardownMethod.description=Creates a TestCase tearDown() method @@ -59,6 +62,18 @@ runConfiguration.editor.cli.title=Command Line runConfiguration.editor.cli.interpreterOptions=Interpreter options: runConfiguration.editor.cli.workingDirectory=Custom working directory: +runConfiguration.mainConfiguration.missing.title=Run configuration 'tester' missing +runConfiguration.mainConfiguration.missing.description=To use line markers, you need create run configuration named 'tester' with interpreter. + +runConfiguration.mainConfiguration.invalid.title=Run configuration 'tester' is invalid +runConfiguration.mainConfiguration.invalid.description=To use line markers, you need valid run configuration named 'tester'. + +runConfiguration.mainConfiguration.alreadyCreated.title=Run configuration already created +runConfiguration.mainConfiguration.alreadyCreated.description=Run configuration already exists. It can not be created again. + +runConfiguration.mainConfiguration.created.title=Run configuration created +runConfiguration.mainConfiguration.created.description=Run configuration was successfully created. + # project settings diff --git a/src/cz/jiripudil/intellij/nette/tester/TesterIcons.java b/src/cz/jiripudil/intellij/nette/tester/TesterIcons.java new file mode 100644 index 0000000..96d4b20 --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/TesterIcons.java @@ -0,0 +1,14 @@ +package cz.jiripudil.intellij.nette.tester; + +import com.intellij.openapi.util.IconLoader; + +import javax.swing.*; + +public class TesterIcons { + /** file icon */ + public static final Icon RUN_CLASS = IconLoader.getIcon("/icons/runClass.png"); + public static final Icon RUN_METHOD = IconLoader.getIcon("/icons/runMethod.png"); + public static final Icon RUN = IconLoader.getIcon("/icons/run.png"); + public static final Icon TESTER_CONFIG = IconLoader.getIcon("/icons/testConfig.png"); + +} diff --git a/src/cz/jiripudil/intellij/nette/tester/TesterTestCreatorEnabler.java b/src/cz/jiripudil/intellij/nette/tester/TesterPostStartupActivity.java similarity index 53% rename from src/cz/jiripudil/intellij/nette/tester/TesterTestCreatorEnabler.java rename to src/cz/jiripudil/intellij/nette/tester/TesterPostStartupActivity.java index c345e84..6c70faf 100644 --- a/src/cz/jiripudil/intellij/nette/tester/TesterTestCreatorEnabler.java +++ b/src/cz/jiripudil/intellij/nette/tester/TesterPostStartupActivity.java @@ -1,24 +1,15 @@ package cz.jiripudil.intellij.nette.tester; -import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.startup.StartupActivity; import com.intellij.testIntegration.LanguageTestCreators; import com.jetbrains.php.lang.PhpLanguage; import cz.jiripudil.intellij.nette.tester.codeGeneration.TesterTestCreator; import org.jetbrains.annotations.NotNull; -public class TesterTestCreatorEnabler implements ApplicationComponent { +public class TesterPostStartupActivity implements StartupActivity { @Override - public void initComponent() { + public void runActivity(@NotNull Project project) { LanguageTestCreators.INSTANCE.addExplicitExtension(PhpLanguage.INSTANCE, TesterTestCreator.INSTANCE); } - - @Override - public void disposeComponent() { - } - - @NotNull - @Override - public String getComponentName() { - return this.getClass().getName(); - } } diff --git a/src/cz/jiripudil/intellij/nette/tester/TesterTestFinder.java b/src/cz/jiripudil/intellij/nette/tester/TesterTestFinder.java index 40d717b..79fa32a 100644 --- a/src/cz/jiripudil/intellij/nette/tester/TesterTestFinder.java +++ b/src/cz/jiripudil/intellij/nette/tester/TesterTestFinder.java @@ -79,7 +79,7 @@ public Collection findClassesForTest(@NotNull PsiElement psiElement) public boolean isTest(@NotNull PsiElement psiElement) { PsiFile containingFile = psiElement.getContainingFile(); return containingFile instanceof PhpPsiElement && ( - (containingFile.getVirtualFile().getExtension() != null && containingFile.getVirtualFile().getExtension().equals("phpt")) + (containingFile.getVirtualFile() != null && containingFile.getVirtualFile().getExtension() != null && containingFile.getVirtualFile().getExtension().equals("phpt")) || StringUtil.endsWith(containingFile.getName(), "Test") ); } diff --git a/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java b/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java index 4b72f24..ff27ec5 100644 --- a/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java +++ b/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java @@ -1,14 +1,35 @@ package cz.jiripudil.intellij.nette.tester; +import com.intellij.execution.RunManager; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; +import com.intellij.notification.Notifications; +import com.intellij.openapi.application.Application; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.jetbrains.php.PhpClassHierarchyUtils; import com.jetbrains.php.lang.PhpLangUtil; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; +import cz.jiripudil.intellij.nette.tester.configuration.TesterRunConfiguration; +import cz.jiripudil.intellij.nette.tester.configuration.TesterRunConfigurationType; +import cz.jiripudil.intellij.nette.tester.configuration.TesterTestMethodRunConfiguration; +import cz.jiripudil.intellij.nette.tester.configuration.TesterTestMethodRunConfigurationType; +import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; public class TesterUtil { + public static String NOTIFICATION_GROUP = "Nette tester"; + public static boolean isTestClass(@NotNull PhpClass phpClass) { if (phpClass.isAbstract() || phpClass.isInterface() || phpClass.isTrait()) { return false; @@ -33,4 +54,92 @@ && isTestClass(method.getContainingClass()) && StringUtil.startsWith(method.getName(), "test") && method.getModifier().isPublic(); } + + @Nullable + public static TesterRunConfiguration getMainConfiguration(@NotNull Project project) { + List configurations = TesterUtil.getRunConfigurations(project); + return getMainConfiguration(project, configurations); + } + + @Nullable + public static TesterRunConfiguration getMainConfiguration( + @NotNull Project project, + @NotNull List configurations + ) { + @Nullable TesterRunConfiguration mainConfiguration = configurations.stream() + .filter(configuration -> "tests".equals(configuration.getName())) + .findAny() + .orElse(null); + if (mainConfiguration == null) { + TesterUtil.doNotify( + TesterBundle.message("runConfiguration.mainConfiguration.missing.title"), + TesterBundle.message("runConfiguration.mainConfiguration.missing.description"), + NotificationType.ERROR, + project + ); + return null; + + } else { + try { + mainConfiguration.checkConfiguration(); + return mainConfiguration; + + } catch (RuntimeConfigurationException ex) { + TesterUtil.doNotify( + TesterBundle.message("runConfiguration.mainConfiguration.invalid.title"), + TesterBundle.message("runConfiguration.mainConfiguration.invalid.description"), + NotificationType.ERROR, + project + ); + } + return null; + } + } + + public static List getRunConfigurations(@NotNull Project project) { + List configurations = new ArrayList(); + List settings = RunManager.getInstance(project) + .getConfigurationSettingsList(TesterRunConfigurationType.class); + for (RunnerAndConfigurationSettings setting : settings) { + RunConfiguration configuration = setting.getConfiguration(); + if (configuration instanceof TesterRunConfiguration) { + configurations.add((TesterRunConfiguration) configuration); + } + } + return configurations; + } + + public static List getMethodRunConfigurations(@NotNull Project project) { + List configurations = new ArrayList(); + List settings = RunManager.getInstance(project) + .getConfigurationSettingsList(TesterTestMethodRunConfigurationType.class); + for (RunnerAndConfigurationSettings setting : settings) { + RunConfiguration configuration = setting.getConfiguration(); + if (configuration instanceof TesterTestMethodRunConfiguration) { + configurations.add((TesterTestMethodRunConfiguration) configuration); + } + } + return configurations; + } + + public static void doNotify( + @NotNull String title, + @NotNull @Nls(capitalization = Nls.Capitalization.Sentence) String content, + @NotNull NotificationType type, + @Nullable Project project + ) { + Notification notification = new Notification(NOTIFICATION_GROUP, title, content, NotificationType.ERROR); + doNotify(notification, project); + } + + public static void doNotify(Notification notification, @Nullable Project project) { + if (project != null && !project.isDisposed() && !project.isDefault()) { + ((Notifications)project.getMessageBus().syncPublisher(Notifications.TOPIC)).notify(notification); + } else { + Application app = ApplicationManager.getApplication(); + if (!app.isDisposed()) { + ((Notifications)app.getMessageBus().syncPublisher(Notifications.TOPIC)).notify(notification); + } + } + } } diff --git a/src/cz/jiripudil/intellij/nette/tester/action/BaseTesterRunAction.java b/src/cz/jiripudil/intellij/nette/tester/action/BaseTesterRunAction.java new file mode 100644 index 0000000..74221ef --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/action/BaseTesterRunAction.java @@ -0,0 +1,48 @@ +package cz.jiripudil.intellij.nette.tester.action; + +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.ide.actions.runAnything.RunAnythingAction; +import com.intellij.notification.NotificationType; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.Project; +import cz.jiripudil.intellij.nette.tester.TesterBundle; +import cz.jiripudil.intellij.nette.tester.TesterUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +abstract public class BaseTesterRunAction extends RunAnythingAction { + + protected Project project; + protected boolean wasCreated = false; + + BaseTesterRunAction(@NotNull Project project) { + this.project = project; + } + + @Nullable + abstract protected RunnerAndConfigurationSettings prepareAction(); + + protected boolean isTemporary() { + return false; + } + + protected Project getProject() { + return project; + } + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + prepareAction(); + + String title; + String description; + if (!wasCreated) { + title = TesterBundle.message("runConfiguration.mainConfiguration.alreadyCreated.title"); + description = TesterBundle.message("runConfiguration.mainConfiguration.alreadyCreated.description"); + } else { + title = TesterBundle.message("runConfiguration.mainConfiguration.created.title"); + description = TesterBundle.message("runConfiguration.mainConfiguration.created.description"); + } + TesterUtil.doNotify(title, description, NotificationType.INFORMATION, project); + } +} diff --git a/src/cz/jiripudil/intellij/nette/tester/action/TesterCreateMethodRunTestAction.java b/src/cz/jiripudil/intellij/nette/tester/action/TesterCreateMethodRunTestAction.java new file mode 100644 index 0000000..8d938af --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/action/TesterCreateMethodRunTestAction.java @@ -0,0 +1,98 @@ +package cz.jiripudil.intellij.nette.tester.action; + +import com.intellij.execution.RunManager; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.psi.PsiElement; +import cz.jiripudil.intellij.nette.tester.TesterBundle; +import cz.jiripudil.intellij.nette.tester.TesterIcons; +import cz.jiripudil.intellij.nette.tester.TesterUtil; +import cz.jiripudil.intellij.nette.tester.configuration.TesterRunConfiguration; +import cz.jiripudil.intellij.nette.tester.configuration.TesterTestMethodRunConfiguration; +import cz.jiripudil.intellij.nette.tester.configuration.TesterTestMethodRunConfigurationType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.stream.Collectors; + +public class TesterCreateMethodRunTestAction extends BaseTesterRunAction { + private final String path; + private final String methodName; + private final String testName; + + public TesterCreateMethodRunTestAction(@NotNull PsiElement element, @NotNull String testName, @NotNull String testMethod) { + super(element.getProject()); + + this.path = element.getContainingFile().getVirtualFile().getPath(); + this.testName = testName; + this.methodName = testMethod; + + getTemplatePresentation().setText(TesterBundle.message("action.createRunTestAction.name") + " '" + testMethod + "()'..."); + getTemplatePresentation().setIcon(TesterIcons.TESTER_CONFIG); + } + + @Nullable + protected RunnerAndConfigurationSettings prepareAction() { + wasCreated = false; + List configurations = TesterUtil.getMethodRunConfigurations(project); + List samePath = configurations.stream() + .filter(configuration -> { + if (configuration.getMethod() == null) { + return false; + } + + try { + configuration.checkConfiguration(); + + } catch (RuntimeConfigurationException ex) { + return false; + } + return path.equals(configuration.getSettings().getPath()) + && configuration.getMethod().startsWith(methodName); + }) + .collect(Collectors.toList()); + + RunManager manager = RunManager.getInstance(project); + if (samePath.size() == 0) { + TesterRunConfiguration mainConfiguration = TesterUtil.getMainConfiguration(project); + if (mainConfiguration == null) { + return null; + } + + ConfigurationFactory factory = TesterTestMethodRunConfigurationType.createFactory(); + TesterTestMethodRunConfiguration current = new TesterTestMethodRunConfiguration( + project, + factory, + getConfigurationName() + ); + current.getSettings().setPath(path); + current.setMethodName(methodName); + + //todo: get more information from mainConfiguration and save to method configuration + current.getSettings().setCommandLineSettings(mainConfiguration.getSettings().getPhpCommandLineSettings()); + + RunnerAndConfigurationSettings action = manager.createConfiguration(current, factory); + action.setTemporary(isTemporary()); + + manager.addConfiguration(action); + manager.setSelectedConfiguration(action); + wasCreated = true; + return action; + + } else { + TesterTestMethodRunConfiguration existing = samePath.get(0); + if (existing.getFactory() == null) { + return null; + } + RunnerAndConfigurationSettings action = manager.createConfiguration(existing, existing.getFactory()); + manager.setSelectedConfiguration(action); + return action; + } + } + + private String getConfigurationName() { + return "tests:" + testName + ":" + TesterTestMethodRunConfiguration.createSuggestedName(methodName).trim(); + } +} diff --git a/src/cz/jiripudil/intellij/nette/tester/action/TesterCreateRunTestAction.java b/src/cz/jiripudil/intellij/nette/tester/action/TesterCreateRunTestAction.java new file mode 100644 index 0000000..d21de40 --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/action/TesterCreateRunTestAction.java @@ -0,0 +1,75 @@ +package cz.jiripudil.intellij.nette.tester.action; + +import com.intellij.execution.RunManager; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.psi.PsiElement; +import cz.jiripudil.intellij.nette.tester.TesterBundle; +import cz.jiripudil.intellij.nette.tester.TesterIcons; +import cz.jiripudil.intellij.nette.tester.TesterUtil; +import cz.jiripudil.intellij.nette.tester.configuration.TesterRunConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.stream.Collectors; + +public class TesterCreateRunTestAction extends BaseTesterRunAction { + private final String path; + private final String testName; + + public TesterCreateRunTestAction(@NotNull PsiElement element, @NotNull String testName) { + super(element.getProject()); + this.path = element.getContainingFile().getVirtualFile().getPath(); + this.testName = testName; + + getTemplatePresentation().setText(TesterBundle.message("action.createRunTestAction.name") + " '" + testName + "'..."); + getTemplatePresentation().setIcon(TesterIcons.TESTER_CONFIG); + } + + @Nullable + protected RunnerAndConfigurationSettings prepareAction() { + wasCreated = false; + List configurations = TesterUtil.getRunConfigurations(getProject()); + List samePath = configurations.stream() + .filter(configuration -> { + try { + configuration.checkConfiguration(); + + } catch (RuntimeConfigurationException ex) { + return false; + } + return path.equals(configuration.getSettings().getTestScope()); + }) + .collect(Collectors.toList()); + + RunManager manager = RunManager.getInstance(getProject()); + if (samePath.size() == 0) { + TesterRunConfiguration mainConfiguration = TesterUtil.getMainConfiguration(getProject(), configurations); + if (mainConfiguration == null || mainConfiguration.getFactory() == null) { + return null; + } + + TesterRunConfiguration current = (TesterRunConfiguration) mainConfiguration.clone(); + current.setName("tests:" + testName); + current.getSettings().setTestScope(path); + RunnerAndConfigurationSettings action = manager.createConfiguration(current, mainConfiguration.getFactory()); + action.setTemporary(isTemporary()); + + manager.addConfiguration(action); + manager.setSelectedConfiguration(action); + wasCreated = true; + return action; + + } else { + TesterRunConfiguration existing = samePath.get(0); + if (existing.getFactory() == null) { + return null; + } + + RunnerAndConfigurationSettings action = manager.createConfiguration(existing, existing.getFactory()); + manager.setSelectedConfiguration(action); + return action; + } + } +} diff --git a/src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java b/src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java new file mode 100644 index 0000000..1251427 --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java @@ -0,0 +1,32 @@ +package cz.jiripudil.intellij.nette.tester.action; + +import com.intellij.execution.ProgramRunnerUtil; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.executors.DefaultRunExecutor; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.psi.PsiElement; +import cz.jiripudil.intellij.nette.tester.TesterBundle; +import cz.jiripudil.intellij.nette.tester.TesterIcons; +import org.jetbrains.annotations.NotNull; + +public class TesterMethodRunTestAction extends TesterCreateMethodRunTestAction { + + public TesterMethodRunTestAction(@NotNull PsiElement element, @NotNull String testName, @NotNull String testMethod) { + super(element, testName, testMethod); + + getTemplatePresentation().setText(TesterBundle.message("action.runTestAction.name") + " '" + testMethod + "()'");getTemplatePresentation().setIcon(TesterIcons.TESTER_CONFIG); + getTemplatePresentation().setIcon(TesterIcons.RUN); + } + + protected boolean isTemporary() { + return true; + } + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + RunnerAndConfigurationSettings forRun = prepareAction(); + if (forRun != null) { + ProgramRunnerUtil.executeConfiguration(forRun, DefaultRunExecutor.getRunExecutorInstance()); + } + } +} diff --git a/src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java b/src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java new file mode 100644 index 0000000..6ec0ed6 --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java @@ -0,0 +1,32 @@ +package cz.jiripudil.intellij.nette.tester.action; + +import com.intellij.execution.ProgramRunnerUtil; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.executors.DefaultRunExecutor; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.psi.PsiElement; +import cz.jiripudil.intellij.nette.tester.TesterBundle; +import cz.jiripudil.intellij.nette.tester.TesterIcons; +import org.jetbrains.annotations.NotNull; + +public class TesterRunTestAction extends TesterCreateRunTestAction { + + public TesterRunTestAction(@NotNull PsiElement element, @NotNull String testName) { + super(element, testName); + + getTemplatePresentation().setText(TesterBundle.message("action.runTestAction.name") + " '" + testName + "'");getTemplatePresentation().setIcon(TesterIcons.TESTER_CONFIG); + getTemplatePresentation().setIcon(TesterIcons.RUN); + } + + protected boolean isTemporary() { + return true; + } + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + RunnerAndConfigurationSettings forRun = prepareAction(); + if (forRun != null) { + ProgramRunnerUtil.executeConfiguration(forRun, DefaultRunExecutor.getRunExecutorInstance()); + } + } +} diff --git a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java index fbe7716..39c5424 100644 --- a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java +++ b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java @@ -54,49 +54,49 @@ public SettingsEditor getConfigurationEditor() { @Override public void checkConfiguration() throws RuntimeConfigurationException { - PhpInterpreter interpreter = PhpProjectConfigurationFacade.getInstance(getProject()).getInterpreter(); + TesterSettings settings = getSettings(); + PhpInterpreter interpreter = settings.getPhpInterpreter(getProject()); if (interpreter == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.phpInterpreterNotSet")); - - } else if (interpreter.getPathToPhpExecutable() == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.phpExecutableNotFound")); + interpreter = PhpProjectConfigurationFacade.getInstance(getProject()).getInterpreter(); + if (interpreter == null) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.phpInterpreterNotSet")); - } else { - TesterSettings settings = getSettings(); - VirtualFile scopeDirectory = PhpRunUtil.findDirectory(settings.getTestScope()); - VirtualFile scopeFile = PhpRunUtil.findFile(settings.getTestScope()); - if (StringUtil.isEmpty(settings.getTestScope())) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.noTestScope")); - - } else if (scopeDirectory == null && scopeFile == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.testScopeNotFound")); + } else if (interpreter.getPathToPhpExecutable() == null) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.phpExecutableNotFound")); } + } - PhpInterpreter phpInterpreter = settings.getPhpInterpreter(getProject()); - if (phpInterpreter == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.testEnvInterpreterNotFound")); + //TesterSettings settings = getSettings(); + VirtualFile scopeDirectory = PhpRunUtil.findDirectory(settings.getTestScope()); + VirtualFile scopeFile = PhpRunUtil.findFile(settings.getTestScope()); + if (StringUtil.isEmpty(settings.getTestScope())) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.noTestScope")); - } else if (phpInterpreter.getPathToPhpExecutable() == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.testEnvExecutableNotFound")); - } + } else if (scopeDirectory == null && scopeFile == null) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.testScopeNotFound")); + } - if (StringUtil.isEmpty(settings.getTesterExecutable())) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.noExecutable")); + //PhpInterpreter phpInterpreter = settings.getPhpInterpreter(getProject()); + if (interpreter.getPathToPhpExecutable() == null) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.testEnvExecutableNotFound")); + } - } else if (PhpRunUtil.findFile(settings.getTesterExecutable()) == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.executableNotFound")); - } + if (StringUtil.isEmpty(settings.getTesterExecutable())) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.noExecutable")); - if (!settings.getUseSystemPhpIni() && StringUtil.isNotEmpty(settings.getPhpIniPath()) && PhpRunUtil.findFile(settings.getPhpIniPath()) == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.phpIniNotFound")); - } + } else if (PhpRunUtil.findFile(settings.getTesterExecutable()) == null) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.executableNotFound")); + } - if (StringUtil.isNotEmpty(settings.getSetupScriptPath()) && PhpRunUtil.findFile(settings.getSetupScriptPath()) == null) { - throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.setupScriptNotFound")); - } + if (!settings.getUseSystemPhpIni() && StringUtil.isNotEmpty(settings.getPhpIniPath()) && PhpRunUtil.findFile(settings.getPhpIniPath()) == null) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.phpIniNotFound")); + } - PhpRunUtil.checkCommandLineSettings(getProject(), settings.getPhpCommandLineSettings()); + if (StringUtil.isNotEmpty(settings.getSetupScriptPath()) && PhpRunUtil.findFile(settings.getSetupScriptPath()) == null) { + throw new RuntimeConfigurationError(TesterBundle.message("runConfiguration.errors.setupScriptNotFound")); } + + PhpRunUtil.checkCommandLineSettings(getProject(), settings.getPhpCommandLineSettings()); } @Nullable @@ -192,7 +192,7 @@ public void readExternal(Element element) throws InvalidDataException { } @Override - public void writeExternal(Element element) throws WriteExternalException { + public void writeExternal(@NotNull Element element) throws WriteExternalException { if (!isNewSerializationUsed() && isGeneratedName()) { element.setAttribute("isGeneratedName", "true"); } diff --git a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfigurationType.java b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfigurationType.java index 58de067..f8ce666 100644 --- a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfigurationType.java +++ b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfigurationType.java @@ -1,5 +1,6 @@ package cz.jiripudil.intellij.nette.tester.configuration; +import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationTypeBase; import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.configurations.RunConfiguration; @@ -12,7 +13,15 @@ public class TesterRunConfigurationType extends ConfigurationTypeBase { protected TesterRunConfigurationType() { super("nette-tester", TesterBundle.message("configurationType.displayName"), TesterBundle.message("configurationType.description"), PhpIcons.PHP_TEST_FILE); - this.addFactory(new PhpRunConfigurationFactoryBase(this) { + this.addFactory(createFactory(this)); + } + + static TesterRunConfigurationType getInstance() { + return ConfigurationTypeUtil.findConfigurationType(TesterRunConfigurationType.class); + } + + public static ConfigurationFactory createFactory(TesterRunConfigurationType type) { + return new PhpRunConfigurationFactoryBase(type) { @NotNull @Override public RunConfiguration createTemplateConfiguration(@NotNull Project project) { @@ -23,10 +32,6 @@ public RunConfiguration createTemplateConfiguration(@NotNull Project project) { public String getName() { return TesterBundle.message("configurationType.displayName"); } - }); - } - - static TesterRunConfigurationType getInstance() { - return ConfigurationTypeUtil.findConfigurationType(TesterRunConfigurationType.class); + }; } } diff --git a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterSettings.java b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterSettings.java index a0af135..d80f2ab 100644 --- a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterSettings.java +++ b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterSettings.java @@ -130,7 +130,7 @@ public String getWorkingDirectory() { } @Override - public void setWorkingDirectory(@NotNull String workingDirectory) { + public void setWorkingDirectory(@Nullable String workingDirectory) { phpCommandLineSettings.setWorkingDirectory(workingDirectory); } diff --git a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfiguration.java b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfiguration.java index 2e3133b..54532b5 100644 --- a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfiguration.java +++ b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfiguration.java @@ -11,7 +11,7 @@ import javax.swing.*; public class TesterTestMethodRunConfiguration extends PhpScriptRunConfiguration { - TesterTestMethodRunConfiguration(Project project, ConfigurationFactory factory, String name) { + public TesterTestMethodRunConfiguration(Project project, ConfigurationFactory factory, String name) { super(project, factory, name); } @@ -22,12 +22,19 @@ public Icon getIcon() { @Override public String suggestedName() { - String method = parseMethod(); - return super.suggestedName() + (method != null ? " " + parseMethod() + "()" : ""); + return super.suggestedName() + createSuggestedName(parseMethod()); + } + + public static String createSuggestedName(@Nullable String methodName) { + return methodName != null ? " " + methodName + "()" : ""; } void setMethod(@NotNull Method method) { - getSettings().setScriptParameters(method.getName()); + setMethodName(method.getName()); + } + + public void setMethodName(@NotNull String methodName) { + getSettings().setScriptParameters(methodName); } boolean isMethod(@NotNull Method method) { @@ -35,7 +42,12 @@ boolean isMethod(@NotNull Method method) { } @Nullable - private String parseMethod() { + public String getMethod() { + return parseMethod(); + } + + @Nullable + public String parseMethod() { return getSettings().getScriptParameters(); } } diff --git a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfigurationType.java b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfigurationType.java index 10d86a2..4b89fca 100644 --- a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfigurationType.java +++ b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterTestMethodRunConfigurationType.java @@ -1,5 +1,6 @@ package cz.jiripudil.intellij.nette.tester.configuration; +import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationTypeBase; import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.configurations.RunConfiguration; @@ -12,16 +13,24 @@ public class TesterTestMethodRunConfigurationType extends ConfigurationTypeBase { protected TesterTestMethodRunConfigurationType() { super("nette-tester-method", TesterBundle.message("configurationType.method.displayName"), TesterBundle.message("configurationType.method.description"), PhpIcons.PHP_TEST_METHOD); - this.addFactory(new PhpRunConfigurationFactoryBase(this) { + this.addFactory(createFactory(this)); + } + + static TesterTestMethodRunConfigurationType getInstance() { + return ConfigurationTypeUtil.findConfigurationType(TesterTestMethodRunConfigurationType.class); + } + + public static ConfigurationFactory createFactory() { + return createFactory(getInstance()); + } + + public static ConfigurationFactory createFactory(TesterTestMethodRunConfigurationType type) { + return new PhpRunConfigurationFactoryBase(type) { @NotNull @Override public RunConfiguration createTemplateConfiguration(@NotNull Project project) { return new TesterTestMethodRunConfiguration(project, this, ""); } - }); - } - - static TesterTestMethodRunConfigurationType getInstance() { - return ConfigurationTypeUtil.findConfigurationType(TesterTestMethodRunConfigurationType.class); + }; } } diff --git a/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java new file mode 100644 index 0000000..0144a0c --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java @@ -0,0 +1,31 @@ +package cz.jiripudil.intellij.nette.tester.lineMarker; + +import com.intellij.execution.lineMarker.RunLineMarkerContributor; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.psi.PsiElement; +import com.jetbrains.php.lang.psi.elements.Method; +import com.jetbrains.php.lang.psi.elements.PhpClass; +import cz.jiripudil.intellij.nette.tester.TesterIcons; +import cz.jiripudil.intellij.nette.tester.action.TesterCreateMethodRunTestAction; +import cz.jiripudil.intellij.nette.tester.action.TesterMethodRunTestAction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class TesterMethodRunLineMarkerProvider extends RunLineMarkerContributor { + @Override + public @Nullable Info getInfo(@NotNull PsiElement psiElement) { + if (psiElement instanceof Method) { + PhpClass phpClass = ((Method) psiElement).getContainingClass(); + String className = phpClass != null ? phpClass.getName() : "null"; + String methodName = ((Method) psiElement).getName(); + + AnAction[] actions = new AnAction[2]; + actions[0] = new TesterMethodRunTestAction(psiElement, className, methodName); + actions[1] = new TesterCreateMethodRunTestAction(psiElement, className, methodName); + + return new Info(TesterIcons.RUN_METHOD, actions, RunLineMarkerContributor.RUN_TEST_TOOLTIP_PROVIDER); + } + return null; + } + +} \ No newline at end of file diff --git a/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java new file mode 100644 index 0000000..4cbe69b --- /dev/null +++ b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java @@ -0,0 +1,26 @@ +package cz.jiripudil.intellij.nette.tester.lineMarker; + +import com.intellij.execution.lineMarker.RunLineMarkerContributor; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.psi.PsiElement; +import com.jetbrains.php.lang.psi.elements.PhpClass; +import cz.jiripudil.intellij.nette.tester.TesterIcons; +import cz.jiripudil.intellij.nette.tester.action.TesterCreateRunTestAction; +import cz.jiripudil.intellij.nette.tester.action.TesterRunTestAction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class TesterRunLineMarkerProvider extends RunLineMarkerContributor { + @Override + public @Nullable Info getInfo(@NotNull PsiElement psiElement) { + if (psiElement instanceof PhpClass) { + AnAction[] actions = new AnAction[2]; + actions[0] = new TesterRunTestAction(psiElement, ((PhpClass) psiElement).getName()); + actions[1] = new TesterCreateRunTestAction(psiElement, ((PhpClass) psiElement).getName()); + + return new Info(TesterIcons.RUN_CLASS, actions, RunLineMarkerContributor.RUN_TEST_TOOLTIP_PROVIDER); + } + return null; + } + +} \ No newline at end of file From a9c2d71fb144895d57b815478226b9d234425f11 Mon Sep 17 00:00:00 2001 From: mesour Date: Wed, 19 Feb 2020 03:26:56 +0100 Subject: [PATCH 2/5] Added support for run configuration in Docker and support for Nette Tester 2.0 (#31, #42) --- intellij-nette-tester.iml | 2 +- intellij-nette-tester.jar | Bin 3121 -> 173313 bytes resources/META-INF/plugin.xml | 14 +- resources/messages/TesterBundle.properties | 1 + resources/setup2-0.php | 122 ++++++++++++++++++ .../intellij/nette/tester/TesterUtil.java | 6 + .../action/TesterMethodRunTestAction.java | 2 +- .../tester/action/TesterRunTestAction.java | 2 +- .../codeGeneration/TesterNamespaceMapper.java | 4 +- .../TesterNewTestCaseDialog.java | 6 +- .../configuration/TesterRunConfiguration.java | 32 ++++- .../tester/execution/TesterExecutionUtil.java | 24 +++- .../TesterMethodRunLineMarkerProvider.java | 28 ++-- .../TesterRunLineMarkerProvider.java | 20 ++- .../TesterProjectSettings.java | 18 ++- .../editor/TesterConfigurableForm.form | 24 +++- .../editor/TesterConfigurableForm.java | 16 ++- 17 files changed, 272 insertions(+), 49 deletions(-) create mode 100644 resources/setup2-0.php diff --git a/intellij-nette-tester.iml b/intellij-nette-tester.iml index ec45609..9c04367 100644 --- a/intellij-nette-tester.iml +++ b/intellij-nette-tester.iml @@ -6,7 +6,7 @@ - + diff --git a/intellij-nette-tester.jar b/intellij-nette-tester.jar index 1d22fe6b02d094495f3939568294f42da981c98a..869418ac5db184b3fb34b66cebcd4f7795c96f83 100644 GIT binary patch literal 173313 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 `8WHbnK!l0x@Yf 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

    +o0Nlw5k}jrNMAUa-`ZK(TCn(hc`G&imNneq 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 diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index e005db7..e3f845b 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ cz.jiripudil.intellij.nette.tester Nette Tester - 2.0.0-beta.4 + 2.1.0 Jiří Pudil messages.TesterBundle @@ -13,9 +13,11 @@ ]]> 2.0.0-beta.4 +

    2.1.0

    @@ -85,14 +87,15 @@ - - + + + @@ -105,6 +108,7 @@ id="cz.jiripudil.intellij.nette.tester.projectSettings.TesterConfigurable" parentId="reference.webide.settings.project.settings.php" groupWeight="25" + nonDefaultProject="true" /> file = \fopen($output, 'w'); + } + + + public function begin(): void + { + // \fwrite($this->file, $this->message('testCount', array('count' => 0))); + } + + function prepare(\Tester\Runner\Test $test): void + { + // TODO: Implement prepare() method. + } + + function finish(\Tester\Runner\Test $test): void + { + $testName = $test->title ?: $test->getFile(); + $result = $test->getResult(); + $message = $test->message; + + $flowId = \md5($testName); + \fwrite($this->file, $this->message('testStarted', array('name' => $testName, 'flowId' => $flowId))); + + if ($result === \Tester\Runner\Test::SKIPPED) { // Runner::SKIPPED, Test::SKIPPED + \fwrite($this->file, $this->message('testIgnored', array('name' => $testName, 'flowId' => $flowId, 'message' => 'Test skipped', 'details' => $message))); + + } elseif ($result === \Tester\Runner\Test::FAILED) { // Runner::FAILED, Test::FAILED + $extraArguments = array(); + if (\preg_match("/^diff \"(.*)\" \"(.*)\"$/m", $message, $matches)) { // Windows build + $expectedFile = \str_replace('""', '"', $matches[1]); + $actualFile = \str_replace('""', '"', $matches[2]); + $extraArguments = array('type' => 'comparisonFailure', 'expectedFile' => $expectedFile, 'actualFile' => $actualFile); + + } elseif (\preg_match("/^diff '?(.*)'? '?(.*)'?$/m", $message, $matches)) { + $expectedFile = \trim($matches[1], "'"); + $actualFile = \trim($matches[2], "'"); + $extraArguments = array('type' => 'comparisonFailure', 'expectedFile' => $expectedFile, 'actualFile' => $actualFile); + + } elseif (\preg_match("/Failed: (.*) should be( equal to)?\s+\.*\s*(.*) in/is", $message, $matches)) { + $expected = $matches[3]; + $actual = $matches[1]; + $extraArguments = array('type' => 'comparisonFailure', 'expected' => $expected, 'actual' => $actual); + } + + $args = \array_merge(array( + 'name' => $testName, + 'flowId' => $flowId, + 'message' => 'Test failed', + 'details' => $message, + ), $extraArguments); + + \fwrite($this->file, $this->message('testFailed', $args)); + } + + \fwrite($this->file, $this->message('testFinished', array('name' => $testName, 'flowId' => $flowId))); + } + + + public function end(): void + { + } + + + private function message($messageName, $args): string + { + $argsPairs = array(); + foreach ($args as $arg => $value) { + $argsPairs[] = \sprintf("%s='%s'", $arg, $this->escape($value)); + } + + return \sprintf( + "##teamcity[%s %s]\n\n", + $messageName, + \implode(' ', $argsPairs) + ); + } + + + private function escape($value): string + { + $replace = array( + "|" => "||", + "'" => "|'", + "\n" => "|n", + "\r" => "|r", + "]" => "|]", + "[" => "|[", + ); + + return \strtr($value, $replace); + } + +} + + +/** @var Runner $runner */ +// replace registered output handlers with TC +$runner->outputHandlers = array(); +$runner->outputHandlers[] = new TeamCityOutputHandler(); \ No newline at end of file diff --git a/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java b/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java index ff27ec5..15f4d76 100644 --- a/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java +++ b/src/cz/jiripudil/intellij/nette/tester/TesterUtil.java @@ -20,6 +20,8 @@ import cz.jiripudil.intellij.nette.tester.configuration.TesterRunConfigurationType; import cz.jiripudil.intellij.nette.tester.configuration.TesterTestMethodRunConfiguration; import cz.jiripudil.intellij.nette.tester.configuration.TesterTestMethodRunConfigurationType; +import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettings; +import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettingsManager; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,6 +50,10 @@ public static boolean isTestClass(@NotNull PhpClass phpClass) { return isTestCase.get(); } + public static TesterProjectSettings getTesterSettings(@NotNull Project project) { + return TesterProjectSettingsManager.getInstance(project).getState(); + } + public static boolean isTestMethod(@NotNull Method method) { return method.getContainingClass() != null && isTestClass(method.getContainingClass()) diff --git a/src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java b/src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java index 1251427..fb241d8 100644 --- a/src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java +++ b/src/cz/jiripudil/intellij/nette/tester/action/TesterMethodRunTestAction.java @@ -14,7 +14,7 @@ public class TesterMethodRunTestAction extends TesterCreateMethodRunTestAction { public TesterMethodRunTestAction(@NotNull PsiElement element, @NotNull String testName, @NotNull String testMethod) { super(element, testName, testMethod); - getTemplatePresentation().setText(TesterBundle.message("action.runTestAction.name") + " '" + testMethod + "()'");getTemplatePresentation().setIcon(TesterIcons.TESTER_CONFIG); + getTemplatePresentation().setText(TesterBundle.message("action.runTestAction.name") + " '" + testMethod + "()'"); getTemplatePresentation().setIcon(TesterIcons.RUN); } diff --git a/src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java b/src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java index 6ec0ed6..a744d1b 100644 --- a/src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java +++ b/src/cz/jiripudil/intellij/nette/tester/action/TesterRunTestAction.java @@ -14,7 +14,7 @@ public class TesterRunTestAction extends TesterCreateRunTestAction { public TesterRunTestAction(@NotNull PsiElement element, @NotNull String testName) { super(element, testName); - getTemplatePresentation().setText(TesterBundle.message("action.runTestAction.name") + " '" + testName + "'");getTemplatePresentation().setIcon(TesterIcons.TESTER_CONFIG); + getTemplatePresentation().setText(TesterBundle.message("action.runTestAction.name") + " '" + testName + "'"); getTemplatePresentation().setIcon(TesterIcons.RUN); } diff --git a/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNamespaceMapper.java b/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNamespaceMapper.java index 362f4ca..0674fd9 100644 --- a/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNamespaceMapper.java +++ b/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNamespaceMapper.java @@ -3,9 +3,9 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.jetbrains.php.lang.psi.elements.PhpClass; +import cz.jiripudil.intellij.nette.tester.TesterUtil; import cz.jiripudil.intellij.nette.tester.projectSettings.TesterNamespaceMapping; import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettings; -import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettingsManager; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -23,7 +23,7 @@ public static TesterNamespaceMapper getInstance(@NotNull final Project project) @NotNull String mapSourceNamespaceToTestNamespace(@NotNull PhpClass sourceClass) { - TesterProjectSettings settings = TesterProjectSettingsManager.getInstance(project).getState(); + TesterProjectSettings settings = TesterUtil.getTesterSettings(project); String namespaceName = trimNamespaceSeparators(sourceClass.getNamespaceName()); if (settings == null) { return namespaceName; diff --git a/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNewTestCaseDialog.java b/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNewTestCaseDialog.java index 5ed09d1..b3f7368 100644 --- a/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNewTestCaseDialog.java +++ b/src/cz/jiripudil/intellij/nette/tester/codeGeneration/TesterNewTestCaseDialog.java @@ -24,8 +24,8 @@ import com.jetbrains.php.roots.ui.PhpPsrDirectoryComboBox; import com.jetbrains.php.ui.PhpUiUtil; import cz.jiripudil.intellij.nette.tester.TesterBundle; +import cz.jiripudil.intellij.nette.tester.TesterUtil; import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettings; -import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettingsManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -133,7 +133,7 @@ public String getTemplateName() { @NotNull @Override protected String getExtension() { - TesterProjectSettings settings = TesterProjectSettingsManager.getInstance(getProject()).getState(); + TesterProjectSettings settings = TesterUtil.getTesterSettings(getProject()); return settings != null ? settings.getDefaultExtension() : "phpt"; } @@ -154,7 +154,7 @@ public Properties getProperties(@NotNull PsiDirectory directory) { } // bootstrap - TesterProjectSettings settings = TesterProjectSettingsManager.getInstance(getProject()).getState(); + TesterProjectSettings settings = TesterUtil.getTesterSettings(getProject()); if (settings != null && settings.getBootstrapFile() != null) { VirtualFile bootstrapFile = LocalFileSystem.getInstance().findFileByPath(settings.getBootstrapFile()); if (bootstrapFile != null && getDirectory() != null) { diff --git a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java index 39c5424..5c62925 100644 --- a/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java +++ b/src/cz/jiripudil/intellij/nette/tester/configuration/TesterRunConfiguration.java @@ -19,9 +19,11 @@ import com.intellij.util.PathUtil; import com.intellij.util.xmlb.annotations.Attribute; import com.jetbrains.php.config.PhpProjectConfigurationFacade; +import com.jetbrains.php.config.commandLine.PhpCommandLinePathProcessor; import com.jetbrains.php.config.commandLine.PhpCommandSettings; import com.jetbrains.php.config.commandLine.PhpCommandSettingsBuilder; import com.jetbrains.php.config.interpreters.PhpInterpreter; +import com.jetbrains.php.run.PhpCommandLineSettings; import com.jetbrains.php.run.PhpExecutionUtil; import com.jetbrains.php.run.PhpRefactoringListenerRunConfiguration; import com.jetbrains.php.run.PhpRunUtil; @@ -102,7 +104,11 @@ public void checkConfiguration() throws RuntimeConfigurationException { @Nullable @Override public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment executionEnvironment) throws ExecutionException { - return this.getState(executionEnvironment, this.createCommand(Collections.emptyMap(), Collections.emptyList(), false)); + try { + return this.getState(executionEnvironment, this.createCommand(Collections.emptyMap(), Collections.emptyList(), false)); + } catch (CloneNotSupportedException e) { + return null; + } } @NotNull @@ -137,24 +143,30 @@ public ExecutionResult execute(@NotNull Executor executor, @NotNull ProgramRunne } @NotNull - private PhpCommandSettings createCommand(Map envParameters, List arguments, boolean withDebuggerOptions) throws ExecutionException { + private PhpCommandSettings createCommand(Map envParameters, List arguments, boolean withDebuggerOptions) throws ExecutionException, CloneNotSupportedException { PhpInterpreter interpreter = PhpProjectConfigurationFacade.getInstance(getProject()).getInterpreter(); if (interpreter == null) { throw new ExecutionException(TesterBundle.message("runConfiguration.errors.phpInterpreterNotSet")); } else { + TesterSettings settings = getSettings().clone(); + PhpCommandSettings command = PhpCommandSettingsBuilder.create(getProject(), interpreter, withDebuggerOptions); - command.setScript(getSettings().getTesterExecutable(), false); - command.importCommandLineSettings(getSettings().getPhpCommandLineSettings(), null); + processSettings(command.getPathProcessor(), settings); + + command.setScript(settings.getTesterExecutable()); + + PhpCommandLineSettings commandLineSettings = settings.getPhpCommandLineSettings(); + command.importCommandLineSettings(commandLineSettings, null); command.addEnvs(envParameters); // support for user setup - if (getSettings().getSetupScriptPath() != null) { - command.addEnv("INTELLIJ_NETTE_TESTER_USER_SETUP", getSettings().getSetupScriptPath()); + if (settings.getSetupScriptPath() != null) { + command.addEnv("INTELLIJ_NETTE_TESTER_USER_SETUP", command.getPathProcessor().process(settings.getSetupScriptPath())); } - TesterExecutionUtil.addCommandArguments(getProject(), command, getSettings(), arguments); + TesterExecutionUtil.addCommandArguments(getProject(), command, settings, arguments); return command; } @@ -166,6 +178,12 @@ protected TesterSettings createSettings() { return new TesterSettings(); } + protected void processSettings(@NotNull PhpCommandLinePathProcessor processor, @NotNull TesterSettings settings) { + settings.setTestScope(processor.process(settings.getTestScope())); + settings.setPhpIniPath(processor.process(StringUtil.notNullize(settings.getPhpIniPath()))); + settings.setSetupScriptPath(processor.process(StringUtil.notNullize(settings.getSetupScriptPath()))); + } + @Override protected void fixSettingsAfterDeserialization(@NotNull TesterSettings settings) { settings.setTesterExecutable(PhpConfigurationUtil.deserializePath(settings.getTesterExecutable())); diff --git a/src/cz/jiripudil/intellij/nette/tester/execution/TesterExecutionUtil.java b/src/cz/jiripudil/intellij/nette/tester/execution/TesterExecutionUtil.java index 541213d..f522a89 100644 --- a/src/cz/jiripudil/intellij/nette/tester/execution/TesterExecutionUtil.java +++ b/src/cz/jiripudil/intellij/nette/tester/execution/TesterExecutionUtil.java @@ -14,8 +14,10 @@ import com.jetbrains.php.config.interpreters.PhpConfigurationOptionData; import com.jetbrains.php.config.interpreters.PhpInterpreter; import com.jetbrains.php.run.filters.XdebugCallStackFilter; +import cz.jiripudil.intellij.nette.tester.TesterUtil; import cz.jiripudil.intellij.nette.tester.configuration.TesterRunConfiguration; import cz.jiripudil.intellij.nette.tester.configuration.TesterSettings; +import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettings; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -44,18 +46,24 @@ public static void addCommandArguments(@NotNull Project project, @NotNull PhpCom } try { - Path tempDir = Paths.get(PathManager.getPluginsPath(), "intellij-nette-tester"); + Path tempDir = getTempPath(project); if (!Files.isDirectory(tempDir)) { Files.createDirectory(tempDir); } - Path setupScriptPath = Paths.get(tempDir.toString(), "setup.php"); - InputStream setupResourceStream = TesterExecutionUtil.class.getClassLoader().getResourceAsStream("setup.php"); + TesterProjectSettings testerSettings = TesterUtil.getTesterSettings(project); + String setupFile = testerSettings.getSetupFile(); + + Path setupScriptPath = Paths.get(tempDir.toString(), setupFile); + InputStream setupResourceStream = TesterExecutionUtil.class.getClassLoader().getResourceAsStream(setupFile); + if (setupResourceStream == null) { + throw new ExecutionException("Input stream can not be null"); + } Files.copy(setupResourceStream, setupScriptPath, StandardCopyOption.REPLACE_EXISTING); setupResourceStream.close(); command.addArgument("--setup"); - command.addArgument(setupScriptPath.toString()); + command.addArgument(command.getPathProcessor().process(setupScriptPath.toString())); } catch (IOException e) { throw new ExecutionException(e); @@ -75,6 +83,14 @@ public static void addCommandArguments(@NotNull Project project, @NotNull PhpCom command.addArgument(settings.getTestScope()); } + private static Path getTempPath(Project project) { + if (project.getBasePath() != null) { + return Paths.get(project.getBasePath(), ".idea", "intellij-nette-tester"); + } else { + return Paths.get(PathManager.getPluginsPath(), "intellij-nette-tester"); + } + } + public static ConsoleView createConsole(Project project, ProcessHandler processHandler, ExecutionEnvironment executionEnvironment, TesterTestLocator locationProvider) { TesterRunConfiguration profile = (TesterRunConfiguration) executionEnvironment.getRunProfile(); diff --git a/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java index 0144a0c..79e769a 100644 --- a/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java +++ b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterMethodRunLineMarkerProvider.java @@ -3,6 +3,7 @@ import com.intellij.execution.lineMarker.RunLineMarkerContributor; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.psi.PsiElement; +import com.jetbrains.php.lang.lexer.PhpTokenTypes; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; import cz.jiripudil.intellij.nette.tester.TesterIcons; @@ -12,18 +13,29 @@ import org.jetbrains.annotations.Nullable; public class TesterMethodRunLineMarkerProvider extends RunLineMarkerContributor { + static String TEST_METHOD_PREFIX = "test"; + @Override public @Nullable Info getInfo(@NotNull PsiElement psiElement) { - if (psiElement instanceof Method) { - PhpClass phpClass = ((Method) psiElement).getContainingClass(); - String className = phpClass != null ? phpClass.getName() : "null"; - String methodName = ((Method) psiElement).getName(); + if (psiElement.getNode().getElementType() == PhpTokenTypes.IDENTIFIER) { + PsiElement method = psiElement.getParent(); + if (method instanceof Method) { + String methodName = ((Method) method).getName(); + if (!methodName.startsWith(TEST_METHOD_PREFIX)) { + return null; + } + + PhpClass phpClass = ((Method) method).getContainingClass(); + String className = phpClass != null ? phpClass.getName() : "null"; - AnAction[] actions = new AnAction[2]; - actions[0] = new TesterMethodRunTestAction(psiElement, className, methodName); - actions[1] = new TesterCreateMethodRunTestAction(psiElement, className, methodName); + if (psiElement.getText().equals(methodName)) { + AnAction[] actions = new AnAction[2]; + actions[0] = new TesterMethodRunTestAction(psiElement, className, methodName); + actions[1] = new TesterCreateMethodRunTestAction(psiElement, className, methodName); - return new Info(TesterIcons.RUN_METHOD, actions, RunLineMarkerContributor.RUN_TEST_TOOLTIP_PROVIDER); + return new Info(TesterIcons.RUN_METHOD, actions, RunLineMarkerContributor.RUN_TEST_TOOLTIP_PROVIDER); + } + } } return null; } diff --git a/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java index 4cbe69b..c8edf82 100644 --- a/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java +++ b/src/cz/jiripudil/intellij/nette/tester/lineMarker/TesterRunLineMarkerProvider.java @@ -3,8 +3,10 @@ import com.intellij.execution.lineMarker.RunLineMarkerContributor; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.psi.PsiElement; +import com.jetbrains.php.lang.lexer.PhpTokenTypes; import com.jetbrains.php.lang.psi.elements.PhpClass; import cz.jiripudil.intellij.nette.tester.TesterIcons; +import cz.jiripudil.intellij.nette.tester.TesterUtil; import cz.jiripudil.intellij.nette.tester.action.TesterCreateRunTestAction; import cz.jiripudil.intellij.nette.tester.action.TesterRunTestAction; import org.jetbrains.annotations.NotNull; @@ -13,12 +15,20 @@ public class TesterRunLineMarkerProvider extends RunLineMarkerContributor { @Override public @Nullable Info getInfo(@NotNull PsiElement psiElement) { - if (psiElement instanceof PhpClass) { - AnAction[] actions = new AnAction[2]; - actions[0] = new TesterRunTestAction(psiElement, ((PhpClass) psiElement).getName()); - actions[1] = new TesterCreateRunTestAction(psiElement, ((PhpClass) psiElement).getName()); + if (psiElement.getNode().getElementType() == PhpTokenTypes.IDENTIFIER) { + PsiElement phpClass = psiElement.getParent(); + if (!(phpClass instanceof PhpClass) || !TesterUtil.isTestClass((PhpClass) phpClass)) { + return null; + } - return new Info(TesterIcons.RUN_CLASS, actions, RunLineMarkerContributor.RUN_TEST_TOOLTIP_PROVIDER); + String className = psiElement.getText(); + if (((PhpClass) phpClass).getName().equals(className)) { + AnAction[] actions = new AnAction[2]; + actions[0] = new TesterRunTestAction(psiElement, className); + actions[1] = new TesterCreateRunTestAction(psiElement, className); + + return new Info(TesterIcons.RUN_CLASS, actions, RunLineMarkerContributor.RUN_TEST_TOOLTIP_PROVIDER); + } } return null; } diff --git a/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java b/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java index 7272958..925bc1b 100644 --- a/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java +++ b/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java @@ -12,21 +12,34 @@ @Tag("testerSettings") public class TesterProjectSettings { @NotNull private String defaultExtension = "phpt"; + @NotNull private String testerVersion = "< 2.0"; @Nullable private String bootstrapFile; @NotNull private List namespaceMappings = new ArrayList<>(); - @Attribute("defaultExtension") @NotNull public String getDefaultExtension() { return defaultExtension; } + @Attribute("testerVersion") + @NotNull + public String getTesterVersion() { + return testerVersion; + } + + public String getSetupFile() { + return testerVersion.equals("< 2.0") ? "setup.php" : "setup2-0.php"; + } + + public void setTesterVersion(@NotNull String defaultExtension) { + this.testerVersion = defaultExtension; + } + public void setDefaultExtension(@NotNull String defaultExtension) { this.defaultExtension = defaultExtension; } - @Attribute("bootstrapFile") @Nullable public String getBootstrapFile() { @@ -37,7 +50,6 @@ public void setBootstrapFile(@Nullable String bootstrapFile) { this.bootstrapFile = PhpConfigurationUtil.serializePath(bootstrapFile); } - @Tag("namespaceMappings") @NotNull public List getNamespaceMappings() { diff --git a/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.form b/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.form index 02e6002..91ca861 100644 --- a/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.form +++ b/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.form @@ -1,6 +1,6 @@
    - + @@ -10,7 +10,7 @@ - + @@ -30,7 +30,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -46,12 +46,26 @@ - + + + + + + + + + + + + + + + diff --git a/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java b/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java index 8a66159..0c02fbc 100644 --- a/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java +++ b/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java @@ -11,9 +11,9 @@ import com.intellij.util.ui.ElementProducer; import com.jetbrains.php.util.ConfigurableForm; import cz.jiripudil.intellij.nette.tester.TesterBundle; +import cz.jiripudil.intellij.nette.tester.TesterUtil; import cz.jiripudil.intellij.nette.tester.projectSettings.TesterNamespaceMapping; import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettings; -import cz.jiripudil.intellij.nette.tester.projectSettings.TesterProjectSettingsManager; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -30,6 +30,8 @@ public class TesterConfigurableForm implements ConfigurableForm { private TextFieldWithBrowseButton bootstrapFileField; private JPanel namespaceMappingPanel; + private ComboBox testerVersionCombobox; + private JBLabel testerVersionLabel; private NamespaceMappingTable namespaceMappingTable; public TesterConfigurableForm(@NotNull final Project project) { @@ -44,9 +46,10 @@ public JComponent getComponent() { @Override public boolean isModified() { - TesterProjectSettings settings = TesterProjectSettingsManager.getInstance(project).getState(); + TesterProjectSettings settings = TesterUtil.getTesterSettings(project); return settings != null && !( settings.getDefaultExtension().equals(defaultExtensionCombobox.getSelectedItem()) + && settings.getTesterVersion().equals(testerVersionCombobox.getSelectedItem()) && StringUtil.notNullize(settings.getBootstrapFile()).equals(bootstrapFileField.getText()) && settings.getNamespaceMappings().equals(namespaceMappingTable.getTableView().getItems()) ); @@ -55,12 +58,13 @@ public boolean isModified() { @Override public void apply() { - TesterProjectSettings settings = TesterProjectSettingsManager.getInstance(project).getState(); + TesterProjectSettings settings = TesterUtil.getTesterSettings(project); if (settings == null) { return; } settings.setDefaultExtension((String) defaultExtensionCombobox.getSelectedItem()); + settings.setTesterVersion((String) testerVersionCombobox.getSelectedItem()); settings.setBootstrapFile(bootstrapFileField.getText()); // lists work with references which complicates detecting modification, cloning each item helps @@ -69,12 +73,13 @@ public void apply() { @Override public void reset() { - TesterProjectSettings settings = TesterProjectSettingsManager.getInstance(project).getState(); + TesterProjectSettings settings = TesterUtil.getTesterSettings(project); if (settings == null) { return; } defaultExtensionCombobox.setSelectedItem(settings.getDefaultExtension()); + testerVersionCombobox.setSelectedItem(settings.getTesterVersion()); bootstrapFileField.setText(settings.getBootstrapFile()); // lists work with references which complicates detecting modification, cloning each item helps @@ -91,6 +96,9 @@ private void createUIComponents() { defaultExtensionLabel = new JBLabel(TesterBundle.message("settings.defaultExtension")); defaultExtensionCombobox = new ComboBox<>(new String[]{"phpt", "php"}); + testerVersionLabel = new JBLabel(TesterBundle.message("settings.testerVersion")); + testerVersionCombobox = new ComboBox<>(new String[]{"< 2.0", "> 2.0"}); + bootstrapFileLabel = new JBLabel(TesterBundle.message("settings.bootstrapFile")); bootstrapFileField = new TextFieldWithBrowseButton(); bootstrapFileField.addBrowseFolderListener(null, null, project, FileChooserDescriptorFactory.createSingleFileDescriptor("php")); From 799fc87a3a713702e16626c78e480bc4cb98232a Mon Sep 17 00:00:00 2001 From: mesour Date: Wed, 19 Feb 2020 03:50:29 +0100 Subject: [PATCH 3/5] Updated build --- intellij-nette-tester.jar | Bin 173313 -> 173313 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/intellij-nette-tester.jar b/intellij-nette-tester.jar index 869418ac5db184b3fb34b66cebcd4f7795c96f83..1b71cd47a9eb76188b5954e451cf0818c9cba918 100644 GIT binary patch delta 38 tcmZoX#npIkm4|UF57Wj{CL6i!`%9Ue^Z~du384T0 delta 38 tcmZoX#npI Date: Wed, 19 Feb 2020 04:00:10 +0100 Subject: [PATCH 4/5] Fixed TestCaseAnnotationInspection --- intellij-nette-tester.jar | Bin 173313 -> 173345 bytes .../TestCaseAnnotationInspection.java | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/intellij-nette-tester.jar b/intellij-nette-tester.jar index 1b71cd47a9eb76188b5954e451cf0818c9cba918..41cb3cbe2424d1257f8996084e64732c048b2dc4 100644 GIT binary patch delta 1786 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 Date: Thu, 20 Feb 2020 16:04:46 +0100 Subject: [PATCH 5/5] Minor changes, added plugin logo --- intellij-nette-tester.jar | Bin 173345 -> 174330 bytes resources/META-INF/plugin.xml | 24 ++++++++--------- resources/META-INF/pluginIcon.svg | 25 ++++++++++++++++++ .../TesterProjectSettings.java | 2 +- .../editor/TesterConfigurableForm.java | 8 +++--- 5 files changed, 42 insertions(+), 17 deletions(-) create mode 100644 resources/META-INF/pluginIcon.svg diff --git a/intellij-nette-tester.jar b/intellij-nette-tester.jar index 41cb3cbe2424d1257f8996084e64732c048b2dc4..03d69899ae70f1b3161b0dc4879810747fcc3a7a 100644 GIT binary patch delta 10736 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 Zt@{m1{ZV+a-QnEfz_1%)=?lP|{XdW-ZX^Hz delta 9534 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.TesterBundle Github + Github

    This plugin integrates Nette Tester into PhpStorm IDE.

    @@ -18,27 +18,27 @@
  1. Added run line markers to run TestCase or test methods
  2. Added support for run configuration in Docker
  3. Added support for Nette Tester 2.0
  4. -
  5. Fixed Compatibility with PHPStorm 2019.2 (#43)
  6. -
  7. Fixed bug java.lang.NullPointerException on phpstorm startup (#45)
  8. +
  9. Fixed Compatibility with PHPStorm 2019.2 (#43)
  10. +
  11. Fixed bug java.lang.NullPointerException on phpstorm startup (#45)
  12. 2.0.0-beta.3

      -
    • The Create Test dialog does not autoupdate the target namespace and directory if invoked from the directory context (#26)
    • -
    • Added some handy inspections that make sure all your tests are actually executed (#3, #32)
    • -
    • You can right-click a single test case file to run it (#23)
    • -
    • Added support for nette/tester@dev-master for the time being (#30)
    • -
    • Fixed: bootstrap relative path resolves correctly if the target directory does not exist (#25)
    • +
    • The Create Test dialog does not autoupdate the target namespace and directory if invoked from the directory context (#26)
    • +
    • Added some handy inspections that make sure all your tests are actually executed (#3, #32)
    • +
    • You can right-click a single test case file to run it (#23)
    • +
    • Added support for nette/tester@dev-master for the time being (#30)
    • +
    • Fixed: bootstrap relative path resolves correctly if the target directory does not exist (#25)
    • Fixed: comparison failure reporting was broken on Unix systems

    2.0.0-beta.2

    I know I said this release branch would be feature-frozen, but... well... not just yet. I'm far too excited about bringing the new features to be able to postpone them. Semver doesn't play well with the plugin's distribution channel anyway. Here they come:

      -
    • In the project settings, you can configure the path to your bootstrap file; it is then automatically required in the created test files (see #20 for instructions if it does not work right away)
    • -
    • You can now right-click a single test method to run or debug it in isolation (#9)
    • -
    • Fixed: OutputHandler now recognizes and correctly parses the diff command generated on Windows (#21)
    • -
    • Fixed: OutputHandler no longer reports unsuccessful builds as "terminated" (#22)
    • +
    • In the project settings, you can configure the path to your bootstrap file; it is then automatically required in the created test files (see #20 for instructions if it does not work right away)
    • +
    • You can now right-click a single test method to run or debug it in isolation (#9)
    • +
    • Fixed: OutputHandler now recognizes and correctly parses the diff command generated on Windows (#21)
    • +
    • Fixed: OutputHandler no longer reports unsuccessful builds as "terminated" (#22)

    2.0.0-beta.1

    diff --git a/resources/META-INF/pluginIcon.svg b/resources/META-INF/pluginIcon.svg new file mode 100644 index 0000000..429e6a0 --- /dev/null +++ b/resources/META-INF/pluginIcon.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java b/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java index 925bc1b..f2615fb 100644 --- a/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java +++ b/src/cz/jiripudil/intellij/nette/tester/projectSettings/TesterProjectSettings.java @@ -12,7 +12,7 @@ @Tag("testerSettings") public class TesterProjectSettings { @NotNull private String defaultExtension = "phpt"; - @NotNull private String testerVersion = "< 2.0"; + @NotNull private String testerVersion = ">= 2.0"; @Nullable private String bootstrapFile; @NotNull private List namespaceMappings = new ArrayList<>(); diff --git a/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java b/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java index 0c02fbc..f0acdb9 100644 --- a/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java +++ b/src/cz/jiripudil/intellij/nette/tester/projectSettings/editor/TesterConfigurableForm.java @@ -63,8 +63,8 @@ public void apply() { return; } - settings.setDefaultExtension((String) defaultExtensionCombobox.getSelectedItem()); - settings.setTesterVersion((String) testerVersionCombobox.getSelectedItem()); + settings.setDefaultExtension(StringUtil.notNullize((String) defaultExtensionCombobox.getSelectedItem())); + settings.setTesterVersion(StringUtil.notNullize((String) testerVersionCombobox.getSelectedItem())); settings.setBootstrapFile(bootstrapFileField.getText()); // lists work with references which complicates detecting modification, cloning each item helps @@ -79,7 +79,7 @@ public void reset() { } defaultExtensionCombobox.setSelectedItem(settings.getDefaultExtension()); - testerVersionCombobox.setSelectedItem(settings.getTesterVersion()); + testerVersionCombobox.setSelectedItem(settings.getTesterVersion().equals("> 2.0") ? ">= 2.0" : settings.getTesterVersion()); bootstrapFileField.setText(settings.getBootstrapFile()); // lists work with references which complicates detecting modification, cloning each item helps @@ -97,7 +97,7 @@ private void createUIComponents() { defaultExtensionCombobox = new ComboBox<>(new String[]{"phpt", "php"}); testerVersionLabel = new JBLabel(TesterBundle.message("settings.testerVersion")); - testerVersionCombobox = new ComboBox<>(new String[]{"< 2.0", "> 2.0"}); + testerVersionCombobox = new ComboBox<>(new String[]{"< 2.0", ">= 2.0"}); bootstrapFileLabel = new JBLabel(TesterBundle.message("settings.bootstrapFile")); bootstrapFileField = new TextFieldWithBrowseButton();