using System; using Newtonsoft.Json.Linq; using NUnit.Framework; using UnityEngine; namespace ShrinkDataSaver.Tests { [TestFixture] public class SaveTypesTests { // ── SaveMeta ── [Test] public void SaveMeta_LastModifiedTime_ConvertsCorrectly() { var meta = new SaveMeta { LastModified = 1700000000 // 2023-11-14 22:13:20 UTC }; var dt = meta.LastModifiedTime; Assert.AreEqual(2023, dt.Year); Assert.AreEqual(11, dt.Month); } [Test] public void SaveMeta_Defaults() { var meta = new SaveMeta(); Assert.AreEqual("New Save", meta.SlotName); Assert.AreEqual(1, meta.SaveVersion); Assert.IsFalse(meta.IsEncrypted); Assert.IsNull(meta.ScreenshotBase64); } // ── ModuleConfig ── [Test] public void ModuleConfig_Defaults() { var cfg = new ModuleConfig(); Assert.IsTrue(cfg.EnableCloudSync); Assert.AreEqual(0f, cfg.AutoSaveIntervalSeconds); Assert.IsFalse(cfg.CriticalModule); } // ── SaveOptions ── [Test] public void SaveOptions_Defaults() { var opt = new SaveOptions(); Assert.AreEqual("New Save", opt.SlotName); Assert.IsFalse(opt.CaptureScreenshot); Assert.IsNull(opt.Screenshot); Assert.IsFalse(opt.Encrypt); Assert.IsNull(opt.EncryptionKey); } // ── LambdaSaveModule ── [Test] public void LambdaSaveModule_Serialize_CallsFactory() { var data = new TestData { Value = 42 }; var module = new LambdaSaveModule("test", () => data, d => { }); Assert.AreEqual("test", module.Key); var result = module.Serialize(); Assert.AreEqual(42, result.Value); } [Test] public void LambdaSaveModule_Deserialize_CallsConsumer() { TestData received = null; var module = new LambdaSaveModule("test", () => null, d => received = d); ((ISaveModule)module).DeserializeRaw(JToken.FromObject(new TestData { Value = 99 })); Assert.IsNotNull(received); Assert.AreEqual(99, received.Value); } // ── 事件参数 ── [Test] public void SaveCompletedEventArgs_Fields() { var args = new SaveCompletedEventArgs { SlotIndex = 2, ModuleNames = new[] { "inventory", "quests" }, Timestamp = 1234567890 }; Assert.AreEqual(2, args.SlotIndex); Assert.AreEqual(2, args.ModuleNames.Length); Assert.AreEqual(1234567890, args.Timestamp); } [Test] public void LoadCompletedEventArgs_Fields() { var args = new LoadCompletedEventArgs { SlotIndex = 1, ModuleNames = new[] { "player" }, Version = 3, Timestamp = 9999 }; Assert.AreEqual(1, args.SlotIndex); Assert.AreEqual(3, args.Version); } [Test] public void MigrationCompletedEventArgs_Fields() { var args = new MigrationCompletedEventArgs { SlotIndex = 0, FromVersion = 1, ToVersion = 3 }; Assert.AreEqual(1, args.FromVersion); Assert.AreEqual(3, args.ToVersion); } [Serializable] public class TestData { public int Value; } } }