Browse Source

2006-04-12 Atsushi Enomoto <[email protected]>

	* System.Xml_test.dll.sources :
	  Added Test/System.Xml/XmlDefaultReader.cs.

	* XmlSchemaValidatingReader.cs : don't reject such XmlReader that
	  does not implement IXmlNamespaceResolver.

	* XmlReaderSettingsTests.cs : 
	  Added CreateValidatorFromNonIXmlNamespaceResolver() which is
	  uncovered by NVDL validator.
	* XmlDefaultReader.cs : new file for above.


svn path=/trunk/mcs/; revision=59399
Atsushi Eno 20 years ago
parent
commit
f764fa4dfd

+ 5 - 0
mcs/class/System.XML/ChangeLog

@@ -1,3 +1,8 @@
+2006-04-12  Atsushi Enomoto  <[email protected]>
+
+	* System.Xml_test.dll.sources :
+	  Added Test/System.Xml/XmlDefaultReader.cs.
+
 2006-04-03  Andrew Skiba <[email protected]>
 	
 	* run-tests.bat, run-W3C-tests.bat: fix TARGET_JVM test scripts

+ 5 - 0
mcs/class/System.XML/Mono.Xml.Schema/ChangeLog

@@ -1,3 +1,8 @@
+2006-04-12  Atsushi Enomoto <[email protected]>
+
+	* XmlSchemaValidatingReader.cs : don't reject such XmlReader that
+	  does not implement IXmlNamespaceResolver.
+
 2006-02-20  Atsushi Enomoto <[email protected]>
 
 	* XsdValidatingReader.cs : when DTD did not appear in 

+ 2 - 1
mcs/class/System.XML/Mono.Xml.Schema/XmlSchemaValidatingReader.cs

