public void GetValidElementNameTrimsWhitespace()
        {
            // Arrange
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.GetValidElementName("  \tname   \t");

            // Assert
            Assert.Equal("name", result);
        }
        public void GetValidElementNameReplacesEnclosedWhitespaceWithUnderscore()
        {
            // Arrange
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.GetValidElementName("Name\tWith   Space");

            // Assert
            Assert.Equal("Name_With___Space", result);
        }
        public void GetValidElementNamePrependsXIfNonLetterAtBegin()
        {
            // Arrange
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.GetValidElementName("$Name");

            // Assert
            Assert.Equal("x$Name", result);
        }
        public void GetValidElementNameReturnsValidNameOnEmpty()
        {
            // Arrange
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.GetValidElementName(string.Empty);

            // Assert
            Assert.Equal("x", result);
        }
        public void SimplifyScalarReplacesXmlInvalidChars()
        {
            // Arrange
            var input = new ScalarValue("some<allowed>words&inbetween");
            var sut   = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, null);

            // Assert
            Assert.Equal("some&lt;allowed&gt;words&amp;inbetween", result);
        }
        public void GetValidElementNamePrependsXIfXmlAtBeginCaseInsensitive()
        {
            // Arrange
            var sut = new XmlPropertyFormatter();

            // Act + assert
            var result = sut.GetValidElementName("xmlName");

            Assert.Equal("xxmlName", result);

            // Act + assert
            var result2 = sut.GetValidElementName("XmlName");

            Assert.Equal("xXmlName", result2);
        }
        public void GetValidElementNameTrimsWhitespaceAndPrependsXIfInvalidBegin()
        {
            // Arrange
            var sut = new XmlPropertyFormatter();

            // Act + assert
            var result = sut.GetValidElementName(" xmlName ");

            Assert.Equal("xxmlName", result);

            // Act + assert
            var result2 = sut.GetValidElementName(" 4Name ");

            Assert.Equal("x4Name", result2);
        }
        public void SimplifySequenceReplacesXmlInvalidCharsInValue()
        {
            // Arrange
            var input = new SequenceValue(new List <LogEventPropertyValue>
            {
                new ScalarValue("some<allowed>words&inbetween")
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions();
            var sut     = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<sequence><item>some&lt;allowed&gt;words&amp;inbetween</item></sequence>", result);
        }
        public void SimplifyDictionaryReplacesXmlInvalidCharsInKey()
        {
            // Arrange
            var input = new DictionaryValue(new List <KeyValuePair <ScalarValue, LogEventPropertyValue> >
            {
                new KeyValuePair <ScalarValue, LogEventPropertyValue>(new ScalarValue("some<allowed>words&inbetween"), new ScalarValue("Value1"))
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions();
            var sut     = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<dictionary><item key='some&lt;allowed&gt;words&amp;inbetween'>Value1</item></dictionary>", result);
        }
        public void SimplifySequenceRendersElements()
        {
            // Arrange
            var input = new SequenceValue(new List <LogEventPropertyValue>
            {
                new ScalarValue("Value1"),
                new ScalarValue(2)
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions();
            var sut     = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<sequence><item>Value1</item><item>2</item></sequence>", result);
        }
        public void SimplifyStructureRendersElements()
        {
            // Arrange
            var input = new StructureValue(new List <LogEventProperty>
            {
                new LogEventProperty("Key1", new ScalarValue("Value1")),
                new LogEventProperty("Key2", new ScalarValue(2))
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions();
            var sut     = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<structure type=''><property key='Key1'>Value1</property><property key='Key2'>2</property></structure>", result);
        }
        public void SimplifyDictionaryRendersElements()
        {
            // Arrange
            var input = new DictionaryValue(new List <KeyValuePair <ScalarValue, LogEventPropertyValue> >
            {
                new KeyValuePair <ScalarValue, LogEventPropertyValue>(new ScalarValue("Key1"), new ScalarValue("Value1")),
                new KeyValuePair <ScalarValue, LogEventPropertyValue>(new ScalarValue("Key2"), new ScalarValue(2))
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions();
            var sut     = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<dictionary><item key='Key1'>Value1</item><item key='Key2'>2</item></dictionary>", result);
        }
        public void SimplifyStructureFixesElementNamesIfUsePropertyKeyAsElementNameIsTrue()
        {
            // Arrange
            var input = new StructureValue(new List <LogEventProperty>
            {
                new LogEventProperty("xml Key With Space", new ScalarValue("Value1"))
            }, "5structure\ttype");
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                UsePropertyKeyAsElementName = true
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<x5structure_type><xxml_Key_With_Space>Value1</xxml_Key_With_Space></x5structure_type>", result);
        }
        public void SimplifySequenceHandlesOptionOmitSequenceContainerElement()
        {
            // Arrange
            var input = new SequenceValue(new List <LogEventPropertyValue>
            {
                new ScalarValue("Value1"),
                new ScalarValue("Value2")
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                OmitSequenceContainerElement = true
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<item>Value1</item><item>Value2</item>", result);
        }
        public void SimplifySequenceUsesCustomItemElementName()
        {
            // Arrange
            var input = new SequenceValue(new List <LogEventPropertyValue>
            {
                new ScalarValue("Value1"),
                new ScalarValue("Value2")
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                ItemElementName = "element"
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<sequence><element>Value1</element><element>Value2</element></sequence>", result);
        }
        public void SimplifyStructureHandlesOptionUsePropertyKeyAsElementName()
        {
            // Arrange
            var input = new StructureValue(new List <LogEventProperty>
            {
                new LogEventProperty("Key1", new ScalarValue("Value1")),
                new LogEventProperty("Key2", new ScalarValue(2))
            }, "structuretype");
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                UsePropertyKeyAsElementName = true
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<structuretype><Key1>Value1</Key1><Key2>2</Key2></structuretype>", result);
        }
        public void SimplifyDictionaryHandlesOptionUsePropertyKeyAsElementName()
        {
            // Arrange
            var input = new DictionaryValue(new List <KeyValuePair <ScalarValue, LogEventPropertyValue> >
            {
                new KeyValuePair <ScalarValue, LogEventPropertyValue>(new ScalarValue("Key1"), new ScalarValue("Value1")),
                new KeyValuePair <ScalarValue, LogEventPropertyValue>(new ScalarValue("Key2"), new ScalarValue(2))
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                UsePropertyKeyAsElementName = true
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<dictionary><Key1>Value1</Key1><Key2>2</Key2></dictionary>", result);
        }
        public void SimplifyStructureHandlesOptionOmitStructureContainerElement()
        {
            // Arrange
            var input = new StructureValue(new List <LogEventProperty>
            {
                new LogEventProperty("Key1", new ScalarValue("Value1")),
                new LogEventProperty("Key2", new ScalarValue(2))
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                OmitStructureContainerElement = true
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<property key='Key1'>Value1</property><property key='Key2'>2</property>", result);
        }
        public void SimplifyDictionaryHandlesOptionOmitDictionaryContainerElement()
        {
            // Arrange
            var input = new DictionaryValue(new List <KeyValuePair <ScalarValue, LogEventPropertyValue> >
            {
                new KeyValuePair <ScalarValue, LogEventPropertyValue>(new ScalarValue("Key1"), new ScalarValue("Value1")),
                new KeyValuePair <ScalarValue, LogEventPropertyValue>(new ScalarValue("Key2"), new ScalarValue("Value2"))
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                OmitDictionaryContainerElement = true
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<item key='Key1'>Value1</item><item key='Key2'>Value2</item>", result);
        }
        public void SimplifyStructureHandlesOptionOmitElementIfEmpty()
        {
            // Arrange
            var input = new StructureValue(new List <LogEventProperty>
            {
                new LogEventProperty("Key1", new ScalarValue(string.Empty)),
                new LogEventProperty("Key2", new ScalarValue("Value2")),
                new LogEventProperty("Key3", new ScalarValue(null))
            });
            var options = new Serilog.Sinks.MSSqlServer.ColumnOptions.PropertiesColumnOptions {
                OmitElementIfEmpty = true
            };
            var sut = new XmlPropertyFormatter();

            // Act
            var result = sut.Simplify(input, options);

            // Assert
            Assert.Equal("<structure type=''><property key='Key2'>Value2</property></structure>", result);
        }