using AcDream.UI.Abstractions; using AcDream.UI.Abstractions.Panels.Chat; namespace AcDream.UI.Abstractions.Tests.Panels.Chat; public sealed class RetailClientCommandCatalogTests { [Theory] [InlineData("/lifestone")] [InlineData("@lifestone")] [InlineData("/lif")] [InlineData("@LIF")] [InlineData("/ls")] [InlineData("@LS")] public void RetailAliases_ResolveCaseInsensitively(string input) { Assert.True(RetailClientCommandCatalog.TryMatch(input, out var match)); Assert.Equal(ClientCommandId.LifestoneRecall, match.Command); Assert.True(match.HasValidArguments); Assert.Empty(match.Arguments); } [Theory] [InlineData("/marketplace", ClientCommandId.MarketplaceRecall)] [InlineData("@MAR", ClientCommandId.MarketplaceRecall)] [InlineData("/mp", ClientCommandId.MarketplaceRecall)] [InlineData("/pkarena", ClientCommandId.PkArenaRecall)] [InlineData("/pka", ClientCommandId.PkArenaRecall)] [InlineData("/pklarena", ClientCommandId.PkLiteArenaRecall)] [InlineData("/pla", ClientCommandId.PkLiteArenaRecall)] [InlineData("/hor", ClientCommandId.HouseRecall)] [InlineData("/hr", ClientCommandId.HouseRecall)] [InlineData("/hom", ClientCommandId.MansionRecall)] [InlineData("/hoa", ClientCommandId.MansionRecall)] [InlineData("/age", ClientCommandId.QueryAge)] [InlineData("/birth", ClientCommandId.QueryBirth)] [InlineData("/framerate", ClientCommandId.ToggleFrameRate)] [InlineData("/lockui", ClientCommandId.ToggleUiLock)] [InlineData("/version", ClientCommandId.ShowVersion)] [InlineData("/loc", ClientCommandId.ShowLocation)] [InlineData("/corpse", ClientCommandId.ShowLastCorpseLocation)] [InlineData("/cor", ClientCommandId.ShowLastCorpseLocation)] public void AdditionalRetailAliases_Resolve(string input, ClientCommandId expected) { Assert.True(RetailClientCommandCatalog.TryMatch(input, out var match)); Assert.Equal(expected, match.Command); Assert.True(match.HasValidArguments); } [Theory] [InlineData("/clear all", ClientCommandId.ClearChat)] [InlineData("/saveui hunt", ClientCommandId.SaveUi)] [InlineData("/loadui hunt", ClientCommandId.LoadUi)] [InlineData("/saveautoui", ClientCommandId.SaveAutoUi)] [InlineData("/loadautoui", ClientCommandId.LoadAutoUi)] [InlineData("/afk msg lunch", ClientCommandId.Away)] [InlineData("/consent who", ClientCommandId.Consent)] [InlineData("/e waves", ClientCommandId.Emote)] [InlineData("/em waves", ClientCommandId.Emote)] [InlineData("/emote waves", ClientCommandId.Emote)] [InlineData("/me waves", ClientCommandId.Emote)] [InlineData("/emotes", ClientCommandId.ListEmotes)] [InlineData("/friends online", ClientCommandId.Friends)] [InlineData("/friends_add Alice", ClientCommandId.FriendsAdd)] [InlineData("/friends_remove Alice", ClientCommandId.FriendsRemove)] [InlineData("/squelch -tell Alice", ClientCommandId.Squelch)] [InlineData("/unsquelch Alice", ClientCommandId.Unsquelch)] [InlineData("/filter -combat", ClientCommandId.Filter)] [InlineData("/unfilter -combat", ClientCommandId.Unfilter)] [InlineData("/messagetypes", ClientCommandId.ListMessageTypes)] [InlineData("/fillcomps scarabs 500", ClientCommandId.FillComponents)] public void CommandFamilies_ResolveToTypedClientCommands( string input, ClientCommandId expected) { Assert.True(RetailClientCommandCatalog.TryMatch(input, out var match)); Assert.Equal(expected, match.Command); Assert.True(match.HasValidArguments); } [Theory] [InlineData("/house recall", ClientCommandId.HouseRecall)] [InlineData("@house mansion_recall", ClientCommandId.MansionRecall)] [InlineData("/house alleg_recall", ClientCommandId.MansionRecall)] public void HouseRecallSubcommands_Resolve(string input, ClientCommandId expected) { Assert.True(RetailClientCommandCatalog.TryMatch(input, out var match)); Assert.Equal(expected, match.Command); Assert.True(match.HasValidArguments); } [Fact] public void UnsupportedHouseSubcommand_RemainsClientOwnedAndShowsUsage() { Assert.True(RetailClientCommandCatalog.TryMatch("/house nope", out var match)); Assert.False(match.HasValidArguments); } [Fact] public void LifestoneArgument_IsRecognizedButInvalid() { Assert.True(RetailClientCommandCatalog.TryMatch("/ls now", out var match)); Assert.Equal("now", match.Arguments); Assert.False(match.HasValidArguments); Assert.Equal("/lifestone", match.Usage); } [Theory] [InlineData("/ci 629")] [InlineData("@acehelp")] [InlineData("ordinary speech")] public void NonClientCommands_DoNotMatch(string input) => Assert.False(RetailClientCommandCatalog.TryMatch(input, out _)); }