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);
                }
            }
        }
        void Can_Parse_Simple_Class()
        {
            Catalog catalog = new Catalog();
            Sample instance = catalog.CreateInstance<Sample>();

            ObjectDataTree dataTree = new ObjectDataTree(instance);
            string asString = dataTree.StringValue();

            ObjectDataTree otherDataTree = new ObjectDataTree(instance);
            string otherString = otherDataTree.StringValue();

            Assert.NotEmpty(asString);
            Assert.NotEmpty(otherString);
            otherString.Should().Be(asString);
        }
        private static void RunTest(Type messageType)
        {
            IAssertEquality message = (IAssertEquality)messageType.GetMethod("CreateInstance",
                BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy).Invoke(null, null);

            ObjectDataTree messageTree = new ObjectDataTree(message);

            using (MemoryStream ms = new MemoryStream())
            {
                Serialize(new IndisposableStream(ms), message);
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);

                object result = Deserialize(new IndisposableStream(ms), messageType);
                ObjectDataTree resultTree = new ObjectDataTree(result);

                resultTree.StringValue().Should().Be(messageTree.StringValue());
                message.AssertEquality(result);
            }
        }
        private static void RunTest(Type message)
        {
            Catalog catalog = new Catalog();
            catalog.RegisterBuilder<ObjectPropertyWithCustomValue>().WithPostConstruction(o => ((ObjectPropertyWithCustomValue)o).Value = catalog.CreateInstance<CustomObject>());
            catalog.RegisterBuilder<ArrayField>().WithConstructor(() => ArrayField.CreateInstance());

            IAssertEquality instance = (IAssertEquality)catalog.CreateInstance(message);
            Assert.IsType(message, instance);

            ObjectDataTree messageTree = new ObjectDataTree(instance);

            using (MemoryStream ms = new MemoryStream())
            {
                Serialize(new IndisposableStream(ms), instance);
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);
                object result = Deserialize(new IndisposableStream(ms), message);

                ObjectDataTree resultTree = new ObjectDataTree(result);

                resultTree.StringValue().Should().Be(messageTree.StringValue());

                instance.AssertEquality(result);
            }
        }