#include <stdio.h> #include <kc.h> #include <kc_env.h> #include <kc_ut.h> #include <kc_assert.h> static void test_env(void); /** * env 単体テストスイート */ void suite_env(void) { KcUt *ut = KcUt_get_instance(); ut->add(ut, UT_TESTCASE, "env", test_env); } /** * env テスト。 */ static void test_env(void) { // 事前設定 KcEnv_remove("UT_TEST_ENV"); // 値設定 bool ret = KcEnv_set("UT_TEST_ENV", "ABC", false); assert_true(ret); // 上書き無し、既に存在する。 ret = KcEnv_set("UT_TEST_ENV", "XYZ", false); assert_true(ret); char *env_val = KcEnv_get("UT_TEST_ENV"); assert_equals((const char *)"ABC", env_val); // 上書きあり、既に存在する。 ret = KcEnv_set("UT_TEST_ENV", "XYZ", true); assert_true(ret); printf("--6--\n"); env_val = KcEnv_get("UT_TEST_ENV"); assert_equals("XYZ", env_val); // 削除 ret = KcEnv_remove("UT_TEST_ENV"); assert_true(ret); // 存在しないキーを削除 ret = KcEnv_remove("UT_TEST_ENV"); assert_true(ret); // キーに = が含まれる。 ret = KcEnv_set("UT_TEST_ENV=XXX", "ABC", false); assert_false(ret); // = が含まれたキーで取得 ret = KcEnv_set("UT_TEST_ENV", "ABC", false); assert_true(ret); env_val = KcEnv_get("UT_TEST_ENV=XXX"); assert_equals("ABC", env_val); // キーの値が 4096 超える char key[8192] = {'\0'}; for (int i = 0; i < 5000; i++) { key[i] = 'X'; } key[4999] = 'Z'; ret = KcEnv_set(key, "XYZ", false); assert_true(ret); env_val = KcEnv_get(key); assert_not_null(env_val); assert_equals("XYZ", env_val); // = 以降は無視されて値が取得されることを確認 key[5000] = '='; key[5001] = 'A'; key[5002] = 'B'; key[5003] = 'C'; env_val = KcEnv_get(key); assert_not_null(env_val); assert_equals("XYZ", env_val); }