| 1 | using Avalonia.Input; |
| 2 | using CascadeIDE.Features.Chat; |
| 3 | using Xunit; |
| 4 | |
| 5 | namespace CascadeIDE.Tests; |
| 6 | |
| 7 | public sealed class ChatSendKeyMatcherTests |
| 8 | { |
| 9 | [Theory] |
| 10 | [InlineData("Enter", Key.Enter, KeyModifiers.None, true)] |
| 11 | [InlineData("Enter", Key.Enter, KeyModifiers.Control, false)] |
| 12 | [InlineData("Ctrl+Enter", Key.Enter, KeyModifiers.Control, true)] |
| 13 | [InlineData("Shift+Enter", Key.Enter, KeyModifiers.Shift, true)] |
| 14 | public void Matches_respects_send_message_key_setting(string setting, Key key, KeyModifiers mods, bool expected) |
| 15 | { |
| 16 | var e = new KeyEventArgs { Key = key, KeyModifiers = mods }; |
| 17 | Assert.Equal(expected, ChatSendKeyMatcher.Matches(e, setting)); |
| 18 | } |
| 19 | |
| 20 | [Fact] |
| 21 | public void Matches_CtrlPlusEnter_also_accepts_physical_return_key() |
| 22 | { |
| 23 | var e = new KeyEventArgs { Key = Key.Return, KeyModifiers = KeyModifiers.Control }; |
| 24 | Assert.True(ChatSendKeyMatcher.Matches(e, "Ctrl+Enter")); |
| 25 | } |
| 26 | |
| 27 | [Fact] |
| 28 | public void IsBareEnterForSlashCommit_true_only_for_plain_enter() |
| 29 | { |
| 30 | Assert.True(ChatSendKeyMatcher.IsBareEnterForSlashCommit(new KeyEventArgs { Key = Key.Enter, KeyModifiers = KeyModifiers.None })); |
| 31 | Assert.True(ChatSendKeyMatcher.IsBareEnterForSlashCommit(new KeyEventArgs { Key = Key.Return, KeyModifiers = KeyModifiers.None })); |
| 32 | Assert.False(ChatSendKeyMatcher.IsBareEnterForSlashCommit(new KeyEventArgs { Key = Key.Enter, KeyModifiers = KeyModifiers.Control })); |
| 33 | Assert.False(ChatSendKeyMatcher.IsBareEnterForSlashCommit(new KeyEventArgs { Key = Key.Enter, KeyModifiers = KeyModifiers.Shift })); |
| 34 | } |
| 35 | } |
| 36 | |