public void Register_hotkey_and_then_unregister_it_check_that_hotkey_do_not_exists_anmymore()
        {
            var winApi = Substitute.For <IWinApi>();

            winApi.RegisterHotKey(IntPtr.Zero, 0, Key.A, ModifierKeys.Alt).ReturnsForAnyArgs(true);

            var manager = new HotKeyManager(winApi);

            var hotKey = new HotKey(Key.T, ModifierKeys.Shift);
            var label  = "test";

            manager.Register(label, hotKey);

            var resultHotKey = manager.GetHotkey(label);
            var resultLabel  = manager.GetLabel(hotKey);

            Assert.That(resultHotKey, Is.EqualTo(hotKey));
            Assert.That(resultLabel, Is.EqualTo(label));

            manager.Unregister(label);

            resultHotKey = manager.GetHotkey(label);
            resultLabel  = manager.GetLabel(hotKey);

            Assert.That(resultHotKey, Is.Null);
            Assert.That(resultLabel, Is.Null.Or.Empty);
        }
        public void Register_hotkey_and_check_that_api_called_and_manager_can_give_correct_data_back()
        {
            var apiCalled = false;

            var winApi = Substitute.For <IWinApi>();

            winApi.WhenForAnyArgs(x => x.RegisterHotKey(IntPtr.Zero, 0, Key.A, ModifierKeys.Alt)).Do(info => {
                apiCalled = true;
            });

            winApi.RegisterHotKey(IntPtr.Zero, 0, Key.A, ModifierKeys.Alt).ReturnsForAnyArgs(true);

            var manager = new HotKeyManager(winApi);

            var hotKey = new HotKey(Key.T, ModifierKeys.Shift);
            var label  = "test";

            manager.Register(label, hotKey);

            var resultHotKey = manager.GetHotkey(label);
            var resultLabel  = manager.GetLabel(hotKey);

            Assert.That(resultHotKey, Is.EqualTo(hotKey));
            Assert.That(resultLabel, Is.EqualTo(label));
            Assert.That(apiCalled, Is.True);
        }