135 lines
3.7 KiB
C#
135 lines
3.7 KiB
C#
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<TestData>("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<TestData>("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;
|
|
}
|
|
}
|
|
}
|