111 lines
4.6 KiB
C#
111 lines
4.6 KiB
C#
#if UNITY_EDITOR
|
|
using System.Linq;
|
|
using AibisDream.Kit;
|
|
using AibisDream.UI;
|
|
using AibisDream.Utility;
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream.DeveloperMode.Editor
|
|
{
|
|
public sealed class DeveloperModeCoreTests
|
|
{
|
|
[Test]
|
|
public void RuntimeLogBufferEvictsOldestAndPreservesOrder()
|
|
{
|
|
var buffer = new RuntimeLogBuffer(3);
|
|
buffer.Add(LogEntry.System(LogLevel.Info, LogCategory.General, "one"));
|
|
buffer.Add(LogEntry.System(LogLevel.Warning, LogCategory.Save, "two"));
|
|
buffer.Add(LogEntry.System(LogLevel.Error, LogCategory.Yarn, "three"));
|
|
buffer.Add(LogEntry.System(LogLevel.Fatal, LogCategory.Scene, "four"));
|
|
|
|
var snapshot = buffer.Snapshot();
|
|
Assert.That(snapshot.Select(item => item.Message), Is.EqualTo(new[] { "two", "three", "four" }));
|
|
Assert.That(snapshot.Select(item => item.Sequence), Is.Ordered.Ascending);
|
|
Assert.That(snapshot.Length, Is.EqualTo(buffer.Capacity));
|
|
}
|
|
|
|
[Test]
|
|
public void RuntimeLogBufferAcceptsConcurrentWritersAndClears()
|
|
{
|
|
var buffer = new RuntimeLogBuffer(128);
|
|
System.Threading.Tasks.Parallel.For(0, 1000, index =>
|
|
buffer.Add(LogEntry.System(LogLevel.Info, LogCategory.General, index.ToString())));
|
|
|
|
var snapshot = buffer.Snapshot();
|
|
Assert.That(snapshot.Length, Is.EqualTo(128));
|
|
Assert.That(snapshot.Select(item => item.Sequence), Is.Ordered.Ascending);
|
|
buffer.Clear();
|
|
Assert.That(buffer.Snapshot(), Is.Empty);
|
|
}
|
|
|
|
[Test]
|
|
public void YarnStorageTypedSettersAndDebugSnapshotAreReadOnlyAndConsistent()
|
|
{
|
|
var go = new GameObject("YarnVariableStorage Test");
|
|
try
|
|
{
|
|
var storage = go.AddComponent<YarnVariableStorage>();
|
|
storage.SetValue("$score", 12.5f);
|
|
storage.SetValue("$global_flag", true);
|
|
storage.SetValue("$name", "AIBIS");
|
|
|
|
var snapshot = DeveloperVariableSnapshot.Capture(storage, null);
|
|
Assert.That(snapshot.Select(item => item.Name),
|
|
Is.EquivalentTo(new[] { "$score", "$global_flag", "$name" }));
|
|
Assert.That(snapshot.Single(item => item.Name == "$score").Value, Is.EqualTo("12.5"));
|
|
Assert.That(snapshot.Single(item => item.Name == "$global_flag").IsGlobal, Is.True);
|
|
Assert.That(snapshot.All(item => item.HasRuntimeOverride), Is.True);
|
|
|
|
storage.ClearLocal();
|
|
var remaining = DeveloperVariableSnapshot.Capture(storage, null);
|
|
Assert.That(remaining.Select(item => item.Name), Is.EqualTo(new[] { "$global_flag" }));
|
|
storage.Clear();
|
|
Assert.That(DeveloperVariableSnapshot.Capture(storage, null), Is.Empty);
|
|
}
|
|
finally
|
|
{
|
|
Object.DestroyImmediate(go);
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void PrefabIsConfiguredAndPersistenceReferencesIt()
|
|
{
|
|
const string prefabPath = "Assets/GameContent/Feature_MainUI/Prefabs/DeveloperModePanel.prefab";
|
|
const string scenePath = "Assets/Scenes/Persistence.unity";
|
|
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
|
|
Assert.That(prefab, Is.Not.Null);
|
|
Assert.That(prefab.activeSelf, Is.False);
|
|
var panel = prefab.GetComponent<DeveloperModePanel>();
|
|
Assert.That(panel, Is.Not.Null);
|
|
Assert.That(panel.IsConfigured, Is.True);
|
|
Assert.That(AssetDatabase.GetDependencies(scenePath), Does.Contain(prefabPath));
|
|
}
|
|
|
|
[Test]
|
|
public void PanelToggleIsNonModalAndEscapeClosesIt()
|
|
{
|
|
const string prefabPath = "Assets/GameContent/Feature_MainUI/Prefabs/DeveloperModePanel.prefab";
|
|
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
|
|
var instance = Object.Instantiate(prefab);
|
|
try
|
|
{
|
|
var panel = instance.GetComponent<DeveloperModePanel>();
|
|
var originalScale = Time.timeScale;
|
|
panel.TogglePanel();
|
|
Assert.That(panel.IsOpen, Is.True);
|
|
Assert.That(Time.timeScale, Is.EqualTo(originalScale));
|
|
Assert.That(panel.HandleEscape(), Is.True);
|
|
Assert.That(panel.IsOpen, Is.False);
|
|
}
|
|
finally
|
|
{
|
|
Object.DestroyImmediate(instance);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|