Implementation and tests for XmlAttributeCollection.RemoveAll and XmlElement.RemoveAl...
[mono.git] / mcs / class / System.XML / System.Xml / XmlAttribute.cs
index aabfba4451b8e9c22f53b0be910becdf3c846c9f..70419b6c593c70b7864440412916865ba1eb7f26 100644 (file)
@@ -15,16 +15,16 @@ namespace System.Xml
        {
                #region Fields
 
+               private XmlLinkedNode lastChild;
                private string localName;
                private string namespaceURI;
                private string prefix;
-               private XmlElement ownerElement;
-               private string data;
 
                #endregion
 
                #region Constructor
 
+               [MonoTODO("need to set namespaceURI if prefix is recognized built-in ones like xmlns")]
                protected internal XmlAttribute (
                        string prefix, 
                        string localName, 
@@ -40,10 +40,9 @@ namespace System.Xml
 
                #region Properties
 
-               [MonoTODO]
                public override string BaseURI {
                        get {
-                               throw new NotImplementedException ();
+                               return OwnerElement.BaseURI;
                        }
                }
 
@@ -58,10 +57,11 @@ namespace System.Xml
                        }
                }
 
-               [MonoTODO]
+               [MonoTODO ("Setter.")]
                public override string InnerXml {
                        get {
-                               throw new NotImplementedException ();
+                               // Not sure why this is an override.  Passing through for now.
+                               return base.InnerXml;
                        }
 
                        set {
@@ -101,15 +101,10 @@ namespace System.Xml
 
                public virtual XmlElement OwnerElement {
                        get {
-                               return ownerElement;
+                               return base.ParentNode as XmlElement;
                        }
                }
 
-               internal void SetOwnerElement (XmlElement ownerElement)
-               {
-                       this.ownerElement = ownerElement;
-               }
-
                [MonoTODO]
                public override XmlNode ParentNode {
                        get {
@@ -117,7 +112,15 @@ namespace System.Xml
                        }
                }
 
+               [MonoTODO]
+               // We gotta do more in the set block here
+               // We need to do the proper tests and throw
+               // the correct Exceptions
                public override string Prefix {
+                       set {
+                               prefix = value;
+                       }
+                       
                        get {
                                return prefix;
                        }
@@ -132,11 +135,18 @@ namespace System.Xml
 
                public override string Value {
                        get {
-                               return data;
+                               XmlNode firstChild = FirstChild;
+                               if (firstChild == null)
+                                       return String.Empty;
+                               return firstChild.Value;
                        }
 
                        set {
-                               data = value;
+                               XmlNode firstChild = FirstChild;
+                               if (firstChild == null)
+                                       AppendChild (OwnerDocument.CreateTextNode (value));
+                               else
+                                       firstChild.Value = value;
                        }
                }
 
@@ -144,24 +154,36 @@ namespace System.Xml
 
                #region Methods
 
-               [MonoTODO]
                public override XmlNode CloneNode (bool deep)
                {
-                       throw new NotImplementedException ();
+                       XmlNode node = new XmlAttribute (prefix, localName, namespaceURI,
+                                                        OwnerDocument);
+                       if (deep) {
+                               while ((node != null) && (node.HasChildNodes)) {
+                                       AppendChild (node.NextSibling.CloneNode (true));
+                                       node = node.NextSibling;
+                               }
+                       }
+
+                       return node;
                }
 
-               [MonoTODO]
-               public override void WriteContentTo(XmlWriter w)
+               public override void WriteContentTo (XmlWriter w)
                {
-                       throw new NotImplementedException ();
+                       w.WriteString (Value);
                }
 
-               [MonoTODO]
-               public override void WriteTo(XmlWriter w)
+               public override void WriteTo (XmlWriter w)
                {
-                       throw new NotImplementedException ();
+                       w.WriteAttributeString (prefix, localName, namespaceURI, Value);
                }
 
                #endregion
+
+               internal override XmlLinkedNode LastLinkedChild {
+                       get { return lastChild; }
+
+                       set { lastChild = value; }
+               }
        }
 }