88 lines
3.2 KiB
C#
88 lines
3.2 KiB
C#
using AcDream.App.UI.Layout;
|
|
|
|
namespace AcDream.App.Tests.UI.Layout;
|
|
|
|
public sealed class RetailFixtureConformanceTests
|
|
{
|
|
[Theory]
|
|
[MemberData(nameof(LayoutCases))]
|
|
public void ProductionFixture_PreservesRootAndCanonicalStates(
|
|
Func<ElementInfo> load,
|
|
uint rootId,
|
|
uint rootType,
|
|
float width,
|
|
float height,
|
|
int minimumNodeCount)
|
|
{
|
|
var root = load();
|
|
|
|
Assert.Equal(rootId, root.Id);
|
|
Assert.Equal(rootType, root.Type);
|
|
Assert.Equal(width, root.Width);
|
|
Assert.Equal(height, root.Height);
|
|
Assert.True(CountNodes(root) >= minimumNodeCount);
|
|
Assert.Contains(UiStateInfo.DirectStateId, root.States.Keys);
|
|
Assert.Contains(Enumerate(root), element => element.States.Count > 1);
|
|
Assert.Contains(Enumerate(root), element =>
|
|
element.States.Values.Any(state => state.Properties.Values.Count > 0));
|
|
}
|
|
|
|
[Fact]
|
|
public void ToolbarFixture_ContainsObjectButtonsAndRetailButtonStates()
|
|
{
|
|
var root = FixtureLoader.LoadToolbarInfos();
|
|
|
|
var character = Find(root, 0x10000199u);
|
|
var inventory = Find(root, 0x100001B1u);
|
|
|
|
Assert.NotNull(character);
|
|
Assert.NotNull(inventory);
|
|
Assert.Contains(1u, character.States.Keys); // Normal
|
|
Assert.Contains(3u, character.States.Keys); // Normal_pressed
|
|
Assert.Contains(6u, character.States.Keys); // Highlight
|
|
}
|
|
|
|
[Fact]
|
|
public void InventoryFixture_ContainsMountedBackpackAndPaperdollContent()
|
|
{
|
|
var root = FixtureLoader.LoadInventoryInfos();
|
|
|
|
Assert.NotNull(Find(root, InventoryController.ContentsGridId));
|
|
Assert.NotNull(Find(root, InventoryController.ContainerListId));
|
|
Assert.NotNull(Find(root, InventoryController.BurdenMeterId));
|
|
Assert.NotNull(Find(root, 0x100001D5u)); // mounted paperdoll viewport
|
|
}
|
|
|
|
[Fact]
|
|
public void CharacterFixture_ContainsAllThreeRuntimePages()
|
|
{
|
|
var root = FixtureLoader.LoadCharacterInfos();
|
|
|
|
Assert.NotNull(Find(root, CharacterStatController.AttributesPageId));
|
|
Assert.NotNull(Find(root, CharacterStatController.SkillsPageId));
|
|
Assert.NotNull(Find(root, CharacterStatController.TitlesPageId));
|
|
}
|
|
|
|
public static TheoryData<Func<ElementInfo>, uint, uint, float, float, int> LayoutCases
|
|
=> new()
|
|
{
|
|
{ FixtureLoader.LoadToolbarInfos, 0x10000191u, 0x10000007u, 300f, 122f, 20 },
|
|
{ FixtureLoader.LoadInventoryInfos, 0x100001CCu, 0x10000023u, 300f, 362f, 40 },
|
|
{ FixtureLoader.LoadPaperdollInfos, 0x100001D4u, 0x10000024u, 224f, 214f, 20 },
|
|
{ FixtureLoader.LoadCharacterInfos, 0x10000227u, 8u, 300f, 600f, 60 },
|
|
};
|
|
|
|
private static int CountNodes(ElementInfo root)
|
|
=> Enumerate(root).Count();
|
|
|
|
private static IEnumerable<ElementInfo> Enumerate(ElementInfo root)
|
|
{
|
|
yield return root;
|
|
foreach (var child in root.Children)
|
|
foreach (var descendant in Enumerate(child))
|
|
yield return descendant;
|
|
}
|
|
|
|
private static ElementInfo? Find(ElementInfo root, uint id)
|
|
=> Enumerate(root).FirstOrDefault(element => element.Id == id);
|
|
}
|