// Test.cs created with MonoDevelop // User: raul@bgta.net at 11:14 24/05/2008 // using System; using NUnit.Framework; using gTwitter.Core.Serialization; using System.Xml; using System.Reflection; using System.Xml.Serialization; namespace gTwitter.Core.Test { [TestFixture()] public class Serialization { protected void LoadObjectFromXmlToProperties(object obj, XmlDocument exDoc) { foreach(PropertyInfo property in obj.GetType().GetProperties()) { XmlElementAttribute att = (XmlElementAttribute) property.GetCustomAttributes(typeof(XmlElementAttribute),false)[0]; object value = null; if(property.PropertyType.Equals(typeof(uint))) { value = uint.Parse(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText); } else if(property.PropertyType.Equals(typeof(System.Boolean))) { value = bool.Parse(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText); } else if(property.PropertyType.Equals(typeof(long))) { value = long.Parse(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText); } else if(property.PropertyType.Equals(typeof(gTwitter.Core.Serialization.Status))) { value = Status.FromXml(exDoc.DocumentElement.SelectSingleNode(att.ElementName).OuterXml); } else if(property.PropertyType.Equals(typeof(gTwitter.Core.Serialization.User))) { value = User.FromXml(exDoc.DocumentElement.SelectSingleNode(att.ElementName).OuterXml); } else { value = exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText; } property.SetValue(obj,value, null); } } [Test()] public void UserSerializationTestCase() { string example = System.IO.File.ReadAllText("showuser_id.xml"); XmlDocument exDoc = new XmlDocument(); exDoc.LoadXml(example); User user = new User(); this.LoadObjectFromXmlToProperties(user,exDoc); XmlDocument serDoc = new XmlDocument(); serDoc.LoadXml(user.ToXml()); string err_message; foreach(PropertyInfo property in user.GetType().GetProperties()) { XmlElementAttribute att = (XmlElementAttribute) property.GetCustomAttributes(typeof(XmlElementAttribute),false)[0]; err_message = String.Format("User object serialization on {0}",att.ElementName); if(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerXml == String.Empty) { Assert.AreEqual(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText , serDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText,err_message); } else { Assert.AreEqual(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerXml , serDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerXml,err_message); } } } [Test()] public void UserDeserializationTestCase() { string err_message; string example = System.IO.File.ReadAllText("showuser_id.xml"); User user = User.FromXml(System.IO.File.ReadAllText("showuser_id.xml")); XmlDocument exDoc = new XmlDocument(); exDoc.LoadXml(example); User exUser = new User(); this.LoadObjectFromXmlToProperties(exUser,exDoc); foreach(PropertyInfo property in user.GetType().GetProperties()) { err_message = String.Format("User object deserialization on property {0}",property.Name); if(!property.GetValue(user,null).GetType().Equals(typeof(Status))) { Assert.AreEqual(property.GetValue(user,null), property.GetValue(exUser,null),err_message); } else { Assert.AreEqual(((Status)property.GetValue(user,null)).ToXml(), ((Status)property.GetValue(exUser,null)).ToXml(),err_message); } } } [Test()] public void StatusSerializationTestCase() { string example = System.IO.File.ReadAllText("status_example.xml"); XmlDocument exDoc = new XmlDocument(); exDoc.LoadXml(example); Status status = new Status(); this.LoadObjectFromXmlToProperties(status,exDoc); XmlDocument serDoc = new XmlDocument(); serDoc.LoadXml(status.ToXml()); string err_message; foreach(PropertyInfo property in status.GetType().GetProperties()) { XmlElementAttribute att = (XmlElementAttribute) property.GetCustomAttributes(typeof(XmlElementAttribute),false)[0]; err_message = String.Format("Status object serialization on {0}",att.ElementName); if(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerXml == String.Empty) { Assert.AreEqual(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText , serDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerText,err_message); } else { Assert.AreEqual(exDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerXml , serDoc.DocumentElement.SelectSingleNode(att.ElementName).InnerXml,err_message); } } } [Test()] public void StatusDeserializationTestCase() { Status status = Status.FromXml(System.IO.File.ReadAllText("status_example.xml")); string err_message = "Status object deserialization"; Assert.AreEqual(status.CreatedAt,"Fri May 23 04:28:18 +0000 2008",err_message); Assert.AreEqual(status.Id,"818006910",err_message); Assert.AreEqual(status.Text,"A preparar las cosas y piro...",err_message); Assert.AreEqual(status.Source,"web",err_message); Assert.AreEqual(status.Truncated,false,err_message); Assert.AreEqual(status.InReplyToStatusId,String.Empty,err_message); Assert.AreEqual(status.InReplyToUserId,String.Empty,err_message); Assert.AreEqual(status.Favorited,false,err_message); } [Test()] public void StatusesSerializationTestCase() { XmlDocument exDoc = new XmlDocument(); exDoc.Load("public_timeline.xml"); Statuses statuses = Statuses.FromXml(System.IO.File.ReadAllText("public_timeline.xml")); string err_message = "Statuses object Serialization"; XmlDocument resDoc = new XmlDocument(); resDoc.LoadXml(statuses.ToXml()); Assert.AreEqual(resDoc.SelectNodes("//status").Count,exDoc.SelectNodes("//status").Count,err_message); } [Test()] public void StatusesDeserializationTestCase() { XmlDocument exDoc = new XmlDocument(); exDoc.Load("public_timeline.xml"); Statuses statuses = Statuses.FromXml(System.IO.File.ReadAllText("public_timeline.xml")); string err_message = "Statuses object deserialization"; Assert.AreEqual(statuses.Count,exDoc.SelectNodes("//status").Count,err_message); } [Test()] public void ErrorSerializationTestCase() { XmlDocument exDoc = new XmlDocument(); exDoc.Load("error.xml"); Error error = new Error(); error.Message = "Rate limit exceeded. Clients may not make more than 30 requests per hour."; error.Request = "/statuses/replies.xml"; string err_message = "Error object Serialization"; XmlDocument resDoc = new XmlDocument(); resDoc.LoadXml(error.ToXml()); Assert.AreEqual(resDoc.SelectSingleNode("/hash/error").InnerText,exDoc.SelectSingleNode("/hash/error").InnerText,err_message); Assert.AreEqual(resDoc.SelectSingleNode("/hash/request").InnerText,exDoc.SelectSingleNode("/hash/request").InnerText,err_message); } [Test()] public void ErrorDeserializationTestCase() { XmlDocument exDoc = new XmlDocument(); exDoc.Load("error.xml"); Error error = Error.FromXml(System.IO.File.ReadAllText("error.xml")); string err_message = "Statuses object deserialization"; Assert.AreEqual(error.Message,exDoc.SelectSingleNode("/hash/error").InnerText,err_message); Assert.AreEqual(error.Request,exDoc.SelectSingleNode("/hash/request").InnerText,err_message); } } }