package fr.adrienbrault.idea.symfony2plugin.tests.translation.dict;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.containers.ContainerUtil;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import fr.adrienbrault.idea.symfony2plugin.translation.dict.TranslationUtil;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Set;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see fr.adrienbrault.idea.symfony2plugin.translation.dict.TranslationUtil
*/
public class TranslationUtilTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.copyFileToProject("apple.de.yml", "Resources/translations/apple.de.yml");
myFixture.copyFileToProject("car.de.yml", "Resources/translations/car.de.yml");
myFixture.copyFileToProject("symfony.de.yml", "Resources/translations/symfony.de.yml");
myFixture.copyFileToProject("symfony.de.xlf", "Resources/translations/symfony.de.xlf");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testGetDomainFilePsiElements() {
assertTrue(TranslationUtil.getDomainPsiFiles(getProject(), "apple").size() > 0);
assertTrue(TranslationUtil.getDomainPsiFiles(getProject(), "car").size() > 0);
}
public void testGetTranslationPsiElements() {
assertTrue(TranslationUtil.getTranslationPsiElements(getProject(), "yaml_weak.symfony.great", "apple").length > 0);
assertTrue(TranslationUtil.getTranslationPsiElements(getProject(), "yaml_weak.symfony.greater than", "apple").length > 0);
assertTrue(TranslationUtil.getTranslationPsiElements(getProject(), "yaml_weak.symfony.greater than equals", "apple").length > 0);
assertTrue(TranslationUtil.getTranslationPsiElements(getProject(), "yaml_weak.symfony.more.lines", "apple").length > 0);
assertTrue(TranslationUtil.getTranslationPsiElements(getProject(), "yaml_weak.symfony.more.lines_2", "apple").length > 0);
assertTrue(TranslationUtil.getTranslationPsiElements(getProject(), "foo_yaml.symfony.great", "car").length > 0);
}
public void testGetTargetForXlfAsXmlFileInVersion12() {
PsiFile fileFromText = PsiFileFactory.getInstance(getProject()).createFileFromText(XMLLanguage.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n" +
" <file source-language=\"en\" datatype=\"plaintext\" original=\"file.ext\">\n" +
" <body>\n" +
" <trans-unit id=\"1\">\n" +
" <source>This value should be false.</source>\n" +
" </trans-unit>\n" +
" </body>\n" +
" </file>\n" +
"</xliff>\n"
);
Collection<PsiElement> files = TranslationUtil.getTargetForXlfAsXmlFile((XmlFile) fileFromText, "This value should be false.");
assertNotNull(ContainerUtil.find(files, psiElement ->
psiElement instanceof XmlTag && "This value should be false.".equals(((XmlTag) psiElement).getValue().getText()))
);
}
public void testGetTargetForXlfAsXmlFileInVersion20() {
PsiFile fileFromText = PsiFileFactory.getInstance(getProject()).createFileFromText(XMLLanguage.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<xliff xmlns=\"urn:oasis:names:tc:xliff:document:2.0\"\n" +
" version=\"2.0\" srcLang=\"en-US\" trgLang=\"ja-JP\">\n" +
" <file id=\"f1\" original=\"Graphic Example.psd\">\n" +
" <skeleton href=\"Graphic Example.psd.skl\"/>\n" +
" <group id=\"1\">\n" +
" <unit id=\"1\">\n" +
" <segment>\n" +
" <source>foo</source>\n" +
" </segment>\n" +
" </unit>\n" +
" </group>\n" +
" </file>\n" +
"</xliff>"
);
Collection<PsiElement> files = TranslationUtil.getTargetForXlfAsXmlFile((XmlFile) fileFromText, "foo");
assertNotNull(ContainerUtil.find(files, psiElement ->
psiElement instanceof XmlTag && "foo".equals(((XmlTag) psiElement).getValue().getText()))
);
}
public void testGetTargetForXlfAsXmlFileInVersion20Shortcut() {
PsiFile fileFromText = PsiFileFactory.getInstance(getProject()).createFileFromText(XMLLanguage.INSTANCE, "" +
"<xliff xmlns=\"urn:oasis:names:tc:xliff:document:2.0\" version=\"2.0\"\n" +
" srcLang=\"en-US\" trgLang=\"ja-JP\">\n" +
" <file id=\"f1\" original=\"Graphic Example.psd\">\n" +
" <skeleton href=\"Graphic Example.psd.skl\"/>\n" +
" <unit id=\"1\">\n" +
" <segment>\n" +
" <source>foo</source>\n" +
" </segment>\n" +
" </unit>\n" +
" </file>\n" +
"</xliff>"
);
Collection<PsiElement> files = TranslationUtil.getTargetForXlfAsXmlFile((XmlFile) fileFromText, "foo");
assertNotNull(ContainerUtil.find(files, psiElement ->
psiElement instanceof XmlTag && "foo".equals(((XmlTag) psiElement).getValue().getText()))
);
}
public void testGetTargetForXlfAsXmlFileInVersion12AndResname() {
PsiFile fileFromText = PsiFileFactory.getInstance(getProject()).createFileFromText(XMLLanguage.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n" +
" <file source-language=\"en\" datatype=\"plaintext\" original=\"file.ext\">\n" +
" <body>\n" +
" <trans-unit id=\"1\" resname=\"index.hello_world\">\n" +
" <source>foo</source>\n" +
" </trans-unit>\n" +
" </body>\n" +
" </file>\n" +
"</xliff>\n"
);
Collection<PsiElement> files = TranslationUtil.getTargetForXlfAsXmlFile((XmlFile) fileFromText, "index.hello_world");
assertNotNull(ContainerUtil.find(files, psiElement ->
psiElement instanceof XmlTag && "index.hello_world".equals(((XmlTag) psiElement).getAttributeValue("resname")))
);
}
public void testResnameAsIdInXlfAsXmlFileInVersion12() {
String text = "" +
"<?xml version=\"1.0\"?>\n" +
"<xliff version=\"1.2\" xmlns=\"urn:oasis:names:tc:xliff:document:1.2\">\n" +
" <file source-language=\"en\" datatype=\"plaintext\" original=\"file.ext\">\n" +
" <body>\n" +
" <trans-unit id=\"1\" resname=\"index.hello_world\">\n" +
" <source>foo</source>\n" +
" </trans-unit>\n" +
" </body>\n" +
" </file>\n" +
"</xliff>\n";
InputStream stream = new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8));
Set<String> files = TranslationUtil.getXliffTranslations(stream);
assertContainsElements(files, "index.hello_world", "foo");
}
public void testGetPlaceholderFromTranslation() {
Set<String> placeholder = TranslationUtil.getPlaceholderFromTranslation(
"YAML Symfony2 %foobar% %foobar2% %foo-bar2% %foo_bar2% %foo bar2% {{ limit }} {{limit2}} is great"
);
assertContainsElements(placeholder, "%foobar%", "%foobar2%", "%foo-bar2%", "%foo_bar2%");
assertContainsElements(placeholder, "{{ limit }}", "{{limit2}}");
}
public void testGetPlaceholderFromTranslationForDrupalStyle() {
Set<String> placeholder = TranslationUtil.getPlaceholderFromTranslation(
"@username @username2@, !user1 !user2, %foo bar %fo-_-aa-o"
);
assertContainsElements(placeholder, "@username", "@username2", "!user1", "%foo", "%fo-_-aa-o");
assertFalse(placeholder.contains("@username2@"));
}
public void testGetPlaceholderFromTranslationForDrupalStyle2() {
Set<String> placeholder = TranslationUtil.getPlaceholderFromTranslation(
"Updated URL for feed %title to %url."
);
assertContainsElements(placeholder, "%title", "%url");
}
public void testGetPlaceholderFromTranslationForKeyAndDomain() {
Set<String> placeholder = TranslationUtil.getPlaceholderFromTranslation(
getProject(), "my_foobar", "symfony"
);
assertContainsElements(placeholder, "%yaml_foobar%", "%xliff_foobar%");
}
}