#include "fiko/cekirdek/fiko_kisayol.hpp" #include "fiko_test.hpp" using namespace fiko; namespace { constexpr int VK_S = 0x53, VK_Z = 0x5A, VK_F1 = 0x70; } FIKO_TEST(kisayol_bas_calistirir) { FikoKisayolKaydi kayit; int sayac = 0; kayit.ekle({VK_S, true, false, false, "Kaydet", [&] { ++sayac; }}); // Ctrl+S → çalışır FIKO_KONTROL(kayit.bas(VK_S, true, false, false)); FIKO_KONTROL(sayac == 1); // Modifier'siz S → eşleşmez FIKO_KONTROL(!kayit.bas(VK_S, false, false, false)); FIKO_KONTROL(sayac == 1); } FIKO_TEST(kisayol_modifier_ayrimi) { FikoKisayolKaydi kayit; int geriAl = 0, yinele = 0; kayit.ekle({VK_Z, true, false, false, "Geri Al", [&] { ++geriAl; }}); kayit.ekle({VK_Z, true, true, false, "Yinele", [&] { ++yinele; }}); // Ctrl+Shift+Z kayit.bas(VK_Z, true, false, false); // Ctrl+Z kayit.bas(VK_Z, true, true, false); // Ctrl+Shift+Z FIKO_KONTROL(geriAl == 1 && yinele == 1); // modifier'a göre doğru ayrım } FIKO_TEST(kisayol_eslesmezse_false) { FikoKisayolKaydi kayit; kayit.ekle({VK_F1, false, false, false, "Yardım", nullptr}); FIKO_KONTROL(!kayit.bas(VK_S, false, false, false)); // kayıtlı değil FIKO_KONTROL(kayit.bas(VK_F1, false, false, false)); // eylemi null ama eşleşti → true } FIKO_TEST(kisayol_bul) { FikoKisayolKaydi kayit; kayit.ekle({VK_S, true, false, false, "Kaydet", nullptr}); FIKO_KONTROL(kayit.bul(VK_S, true, false, false) != nullptr); FIKO_KONTROL(kayit.bul(VK_S, true, false, false)->ad == "Kaydet"); FIKO_KONTROL(kayit.bul(VK_S, false, false, false) == nullptr); } FIKO_TEST(kisayol_gozlemci) { // Mimari ilke: kısayol çalışınca gözlemci (makro/plugin/olay) ad ile bildirilir. FikoKisayolKaydi kayit; std::string sonAd; int bildirim = 0; kayit.kisayolCalisti = [&](const std::string& ad) { sonAd = ad; ++bildirim; }; kayit.ekle({VK_S, true, false, false, "Kaydet", nullptr}); kayit.bas(VK_S, true, false, false); // eşleşir → gözlemci bildirilir FIKO_KONTROL(bildirim == 1 && sonAd == "Kaydet"); kayit.bas(VK_Z, false, false, false); // eşleşmez → gözlemci bildirilmez FIKO_KONTROL(bildirim == 1); } FIKO_TEST(kisayol_yeniden_bagla) { // Kullanıcı özelleştirme: Kaydet'i Ctrl+S'ten Ctrl+Shift+S'e taşı. FikoKisayolKaydi kayit; int sayac = 0; kayit.ekle({VK_S, true, false, false, "Kaydet", [&] { ++sayac; }}); FIKO_KONTROL(kayit.yenidenBagla("Kaydet", VK_S, true, true, false)); FIKO_KONTROL(!kayit.bas(VK_S, true, false, false)); // eski bağ artık yok FIKO_KONTROL(kayit.bas(VK_S, true, true, false)); // yeni bağ çalışır FIKO_KONTROL(sayac == 1); FIKO_KONTROL(!kayit.yenidenBagla("YokBoyle", VK_S, true, false, false)); // yok → false }