Files
AIGame/AIClient/Packages/com.unity.pipeline/Tests~/Editor/DialogStateTrackerTests.cs
T

119 lines
4.1 KiB
C#

using System;
using System.Linq;
using NUnit.Framework;
using Unity.Pipeline;
namespace Unity.Pipeline.Tests.Editor
{
class DialogStateTrackerTests
{
[Test]
public void NoDialogShown_IsDialogOpen_False_AndCurrentlyOpen_Empty()
{
var tracker = new DialogStateTracker();
Assert.IsFalse(tracker.IsDialogOpen);
Assert.IsEmpty(tracker.CurrentlyOpen);
}
[Test]
public void OnShown_MakesIsDialogOpen_True_AndAppearsInCurrentlyOpen()
{
var tracker = new DialogStateTracker();
var openedAt = DateTime.UtcNow;
tracker.OnShown(1, "native", "Title", "Message", new[] { "OK" }, "Warning", openedAt);
Assert.IsTrue(tracker.IsDialogOpen);
var open = tracker.CurrentlyOpen.Single();
Assert.AreEqual(1, open.Id);
Assert.AreEqual("native", open.Source);
Assert.AreEqual("Title", open.Title);
Assert.AreEqual("Message", open.Message);
CollectionAssert.AreEqual(new[] { "OK" }, open.Buttons);
Assert.AreEqual("Warning", open.Level);
Assert.AreEqual(openedAt, open.OpenedAtUtc);
}
[Test]
public void OnDismissed_RemovesFromCurrentlyOpen()
{
var tracker = new DialogStateTracker();
tracker.OnShown(1, "native", "Title", "Message", new[] { "OK" }, "Info", DateTime.UtcNow);
tracker.OnDismissed(1, DateTime.UtcNow);
Assert.IsFalse(tracker.IsDialogOpen);
Assert.IsEmpty(tracker.CurrentlyOpen);
}
[Test]
public void TwoDialogsOpenBeforeEitherDismissed_BothAppearInCurrentlyOpen_DismissingOneLeavesOtherActive()
{
var tracker = new DialogStateTracker();
tracker.OnShown(1, "native", "A", "a", new[] { "OK" }, "Info", DateTime.UtcNow);
tracker.OnShown(2, "managed", "B", null, null, null, DateTime.UtcNow);
Assert.AreEqual(2, tracker.CurrentlyOpen.Count);
tracker.OnDismissed(1, DateTime.UtcNow);
Assert.IsTrue(tracker.IsDialogOpen);
var remaining = tracker.CurrentlyOpen.Single();
Assert.AreEqual(2, remaining.Id);
}
[Test]
public void OnDismissed_WithUnknownId_IsNoOp()
{
var tracker = new DialogStateTracker();
Assert.DoesNotThrow(() => tracker.OnDismissed(999, DateTime.UtcNow));
Assert.IsFalse(tracker.IsDialogOpen);
}
[Test]
public void EventsSince_IncludesDismissedDialogsOpenedAtOrAfterTimestamp()
{
var tracker = new DialogStateTracker();
var beforeCommand = DateTime.UtcNow;
var openedAt = beforeCommand.AddMilliseconds(10);
tracker.OnShown(1, "native", "Title", "Message", new[] { "OK" }, "Info", openedAt);
tracker.OnDismissed(1, openedAt.AddMilliseconds(5));
var events = tracker.EventsSince(beforeCommand);
var found = events.Single();
Assert.AreEqual(1, found.Id);
Assert.IsTrue(found.DismissedAtUtc.HasValue);
}
[Test]
public void EventsSince_ExcludesDialogsOpenedBeforeTheTimestamp()
{
var tracker = new DialogStateTracker();
var openedAt = DateTime.UtcNow;
tracker.OnShown(1, "native", "Title", "Message", new[] { "OK" }, "Info", openedAt);
tracker.OnDismissed(1, openedAt.AddMilliseconds(5));
var events = tracker.EventsSince(openedAt.AddSeconds(1));
Assert.IsEmpty(events);
}
[Test]
public void EventsSince_IncludesStillOpenDialogs()
{
var tracker = new DialogStateTracker();
var beforeCommand = DateTime.UtcNow;
tracker.OnShown(1, "native", "Title", "Message", new[] { "OK" }, "Info", beforeCommand.AddMilliseconds(5));
var events = tracker.EventsSince(beforeCommand);
var found = events.Single();
Assert.AreEqual(1, found.Id);
Assert.IsFalse(found.DismissedAtUtc.HasValue);
}
}
}