11package fr .adrienbrault .idea .symfony2plugin .tests .lang ;
22
3+ import com .intellij .psi .PsiElement ;
34import com .intellij .testFramework .fixtures .InjectionTestFixture ;
45import com .jetbrains .php .lang .PhpFileType ;
56import fr .adrienbrault .idea .symfony2plugin .tests .SymfonyLightCodeInsightFixtureTestCase ;
7+ import junit .framework .TestCase ;
68import org .jetbrains .annotations .NotNull ;
9+ import org .jetbrains .annotations .Nullable ;
710
11+ import static fr .adrienbrault .idea .symfony2plugin .lang .StringLiteralLanguageInjector .LANGUAGE_ID_CSS ;
12+ import static fr .adrienbrault .idea .symfony2plugin .lang .StringLiteralLanguageInjector .LANGUAGE_ID_DQL ;
813import 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 ;
916
1017public class StringLiteralLanguageInjectorTest extends SymfonyLightCodeInsightFixtureTestCase {
1118
@@ -22,6 +29,52 @@ public String getTestDataPath() {
2229 return "src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/fixtures" ;
2330 }
2431
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+
2578 public void testExpressionLanguageLanguageInjections () {
2679 assertInjectedLangAtCaret (
2780 "<?php $expr = new \\ Symfony\\ Component\\ ExpressionLanguage\\ Expression('<caret>');" ,
@@ -327,8 +380,15 @@ public void testExpressionLanguageLanguageInjections() {
327380 );
328381 }
329382
330- private void assertInjectedLangAtCaret (@ NotNull String configureByText , @ NotNull String lang ) {
383+ private void assertInjectedLangAtCaret (@ NotNull String configureByText , @ Nullable String lang ) {
331384 myFixture .configureByText (PhpFileType .INSTANCE , configureByText );
332385 injectionTestFixture .assertInjectedLangAtCaret (lang );
333386 }
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+ }
334394}
0 commit comments