1
1
package fr .adrienbrault .idea .symfony2plugin .tests .lang ;
2
2
3
+ import com .intellij .psi .PsiElement ;
3
4
import com .intellij .testFramework .fixtures .InjectionTestFixture ;
4
5
import com .jetbrains .php .lang .PhpFileType ;
5
6
import fr .adrienbrault .idea .symfony2plugin .tests .SymfonyLightCodeInsightFixtureTestCase ;
7
+ import junit .framework .TestCase ;
6
8
import org .jetbrains .annotations .NotNull ;
9
+ import org .jetbrains .annotations .Nullable ;
7
10
11
+ import static fr .adrienbrault .idea .symfony2plugin .lang .StringLiteralLanguageInjector .LANGUAGE_ID_CSS ;
12
+ import static fr .adrienbrault .idea .symfony2plugin .lang .StringLiteralLanguageInjector .LANGUAGE_ID_DQL ;
8
13
import static fr .adrienbrault .idea .symfony2plugin .lang .StringLiteralLanguageInjector .LANGUAGE_ID_EXPRESSION_LANGUAGE ;
14
+ import static fr .adrienbrault .idea .symfony2plugin .lang .StringLiteralLanguageInjector .LANGUAGE_ID_JSON ;
15
+ import static fr .adrienbrault .idea .symfony2plugin .lang .StringLiteralLanguageInjector .LANGUAGE_ID_XPATH ;
9
16
10
17
public class StringLiteralLanguageInjectorTest extends SymfonyLightCodeInsightFixtureTestCase {
11
18
@@ -22,6 +29,52 @@ public String getTestDataPath() {
22
29
return "src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/fixtures" ;
23
30
}
24
31
32
+ public void skipTestCssLanguageInjections () {
33
+ // skip as we dont have CSS module in >= 2020 test builds
34
+ String base = "<?php $c = new \\ Symfony\\ Component\\ DomCrawler\\ Crawler();\n " ;
35
+ assertInjectedLangAtCaret (base + "$c->filter('html > bo<caret>dy');" , LANGUAGE_ID_CSS );
36
+ assertInjectedLangAtCaret (base + "$c->filter('<caret>');" , LANGUAGE_ID_CSS );
37
+ assertInjectedLangAtCaret (base + "$c->children('html > bo<caret>dy');" , LANGUAGE_ID_CSS );
38
+ assertInjectedLangAtCaret (base + "$c->children('<caret>');" , LANGUAGE_ID_CSS );
39
+
40
+ base = "<?php $c = new \\ Symfony\\ Component\\ CssSelector\\ CssSelectorConverter();\n " ;
41
+ assertInjectedLangAtCaret (base + "$c->toXPath('html > bo<caret>dy');" , LANGUAGE_ID_CSS );
42
+ assertInjectedLangAtCaret (base + "$c->toXPath('<caret>');" , LANGUAGE_ID_CSS );
43
+ }
44
+
45
+ public void testXPathLanguageInjections () {
46
+ String base = "<?php $c = new \\ Symfony\\ Component\\ DomCrawler\\ Crawler();\n " ;
47
+ assertInjectedLangAtCaret (base + "$c->filterXPath('//dum<caret>my');" , LANGUAGE_ID_XPATH );
48
+ assertInjectedLangAtCaret (base + "$c->filterXPath('<caret>');" , LANGUAGE_ID_XPATH );
49
+ assertInjectedLangAtCaret (base + "$c->evaluate('//dum<caret>my');" , LANGUAGE_ID_XPATH );
50
+ assertInjectedLangAtCaret (base + "$c->evaluate('<caret>');" , LANGUAGE_ID_XPATH );
51
+ }
52
+
53
+ public void testJsonLanguageInjections () {
54
+ String base = "<?php \\ Symfony\\ Component\\ HttpFoundation\\ " ;
55
+ assertInjectedLangAtCaret (base + "JsonResponse::fromJsonString('<caret>');" , LANGUAGE_ID_JSON );
56
+ assertInjectedLangAtCaret (base + "JsonResponse::fromJsonString('{\" foo\" : <caret>}');" , LANGUAGE_ID_JSON );
57
+
58
+ base = "<?php $r = new \\ Symfony\\ Component\\ HttpFoundation\\ JsonResponse();\n " ;
59
+ assertInjectedLangAtCaret (base + "$r->setJson('<caret>');" , LANGUAGE_ID_JSON );
60
+ assertInjectedLangAtCaret (base + "$r->setJson('{\" foo\" : <caret>}');" , LANGUAGE_ID_JSON );
61
+ }
62
+
63
+ public void testDqlLanguageInjections () {
64
+ String base = "<?php $em = new \\ Doctrine\\ ORM\\ EntityManager();\n " ;
65
+ assertInjectedLangAtCaret (base + "$em->createQuery('SELECT b FR<caret>OM \\ Foo\\ Bar b');" , LANGUAGE_ID_DQL );
66
+ assertInjectedLangAtCaret (base + "$em->createQuery('<caret>');" , LANGUAGE_ID_DQL );
67
+ assertInjectedLangAtCaret (base + "$em->createQuery(<<caret><<AAA\n \n AAA\n );" , null );
68
+ assertInjectedFragmentText (base + "$em->createQuery(<<<AAA\n SELEC<caret>T\n AAA\n );" , "SELECT" );
69
+ assertInjectedFragmentText (base + "$em->createQuery(<<<'AAA'\n SELEC<caret>T a\n AAA\n );" , "SELECT a" );
70
+ base = "<?php $q = new \\ Doctrine\\ ORM\\ Query();\n " ;
71
+ assertInjectedLangAtCaret (base + "$q->setDQL('SELECT b FR<caret>OM \\ Foo\\ Bar b');" , LANGUAGE_ID_DQL );
72
+ assertInjectedLangAtCaret (base + "$q->setDQL('<caret>');" , LANGUAGE_ID_DQL );
73
+
74
+ assertInjectedLangAtCaret ("<?php $dql = \" SELECT b FR<caret>OM \\ Foo\\ Bar b\" );" , LANGUAGE_ID_DQL );
75
+ assertInjectedLangAtCaret ("<?php $dql = \" <caret>\" );" , LANGUAGE_ID_DQL );
76
+ }
77
+
25
78
public void testExpressionLanguageLanguageInjections () {
26
79
assertInjectedLangAtCaret (
27
80
"<?php $expr = new \\ Symfony\\ Component\\ ExpressionLanguage\\ Expression('<caret>');" ,
@@ -327,8 +380,15 @@ public void testExpressionLanguageLanguageInjections() {
327
380
);
328
381
}
329
382
330
- private void assertInjectedLangAtCaret (@ NotNull String configureByText , @ NotNull String lang ) {
383
+ private void assertInjectedLangAtCaret (@ NotNull String configureByText , @ Nullable String lang ) {
331
384
myFixture .configureByText (PhpFileType .INSTANCE , configureByText );
332
385
injectionTestFixture .assertInjectedLangAtCaret (lang );
333
386
}
387
+
388
+ private void assertInjectedFragmentText (@ NotNull String configureByText , String text ) {
389
+ myFixture .configureByText (PhpFileType .INSTANCE , configureByText );
390
+ PsiElement injectedElement = injectionTestFixture .getInjectedElement ();
391
+ assertNotNull (injectedElement );
392
+ TestCase .assertEquals (text , injectedElement .getContainingFile ().getText ());
393
+ }
334
394
}
0 commit comments