119 lines
4.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|