#include "fiko/mcp/json.hpp" #include "fiko_test.hpp" using namespace fiko::mcp; FIKO_TEST(json_temel_tipler) { FIKO_KONTROL(Json::coz("null").tip() == JsonTip::Bos); FIKO_KONTROL(Json::coz("true").mantikAl()); FIKO_KONTROL(!Json::coz("false").mantikAl(true)); FIKO_KONTROL(Json::coz("42").tamAl() == 42); FIKO_KONTROL(Json::coz("\"merhaba\"").metinAl() == "merhaba"); } FIKO_TEST(json_nesne_dizi) { const Json j = Json::coz(R"({"a":1,"b":[1,2,3],"c":{"d":"x"}})"); FIKO_KONTROL(j.tip() == JsonTip::Nesne); FIKO_KONTROL(j["a"].tamAl() == 1); FIKO_KONTROL(j["b"].diziAl().size() == 3); FIKO_KONTROL(j["b"].diziAl()[2].tamAl() == 3); FIKO_KONTROL(j["c"]["d"].metinAl() == "x"); FIKO_KONTROL(!j["yok"].varMi()); // olmayan alan → Yok FIKO_KONTROL(j["yok"]["derin"].metinAl().empty()); // zincirleme güvenli } FIKO_TEST(json_kacis_ve_utf8) { const Json j = Json::coz(R"({"t":"satır\nikinci \"tirnak\""})"); const std::string s = j["t"].metinAl(); FIKO_KONTROL(s.find('\n') != std::string::npos); FIKO_KONTROL(s.find('"') != std::string::npos); FIKO_KONTROL(s.find("\xc4\xb1") != std::string::npos); // U+0131 → UTF-8 // Tur → yaz → tekrar coz aynı metni vermeli (kayıpsız). const Json geri = Json::coz(Json::metin(s).yaz()); FIKO_KONTROL(geri.metinAl() == s); } FIKO_TEST(json_turkce_karakter_korunur) { const std::string tr = "olcum yuzu secildi: cizgi, gogus, sisme"; const std::string utf = "\xc3\xb6l\xc3\xa7\xc3\xbcm"; // ölçüm FIKO_KONTROL(Json::coz(Json::metin(tr).yaz()).metinAl() == tr); FIKO_KONTROL(Json::coz(Json::metin(utf).yaz()).metinAl() == utf); } FIKO_TEST(json_bozuk_girdi_cokmez) { std::string h; FIKO_KONTROL(!Json::coz("{", &h).varMi()); FIKO_KONTROL(!h.empty()); FIKO_KONTROL(!Json::coz("[1,2", &h).varMi()); FIKO_KONTROL(!Json::coz("\"kapanmadi", &h).varMi()); FIKO_KONTROL(!Json::coz("", &h).varMi()); FIKO_KONTROL(!Json::coz("{\"a\" 1}", &h).varMi()); } FIKO_TEST(json_sayi_bicimi) { FIKO_KONTROL(Json::tam(7).yaz() == "7"); FIKO_KONTROL(Json::sayi(2.0).yaz() == "2"); // kesirsiz → tam yazılır FIKO_KONTROL(Json::coz("1.5").sayiAl() == 1.5); FIKO_KONTROL(Json::coz("-3e2").sayiAl() == -300.0); } FIKO_TEST(json_derinlik_korumasi) { std::string derin; for (int i = 0; i < 200; ++i) derin += "["; std::string h; FIKO_KONTROL(!Json::coz(derin, &h).varMi()); // özyineleme taşması yerine hata }