using System; using System.IO; using System.Text; using System.Xml; using Xunit; namespace SabreTools.Text.Extensions.Test { public class XmlTextWriterExtensionsTests { [Fact] public void WriteRequiredAttributeString_NullInputThrow_Throws() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteStartElement("element"); Assert.Throws(() => writer.WriteRequiredAttributeString("attr", null, throwOnError: true)); writer.WriteEndElement(); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(52, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteRequiredAttributeString_NullInputNoThrow_Writes() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteStartElement("element"); writer.WriteRequiredAttributeString("attr", null, throwOnError: false); writer.WriteEndElement(); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(60, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteRequiredAttributeString_ValidInput_Writes() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteStartElement("element"); writer.WriteRequiredAttributeString("attr", "val", throwOnError: false); writer.WriteEndElement(); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(63, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteRequiredElementString_NullInputThrow_Throws() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); Assert.Throws(() => writer.WriteRequiredElementString("element", null, throwOnError: true)); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(41, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteRequiredElementString_NullInputNoThrow_Writes() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteRequiredElementString("element", null, throwOnError: false); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(60, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteRequiredElementString_ValidInput_Writes() { string expected = "val"; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteRequiredElementString("element", "val", throwOnError: false); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(63, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteOptionalAttributeString_NullInput_NoWrite() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteStartElement("element"); writer.WriteOptionalAttributeString("attr", null); writer.WriteEndElement(); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(52, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteOptionalAttributeString_EmptyInput_NoWrite() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteStartElement("element"); writer.WriteOptionalAttributeString("attr", string.Empty); writer.WriteEndElement(); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(52, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteOptionalAttributeString_ValidInput_Writes() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteStartElement("element"); writer.WriteOptionalAttributeString("attr", "val"); writer.WriteEndElement(); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(63, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteOptionalElementString_NullInput_NoWrite() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteOptionalElementString("element", null); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(41, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteOptionalElementString_EmptyInput_NoWrite() { string expected = ""; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteOptionalElementString("element", string.Empty); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(41, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } [Fact] public void WriteOptionalElementString_ValidInput_Writes() { string expected = "val"; var stream = new MemoryStream(); var writer = new XmlTextWriter(stream, Encoding.UTF8); writer.WriteStartDocument(); writer.WriteOptionalElementString("element", "val"); writer.Flush(); // Length includes UTF-8 BOM Assert.Equal(63, stream.Length); string actual = Encoding.UTF8.GetString(stream.ToArray(), 3, (int)stream.Length - 3); Assert.Equal(expected, actual); } } }