public void WriteXml()
        {
            var xml = string.Format(
                "<s0:Properties xmlns:s0=\"{0}\" xmlns:s1=\"urn\">"
                + "<s1:Property1 xpath=\"*/some-node\" />"
                + "<s1:Property2 mode=\"promote\" xpath=\"*/other-node\" />"
                + "<s1:Property3 mode=\"promote\" value=\"constant\" />"
                + "<s1:Property4 mode=\"clear\" />"
                + "</s0:Properties>",
                SchemaAnnotations.NAMESPACE);

            var builder = new StringBuilder();

            using (var writer = XmlWriter.Create(builder, new XmlWriterSettings {
                OmitXmlDeclaration = true
            }))
            {
                var sut = new PropertyExtractorCollection(
                    new XPathExtractor(new XmlQualifiedName("Property1", "urn"), "*/some-node", ExtractionMode.Write),
                    new XPathExtractor(new XmlQualifiedName("Property2", "urn"), "*/other-node", ExtractionMode.Promote),
                    new ConstantExtractor(new XmlQualifiedName("Property3", "urn"), "constant", ExtractionMode.Promote),
                    new PropertyExtractor(new XmlQualifiedName("Property4", "urn"), ExtractionMode.Clear));
                sut.WriteXml(writer);
            }

            Assert.That(builder.ToString(), Is.EqualTo(xml));
        }
 public static string Serialize(PropertyExtractorCollection extractors)
 {
     if (!extractors.Any())
     {
         return(null);
     }
     using (var stringWriter = new StringWriter())
         using (var writer = XmlWriter.Create(stringWriter, new XmlWriterSettings {
             OmitXmlDeclaration = true
         }))
         {
             extractors.WriteXml(writer);
             writer.Flush();
             return(stringWriter.ToString());
         }
 }
        public void WriteXmlForExtractorPrecedence()
        {
            var xml = string.Format(
                "<s0:Properties precedence=\"pipelineOnly\" xmlns:s0=\"{0}\" xmlns:s1=\"urn\">"
                + "<s1:Property1 xpath=\"*/some-node\" />"
                + "</s0:Properties>",
                SchemaAnnotations.NAMESPACE);

            var builder = new StringBuilder();

            using (var writer = XmlWriter.Create(builder, new XmlWriterSettings {
                OmitXmlDeclaration = true
            }))
            {
                var sut = new PropertyExtractorCollection(
                    ExtractorPrecedence.PipelineOnly,
                    new XPathExtractor(new XmlQualifiedName("Property1", "urn"), "*/some-node", ExtractionMode.Write));
                sut.WriteXml(writer);
            }

            Assert.That(builder.ToString(), Is.EqualTo(xml));
        }