using System; using System.Collections; using System.Collections.Specialized; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; using AmerEx.Shared.Test; using NUnit.Framework; /// /// Dictionary used specifically for passing DevExperience Cache messages over the WebServices /// [Serializable] public class TableAgeDictionary : IXmlSerializable { private readonly IDictionary dictionary; public TableAgeDictionary() { dictionary = new HybridDictionary(); } public TableAgeDictionary(IDictionary dictionary) { this.dictionary = dictionary; } public IDictionary Dictionary { get { return dictionary; } } #region IXmlSerializable Members XmlSchema IXmlSerializable.GetSchema() { return null; } void IXmlSerializable.ReadXml(XmlReader reader) { reader.Read(); reader.ReadStartElement("dictionary"); if (reader.NodeType != XmlNodeType.EndElement) { while (reader.NodeType != XmlNodeType.EndElement) { reader.ReadStartElement("item"); string key = reader.ReadElementString("key"); long value = long.Parse(reader.ReadElementString("value")); reader.ReadEndElement(); dictionary.Add(key, value); } reader.ReadEndElement(); } reader.ReadEndElement(); } void IXmlSerializable.WriteXml(XmlWriter writer) { writer.WriteStartElement("dictionary"); if (dictionary != null) { foreach (object key in dictionary.Keys) { object value = dictionary[key]; writer.WriteStartElement("item"); writer.WriteElementString("key", key.ToString()); writer.WriteElementString("value", value.ToString()); writer.WriteEndElement(); } } writer.WriteEndElement(); } #endregion } [TestFixture] public class TableAgeDictionaryFixture { private static TableAgeDictionary RunTrip(TableAgeDictionary dictionary) { string xmlString = XmlUtil.Encode(dictionary); TableAgeDictionary passedDictionary = XmlUtil.Decode(xmlString); Assert.AreEqual(dictionary.Dictionary.Count, passedDictionary.Dictionary.Count); Assert.AreEqual(xmlString, XmlUtil.Encode(passedDictionary)); return passedDictionary; } [Test] public void SimpleEmptyRoundTripTest() { TableAgeDictionary trip = RunTrip(new TableAgeDictionary()); Assert.AreEqual(0, trip.Dictionary.Count); } [Test] public void SimpleFullRoundTripTest() { TableAgeDictionary source = new TableAgeDictionary(); source.Dictionary.Add("key", 1); source.Dictionary.Add("key2", 2); TableAgeDictionary decode = RunTrip(source); Assert.AreEqual(2, decode.Dictionary.Count); Assert.AreEqual(1, decode.Dictionary["key"]); Assert.AreEqual(2, decode.Dictionary["key2"]); } }