diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..70cefcd
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,8 @@
+root = true
+
+[*.cs]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = true
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 8a30d25..aa2d18e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
*.user
*.userosscache
*.sln.docstates
+.vscode/
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
diff --git a/DotTiled.Tests/DotTiled.Tests.csproj b/DotTiled.Tests/DotTiled.Tests.csproj
new file mode 100644
index 0000000..fe5627e
--- /dev/null
+++ b/DotTiled.Tests/DotTiled.Tests.csproj
@@ -0,0 +1,27 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+ false
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DotTiled.Tests/MapTests.cs b/DotTiled.Tests/MapTests.cs
new file mode 100644
index 0000000..450e170
--- /dev/null
+++ b/DotTiled.Tests/MapTests.cs
@@ -0,0 +1,259 @@
+using System.Text;
+using System.Xml.Serialization;
+using DotTiled;
+
+namespace DotTiled.Tests;
+
+public class MapTests
+{
+ [Fact]
+ public void ReadXml_Always_SetsRequiredAttributes()
+ {
+ // Arrange
+ var xml =
+ """
+
+
+ """;
+ var xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
+
+ // Act
+ var map = Map.LoadFromStream(xmlStream);
+
+ // Assert
+ // Assert all required properties are set
+ Assert.Equal("1.2", map.Version);
+ Assert.Equal("class", map.Class);
+ Assert.Equal(Orientation.Orthogonal, map.Orientation);
+ Assert.Equal(RenderOrder.RightDown, map.RenderOrder);
+ Assert.Equal(5, map.CompressionLevel);
+ Assert.Equal(10u, map.Width);
+ Assert.Equal(10u, map.Height);
+ Assert.Equal(32u, map.TileWidth);
+ Assert.Equal(32u, map.TileHeight);
+ Assert.Equal(0.5f, map.ParallaxOriginX);
+ Assert.Equal(0.5f, map.ParallaxOriginY);
+ Assert.Equal(1u, map.NextLayerId);
+ Assert.Equal(1u, map.NextObjectId);
+ Assert.True(map.Infinite);
+
+ // Assert all optional properties are set to their default values
+ Assert.Null(map.TiledVersion);
+ Assert.Null(map.HexSideLength);
+ Assert.Null(map.StaggerAxis);
+ Assert.Null(map.StaggerIndex);
+ Assert.Null(map.BackgroundColor);
+ }
+
+ public static IEnumerable