Fix for Bug 135575 [content type] Allow multiple DTDs for one content type in XMLRootElementContentDescriber
diff --git a/tests/org.eclipse.core.tests.runtime/plugin.xml b/tests/org.eclipse.core.tests.runtime/plugin.xml
index 0770748..6a80ed5 100644
--- a/tests/org.eclipse.core.tests.runtime/plugin.xml
+++ b/tests/org.eclipse.core.tests.runtime/plugin.xml
@@ -227,6 +227,38 @@
describer="org.eclipse.core.runtime.content.XMLRootElementContentDescriber:org.eclipse.core.runtime.tests.root-element"/>
<content-type
base-type="org.eclipse.core.runtime.xml"
+ name="Root Element in namespace"
+ id="ns-root-element">
+ <describer
+ class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber2">
+ <parameter name="element" value="{urn:eclipse.core.runtime.ns1}rootElement1"/>
+ <parameter name="element" value="{urn:eclipse.core.runtime.ns2}rootElement2"/>
+ </describer>
+ </content-type>
+ <content-type
+ base-type="org.eclipse.core.runtime.xml"
+ name="Wildcard element in namespace"
+ id="ns-wildcard">
+ <describer
+ class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber2">
+ <parameter name="element" value="*/org.eclipse.core.runtime.tests.some.dtd3"/>
+ <parameter name="element" value="{urn:eclipse.core.runtime.nsWild}*"/>
+ </describer>
+ </content-type>
+ <content-type
+ base-type="org.eclipse.core.runtime.xml"
+ id="empty-ns-root-element"
+ name="Root Element in empty namespace">
+ <describer
+ class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber2">
+ <parameter
+ name="element"
+ value="{}rootElement">
+ </parameter>
+ </describer>
+ </content-type>
+ <content-type
+ base-type="org.eclipse.core.runtime.xml"
name="DTD"
id="dtd">
<describer
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/content/IContentTypeManagerTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/content/IContentTypeManagerTest.java
index 8b81b4d..0132ced 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/content/IContentTypeManagerTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/content/IContentTypeManagerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -69,7 +69,15 @@
private final static String XML_UTF_16BE = "<?xml version=\"1.0\" encoding=\"UTF-16BE\"?><org.eclipse.core.runtime.tests.root/>";
private final static String XML_UTF_16LE = "<?xml version=\"1.0\" encoding=\"UTF-16LE\"?><org.eclipse.core.runtime.tests.root/>";
private final static String XML_UTF_8 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><org.eclipse.core.runtime.tests.root/>";
-
+ private static final String XML_ROOT_ELEMENT_NS_MATCH1 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><prefix:rootElement1 xmlns:prefix='urn:eclipse.core.runtime.ns1'/>";
+ private static final String XML_ROOT_ELEMENT_NS_MATCH2 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><!DOCTYPE rootElement2 SYSTEM \"org.eclipse.core.runtime.tests.nothing\"><rootElement2 xmlns='urn:eclipse.core.runtime.ns2'/>";
+ private static final String XML_ROOT_ELEMENT_NS_WRONG_ELEM = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><rootElement3 xmlns='urn:eclipse.core.runtime.ns2'/>";
+ private static final String XML_ROOT_ELEMENT_NS_WRONG_NS = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><prefix:rootElement1 xmlns='http://example.com/'/>";
+ private static final String XML_ROOT_ELEMENT_NS_MIXUP = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><rootElement2 xmlns='urn:eclipse.core.runtime.ns1'/>";
+ private static final String XML_ROOT_ELEMENT_NS_WILDCARD = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><weCouldPutAnythingHere xmlns='urn:eclipse.core.runtime.nsWild'/>";
+ private final static String XML_ROOT_ELEMENT_NS_WILDCARD2 = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?><!DOCTYPE Joker SYSTEM \"org.eclipse.core.runtime.tests.some.dtd3\"><Joker/>";
+ private final static String XML_ROOT_ELEMENT_EMPTY_NS = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?><!DOCTYPE Joker SYSTEM \"org.eclipse.core.runtime.tests.some.dtd3\"><rootElement>";
+
public static Test suite() {
// return new IContentTypeManagerTest("testRootElementAndDTDDescriber");
return new TestSuite(IContentTypeManagerTest.class);
@@ -1220,35 +1228,68 @@
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
IContentType rootElement = contentTypeManager.getContentType(RuntimeTestsPlugin.PI_RUNTIME_TESTS + ".root-element");
IContentType dtdElement = contentTypeManager.getContentType(RuntimeTestsPlugin.PI_RUNTIME_TESTS + ".dtd");
+ IContentType nsRootElement = contentTypeManager.getContentType(RuntimeTestsPlugin.PI_RUNTIME_TESTS + ".ns-root-element");
+ IContentType nsWildcard = contentTypeManager.getContentType(RuntimeTestsPlugin.PI_RUNTIME_TESTS + ".ns-wildcard");
+ IContentType emptyNsRootElement = contentTypeManager.getContentType(RuntimeTestsPlugin.PI_RUNTIME_TESTS + ".empty-ns-root-element");
+ IContentType xmlType = contentTypeManager.getContentType(Platform.PI_RUNTIME + ".xml");
+
IContentType[] contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_ISO_8859_1, "ISO-8859-1"), "fake.xml");
assertTrue("1.0", contentTypes.length > 0);
assertEquals("1.1", rootElement, contentTypes[0]);
+
// bugs 64053 and 63298
contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_EXTERNAL_ENTITY, "UTF-8"), "fake.xml");
assertTrue("2.0", contentTypes.length > 0);
assertEquals("2.1", rootElement, contentTypes[0]);
+
// bug 63625
contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_EXTERNAL_ENTITY2, "UTF-8"), "fake.xml");
- assertTrue("2.2", contentTypes.length > 0);
- assertEquals("2.3", rootElement, contentTypes[0]);
+ assertTrue("3.0", contentTypes.length > 0);
+ assertEquals("3.1", rootElement, contentTypes[0]);
+
+ // bug 135575
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NS_MATCH1, "UTF-8"), "fake.xml");
+ assertTrue("4.0", contentTypes.length > 0);
+ assertEquals("4.1", nsRootElement, contentTypes[0]);
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NS_MATCH2, "UTF-8"), "fake.xml");
+ assertTrue("4.2", contentTypes.length > 0);
+ assertEquals("4.3", nsRootElement, contentTypes[0]);
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NS_WRONG_ELEM, "UTF-8"), "fake.xml");
+ assertTrue("4.4", contentTypes.length > 0);
+ assertEquals("4.5", xmlType, contentTypes[0]);
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NS_WRONG_NS, "UTF-8"), "fake.xml");
+ assertTrue("4.6", contentTypes.length > 0);
+ assertEquals("4.7", xmlType, contentTypes[0]);
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NS_MIXUP, "UTF-8"), "fake.xml");
+ assertTrue("4.8", contentTypes.length > 0);
+ assertEquals("4.9", xmlType, contentTypes[0]);
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NS_WILDCARD, "UTF-8"), "fake.xml");
+ assertTrue("4.10", contentTypes.length > 0);
+ assertEquals("4.11", nsWildcard, contentTypes[0]);
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NS_WILDCARD2, "UTF-8"), "fake.xml");
+ assertTrue("4.12", contentTypes.length > 0);
+ assertEquals("4.13", nsWildcard, contentTypes[0]);
+ contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_EMPTY_NS, "UTF-8"), "fake.xml");
+ assertTrue("4.14", contentTypes.length > 0);
+ assertEquals("4.15", emptyNsRootElement, contentTypes[0]);
contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_DTD_US_ASCII, "US-ASCII"), "fake.xml");
- assertTrue("3.0", contentTypes.length > 0);
- assertEquals("3.1", dtdElement, contentTypes[0]);
+ assertTrue("5.0", contentTypes.length > 0);
+ assertEquals("5.1", dtdElement, contentTypes[0]);
contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_DTD_EXTERNAL_ENTITY, "UTF-8"), "fake.xml");
- assertTrue("4.0", contentTypes.length > 0);
- assertEquals("4.1", dtdElement, contentTypes[0]);
+ assertTrue("5.4", contentTypes.length > 0);
+ assertEquals("5.5", dtdElement, contentTypes[0]);
// bug 67975
IContentDescription description = contentTypeManager.getDescriptionFor(getInputStream(new byte[][] {IContentDescription.BOM_UTF_16BE, XML_ROOT_ELEMENT_NO_DECL.getBytes("UTF-16BE")}), "fake.xml", IContentDescription.ALL);
- assertTrue("5.0", description != null);
- assertEquals("5.1", rootElement, description.getContentType());
- assertEquals("5.2", IContentDescription.BOM_UTF_16BE, description.getProperty(IContentDescription.BYTE_ORDER_MARK));
-
- description = contentTypeManager.getDescriptionFor(getInputStream(new byte[][] {IContentDescription.BOM_UTF_16LE, XML_ROOT_ELEMENT_NO_DECL.getBytes("UTF-16LE")}), "fake.xml", IContentDescription.ALL);
assertTrue("6.0", description != null);
assertEquals("6.1", rootElement, description.getContentType());
- assertEquals("6.2", IContentDescription.BOM_UTF_16LE, description.getProperty(IContentDescription.BYTE_ORDER_MARK));
+ assertEquals("6.2", IContentDescription.BOM_UTF_16BE, description.getProperty(IContentDescription.BYTE_ORDER_MARK));
+
+ description = contentTypeManager.getDescriptionFor(getInputStream(new byte[][] {IContentDescription.BOM_UTF_16LE, XML_ROOT_ELEMENT_NO_DECL.getBytes("UTF-16LE")}), "fake.xml", IContentDescription.ALL);
+ assertTrue("7.0", description != null);
+ assertEquals("7.1", rootElement, description.getContentType());
+ assertEquals("7.2", IContentDescription.BOM_UTF_16LE, description.getProperty(IContentDescription.BYTE_ORDER_MARK));
// due to bug 67048, the test below fails with Crimson parser (does not handle UTF-8 BOMs)
// description = contentTypeManager.getDescriptionFor(getInputStream(new byte[][] {IContentDescription.BOM_UTF_8,XML_ROOT_ELEMENT_NO_DECL.getBytes("UTF-8")}), "fake.xml", IContentDescription.ALL);
@@ -1260,7 +1301,6 @@
contentTypes = contentTypeManager.findContentTypesFor(getInputStream(XML_ROOT_ELEMENT_NO_DECL, "UTF-8"), "test.txt");
assertTrue("8.0", contentTypes.length > 0);
assertEquals("8.1", contentTypeManager.getContentType(IContentTypeManager.CT_TEXT), contentTypes[0]);
-
}
/**