Author: atsushi
Date: 2006-10-27 11:12:25 -0400 (Fri, 27 Oct 2006)
New Revision: 67031

Added:
   trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd
Modified:
   trunk/mcs/class/System.XML/ChangeLog
   trunk/mcs/class/System.XML/Makefile
   trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog
   trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs
   trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog
   
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
   trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
   trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs
   trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog
Log:
2006-10-27  Atsushi Enomoto <[EMAIL PROTECTED]>

        * XsdValidatingReader.cs : Fixed bug #79650. Enumeration facet was
          not validated for attributes. Also, simple type restriction should
          require namespace manager to resolve QNames.

        * XmlSchemaSimpleTypeRestriction.cs : for facet validation, it should
          use namespacemanager. Though the change is not perfect, thus I
          disable this change for now.

        * XmlValidatingReaderTests.cs : added bug #79650 case.

        * 79650.xsd : added test for bug #79650.

        * Makefile : added 79650.xsd to dist file.



Modified: trunk/mcs/class/System.XML/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/ChangeLog        2006-10-27 15:09:15 UTC (rev 
67030)
+++ trunk/mcs/class/System.XML/ChangeLog        2006-10-27 15:12:25 UTC (rev 
67031)
@@ -1,5 +1,9 @@
 2006-10-27  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
+       * Makefile : added 79650.xsd to dist file.
+
+2006-10-27  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
        * Makefile : added 79683.dtd to dist file.
 
 2006-10-22  Zoltan Varga  <[EMAIL PROTECTED]>

Modified: trunk/mcs/class/System.XML/Makefile
===================================================================
--- trunk/mcs/class/System.XML/Makefile 2006-10-27 15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Makefile 2006-10-27 15:12:25 UTC (rev 67031)
@@ -65,6 +65,7 @@
        Test/XmlFiles/xsd/77687inc.xsd  \
        Test/XmlFiles/xsd/78985.xml     \
        Test/XmlFiles/xsd/78985.xsd     \
+       Test/XmlFiles/xsd/79650.xsd     \
        Test/XmlFiles/xsd/inter-inc-1.xsd \
        Test/XmlFiles/xsl/91834.xml     \
        Test/XmlFiles/xsl/91834.xsl     \

Modified: trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog        2006-10-27 
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog        2006-10-27 
15:12:25 UTC (rev 67031)
@@ -1,3 +1,9 @@
+2006-10-27  Atsushi Enomoto <[EMAIL PROTECTED]>
+
+       * XsdValidatingReader.cs : Fixed bug #79650. Enumeration facet was
+         not validated for attributes. Also, simple type restriction should
+         require namespace manager to resolve QNames.
+
 2006-08-04  Atsushi Enomoto <[EMAIL PROTECTED]>
 
        * XsdIdentityState.cs : Fixed bug #78985. If there are two identical

