using System; using NUnit.Framework; namespace ShrinkDataSaver.Tests { [TestFixture] public class DataSerializerTests { [Serializable] private class SimpleData { public string Name = "test"; public int Score = 42; } [Serializable] private class NestedData { public string Id = "root"; public SimpleData Child = new(); public int[] Numbers = { 1, 2, 3 }; } [Test] public void Serialize_Deserialize_SimpleObject() { var original = new SimpleData { Name = "Alice", Score = 100 }; var bytes = DataSerializer.Serialize(original); var restored = DataSerializer.Deserialize(bytes); Assert.AreEqual("Alice", restored.Name); Assert.AreEqual(100, restored.Score); } [Test] public void Serialize_Deserialize_NestedObject() { var original = new NestedData { Id = "parent", Child = new SimpleData { Name = "child", Score = 99 }, Numbers = new[] { 10, 20, 30 } }; var bytes = DataSerializer.Serialize(original); var restored = DataSerializer.Deserialize(bytes); Assert.AreEqual("parent", restored.Id); Assert.AreEqual("child", restored.Child.Name); Assert.AreEqual(99, restored.Child.Score); Assert.AreEqual(new[] { 10, 20, 30 }, restored.Numbers); } [Test] public void ToJObject_FromJObject_RoundTrip() { var original = new SimpleData { Name = "Bob", Score = 77 }; var bytes = DataSerializer.Serialize(original); var jObj = DataSerializer.ToJObject(bytes); Assert.AreEqual("Bob", jObj["Name"].ToString()); Assert.AreEqual(77, (int)jObj["Score"]); var bytesBack = DataSerializer.FromJObject(jObj); var restored = DataSerializer.Deserialize(bytesBack); Assert.AreEqual("Bob", restored.Name); Assert.AreEqual(77, restored.Score); } [Test] public void Serialize_NullFields_Ignored() { var data = new SimpleData { Name = null, Score = 5 }; var bytes = DataSerializer.Serialize(data); var json = System.Text.Encoding.UTF8.GetString(bytes); Assert.IsFalse(json.Contains("Name")); Assert.IsTrue(json.Contains("Score")); } } }