package fr.adrienbrault.idea.symfony2plugin.tests.templating;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.jetbrains.twig.TwigFileType;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see fr.adrienbrault.idea.symfony2plugin.templating.TwigLineMarkerProvider
*/
public class TwigLineMarkerProviderTest extends SymfonyLightCodeInsightFixtureTestCase {
public void testThatExtendsProvidesBlockLineMarker() {
if(System.getenv("PHPSTORM_ENV") != null) return;
createWorkaroundFile("app/Resources/views/block.html.twig", "{% block foo %}{% endblock %}");
PsiFile psiFile = myFixture.configureByText(TwigFileType.INSTANCE, "" +
"{% extends 'block.html.twig' %}\n" +
"{% block foo %}{% endblock %}"
);
assertLineMarker(psiFile, markerInfo -> "foo".equals(markerInfo.getElement().getText()));
}
public void testThatBlockInsideEmbedMustProvideBlockLineMarker() {
if(System.getenv("PHPSTORM_ENV") != null) return;
createWorkaroundFile("app/Resources/views/block.html.twig", "{% block foo %}{% endblock %}");
PsiFile psiFile = myFixture.configureByText(TwigFileType.INSTANCE, "" +
"{% embed 'block.html.twig' %}\n" +
" {% block foo %}{% endblock %}\n" +
"{% endembed %}"
);
assertLineMarker(psiFile, markerInfo -> "foo".equals(markerInfo.getElement().getText()));
}
public void testThatBlockInsideEmbedMustNotProvideBlockLineMarkerForFileScope() {
if(System.getenv("PHPSTORM_ENV") != null) return;
createWorkaroundFile("app/Resources/views/block.html.twig", "{% block foo %}{% endblock %}");
PsiFile psiFile = myFixture.configureByText(TwigFileType.INSTANCE, "" +
"{% extends 'block.html.twig' %}\n" +
"{% embed 'foo.html.twig' %}\n" +
" {% block foo %}{% endblock %}\n" +
"{% endembed %}"
);
assertLineMarkerIsEmpty(psiFile);
}
private void createWorkaroundFile(@NotNull String file, @NotNull String content) {
try {
createDummyFiles(file);
} catch (Exception e) {
e.printStackTrace();
}
// build pseudo file with block
final VirtualFile relativeFile = VfsUtil.findRelativeFile(getProject().getBaseDir(), file.split("/"));
ApplicationManager.getApplication().runWriteAction(() -> {
try {
relativeFile.setBinaryContent(content.getBytes());
} catch (IOException e2) {
e2.printStackTrace();
}
relativeFile.refresh(false, false);
});
}
}