Просмотр исходного кода

2010-05-28 Atsushi Enomoto <[email protected]>

	* System.Xml.Linq_test.dll.sources :
	  add System.Xml.Schema/ExtensionsTest.cs.

	* ExtensionsTest.cs :
	  New tests (not working yet), by Stefan Prutianu.


svn path=/trunk/mcs/; revision=158106
Atsushi Eno 15 лет назад
Родитель
Сommit
7d8ea89149

+ 5 - 0
mcs/class/System.Xml.Linq/ChangeLog

@@ -1,3 +1,8 @@
+2010-05-28  Atsushi Enomoto  <[email protected]>
+
+	* System.Xml.Linq_test.dll.sources :
+	  add System.Xml.Schema/ExtensionsTest.cs.
+
 2009-07-20  Jb Evain  <[email protected]>
 
 	* net_2_1_raw_System.Xml.Linq.dll: delete, and use ifdefs

+ 1 - 0
mcs/class/System.Xml.Linq/System.Xml.Linq_test.dll.sources

@@ -13,3 +13,4 @@ System.Xml.Linq/XObjectTest.cs
 System.Xml.Linq/XProcessingInstructionTest.cs
 System.Xml.Linq/XStreamingElementTest.cs
 System.Xml.Linq/XTextTest.cs
+System.Xml.Schema/ExtensionsTest.cs

+ 4 - 0
mcs/class/System.Xml.Linq/Test/System.Xml.Schema/ChangeLog

@@ -0,0 +1,4 @@
+2010-05-28  Atsushi Enomoto  <[email protected]>
+
+	* ExtensionsTest.cs :
+	  New tests (not working yet), by Stefan Prutianu.

+ 477 - 0
mcs/class/System.Xml.Linq/Test/System.Xml.Schema/ExtensionsTest.cs

