private static void RunObjectTreeTest(Type serializerType, Type messageType) { ISerializerAdapter serializer = (ISerializerAdapter)Activator.CreateInstance(serializerType); object message = catalog.CreateInstance(messageType); using (MemoryStream ms = new MemoryStream()) { object output = null; bool ex = false; try { serializer.Serialize(new IndisposableStream(ms), message); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); output = serializer.Deserialize(new IndisposableStream(ms), messageType); } catch (Exception x) { Assert.Inconclusive("The the serializer has at least thrown an exception instead of unexpected results {0}", x); ex = true; } if (!ex) { ObjectDataTree messageData = new ObjectDataTree(message); ObjectDataTree outputData = new ObjectDataTree(output); Assert.AreEqual(messageData.StringValue(), outputData.StringValue()); (message as IAssertEquality).AssertEquality(output); } } }
private string StringValue(string prefix) { string name = string.IsNullOrEmpty(this.Name) ? string.Empty : string.Format("{0}:", this.Name); if (this.Instance == null) { return string.Format("{0}{1}\"NULL\"", prefix, name); } if (IsComparable(this.Type)) { return string.Format("{0}{1}\"{2}\"", prefix, name, GetInstanceString(this.Instance).Replace("\"", "\\\"")); } StringBuilder builder = new StringBuilder(); if (typeof(IEnumerable).IsAssignableFrom(this.Type)) { builder.AppendFormat("{0}{1}[\n", prefix, name); foreach (object item in this.Instance as IEnumerable) { var obj = new ObjectDataTree(item); builder.AppendLine(obj.StringValue(string.Concat(prefix, "\t"))); } builder.AppendFormat("{0}]\n", prefix); } else { builder.AppendFormat("{0}{1}{{\n", prefix, name); foreach (var o in this.Fields) { builder.AppendLine(o.StringValue(string.Concat(prefix, "\t"))); } builder.AppendFormat("{0}}}\n", prefix); } return builder.ToString(); }