package fr.adrienbrault.idea.symfony2plugin.tests.stubs.indexes;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.containers.ArrayListSet;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.indexing.FileBasedIndex;
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.TranslationStubIndex;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.Set;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see TranslationStubIndex
*/
public class TranslationStubIndexTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("messages.fr.xlf"));
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("messages_two.fr.xlf"));
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("foo.fr.xliff"));
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("foo.fr.xliff"));
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("foo.fr.xliff"));
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("fr.xlf"));
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("fr.xlf","foo.bar.de.xlf"));
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("fr.xlf",".de.xlf"));
myFixture.copyFileToProject("apple.de.yml", "Resources/translations/apple.de.yml");
myFixture.copyFileToProject("car.de.yml", "Resources/translations/car.de.yml");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testThatDomainFromFileIsExtracted() {
assertIndexContains(TranslationStubIndex.KEY, "foo.bar");
assertIndexNotContains(TranslationStubIndex.KEY, "");
}
public void testThatDomainAndTranslationsKeyOfXlfIsInIndex() {
assertIndexContains(TranslationStubIndex.KEY, "messages");
assertContainsElements(getDomainKeys("messages"), "Symfony is great");
}
public void testThatDomainAndTranslationsKeyOfXliffIsInIndex() {
assertIndexContains(TranslationStubIndex.KEY, "foo");
assertContainsElements(getDomainKeys("foo"), "Symfony is great xliff");
}
public void testThatDomainAndTranslationsKeyOfXliffv2IsInIndex() {
assertIndexContains(TranslationStubIndex.KEY, "messages_two");
assertContainsElements(getDomainKeys("messages_two"), "hello xliff v2");
assertIndexContains(TranslationStubIndex.KEY, "messages_two");
assertContainsElements(getDomainKeys("messages_two"), "hello xliff v2 group less");
}
public void testThatDomainAndTranslationsKeyOfYamlFileIsInIndex() {
assertIndexContains(TranslationStubIndex.KEY, "apple");
assertContainsElements(getDomainKeys("apple"), "yaml_weak.symfony.great");
assertContainsElements(getDomainKeys("apple"), "yaml_weak.symfony.greater than");
assertContainsElements(getDomainKeys("apple"), "yaml_weak.symfony.greater than equals");
assertContainsElements(getDomainKeys("apple"), "yaml_weak.symfony.more.lines");
assertContainsElements(getDomainKeys("apple"), "yaml_weak.symfony.more.lines_2");
assertFalse(getDomainKeys("apple").contains("yaml_weak.symfony"));
assertFalse(getDomainKeys("apple").contains("yaml_weak.symfony"));
assertFalse(getDomainKeys("apple").contains("yaml_weak"));
assertIndexContains(TranslationStubIndex.KEY, "car");
assertContainsElements(getDomainKeys("car"), "foo_yaml.symfony.great");
}
public void testThatEmptyXliffDomainShouldNotIndexAsLanguageKey() {
assertIndexNotContains(TranslationStubIndex.KEY, "fr");
}
public void testThatResnameXliffShouldBeUsedForKey() {
assertContainsElements(getDomainKeys("messages"), "resname.symfony_is_great");
}
@NotNull
private Set<String> getDomainKeys(@NotNull String domain) {
Set<String> uniqueKeySet = new ArrayListSet<String>();
for(Set<String> splits: FileBasedIndex.getInstance().getValues(TranslationStubIndex.KEY, domain, GlobalSearchScope.allScope(getProject()))) {
ContainerUtil.addAll(uniqueKeySet, splits);
}
return uniqueKeySet;
}
}