public void TestCustomContent()
        {
            var writer  = new ClassContentWriter(typeof(WithCustomContent), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(
                    new WithCustomContent {
                    Arr = new[] { new CustomWrite("a"), null }, Item = new CustomWrite("b")
                },
                    xmlWriter);
                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml(
                @"
<root>
    <Arr>custom-a</Arr>
    <Arr/>
    <Item2 />
    <Item>custom-b</Item>
</root>
");
        }
        public void TestNullValue()
        {
            var writer  = new ClassContentWriter(typeof(MyClass), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(new MyClass {
                    Value = null
                }, xmlWriter);
                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml("<root><Value /></root>");
        }
        public void TestWithArrayEmpty()
        {
            var writer  = new ClassContentWriter(typeof(CWithArray), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(new CWithArray {
                    Values = new int?[0]
                }, xmlWriter);
                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml(@"
<root />");
        }
        public void TestNullableWithNullValue()
        {
            var writer  = new ClassContentWriter(typeof(C1), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(new C1 {
                    Int = 134
                }, xmlWriter);
                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml(@"
<root><Value /><Int>134</Int></root>");
        }
        public void NullArrayTest()
        {
            var writer  = new ClassContentWriter(typeof(Temp), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(new Temp {
                    Val = "zzz"
                }, xmlWriter);
                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml(@"
<root>
    <Val>zzz</Val>
</root>");
        }
        public void TestWithElementNameAttr()
        {
            var writer  = new ClassContentWriter(typeof(ClassWithName), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(new ClassWithName {
                    Value = "Qqq"
                }, xmlWriter);
                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml(@"
<root>
    <ZzZ>Qqq</ZzZ>
</root>");
        }
        public void TestWithNullAttributes()
        {
            var writer  = new ClassContentWriter(typeof(ClassWithAttributes), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(new ClassWithAttributes {
                    Attr1 = null, attr2 = 2, Value = "zzz"
                }, xmlWriter);
                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml(@"
<root Attr3="""" Attr1="""" attr2='2'>
    <SuperValue/>
    <Value>zzz</Value>
</root>");
        }
        public void TestWithSublcass()
        {
            var writer  = new ClassContentWriter(typeof(MyClassWithSubclass), collection, xmlAttributeInterpreter);
            var builder = new StringBuilder();

            using (var xmlWriter = CreateWriter(builder))
            {
                xmlWriter.WriteStartElement("root");
                writer.Write(new MyClassWithSubclass {
                    MyClassProp = new MyClass {
                        Value = "zzz"
                    }
                }, xmlWriter);

                xmlWriter.WriteEndElement();
            }
            builder.ToString().AssertEqualsXml(
                @"
<root>
    <MyClassProp>
        <Value>zzz</Value>
    </MyClassProp>
</root>");
        }