@@ -0,0 +1,477 @@
+//
+// ExtensionsTest.cs - NUnit Test Cases for Extensions.cs class under 
+// System.Xml.Schema namespace found in System.Xml.Linq assembly 
+// (System.Xml.Linq.dll) 
+//
+// Author:
+//      Stefan Prutianu ([email protected])
+//
+// (C) Stefan Prutianu
+// 
+
+using NUnit.Framework;
+using System;
+using System.Xml;
+using System.IO;
+using Network =  System.Net;
+using System.Xml.Linq;
+using System.Xml.Schema;
+using System.Collections.Generic;
+using ExtensionsClass = System.Xml.Schema.Extensions;
+
+namespace MonoTests.System.Xml.Schema
+{
+
+	[TestFixture]
+	public class ExtensionsTest {
+
+		public static String xsdString;
+		public static XmlSchemaSet schemaSet;
+		public static String xmlString;
+		public static XDocument xmlDocument;
+		public static bool validationSucceded;
+
+		// initialize values for tests 
+		[SetUp]
+		public void Init () 
+		{
+		
+			xsdString = @"<?xml version='1.0'?>
+				   <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
+				     <xs:element name='note'>
+				       <xs:complexType>
+					 <xs:sequence>
+					   <xs:element name='to' type='xs:string'/>     
+					   <xs:element name='from' type='xs:string'/>
+					   <xs:element name='heading' type='xs:string'/>
+					   <xs:element name='ps' type='xs:string' 
+						maxOccurs='1' minOccurs = '0' default='Bye!'/>     
+					   <xs:element name='body'>
+					      <xs:simpleType>
+						 <xs:restriction base='xs:string'>
+						    <xs:minLength value='5'/>
+						    <xs:maxLength value='30'/>
+						 </xs:restriction>
+					      </xs:simpleType>
+					   </xs:element>        
+					 </xs:sequence>
+					 <xs:attribute name='subject' type='xs:string'
+					   default='mono'/> 
+					 <xs:attribute name='date' type='xs:date'
+					   use='required'/>            
+				       </xs:complexType>
+				     </xs:element>
+				   </xs:schema>";
+			schemaSet = new XmlSchemaSet ();
+			schemaSet.Add ("", XmlReader.Create (new StringReader (xsdString)));
+
+			xmlString = @"<?xml version='1.0'?>
+				      <note date ='2010-05-26'>
+					 <to>Tove</to>
+					 <from>Jani</from>
+					 <heading>Reminder</heading>
+					 <body>Don't forget to call me!</body>
+				      </note>";
+			xmlDocument = XDocument.Load (new StringReader (xmlString));
+			validationSucceded = false;
+		
+
+			/*
+			 * Use this method to load the above data from disk
+			 * Comment the above code when using this method.
+			 * Also the arguments for the folowing tests: XAttributeSuccessValidate
+			 * XAttributeFailValidate, XAttributeThrowExceptionValidate, XElementSuccessValidate
+			 * XElementFailValidate,XElementThrowExceptionValidate, XAttributeGetSchemaInfo
+			 * XElementGetSchemaInfo may need to be changed.
+			 */
+			//LoadOutsideDocuments ("c:\\note.xsd", "c:\\note.xml");
+		}
+
+		// Use this method to load data from disk
+		public static void LoadOutsideDocuments (String xsdDocumentPath, String xmlDocumentPath)
+		{
+			// Create a resolver with default credentials.
+			XmlUrlResolver resolver = new XmlUrlResolver ();
+			resolver.Credentials = Network.CredentialCache.DefaultCredentials; 
+			// Set the reader settings object to use the resolver.
+			XmlReaderSettings settings = new XmlReaderSettings ();
+			settings.XmlResolver = resolver;
+
+			// Create the XmlReader object.
+			XmlReader reader = XmlReader.Create (xsdDocumentPath, settings);
+	       
+			schemaSet = new XmlSchemaSet ();
+			schemaSet.Add ("", reader);
+
+			reader = XmlReader.Create (xmlDocumentPath, settings);
+			xmlDocument = XDocument.Load (reader);
+			validationSucceded = false;
+
+		}
+
+		// this gets called when a validation error occurs 
+		public void TestValidationHandler (object sender, ValidationEventArgs e)
+		{
+			validationSucceded = false;
+		}
+
+		[TearDown]
+		public void Cleanup () 
+		{
+			xsdString = null;
+			schemaSet = null;
+			xmlString = null;
+			xmlDocument = null;
+			validationSucceded = false;
+		}
+
+
+		// test succesfull validation
+		[Test]
+		[Category ("NotWorking")]
+		public void XDocumentSuccessValidate () 
+		{       
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (true, validationSucceded, "XDocumentSuccessValidate");
+		}
+
+		// test failed validation
+		[Test]
+		[Category ("NotWorking")]
+		public void XDocumentFailValidate ()
+		{       
+			String elementName = "AlteringElementName";
+			object elementValue = "AlteringElementValue";
+
+			// alter XML document to invalidate
+			XElement newElement = new XElement (elementName, elementValue);
+			xmlDocument.Root.Add (newElement);
+
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (false, validationSucceded, "XDocumentFailValidate");
+		}
+
+		/* 
+		 * test if exception is thrown when xml document does not
+		 * conform to the xml schema
+		 */
+		[Test]
+		[ExpectedException (typeof (XmlSchemaValidationException))]
+		[Category ("NotWorking")]
+		public void XDocumentThrowExceptionValidate ()
+		{
+			String elementName = "AlteringElementName";
+			object elementValue = "AlteringElementValue";
+
+			// alter XML document to invalidate
+			XElement newElement = new XElement (elementName, elementValue);
+			xmlDocument.Root.Add (newElement);
+
+			ExtensionsClass.Validate (xmlDocument, schemaSet, null);
+		}
+
+		/* 
+		 * test xml validation populating the XML tree with
+		 * the post-schema-validation infoset (PSVI)
+		 */
+		[Test]
+		[Category ("NotWorking")]
+		public void XDocumentAddSchemaInfoValidate ()
+		{      
+			// no. of elements before validation
+			IEnumerable<XElement> elements = xmlDocument.Elements ();
+			IEnumerator<XElement> elementsEnumerator = elements.GetEnumerator ();
+			int beforeNoOfElements = 0;
+			int beforeNoOfAttributes = 0;
+			while (elementsEnumerator.MoveNext ()) {
+					beforeNoOfElements++;
+					if (!elementsEnumerator.Current.HasAttributes)
+						continue;
+					else {
+						IEnumerable<XAttribute> attributes = elementsEnumerator.Current.Attributes ();
+						IEnumerator<XAttribute> attributesEnumerator = attributes.GetEnumerator ();
+						while (attributesEnumerator.MoveNext ())
+							beforeNoOfAttributes++;        
+					}    
+				}
+
+			// populate XML with PSVI
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// no. of elements after validation
+			elements = xmlDocument.Elements ();
+			elementsEnumerator = elements.GetEnumerator ();
+			int afterNoOfElements = 0;
+			int afterNoOfAttributes = 0;
+			while (elementsEnumerator.MoveNext ()) {
+				afterNoOfElements++;
+				if (!elementsEnumerator.Current.HasAttributes)
+					continue;
+				else {
+					IEnumerable<XAttribute> attributes = elementsEnumerator.Current.Attributes ();
+					IEnumerator<XAttribute> attributesEnumerator = attributes.GetEnumerator ();
+					while (attributesEnumerator.MoveNext ())
+						afterNoOfAttributes++;
+				}
+			}
+
+			Assert.GreaterOrEqual (afterNoOfAttributes, beforeNoOfAttributes, "newAttributes");
+			Assert.GreaterOrEqual (afterNoOfElements, beforeNoOfElements, "newElements");       
+		}
+
+		/*
+		 * test xml validation without populating the XML tree with 
+		 * the post-schema-validation infoset (PSVI).
+		 */
+		[Test]
+		[Category ("NotWorking")]
+		public void XDocumentNoSchemaInfoValidate ()
+		{
+			// no. of elements before validation
+			IEnumerable<XElement> elements = xmlDocument.Elements ();
+			IEnumerator<XElement> elementsEnumerator = elements.GetEnumerator ();
+			int beforeNoOfElements = 0;
+			int beforeNoOfAttributes = 0;
+			while (elementsEnumerator.MoveNext ()) {
+				beforeNoOfElements++;
+				if (!elementsEnumerator.Current.HasAttributes)
+					continue;
+				else {
+					IEnumerable<XAttribute> attributes = elementsEnumerator.Current.Attributes ();
+					IEnumerator<XAttribute> attributesEnumerator = attributes.GetEnumerator ();
+					while (attributesEnumerator.MoveNext ())
+						beforeNoOfAttributes++;
+				}
+			}
+
+			// don't populate XML with PSVI
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), false);
+			Assert.AreEqual (true, validationSucceded);
+
+			// no. of elements after validation
+			elements = xmlDocument.Elements ();
+			elementsEnumerator = elements.GetEnumerator ();
+			int afterNoOfElements = 0;
+			int afterNoOfAttributes = 0;
+			while (elementsEnumerator.MoveNext ()) {
+				afterNoOfElements++;
+				if (!elementsEnumerator.Current.HasAttributes)
+					continue;
+				else {
+					IEnumerable<XAttribute> attributes = elementsEnumerator.Current.Attributes ();
+					IEnumerator<XAttribute> attributesEnumerator = attributes.GetEnumerator ();
+					while (attributesEnumerator.MoveNext ())
+						afterNoOfAttributes++;
+				}
+			}
+
+			Assert.AreEqual (afterNoOfAttributes, beforeNoOfAttributes, "oldAttributes");
+			Assert.AreEqual (afterNoOfElements, beforeNoOfElements, "oldElements"); 
+		 
+		}
+
+		// attribute validation succeeds after change
+		[Test]
+		[Category ("NotWorking")]
+		public void XAttributeSuccessValidate ()
+		{
+			String elementName = "note";
+			String attributeName = "date";
+			object attributeValue = "2010-05-27";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// change and re-validate attribute value
+			XAttribute date = xmlDocument.Element (elementName).Attribute (attributeName);
+			date.SetValue (attributeValue);
+			ExtensionsClass.Validate (date, date.GetSchemaInfo ().SchemaAttribute,schemaSet, 
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (true, validationSucceded, "XAttributeSuccessValidate");
+		}
+
+		// attribute validation fails after change
+		[Test]
+		[Category ("NotWorking")]
+		public void XAttributeFailValidate ()
+		{
+			String elementName = "note";
+			String attributeName = "date";
+			object attributeValue = "2010-12-32";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler),true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// change and re-validate attribute value
+			XAttribute date = xmlDocument.Element (elementName).Attribute (attributeName);
+			date.SetValue (attributeValue);
+			ExtensionsClass.Validate (date, date.GetSchemaInfo ().SchemaAttribute, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (false, validationSucceded, "XAttributeFailValidate");
+		}
+
+		/* 
+		 * test if exception is thrown when xml document does not
+		 * conform to the xml schema after attribute value change
+		 */
+		[Test]
+		[ExpectedException (typeof (XmlSchemaValidationException))]
+		[Category ("NotWorking")]
+		public void XAttributeThrowExceptionValidate ()
+		{
+			String elementName = "note";
+			String attributeName =  "date";
+			object attributeValue =  "2010-12-32";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler ( TestValidationHandler),true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// change and re-validate attribute value
+			XAttribute date = xmlDocument.Element (elementName).Attribute (attributeName);
+			date.SetValue (attributeValue);
+			ExtensionsClass.Validate (date, date.GetSchemaInfo ().SchemaAttribute, schemaSet, null);
+		}
+
+		// element validation succeeds after change
+		[Test]
+		[Category ("NotWorking")]
+		public void XElementSuccessValidate ()
+		{
+			String parentElementName = "note";
+			String childElementName = "body";
+			object childElementValue = "Please call me!";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// alter element
+			XElement root = xmlDocument.Element (parentElementName);
+			root.SetElementValue (childElementName, childElementValue);
+
+			ExtensionsClass.Validate (root, root.GetSchemaInfo ().SchemaElement, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (true, validationSucceded, "XElementSuccessValidate");
+		
+		}
+
+		// element validation fails after change
+		[Test]
+		[Category ("NotWorking")]
+		public void XElementFailValidate ()
+		{
+			String parentElementName = "note";
+			String childElementName = "body";
+			object childElementValue = "Don't forget to call me! Please!";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// alter element
+			XElement root = xmlDocument.Element (parentElementName);
+			root.SetElementValue (childElementName, childElementValue);
+
+			ExtensionsClass.Validate (root, root.GetSchemaInfo ().SchemaElement, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (false, validationSucceded, "XElementFailValidate");
+
+		}
+
+		/* 
+		 * test if exception is thrown when xml document does not
+		 * conform to the xml schema after element value change
+		 */
+		[Test]
+		[ExpectedException (typeof (XmlSchemaValidationException))]
+		[Category ("NotWorking")]
+		public void XElementThrowExceptionValidate ()
+		{
+			String parentElementName = "note" ;
+			String childElementName = "body";
+			object childElementValue = "Don't forget to call me! Please!";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// alter element
+			XElement root = xmlDocument.Element (parentElementName);
+			root.SetElementValue (childElementName, childElementValue);
+
+			ExtensionsClass.Validate (root, root.GetSchemaInfo ().SchemaElement, schemaSet, null);
+		}
+
+		// test attribute schema info
+		[Test]
+		[Category ("NotWorking")]
+		public void XAttributeGetSchemaInfo ()
+		{
+			String elementName =  "note";
+			String attributeName = "date";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// validate attribute
+			XAttribute date = xmlDocument.Element (elementName).Attribute (attributeName);
+			ExtensionsClass.Validate (date, date.GetSchemaInfo ().SchemaAttribute, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (true, validationSucceded);
+
+			IXmlSchemaInfo schemaInfo =  ExtensionsClass.GetSchemaInfo (date);
+			Assert.IsNotNull (schemaInfo, "XAttributeGetSchemaInfo");
+		}
+
+		// test element schema info
+		[Test]
+		[Category ("NotWorking")]
+		public void XElementGetSchemaInfo ()
+		{
+			String elementName = "body";
+
+			// validate the entire document
+			validationSucceded = true;
+			ExtensionsClass.Validate (xmlDocument, schemaSet, 
+				new ValidationEventHandler (TestValidationHandler), true);
+			Assert.AreEqual (true, validationSucceded);
+
+			// validate element
+			XElement body = xmlDocument.Root.Element (elementName);
+			ExtensionsClass.Validate (body, body.GetSchemaInfo ().SchemaElement, schemaSet,  
+				new ValidationEventHandler (TestValidationHandler));
+			Assert.AreEqual (true, validationSucceded);
+
+			IXmlSchemaInfo schemaInfo = ExtensionsClass.GetSchemaInfo (body);
+			Assert.IsNotNull (schemaInfo, "ElementGetSchemaInfo");
+		}
+
+	}
+}