@@ -113,7 +113,8 @@ namespace Mono.Xml.Schema
 		{
 			IXmlNamespaceResolver nsResolver = reader as IXmlNamespaceResolver;
 			if (nsResolver == null)
-				throw new ArgumentException ("Argument XmlReader must implement IXmlNamespaceResolver.");
+			//	throw new ArgumentException ("Argument XmlReader must implement IXmlNamespaceResolver.");
+				nsResolver = new XmlNamespaceManager (reader.NameTable);
 
 			XmlSchemaSet schemas = settings.Schemas;
 			if (schemas == null)

+ 1 - 0
mcs/class/System.XML/System.Xml_test.dll.sources

@@ -7,6 +7,7 @@ System.Xml/XmlCharacterDataTests.cs
 System.Xml/XmlCommentTests.cs
 System.Xml/XmlConvertTests.cs
 System.Xml/XmlDeclarationTests.cs
+System.Xml/XmlDefaultReader.cs
 System.Xml/XmlDocumentEventTests.cs
 System.Xml/XmlDocumentFragmentTests.cs
 System.Xml/XmlDocumentTests.cs

+ 7 - 0
mcs/class/System.XML/Test/System.Xml/ChangeLog

@@ -1,3 +1,10 @@
+2006-04-12  Atsushi Enomoto <[email protected]>
+
+	* XmlReaderSettingsTests.cs : 
+	  Added CreateValidatorFromNonIXmlNamespaceResolver() which is
+	  uncovered by NVDL validator.
+	* XmlDefaultReader.cs : new file for above.
+
 2006-04-06  Atsushi Enomoto <[email protected]>
 
 	* XmlReaderCommonTests.cs : added test for 

+ 244 - 0
mcs/class/System.XML/Test/System.Xml/XmlDefaultReader.cs

@@ -0,0 +1,244 @@
+//
+// Commons.Xml.XmlDefaultReader.cs
+//
+// Author:
+//	Atsushi Enomoto ([email protected])
+//
+// 2003 Atsushi Enomoto "No rights reserved."
+//
+// Copyright (c) 2004 Novell Inc.
+// All rights reserved
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+//
+// Similar to SAX DefaultHandler
+//
+
+using System;
+using System.Xml;
+
+namespace Commons.Xml
+{
+	public class XmlDefaultReader : XmlReader, IXmlLineInfo
+	{
+		XmlReader reader;
+		IXmlLineInfo lineInfo;
+
+		public XmlDefaultReader (XmlReader reader)
+		{
+			this.reader = reader;
+			this.lineInfo = reader as IXmlLineInfo;
+		}
+
+		#region Properties
+		// This is the only one non-overriden property.
+		public XmlReader Reader {
+			get { return reader; }
+		}
+
+		public int LineNumber {
+			get { return lineInfo != null ? lineInfo.LineNumber : 0; }
+		}
+		
+		public int LinePosition {
+			get { return lineInfo != null ? lineInfo.LinePosition : 0; }
+		}
+		
+		public override XmlNodeType NodeType 
+		{
+			get { return reader.NodeType; }
+		}
+
+		public override string Name {
+			get { return reader.Name; }
+		}
+
+		public override string LocalName {
+			get { return reader.LocalName; }
+		}
+
+		public override string NamespaceURI {
+			get { return reader.NamespaceURI; }
+		}
+
+		public override string Prefix {
+			get { return reader.Prefix; }
+		}
+
+		public override bool HasValue {
+			get { return reader.HasValue; }
+		}
+
+		public override int Depth {
+			get { return reader.Depth; }
+		}
+
+		public override string Value {
+			get { return reader.Value; }
+		}
+
+		public override string BaseURI {
+			get { return reader.BaseURI; }
+		}
+
+		public override bool IsEmptyElement {
+			get { return reader.IsEmptyElement; }
+		}
+
+		public override bool IsDefault {
+			get { return reader.IsDefault; }
+		}
+
+		public override char QuoteChar {
+			get { return reader.QuoteChar; }
+		}
+
+		public override string XmlLang {
+			get { return reader.XmlLang; }
+		}
+
+		public override XmlSpace XmlSpace {
+			get { return reader.XmlSpace; }
+		}
+
+		public override int AttributeCount {
+			get { return reader.AttributeCount; }
+		}
+
+		public override string this [int i] {
+			get { return reader [i]; }
+		}
+
+		public override string this [string name] {
+			get { return reader [name]; }
+		}
+
+		public override string this [string localName, string namespaceURI] {
+			get { return reader [localName, namespaceURI]; }
+		}
+
+		public override bool EOF {
+			get { return reader.EOF; }
+		}
+
+		public override ReadState ReadState {
+			get { return reader.ReadState; }
+		}
+
+		public override XmlNameTable NameTable {
+			get { return reader.NameTable; }
+		}
+		#endregion
+
+		#region Methods
+
+		public override string GetAttribute (string name)
+		{
+			return reader.GetAttribute (name);
+		}
+
+		public override string GetAttribute (string localName, string namespaceURI)
+		{
+			return reader.GetAttribute (localName, namespaceURI);
+		}
+
+		public override string GetAttribute (int i)
+		{
+			return reader.GetAttribute (i);
+		}
+
+		public bool HasLineInfo ()
+		{
+			return lineInfo != null ? lineInfo.HasLineInfo () : false;
+		}
+
+		public override bool MoveToAttribute (string name)
+		{
+			return reader.MoveToAttribute (name);
+		}
+
+		public override bool MoveToAttribute (string localName, string namespaceURI)
+		{
+			return reader.MoveToAttribute (localName, namespaceURI);
+		}
+
+		public override void MoveToAttribute (int i)
+		{
+			reader.MoveToAttribute (i);
+		}
+
+		public override bool MoveToFirstAttribute ()
+		{
+			return reader.MoveToFirstAttribute ();
+		}
+
+		public override bool MoveToNextAttribute ()
+		{
+			return reader.MoveToNextAttribute ();
+		}
+
+		public override bool MoveToElement ()
+		{
+			return reader.MoveToElement ();
+		}
+
+		public override void Close ()
+		{
+			reader.Close ();
+		}
+
+		public override bool Read ()
+		{
+			return Reader.Read ();
+		}
+
+		public override string ReadString ()
+		{
+			return reader.ReadString ();
+		}
+
+		public override string ReadInnerXml ()
+		{
+			return reader.ReadInnerXml ();
+		}
+
+		public override string ReadOuterXml ()
+		{
+			return reader.ReadOuterXml ();
+		}
+
+		public override string LookupNamespace (string prefix)
+		{
+			return reader.LookupNamespace (prefix);
+		}
+
+		public override void ResolveEntity ()
+		{
+			reader.ResolveEntity ();
+		}
+
+		public override bool ReadAttributeValue () {
+			return reader.ReadAttributeValue ();
+		}
+		#endregion
+	}
+}

+ 13 - 0
mcs/class/System.XML/Test/System.Xml/XmlReaderSettingsTests.cs

@@ -293,6 +293,19 @@ namespace MonoTests.System.Xml
 			XmlReader xr = XmlReader.Create (new StringReader ("<doc/>"), settings);
 			AssertType.IsFalse (Object.ReferenceEquals (settings, xr.Settings));
 		}
+
+		[Test]
+		public void CreateValidatorFromNonIXmlNamespaceResolver ()
+		{
+			XmlReaderSettings settings = new XmlReaderSettings ();
+			settings.Schemas.Add (null, "Test/XmlFiles/xsd/xml.xsd");
+			settings.ValidationType = ValidationType.Schema;
+			XmlReader xr = XmlReader.Create (new StringReader ("<root/>"));
+			XmlReader dr = new Commons.Xml.XmlDefaultReader (xr);
+			// XmlDefaultReader does not implement IXmlNamespaceResolver
+			// but don't reject because of that fact.
+			XmlReader r = XmlReader.Create (dr, settings);
+		}
 	}
 }
 #endif