From e285f978250ecd0b4140590e3ec215a041b9979c Mon Sep 17 00:00:00 2001 From: Daniel Cronqvist Date: Thu, 5 Sep 2024 21:15:39 +0200 Subject: [PATCH] Add some more tests to HasPropertiesBase --- .../Properties/HasPropertiesBaseTests.cs | 68 +++++++++++++++++++ src/DotTiled/Properties/IHasProperties.cs | 3 +- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/DotTiled.Tests/Properties/HasPropertiesBaseTests.cs b/src/DotTiled.Tests/Properties/HasPropertiesBaseTests.cs index ca173d0..4f9ab0f 100644 --- a/src/DotTiled.Tests/Properties/HasPropertiesBaseTests.cs +++ b/src/DotTiled.Tests/Properties/HasPropertiesBaseTests.cs @@ -9,6 +9,74 @@ public class HasPropertiesBaseTests public override IList GetProperties() => props; } + [Fact] + public void TryGetProperty_PropertyNotFound_ReturnsFalseAndOutIsNull() + { + // Arrange + var hasProperties = new TestHasProperties([]); + + // Act + var result = hasProperties.TryGetProperty("Test", out var property); + + // Assert + Assert.False(result); + Assert.Null(property); + } + + [Fact] + public void TryGetProperty_PropertyFound_ReturnsTrueAndOutIsProperty() + { + // Arrange + List props = [new BoolProperty { Name = "Test", Value = true }]; + var hasProperties = new TestHasProperties(props); + + // Act + var result = hasProperties.TryGetProperty("Test", out var property); + + // Assert + Assert.True(result); + Assert.NotNull(property); + Assert.Equal("Test", property.Name); + Assert.True(property.Value); + } + + [Fact] + public void GetProperty_PropertyNotFound_ThrowsKeyNotFoundException() + { + // Arrange + var hasProperties = new TestHasProperties([]); + + // Act & Assert + _ = Assert.Throws(() => hasProperties.GetProperty("Test")); + } + + [Fact] + public void GetProperty_PropertyFound_ReturnsProperty() + { + // Arrange + List props = [new BoolProperty { Name = "Test", Value = true }]; + var hasProperties = new TestHasProperties(props); + + // Act + var property = hasProperties.GetProperty("Test"); + + // Assert + Assert.NotNull(property); + Assert.Equal("Test", property.Name); + Assert.True(property.Value); + } + + [Fact] + public void GetProperty_PropertyIsWrongType_ThrowsInvalidCastException() + { + // Arrange + List props = [new BoolProperty { Name = "Test", Value = true }]; + var hasProperties = new TestHasProperties(props); + + // Act & Assert + _ = Assert.Throws(() => hasProperties.GetProperty("Test")); + } + private sealed class MapTo { public bool MapToBool { get; set; } = false; diff --git a/src/DotTiled/Properties/IHasProperties.cs b/src/DotTiled/Properties/IHasProperties.cs index 40c9853..03e610a 100644 --- a/src/DotTiled/Properties/IHasProperties.cs +++ b/src/DotTiled/Properties/IHasProperties.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Linq; namespace DotTiled; @@ -72,7 +71,7 @@ public abstract class HasPropertiesBase : IHasProperties } /// - public bool TryGetProperty(string name, [NotNullWhen(true)] out T property) where T : IProperty + public bool TryGetProperty(string name, out T property) where T : IProperty { var properties = GetProperties(); if (properties.FirstOrDefault(_properties => _properties.Name == name) is T prop)