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"]);
}
}