public void WriteAttributeExtensions_Invoke_ReturnsExpected(string version)
        {
            var document = new ReferencedCategoriesDocumentSubclass();

            CompareHelper.AssertEqualWriteOutput("", writer => document.WriteAttributeExtensionsEntryPoint(writer, version));

            document.AttributeExtensions.Add(new XmlQualifiedName("name1"), "value");
            document.AttributeExtensions.Add(new XmlQualifiedName("name2", "namespace"), "");
            document.AttributeExtensions.Add(new XmlQualifiedName("name3"), null);
            CompareHelper.AssertEqualWriteOutput(@"name1=""value"" d0p1:name2="""" name3=""""", writer => document.WriteAttributeExtensionsEntryPoint(writer, "version"));
        }
        public void WriteElementExtensions_Invoke_ReturnsExpected(string version)
        {
            var document = new ReferencedCategoriesDocumentSubclass();

            CompareHelper.AssertEqualWriteOutput("", writer => document.WriteElementExtensionsEntryPoint(writer, version));

            document.ElementExtensions.Add(new ExtensionObject {
                Value = 10
            });
            document.ElementExtensions.Add(new ExtensionObject {
                Value = 11
            });
            CompareHelper.AssertEqualWriteOutput(
                @"<ReferencedCategoriesDocumentTests.ExtensionObject xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/System.ServiceModel.Syndication.Tests"">
    <Value>10</Value>
</ReferencedCategoriesDocumentTests.ExtensionObject>
<ReferencedCategoriesDocumentTests.ExtensionObject xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/System.ServiceModel.Syndication.Tests"">
    <Value>11</Value>
</ReferencedCategoriesDocumentTests.ExtensionObject>", writer => document.WriteElementExtensionsEntryPoint(writer, version));
        }
        private static void VerifyRead <T>(string xmlString, Action <T> verifyAction) where T : CategoriesDocument
        {
            // ReadFrom.
            using (var stringReader = new StringReader(xmlString))
                using (XmlReader reader = XmlReader.Create(stringReader))
                {
                    var formatter = new AtomPub10CategoriesDocumentFormatter();
                    formatter.ReadFrom(reader);

                    T document = Assert.IsType <T>(formatter.Document);
                    verifyAction(document);
                }

            // ReadFrom with custom subclass.
            using (var stringReader = new StringReader(xmlString))
                using (XmlReader reader = XmlReader.Create(stringReader))
                {
                    var formatter = new AtomPub10CategoriesDocumentFormatter(typeof(InlineCategoriesDocumentSubclass), typeof(ReferencedCategoriesDocumentSubclass));
                    formatter.ReadFrom(reader);

                    if (typeof(T) == typeof(InlineCategoriesDocument))
                    {
                        InlineCategoriesDocumentSubclass document = Assert.IsType <InlineCategoriesDocumentSubclass>(formatter.Document);
                        verifyAction(document as T);
                    }
                    else
                    {
                        ReferencedCategoriesDocumentSubclass document = Assert.IsType <ReferencedCategoriesDocumentSubclass>(formatter.Document);
                        verifyAction(document as T);
                    }
                }

            // ReadXml.
            using (var stringReader = new StringReader(xmlString))
                using (XmlReader reader = XmlReader.Create(stringReader))
                {
                    reader.MoveToContent();

                    var formatter = new AtomPub10CategoriesDocumentFormatter();
                    ((IXmlSerializable)formatter).ReadXml(reader);

                    T document = Assert.IsType <T>(formatter.Document);
                    verifyAction(document);
                }

            // ReadXml with custom subclass.
            using (var stringReader = new StringReader(xmlString))
                using (XmlReader reader = XmlReader.Create(stringReader))
                {
                    reader.MoveToContent();

                    var formatter = new AtomPub10CategoriesDocumentFormatter(typeof(InlineCategoriesDocumentSubclass), typeof(ReferencedCategoriesDocumentSubclass));
                    ((IXmlSerializable)formatter).ReadXml(reader);

                    if (typeof(T) == typeof(InlineCategoriesDocument))
                    {
                        InlineCategoriesDocumentSubclass document = Assert.IsType <InlineCategoriesDocumentSubclass>(formatter.Document);
                        verifyAction(document as T);
                    }
                    else
                    {
                        ReferencedCategoriesDocumentSubclass document = Assert.IsType <ReferencedCategoriesDocumentSubclass>(formatter.Document);
                        verifyAction(document as T);
                    }
                }

            // Load.
            using (var stringReader = new StringReader(xmlString))
                using (XmlReader reader = XmlReader.Create(stringReader))
                {
                    T document = Assert.IsType <T>(CategoriesDocument.Load(reader));
                    verifyAction(document);
                }
        }
        public void WriteElementExtensions_NullWriter_ThrowsArgumentNullException()
        {
            var document = new ReferencedCategoriesDocumentSubclass();

            AssertExtensions.Throws <ArgumentNullException>("writer", () => document.WriteElementExtensionsEntryPoint(null, "version"));
        }
        public void TryParseElement_Invoke_ReturnsFalse(XmlReader reader, string version)
        {
            var document = new ReferencedCategoriesDocumentSubclass();

            Assert.False(document.TryParseElementEntryPoint(reader, version));
        }
        public void TryParseAttribute_Invoke_ReturnsFalse(string name, string ns, string value, string version)
        {
            var document = new ReferencedCategoriesDocumentSubclass();

            Assert.False(document.TryParseAttributeEntryPoint(name, ns, value, version));
        }