Modified: trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs   
2006-10-27 15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs   
2006-10-27 15:12:25 UTC (rev 67031)
@@ -555,6 +555,20 @@
                        XsDatatype validatedDatatype = dt;
                        if (st != null) {
                                string normalized = validatedDatatype.Normalize 
(value);
+                               ValidateRestrictedSimpleTypeValue (st, ref 
validatedDatatype, normalized);
+                       }
+                       if (validatedDatatype != null) {
+                               try {
+                                       validatedDatatype.ParseValue (value, 
NameTable, NamespaceManager);
+                               } catch (Exception ex) {        // FIXME: 
(wishlist) It is bad manner ;-(
+                                       HandleError ("Invalidly typed data was 
specified.", ex);
+                               }
+                       }
+               }
+
+               void ValidateRestrictedSimpleTypeValue (SimpleType st, ref 
XsDatatype dt, string normalized)
+               {
+                       {
                                string [] values;
                                XsDatatype itemDatatype;
                                SimpleType itemSimpleType;
@@ -624,24 +638,17 @@
                                                 // mmm, will check later.
                                                SimpleType baseType = 
st.BaseXmlSchemaType as SimpleType;
                                                if (baseType != null) {
-                                                        
AssessStringValid(baseType, dt, value);
+                                                        
AssessStringValid(baseType, dt, normalized);
                                                }
-                                               if 
(!str.ValidateValueWithFacets (value, NameTable)) {
+                                               if 
(!str.ValidateValueWithFacets (normalized, NameTable, NamespaceManager)) {
                                                        HandleError ("Specified 
value was invalid against the facets.");
                                                        break;
                                                }
                                        }
-                                       validatedDatatype = st.Datatype;
+                                       dt = st.Datatype;
                                        break;
                                }
                        }
-                       if (validatedDatatype != null) {
-                               try {
-                                       validatedDatatype.ParseValue (value, 
NameTable, NamespaceManager);
-                               } catch (Exception ex) {        // FIXME: 
(wishlist) It is bad manner ;-(
-                                       HandleError ("Invalidly typed data was 
specified.", ex);
-                               }
-                       }
                }
 
                private object GetXsiType (string name)
@@ -954,12 +961,20 @@
                        if (dt != SimpleType.AnySimpleType || 
attr.ValidatedFixedValue != null) {
                                string normalized = dt.Normalize (reader.Value);
                                object parsedValue = null;
+
+                               // check part of 3.14.4 StringValid
+                               SimpleType st = attr.AttributeType as 
SimpleType;
+                               if (st != null)
+                                       ValidateRestrictedSimpleTypeValue (st, 
ref dt, normalized);
+
                                try {
                                        parsedValue = dt.ParseValue 
(normalized, reader.NameTable, NamespaceManager);
                                } catch (Exception ex) { // FIXME: (wishlist) 
It is bad manner ;-(
                                        HandleError ("Attribute value is 
invalid against its data type " + dt.TokenizedType, ex);
                                }
-                               if (attr.ValidatedFixedValue != null && 
attr.ValidatedFixedValue != normalized) {
+
+                               if (attr.ValidatedFixedValue != null &&
+                                   attr.ValidatedFixedValue != normalized) {
                                        HandleError ("The value of the 
attribute " + attr.QualifiedName + " does not match with its fixed value.");
                                        parsedValue = dt.ParseValue 
(attr.ValidatedFixedValue, reader.NameTable, NamespaceManager);
                                }

Modified: trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog      2006-10-27 
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog      2006-10-27 
15:12:25 UTC (rev 67031)
@@ -1,3 +1,9 @@
+2006-10-27  Atsushi Enomoto <[EMAIL PROTECTED]>
+
+       * XmlSchemaSimpleTypeRestriction.cs : for facet validation, it should
+         use namespacemanager. Though the change is not perfect, thus I
+         disable this change for now.
+
 2006-07-27  Atsushi Enomoto <[EMAIL PROTECTED]>
 
        * XmlSchema.cs, XmlSchemaSimpleTypeList.cs,

Modified: 
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
===================================================================
--- 
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs  
    2006-10-27 15:09:15 UTC (rev 67030)
+++ 
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs  
    2006-10-27 15:12:25 UTC (rev 67031)
@@ -586,7 +586,7 @@
                                        if (ActualBaseSchemaType is 
XmlSchemaSimpleType) {
                                                XmlSchemaSimpleTypeContent st = 
((XmlSchemaSimpleType) ActualBaseSchemaType).Content as 
XmlSchemaSimpleTypeContent;
                                                if (st is 
XmlSchemaSimpleTypeRestriction) {
-                                                       if 
(((XmlSchemaSimpleTypeRestriction)st).ValidateValueWithFacets(value, null)) {
+                                                       if 
(((XmlSchemaSimpleTypeRestriction)st).ValidateValueWithFacets(value, null, 
null)) {
                                                                return ret;
                                                        } else {
                                                                return null;
@@ -601,7 +601,7 @@
                        return ret;
                }
 
-               internal bool ValidateValueWithFacets (string value, 
XmlNameTable nt)
+               internal bool ValidateValueWithFacets (string value, 
XmlNameTable nt, XmlNamespaceManager nsmgr)
                {
                        /*
                         * FIXME: Shouldn't this be recursing more? What if 
this is a 
@@ -612,12 +612,12 @@
 
                        // numeric
                        if (listType != null)
-                               return ValidateListValueWithFacets (value, nt);
+                               return ValidateListValueWithFacets (value, nt, 
nsmgr);
                        else
-                               return ValidateNonListValueWithFacets (value, 
nt);
+                               return ValidateNonListValueWithFacets (value, 
nt, nsmgr);
                }
 
-               private bool ValidateListValueWithFacets (string value, 
XmlNameTable nt)
+               private bool ValidateListValueWithFacets (string value, 
XmlNameTable nt, XmlNamespaceManager nsmgr)
                {
                        string [] list = ((XsdAnySimpleType) 
XmlSchemaDatatype.FromName ("anySimpleType", 
XmlSchema.Namespace)).ParseListValue (value, nt);
 
@@ -634,7 +634,16 @@
                                for (int l = 0; l < list.Length; l++) {
                                        bool matched = false;
                                        for (int i = 0; i < 
this.enumarationFacetValues.Length; i++) {
+#if true
+                                               // FIXME: enum values must be 
checked by value space, not literal space
                                                if (list [l] == 
this.enumarationFacetValues [i]) {
+#else
+                                               // FIXME: enum values should be 
parsed only once.
+                                               XsdAnySimpleType dt = 
getDatatype ();
+                                               if (dt == null)
+                                                       dt = (XsdAnySimpleType) 
XmlSchemaDatatype.FromName ("anySimpleType", XmlSchema.Namespace);
+                                               if 
(XmlSchemaUtil.IsSchemaDatatypeEquals (dt, dt.ParseValue (list [l], nt, nsmgr), 
dt, dt.ParseValue (this.enumarationFacetValues [i], nt, nsmgr))) {
+#endif
                                                        matched = true;
                                                        break;
                                                }
@@ -658,7 +667,7 @@
                        return true;
                }
 
-               private bool ValidateNonListValueWithFacets (string value, 
XmlNameTable nt)
+               private bool ValidateNonListValueWithFacets (string value, 
XmlNameTable nt, XmlNamespaceManager nsmgr)
                {
                        // pattern
                        // Patterns are the only facets that need to be checked 
on this
@@ -674,11 +683,23 @@
                                if (!matched)
                                        return false;
                        }
+
+                       XsdAnySimpleType dt = getDatatype ();
+
                        // enumeration
                        if (this.enumarationFacetValues != null) {
                                bool matched = false;
+                               XsdAnySimpleType edt = dt;
+                               if (edt == null)
+                                       edt = (XsdAnySimpleType) 
XmlSchemaDatatype.FromName ("anySimpleType", XmlSchema.Namespace);
                                for (int i = 0; i < 
this.enumarationFacetValues.Length; i++) {
-                                       if (value == 
this.enumarationFacetValues [i]) {
+#if true
+                                       // FIXME: enum values must be checked 
by value space, not literal space
+                                       if (value == enumarationFacetValues 
[i]) {
+#else
+                                       // FIXME: the enum value should be 
parsed only once.
+                                       if 
(XmlSchemaUtil.IsSchemaDatatypeEquals (edt, edt.ParseValue (value, nt, nsmgr), 
edt, edt.ParseValue (this.enumarationFacetValues [i], nt, nsmgr))) {
+#endif
                                                matched = true;
                                                break;
                                        }
@@ -686,7 +707,6 @@
                                if (!matched)
                                        return false;
                        }
-                       XsdAnySimpleType dt = getDatatype ();
                        
                        // Need to skip length tests for 
                        // types derived from QName or NOTATION

Modified: trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog        2006-10-27 
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog        2006-10-27 
15:12:25 UTC (rev 67031)
@@ -1,5 +1,9 @@
 2006-10-27  Atsushi Enomoto <[EMAIL PROTECTED]>
 
+       * XmlValidatingReaderTests.cs : added bug #79650 case.
+
+2006-10-27  Atsushi Enomoto <[EMAIL PROTECTED]>
+
        * XmlTextReaderTests.cs : added bug #79683 case.
 
 2006-09-26  Atsushi Enomoto <[EMAIL PROTECTED]>

Modified: trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs      
2006-10-27 15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs      
2006-10-27 15:12:25 UTC (rev 67031)
@@ -319,5 +319,18 @@
                        while (reader.Read ())
                                ;
                }
+
+               [Test] // bug #79650
+               [ExpectedException (typeof (XmlSchemaException))]
+               public void EnumerationFacetOnAttribute ()
+               {
+                       string xml = "<test mode='NOT A ENUMERATION VALUE' />";
+                       XmlSchema schema = XmlSchema.Read (new XmlTextReader 
("Test/XmlFiles/xsd/79650.xsd"), null);
+                       XmlValidatingReader xvr = new XmlValidatingReader (xml, 
XmlNodeType.Document, null);
+                       xvr.ValidationType = ValidationType.Schema;
+                       xvr.Schemas.Add (schema);
+                       while (!xvr.EOF)
+                               xvr.Read ();
+               }
        }
 }

Added: trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd
===================================================================
--- trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd      2006-10-27 
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd      2006-10-27 
15:12:25 UTC (rev 67031)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<xs:schema id="schema" xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+    <xs:simpleType name="ModeType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="on" />
+            <xs:enumeration value="off" />
+        </xs:restriction>
+    </xs:simpleType>
+    <xs:element name="test">
+        <xs:complexType>
+            <xs:sequence/>
+            <xs:attribute name="mode" type="ModeType" use="required" />
+        </xs:complexType>
+    </xs:element>
+</xs:schema>

Modified: trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog      2006-10-27 
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog      2006-10-27 
15:12:25 UTC (rev 67031)
@@ -1,3 +1,7 @@
+2006-10-27  Atsushi Enomoto <[EMAIL PROTECTED]>
+
+       * 79650.xsd : added test for bug #79650.
+
 2006-08-04  Atsushi Enomoto <[EMAIL PROTECTED]>
 
        * 78985.xsd, 78985.xml : test for bug #78985.

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to