using System; using System.Linq; using Microsoft.Xna.Framework; using MonoGame.Extended.Tilemaps; namespace MonoGame.Extended.Tests; public sealed class TilemapPolylineObjectTests { [Fact] public void Constructor_SetsProperties() { var points = new Vector2[] { new(0, 0), new(10, 0), new(10, 10) }; var obj = new TilemapPolylineObject(1, new Vector2(5, 5), points); Assert.Equal(1, obj.Id); Assert.Equal(new Vector2(5, 5), obj.Position); Assert.Equal(points, obj.Points); } [Fact] public void WorldPoints_TransformsPointsToWorldCoordinates() { var points = new Vector2[] { new(0, 0), new(10, 0), new(10, 10) }; var obj = new TilemapPolylineObject(1, new Vector2(5, 5), points); var worldPoints = obj.WorldPoints.ToList(); Assert.Equal(3, worldPoints.Count); Assert.Equal(new Vector2(5, 5), worldPoints[0]); Assert.Equal(new Vector2(15, 5), worldPoints[1]); Assert.Equal(new Vector2(15, 15), worldPoints[2]); } [Fact] public void Bounds_CalculatesMinimumEnclosingRectangle() { var points = new Vector2[] { new(0, 0), new(20, 5), new(10, 15) }; var obj = new TilemapPolylineObject(1, new Vector2(10, 10), points); var bounds = obj.Bounds; // World points: (10,10), (30,15), (20,25) // Min: (10,10), Max: (30,25) Assert.Equal(10, bounds.X); Assert.Equal(10, bounds.Y); Assert.Equal(20, bounds.Width); Assert.Equal(15, bounds.Height); } [Fact] public void Bounds_WithEmptyPoints_ReturnsZeroSizeAtPosition() { var obj = new TilemapPolylineObject(1, new Vector2(10, 20), Array.Empty()); var bounds = obj.Bounds; Assert.Equal(10, bounds.X); Assert.Equal(20, bounds.Y); Assert.Equal(0, bounds.Width); Assert.Equal(0, bounds.Height); } }