ShortcutControllerTests.cs 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Windows.Input;
  2. using PixiEditor.Helpers;
  3. using PixiEditor.Models.Controllers.Shortcuts;
  4. using Xunit;
  5. namespace PixiEditorTests.ModelsTests.ControllersTests
  6. {
  7. public class ShortcutControllerTests
  8. {
  9. [StaTheory]
  10. [InlineData(Key.A, ModifierKeys.None, Key.A, ModifierKeys.None)]
  11. [InlineData(Key.A, ModifierKeys.Alt, Key.A, ModifierKeys.Alt)]
  12. [InlineData(Key.B, ModifierKeys.Alt | ModifierKeys.Control, Key.B, ModifierKeys.Alt | ModifierKeys.Control)]
  13. public void TestThatShortcutControllerExecutesShortcut(Key shortcutKey, ModifierKeys shortcutModifiers, Key clickedKey, ModifierKeys clickedModifiers)
  14. {
  15. int result = -1;
  16. RelayCommand shortcutCommand = new RelayCommand(arg => { result = (int)arg; });
  17. ShortcutController controller = GenerateStandardShortcutController(shortcutKey, shortcutModifiers, shortcutCommand);
  18. controller.KeyPressed(clickedKey, clickedModifiers);
  19. Assert.Equal(0, result);
  20. }
  21. [StaTheory]
  22. [InlineData(Key.B, ModifierKeys.None, Key.A, ModifierKeys.None)]
  23. [InlineData(Key.A, ModifierKeys.Alt, Key.A, ModifierKeys.None)]
  24. [InlineData(Key.C, ModifierKeys.Alt | ModifierKeys.Control, Key.C, ModifierKeys.Alt | ModifierKeys.Windows)]
  25. public void TestThatShortcutControllerNotExecutesShortcut(Key shortcutKey, ModifierKeys shortcutModifiers, Key clickedKey, ModifierKeys clickedModifiers)
  26. {
  27. int result = -1;
  28. RelayCommand shortcutCommand = new RelayCommand(arg => { result = (int)arg; });
  29. ShortcutController controller = GenerateStandardShortcutController(shortcutKey, shortcutModifiers, shortcutCommand);
  30. controller.KeyPressed(clickedKey, clickedModifiers);
  31. Assert.Equal(-1, result);
  32. }
  33. [StaFact]
  34. public void TestThatShortcutControllerIsBlocked()
  35. {
  36. int result = -1;
  37. RelayCommand shortcutCommand = new RelayCommand(arg => { result = (int)arg; });
  38. ShortcutController controller = GenerateStandardShortcutController(Key.A, ModifierKeys.None, shortcutCommand);
  39. ShortcutController.BlockShortcutExecution = true;
  40. controller.KeyPressed(Key.A, ModifierKeys.None);
  41. Assert.Equal(-1, result);
  42. }
  43. [StaFact]
  44. public void TestThatShortcutControllerPicksCorrectShortcut()
  45. {
  46. int result = -1;
  47. RelayCommand shortcutCommand = new RelayCommand(arg => { result = (int)arg; });
  48. ShortcutController controller = GenerateStandardShortcutController(Key.A, ModifierKeys.None, shortcutCommand);
  49. controller.ShortcutGroups.Add(new ShortcutGroup(string.Empty, new Shortcut(Key.A, shortcutCommand, 1, ModifierKeys.Control)));
  50. controller.KeyPressed(Key.A, ModifierKeys.Control);
  51. Assert.Equal(1, result);
  52. }
  53. [StaFact]
  54. public void TestThatKeyPressedSetsLastShortcut()
  55. {
  56. ShortcutController controller = GenerateStandardShortcutController(Key.A, ModifierKeys.None, new RelayCommand(parameter => { }));
  57. Assert.Null(controller.LastShortcut);
  58. controller.KeyPressed(Key.A, ModifierKeys.None);
  59. Assert.Equal(controller.ShortcutGroups[0].Shortcuts[0], controller.LastShortcut);
  60. }
  61. private static ShortcutController GenerateStandardShortcutController(Key shortcutKey, ModifierKeys modifiers, RelayCommand shortcutCommand)
  62. {
  63. ShortcutController controller = new ShortcutController();
  64. controller.ShortcutGroups.Add(new ShortcutGroup(string.Empty, new Shortcut(shortcutKey, shortcutCommand, 0, modifiers)));
  65. ShortcutController.BlockShortcutExecution = false;
  66. return controller;
  67. }
  68. }
  69. }