// Copyright (c) Craftwork Games. All rights reserved. // Licensed under the MIT license. // See LICENSE file in the project root for full license information. using System.IO; using System.Xml; using Microsoft.Xna.Framework; using MonoGame.Extended.Serialization.Xml; namespace MonoGame.Extended.Tests.Serialization.Xml; public class XmlReaderExtensionsTests { private static XmlReader CreateXmlReader(string xml) { StringReader stringReader = new StringReader(xml); XmlReader xmlReader = XmlReader.Create(stringReader); xmlReader.MoveToContent(); return xmlReader; } [Fact] public void GetAttributeInt_ValidValue_ReturnsCorrectInt() { int expected = 42; string xml = $""; using XmlReader reader = CreateXmlReader(xml); int actual = reader.GetAttributeInt("testAttr"); Assert.Equal(expected, actual); } [Fact] public void GetAttributeInt_MissingAttribute_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Fact] public void GetAttributeInt_InvalidFormat_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Fact] public void GetAttributeFloat_ValidValue_ReturnsCorrectFloat() { float expected = 3.14f; string xml = $""; using XmlReader reader = CreateXmlReader(xml); float actual = reader.GetAttributeFloat("testAttr"); Assert.Equal(expected, actual, precision: 5); } [Fact] public void GetAttributeFloat_MissingAttribute_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Fact] public void GetAttributeFloat_InvalidFormat_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Theory] [InlineData("true", true)] [InlineData("false", false)] [InlineData("True", true)] [InlineData("False", false)] public void GetAttributeBool_ValidValues_ReturnsCorrectBool(string value, bool expected) { string xml = $""; using XmlReader reader = CreateXmlReader(xml); bool actual = reader.GetAttributeBool("testAttr"); Assert.Equal(expected, actual); } [Fact] public void GetAttributeBool_InvalidFormat_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Theory] [InlineData(nameof(PlayerIndex.One), PlayerIndex.One)] [InlineData(nameof(PlayerIndex.Two), PlayerIndex.Two)] [InlineData(nameof(PlayerIndex.Three), PlayerIndex.Three)] [InlineData(nameof(PlayerIndex.Four), PlayerIndex.Four)] public void GetAttributeEnum_ValidValues_ReturnsCorrectEnum(string value, PlayerIndex expected) { string xml = $""; using XmlReader reader = CreateXmlReader(xml); PlayerIndex actual = reader.GetAttributeEnum("testAttr"); Assert.Equal(expected, actual); } [Fact] public void GetAttributeEnum_MissingAttribute_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Fact] public void GetAttributeEnum_InvalidValue_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Fact] public void GetAttributeRectangle_ValidValue_ReturnsCorrectRectangle() { Rectangle expected = new Rectangle(1, 2, 3, 4); string xml = $""; using XmlReader reader = CreateXmlReader(xml); Rectangle actual = reader.GetAttributeRectangle("testAttr"); Assert.Equal(expected, actual); } [Fact] public void GetAttributeRectangle_MissingAttribute_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Theory] [InlineData("1,2,3")] [InlineData("1,2,3,4,5")] [InlineData("a,b,c,d")] [InlineData("1.5,2,3,4")] public void GetAttributeRectangle_InvalidFormat_ThrowsXmlException(string value) { string xml = $""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Fact] public void GetAttributeVector2_ValidValue_ReturnsCorrectVector2() { Vector2 expected = new Vector2(1.0f, 2.0f); string xml = $""; using XmlReader reader = CreateXmlReader(xml); Vector2 actual = reader.GetAttributeVector2("testAttr"); Assert.Equal(expected, actual); } [Fact] public void GetAttributeVector2_MissingAttribute_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Theory] [InlineData("3.14")] [InlineData("1,2,3")] [InlineData("a,b")] public void GetAttributeVector2_InvalidFormat_ThrowsXmlException(string value) { string xml = $""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Fact] public void GetAttributeVector3_ValidValue_ReturnsCorrectVector3() { Vector3 expected = new Vector3(1.0f, 2.0f, 3.0f); string xml = $""; using XmlReader reader = CreateXmlReader(xml); Vector3 actual = reader.GetAttributeVector3("testAttr"); Assert.Equal(expected, actual); } [Fact] public void GetAttributeVector3_MissingAttribute_ThrowsXmlException() { string xml = ""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } [Theory] [InlineData("1.0,2.0")] [InlineData("1,2,3,4")] [InlineData("a,b,c")] public void GetAttributeVector3_InvalidFormat_ThrowsXmlException(string value) { string xml = $""; using XmlReader reader = CreateXmlReader(xml); Assert.Throws(() => reader.GetAttributeInt("testAttr")); } }