blob: 1edf485aada6ab29b014d34948984664cc48da15 [file] [log] [blame]
package com.intellij.xml.index;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.IdeaTestCase;
import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.indexing.FileBasedIndex;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/**
* @author Dmitry Avdeev
*/
@SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
public class XmlSchemaIndexTest extends CodeInsightFixtureTestCase {
private static final String NS = "http://java.jb.com/xml/ns/javaee";
@SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors")
public XmlSchemaIndexTest() {
IdeaTestCase.initPlatformPrefix();
}
public void testBuilder() throws IOException {
VirtualFile file = myFixture.copyFileToProject("spring-beans-2.0.xsd");
assert file != null;
final Collection<String> tags = XsdTagNameBuilder.computeTagNames(file.getInputStream());
assert tags != null;
assertEquals(22, tags.size());
final String ns = XsdNamespaceBuilder.computeNamespace(file.getInputStream());
assertEquals("http://www.springframework.org/schema/beans", ns);
final VirtualFile xsd = myFixture.copyFileToProject("XMLSchema.xsd");
assert xsd != null;
final String xsns = XsdNamespaceBuilder.computeNamespace(xsd.getInputStream());
assertEquals("http://www.w3.org/2001/XMLSchema", xsns);
final Collection<String> xstags = XsdTagNameBuilder.computeTagNames(xsd.getInputStream());
assert xstags != null;
assertEquals(69, xstags.size());
assertTrue(xstags.contains("schema"));
}
public void testXsdNamespaceBuilder() throws Exception {
VirtualFile file = myFixture.copyFileToProject("web-app_2_5.xsd");
final XsdNamespaceBuilder builder = XsdNamespaceBuilder.computeNamespace(new InputStreamReader(file.getInputStream()));
assertEquals(NS, builder.getNamespace());
assertEquals("2.5", builder.getVersion());
assertEquals(Arrays.asList("web-app"), builder.getTags());
}
public void testTagNameIndex() {
myFixture.copyDirectoryToProject("", "");
final Project project = getProject();
final Collection<String> tags = XmlTagNamesIndex.getAllTagNames(project);
assertTrue(tags.size() > 26);
final Collection<VirtualFile> files = XmlTagNamesIndex.getFilesByTagName("bean", project);
assertEquals(1, files.size());
Module module = ModuleUtilCore.findModuleForFile(files.iterator().next(), project);
assert module != null;
final Collection<VirtualFile> files1 = FileBasedIndex.getInstance().getContainingFiles(XmlTagNamesIndex.NAME, "web-app", module.getModuleContentScope());
assertEquals(new ArrayList<VirtualFile>(files1).toString(), 2, files1.size());
List<String> names = new ArrayList<String>(ContainerUtil.map(files1, new Function<VirtualFile, String>() {
@Override
public String fun(VirtualFile virtualFile) {
return virtualFile.getName();
}
}));
Collections.sort(names);
assertEquals(Arrays.asList("web-app_2_5.xsd", "web-app_3_0.xsd"), names);
}
public void testNamespaceIndex() {
myFixture.copyDirectoryToProject("", "");
final List<IndexedRelevantResource<String, XsdNamespaceBuilder>> files =
XmlNamespaceIndex.getResourcesByNamespace(NS,
getProject(),
myModule);
assertEquals(2, files.size());
IndexedRelevantResource<String, XsdNamespaceBuilder>
resource = XmlNamespaceIndex.guessSchema(NS, "web-app", "3.0", myModule, getProject());
assertNotNull(resource);
XsdNamespaceBuilder builder = resource.getValue();
assertEquals(NS, builder.getNamespace());
assertEquals("3.0", builder.getVersion());
assertEquals(Arrays.asList("web-app"), builder.getTags());
resource = XmlNamespaceIndex.guessSchema(NS, "web-app", "2.5", myModule, getProject());
assertNotNull(resource);
builder = resource.getValue();
assertEquals(NS, builder.getNamespace());
assertEquals("2.5", builder.getVersion());
assertEquals(Arrays.asList("web-app"), builder.getTags());
}
public void testGuessDTD() throws Exception {
myFixture.copyDirectoryToProject("", "");
final List<IndexedRelevantResource<String, XsdNamespaceBuilder>> files =
XmlNamespaceIndex.getResourcesByNamespace("foo.dtd",
getProject(),
myModule);
assertEquals(2, files.size());
PsiFile file = myFixture.configureByFile("foo.xml");
assertTrue(XmlNamespaceIndex.guessDtd("foo://bar/1/foo.dtd", file).getVirtualFile().getPath().endsWith("/1/foo.dtd"));
assertTrue(XmlNamespaceIndex.guessDtd("foo://bar/2/foo.dtd", file).getVirtualFile().getPath().endsWith("/2/foo.dtd"));
}
@Override
protected String getBasePath() {
return "/xml/tests/testData/index";
}
@Override
protected boolean isCommunity() {
return true;
}
}