|
1 | 1 | package fr.adrienbrault.idea.symfony2plugin.tests.templating.util;
|
2 | 2 |
|
3 | 3 | import com.intellij.openapi.vfs.VfsUtil;
|
| 4 | +import com.intellij.psi.PsiElement; |
| 5 | +import com.intellij.psi.PsiRecursiveElementVisitor; |
| 6 | +import com.intellij.psi.tree.IElementType; |
4 | 7 | import com.jetbrains.twig.TwigFileType;
|
| 8 | +import com.jetbrains.twig.TwigTokenTypes; |
| 9 | +import com.jetbrains.twig.elements.TwigElementFactory; |
| 10 | +import com.jetbrains.twig.elements.TwigElementTypes; |
5 | 11 | import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
|
6 | 12 | import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
|
| 13 | +import org.jetbrains.annotations.NotNull; |
7 | 14 |
|
8 | 15 | public class TwigUtilIntegrationTest extends SymfonyLightCodeInsightFixtureTestCase {
|
9 | 16 |
|
@@ -57,4 +64,37 @@ public void testTemplateOverwriteNavigation() {
|
57 | 64 | assertNavigationContainsFile(TwigFileType.INSTANCE, "{% extends '<caret>TwigUtilIntegrationBundle:Foo/Bar/layout.html.twig' %}", "/views/Foo/Bar/layout.html.twig");
|
58 | 65 | }
|
59 | 66 |
|
| 67 | + /** |
| 68 | + * @see fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil#isValidTemplateString |
| 69 | + */ |
| 70 | + public void testIsValidTemplateString() { |
| 71 | + assertFalse(TwigUtil.isValidTemplateString(createPsiElementAndFindString("{% include \"foo/#{segment.typeKey}.html.twig\" %}", TwigElementTypes.INCLUDE_TAG))); |
| 72 | + assertFalse(TwigUtil.isValidTemplateString(createPsiElementAndFindString("{% include \"foo/#{1 + 2}.html.twig\" %}", TwigElementTypes.INCLUDE_TAG))); |
| 73 | + assertFalse(TwigUtil.isValidTemplateString(createPsiElementAndFindString("{% include ~ \"foo.html.twig\" ~ %}", TwigElementTypes.INCLUDE_TAG))); |
| 74 | + assertFalse(TwigUtil.isValidTemplateString(createPsiElementAndFindString("{% include \"foo.html.twig\" ~ %}", TwigElementTypes.INCLUDE_TAG))); |
| 75 | + assertFalse(TwigUtil.isValidTemplateString(createPsiElementAndFindString("{% include ~ \"foo.html.twig\" %}", TwigElementTypes.INCLUDE_TAG))); |
| 76 | + |
| 77 | + assertTrue(TwigUtil.isValidTemplateString(createPsiElementAndFindString("{% include \"foo.html.twig\" %}", TwigElementTypes.INCLUDE_TAG))); |
| 78 | + } |
| 79 | + |
| 80 | + private PsiElement createPsiElementAndFindString(@NotNull String content, @NotNull IElementType type) { |
| 81 | + PsiElement psiElement = TwigElementFactory.createPsiElement(getProject(), content, type); |
| 82 | + if(psiElement == null) { |
| 83 | + fail(); |
| 84 | + } |
| 85 | + |
| 86 | + final PsiElement[] string = {null}; |
| 87 | + psiElement.acceptChildren(new PsiRecursiveElementVisitor() { |
| 88 | + @Override |
| 89 | + public void visitElement(PsiElement element) { |
| 90 | + if (string[0] == null && element.getNode().getElementType() == TwigTokenTypes.STRING_TEXT) { |
| 91 | + string[0] = element; |
| 92 | + } |
| 93 | + super.visitElement(element); |
| 94 | + } |
| 95 | + }); |
| 96 | + |
| 97 | + return string[0]; |
| 98 | + } |
| 99 | + |
60 | 100 | }
|
0 commit comments