Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,26 +1,41 @@
package fr.adrienbrault.idea.symfony2plugin.tests.templating.util;

import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import fr.adrienbrault.idea.symfony2plugin.Settings;
import fr.adrienbrault.idea.symfony2plugin.templating.path.TwigNamespaceSetting;
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigUtil;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlPsiElementFactory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.yaml.psi.YAMLFile;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see TwigUtil
*/
public class TwigUtilTest extends SymfonyLightCodeInsightFixtureTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
Settings.getInstance(getProject()).twigNamespaces.clear();
}

/**
* @see TwigUtil#getTemplatePsiElements
*/
public void testGetTemplatePsiElements() {
myFixture.addFileToProject("res/foo.html.twig", "");

Settings.getInstance(getProject()).twigNamespaces.addAll(TwigUtilTempTest.createTwigNamespaceSettings());
Settings.getInstance(getProject()).twigNamespaces.addAll(createTwigNamespaceSettings());

String[] strings = {
"@Foo/foo.html.twig", "@!Foo/foo.html.twig", "foo.html.twig", ":foo.html.twig", "@Foo\\foo.html.twig", "::foo.html.twig"
Expand All @@ -38,7 +53,7 @@ public void testGetTemplatePsiElements() {
* @see TwigUtil#getTemplateNamesForFile
*/
public void testGetTemplateNamesForFile() {
Settings.getInstance(getProject()).twigNamespaces.addAll(TwigUtilTempTest.createTwigNamespaceSettings());
Settings.getInstance(getProject()).twigNamespaces.addAll(createTwigNamespaceSettings());

assertContainsElements(
TwigUtil.getTemplateNamesForFile(getProject(), myFixture.addFileToProject("res/test.html.twig", "").getVirtualFile()),
Expand All @@ -57,7 +72,7 @@ public void testGetTemplateNamesForFile() {
public void testGetTemplateNavigationOnOffset() {
myFixture.addFileToProject("res/foobar/foo.html.twig", "");

Settings.getInstance(getProject()).twigNamespaces.addAll(TwigUtilTempTest.createTwigNamespaceSettings());
Settings.getInstance(getProject()).twigNamespaces.addAll(createTwigNamespaceSettings());

assertTrue(TwigUtil.getTemplateNavigationOnOffset(getProject(), "foobar/foo.html.twig", 3).stream().anyMatch(psiElement -> psiElement instanceof PsiDirectory && "foobar".equals(((PsiDirectory) psiElement).getName())));
assertTrue(TwigUtil.getTemplateNavigationOnOffset(getProject(), ":foobar:foo.html.twig", 3).stream().anyMatch(psiElement -> psiElement instanceof PsiDirectory && "foobar".equals(((PsiDirectory) psiElement).getName())));
Expand All @@ -74,7 +89,7 @@ public void testGetTemplateTargetOnOffset() {
myFixture.addFileToProject("res/foobar/foo.html.twig", "");
myFixture.addFileToProject("res/foobar/apple/foo.html.twig", "");

Settings.getInstance(getProject()).twigNamespaces.addAll(TwigUtilTempTest.createTwigNamespaceSettings());
Settings.getInstance(getProject()).twigNamespaces.addAll(createTwigNamespaceSettings());

assertIsDirectoryAtOffset("@Foo/foobar/foo.html.twig", 2, "res");
assertIsDirectoryAtOffset("@Foo/foobar\\foo.html.twig", 6, "foobar");
Expand All @@ -100,6 +115,74 @@ public void testGetTemplateTargetOnOffset() {
assertTrue(TwigUtil.getTemplateTargetOnOffset(getProject(), "foo.html.twig", 40).isEmpty());
}

/**
* @see TwigUtil#getPresentableTemplateName
*/
public void testGetPresentableTemplateName() {
createFileInProjectRoot("presentable_res/foo/foo.html.twig", "");
VirtualFile res = getProject().getBaseDir().findFileByRelativePath("presentable_res/foo/foo.html.twig");
assertNotNull(res);

Settings.getInstance(getProject()).twigNamespaces.addAll(Collections.singletonList(
new TwigNamespaceSetting("Foobar", "presentable_res", true, TwigUtil.NamespaceType.BUNDLE, true)
));

PsiFile file = PsiManager.getInstance(getProject()).findFile(res);
assertEquals("Foobar:foo:foo", TwigUtil.getPresentableTemplateName(file, true));
assertEquals("Foobar:foo:foo.html.twig", TwigUtil.getPresentableTemplateName(file, false));
}

/**
* @see TwigUtil#getTwigPathFromYamlConfigResolved
*/
public void testGetTwigPathFromYamlConfigResolved() {
createFileInProjectRoot("app/test/foo.html.twig", "");
createFileInProjectRoot("app/template/foo.html.twig", "");

PsiFile dummyFile = YamlPsiElementFactory.createDummyFile(getProject(), "" +
"twig:\n" +
" paths:\n" +
" '%kernel.root_dir%/test': foo\n" +
" '%kernel.project_dir%/app/test': project\n" +
" '%kernel.root_dir%/../app': app\n" +
" 'app/template': MY_PREFIX\n" +
" 'app///\\\\\\template': MY_PREFIX_1\n"
);

Collection<Pair<String, String>> paths = TwigUtil.getTwigPathFromYamlConfigResolved((YAMLFile) dummyFile);

assertNotNull(
paths.stream().filter(pair -> "foo".equals(pair.getFirst()) && "app/test".equals(pair.getSecond())).findFirst().get()
);

assertNotNull(
paths.stream().filter(pair -> "project".equals(pair.getFirst()) && "app/test".equals(pair.getSecond())).findFirst().get()
);

assertNotNull(
paths.stream().filter(pair -> "app".equals(pair.getFirst()) && "app".equals(pair.getSecond())).findFirst().get()
);

assertNotNull(
paths.stream().filter(pair -> "MY_PREFIX".equals(pair.getFirst()) && "app/template".equals(pair.getSecond())).findFirst().get()
);

Pair<String, String> myPrefix1 = paths.stream().filter(pair -> "MY_PREFIX_1".equals(pair.getFirst())).findAny().get();

assertEquals("MY_PREFIX_1", myPrefix1.getFirst());
assertEquals("app/template", myPrefix1.getSecond());
}

@NotNull
static List<TwigNamespaceSetting> createTwigNamespaceSettings() {
return Arrays.asList(
new TwigNamespaceSetting("Foo", "res", true, TwigUtil.NamespaceType.ADD_PATH, true),
new TwigNamespaceSetting(TwigUtil.MAIN, "res", true, TwigUtil.NamespaceType.ADD_PATH, true),
new TwigNamespaceSetting(TwigUtil.MAIN, "res", true, TwigUtil.NamespaceType.BUNDLE, true),
new TwigNamespaceSetting("FooBundle", "res", true, TwigUtil.NamespaceType.BUNDLE, true)
);
}

private void assertIsDirectoryAtOffset(@NotNull String templateName, int offset, @NotNull String directory) {
assertTrue(TwigUtil.getTemplateTargetOnOffset(getProject(), templateName, offset).stream().anyMatch(psiElement -> psiElement instanceof PsiDirectory && directory.equals(((PsiDirectory) psiElement).getName())));
}
Expand Down
Loading