M8Test Help

SharedPreferences

import com.m8test.script.GlobalVariables.* /** * Storage (键值对存储) 与 Storages (存储管理) 接口测试脚本 * 全局变量: _storages */ // 辅助函数 fun assertLog(name: String, actual: Any?, expected: Any?) { if (actual == expected) { _console.log("✅ [$name] Passed. Result: $actual") } else { _console.error("❌ [$name] Failed.\n Expected: $expected\n Actual : $actual") } } _console.log("🚀 开始测试 Storage 存储模块...") // ========================================== // 1. 初始化与 Storages 管理测试 // ========================================== val storeName = "test_config_pref" // 确保测试环境干净:先尝试移除该名称的存储 // remove 返回 boolean _storages.remove(storeName) // 获取存储实例 // 如果不存在会自动创建/打开 val store = _storages.get(storeName) if (store != null) { _console.log("✅ 获取 Storage 实例成功: $storeName") } else { _console.error("❌ 获取 Storage 实例失败") throw RuntimeException("Storage is null") } // 确保是一个空的或干净的存储 store.clear() // ========================================== // 2. 基础增删改查 (CRUD) // ========================================== _console.log("\n--- 测试 Put & Get ---") // Put val putRes1 = store.put("username", "M8Tester") val putRes2 = store.put("api_token", "abcdef123456") val putRes3 = store.put("login_count", "10") // 接口定义 value 必须是 String assertLog("put('username')", putRes1, true) assertLog("put('api_token')", putRes2, true) // Get (存在的键) val username = store.get("username", "default_user") assertLog("get('username')", username, "M8Tester") // Get (不存在的键,测试默认值) val missingVal = store.get("not_exist_key", "DEFAULT_VAL") assertLog("get(不存在的键)", missingVal, "DEFAULT_VAL") // ========================================== // 3. 状态判断 (Contains) // ========================================== _console.log("\n--- 测试 Contains ---") assertLog("contains('api_token')", store.contains("api_token"), true) assertLog("contains('ghost_key')", store.contains("ghost_key"), false) // ========================================== // 4. 遍历 (ForEach) // ========================================== _console.log("\n--- 测试 ForEach ---") var count = 0 val keysFound = mutableListOf<String>() // forEach store.forEach { key, value -> _console.log(" Iterating -> Key: $key, Value: $value") keysFound.add(key) count++ } // 验证遍历的数量和内容是否正确 // 我们插入了 3 个: username, api_token, login_count assertLog("forEach 数量统计", count, 3) if (keysFound.contains("username") && keysFound.contains("login_count")) { _console.log("✅ forEach 内容验证通过") } else { _console.error("❌ forEach 内容验证失败: $keysFound") } // ========================================== // 5. 移除与清空 (Remove & Clear) // ========================================== _console.log("\n--- 测试 Remove & Clear ---") // Remove 单个 Key val removeRes = store.remove("username") assertLog("remove('username')", removeRes, true) assertLog("contains('username') after remove", store.contains("username"), false) // Clear 全部 val clearRes = store.clear() assertLog("clear()", clearRes, true) // 验证是否为空 // 通过再次遍历或检查 contains 验证 val isEmpty = !store.contains("api_token") && !store.contains("login_count") assertLog("验证 clear 后数据为空", isEmpty, true) // ========================================== // 6. 销毁存储实例 (Storages.remove) // ========================================== _console.log("\n--- 测试 Storages.remove ---") // 移除整个存储实例(通常意味着删除底层的 XML 文件或数据库文件) val storageRemoveRes = _storages.remove(storeName) assertLog("storages.remove", storageRemoveRes, true) // 再次获取该名称的 storage,应该是全新的(空的) // 此时 get 不会返回 null,而是返回一个新的空实例 val newStore = _storages.get(storeName) // 验证旧数据确实没了(虽然我们在步骤 5 已经 clear 了,但为了测试 remove 的逻辑,这里假设其重置了状态) // 使用 !! 假设 get 返回非空,或者安全调用 assertLog("新实例不包含旧数据", newStore?.contains("api_token") ?: false, false) _console.log("🎉 Storage 接口测试完毕。") _script.getThreads().getMain().setBackground(true)
/** * Storage (键值对存储) 与 Storages (存储管理) 接口测试脚本 * 全局变量: $storages */ $console.log("🚀 开始测试 Storage 存储模块...") // ========================================== // 1. 初始化与 Storages 管理测试 // ========================================== def storeName = "test_config_pref" // 确保测试环境干净:先尝试移除该名称的存储 // remove 返回 boolean $storages.remove(storeName) // 获取存储实例 // 如果不存在会自动创建/打开 def store = $storages.get(storeName) if (store != null) { $console.log("✅ 获取 Storage 实例成功: ${storeName}") } else { $console.error("❌ 获取 Storage 实例失败") return } // 确保是一个空的或干净的存储 store.clear() // ========================================== // 2. 基础增删改查 (CRUD) // ========================================== $console.log("\n--- 测试 Put & Get ---") // Put def putRes1 = store.put("username", "M8Tester") def putRes2 = store.put("api_token", "abcdef123456") def putRes3 = store.put("login_count", "10") // 接口定义 value 必须是 String assertLog("put('username')", putRes1, true) assertLog("put('api_token')", putRes2, true) // Get (存在的键) def username = store.get("username", "default_user") assertLog("get('username')", username, "M8Tester") // Get (不存在的键,测试默认值) def missingVal = store.get("not_exist_key", "DEFAULT_VAL") assertLog("get(不存在的键)", missingVal, "DEFAULT_VAL") // ========================================== // 3. 状态判断 (Contains) // ========================================== $console.log("\n--- 测试 Contains ---") assertLog("contains('api_token')", store.contains("api_token"), true) assertLog("contains('ghost_key')", store.contains("ghost_key"), false) // ========================================== // 4. 遍历 (ForEach) // ========================================== $console.log("\n--- 测试 ForEach ---") def count = 0 def keysFound = [] // forEach 接收一个 BiConsumer (String, String) -> Unit store.forEach { key, value -> $console.log(" Iterating -> Key: ${key}, Value: ${value}") keysFound.add(key) count++ } // 验证遍历的数量和内容是否正确 // 我们插入了 3 个: username, api_token, login_count assertLog("forEach 数量统计", count, 3) if (keysFound.contains("username") && keysFound.contains("login_count")) { $console.log("✅ forEach 内容验证通过") } else { $console.error("❌ forEach 内容验证失败: " + keysFound) } // ========================================== // 5. 移除与清空 (Remove & Clear) // ========================================== $console.log("\n--- 测试 Remove & Clear ---") // Remove 单个 Key def removeRes = store.remove("username") assertLog("remove('username')", removeRes, true) assertLog("contains('username') after remove", store.contains("username"), false) // Clear 全部 def clearRes = store.clear() assertLog("clear()", clearRes, true) // 验证是否为空 // 通过再次遍历或检查 contains 验证 def isEmpty = !store.contains("api_token") && !store.contains("login_count") assertLog("验证 clear 后数据为空", isEmpty, true) // ========================================== // 6. 销毁存储实例 (Storages.remove) // ========================================== $console.log("\n--- 测试 Storages.remove ---") // 移除整个存储实例(通常意味着删除底层的 XML 文件或数据库文件) def storageRemoveRes = $storages.remove(storeName) assertLog("storages.remove", storageRemoveRes, true) // 再次获取该名称的 storage,应该是全新的(空的) // 此时 get 不会返回 null,而是返回一个新的空实例 def newStore = $storages.get(storeName) // 验证旧数据确实没了(虽然我们在步骤 5 已经 clear 了,但为了测试 remove 的逻辑,这里假设其重置了状态) assertLog("新实例不包含旧数据", newStore.contains("api_token"), false) $console.log("🎉 Storage 接口测试完毕。") // ========================================== // 辅助函数 // ========================================== def assertLog(name, actual, expected) { if (actual == expected) { $console.log("✅ [${name}] Passed. Result: ${actual}") } else { $console.error("❌ [${name}] Failed.\n Expected: ${expected}\n Actual : ${actual}") } } $script.getThreads().getMain().setBackground(true)
/** * Storage (键值对存储) 与 Storages (存储管理) 接口测试脚本 * 全局变量: $storages */ $console.log("🚀 开始测试 Storage 存储模块..."); // ========================================== // 1. 初始化与 Storages 管理测试 // ========================================== const storeName = "test_config_pref"; // 确保测试环境干净:先尝试移除该名称的存储 // remove 返回 boolean $storages.remove(storeName); // 获取存储实例 // 如果不存在会自动创建/打开 const store = $storages.get(storeName); if (store != null) { $console.log("✅ 获取 Storage 实例成功: " + storeName); } else { $console.error("❌ 获取 Storage 实例失败"); throw new Error("获取 Storage 实例失败,测试终止"); } // 确保是一个空的或干净的存储 store.clear(); // ========================================== // 2. 基础增删改查 (CRUD) // ========================================== $console.log("\n--- 测试 Put & Get ---"); // Put const putRes1 = store.put("username", "M8Tester"); const putRes2 = store.put("api_token", "abcdef123456"); const putRes3 = store.put("login_count", "10"); // 接口定义 value 必须是 String assertLog("put('username')", putRes1, true); assertLog("put('api_token')", putRes2, true); // Get (存在的键) const username = store.get("username", "default_user"); assertLog("get('username')", username, "M8Tester"); // Get (不存在的键,测试默认值) const missingVal = store.get("not_exist_key", "DEFAULT_VAL"); assertLog("get(不存在的键)", missingVal, "DEFAULT_VAL"); // ========================================== // 3. 状态判断 (Contains) // ========================================== $console.log("\n--- 测试 Contains ---"); assertLog("contains('api_token')", store.contains("api_token"), true); assertLog("contains('ghost_key')", store.contains("ghost_key"), false); // ========================================== // 4. 遍历 (ForEach) // ========================================== $console.log("\n--- 测试 ForEach ---"); let count = 0; let keysFound = []; // forEach 接收一个 (key, value) => {} store.forEach((key, value) => { $console.log(" Iterating -> Key: " + key + ", Value: " + value); keysFound.push(key); count++; }); // 验证遍历的数量和内容是否正确 // 我们插入了 3 个: username, api_token, login_count assertLog("forEach 数量统计", count, 3); if (keysFound.includes("username") && keysFound.includes("login_count")) { $console.log("✅ forEach 内容验证通过"); } else { $console.error("❌ forEach 内容验证失败: " + keysFound); } // ========================================== // 5. 移除与清空 (Remove & Clear) // ========================================== $console.log("\n--- 测试 Remove & Clear ---"); // Remove 单个 Key const removeRes = store.remove("username"); assertLog("remove('username')", removeRes, true); assertLog("contains('username') after remove", store.contains("username"), false); // Clear 全部 const clearRes = store.clear(); assertLog("clear()", clearRes, true); // 验证是否为空 // 通过再次遍历或检查 contains 验证 const isEmpty = store.contains("api_token") == false && store.contains("login_count") == false; assertLog("验证 clear 后数据为空", isEmpty, true); // ========================================== // 6. 销毁存储实例 (Storages.remove) // ========================================== $console.log("\n--- 测试 Storages.remove ---"); // 移除整个存储实例(通常意味着删除底层的 XML 文件或数据库文件) const storageRemoveRes = $storages.remove(storeName); assertLog("storages.remove", storageRemoveRes, true); // 再次获取该名称的 storage,应该是全新的(空的) // 此时 get 不会返回 null,而是返回一个新的空实例 const newStore = $storages.get(storeName); // 验证旧数据确实没了(虽然我们在步骤 5 已经 clear 了,但为了测试 remove 的逻辑,这里假设其重置了状态) assertLog("新实例不包含旧数据", newStore.contains("api_token"), false); $console.log("🎉 Storage 接口测试完毕。"); // ========================================== // 辅助函数 // ========================================== /** * @param {string} name * @param {any} actual * @param {any} expected */ function assertLog(name, actual, expected) { if (actual == expected) { $console.log("✅ [" + name + "] Passed. Result: " + actual); } else { $console.error("❌ [" + name + "] Failed.\n Expected: " + expected + "\n Actual : " + actual); } } $script.getThreads().getMain().setBackground(true);
-- ========================================== -- 辅助函数 -- ========================================== local function assertLog(name, actual, expected) if tostring(actual) == tostring(expected) then _console:log("✅ [" .. name .. "] Passed. Result: " .. tostring(actual)) else _console:error("❌ [" .. name .. "] Failed.\n Expected: " .. tostring(expected) .. "\n Actual : " .. tostring(actual)) end end -- 辅助函数:检查 table (作为list) 中是否包含某个值 local function list_contains(list, value) for _, v in ipairs(list) do if v == value then return true end end return false end --- -- Storage (键值对存储) 与 Storages (存储管理) 接口测试脚本 -- 全局变量: _storages --- _console:log("🚀 开始测试 Storage 存储模块...") -- ========================================== -- 1. 初始化与 Storages 管理测试 -- ========================================== local storeName = "test_config_pref" -- 确保测试环境干净:先尝试移除该名称的存储 -- remove 返回 boolean _storages:remove(storeName) -- 获取存储实例 -- 如果不存在会自动创建/打开 local store = _storages:get(storeName) if store ~= nil then _console:log("✅ 获取 Storage 实例成功: " .. storeName) else _console:error("❌ 获取 Storage 实例失败") return end -- 确保是一个空的或干净的存储 store:clear() -- ========================================== -- 2. 基础增删改查 (CRUD) -- ========================================== _console:log("\n--- 测试 Put & Get ---") -- Put local putRes1 = store:put("username", "M8Tester") local putRes2 = store:put("api_token", "abcdef123456") local putRes3 = store:put("login_count", "10") -- 接口定义 value 必须是 String assertLog("put('username')", putRes1, true) assertLog("put('api_token')", putRes2, true) -- Get (存在的键) local username = store:get("username", "default_user") assertLog("get('username')", username, "M8Tester") -- Get (不存在的键,测试默认值) local missingVal = store:get("not_exist_key", "DEFAULT_VAL") assertLog("get(不存在的键)", missingVal, "DEFAULT_VAL") -- ========================================== -- 3. 状态判断 (Contains) -- ========================================== _console:log("\n--- 测试 Contains ---") assertLog("contains('api_token')", store:contains("api_token"), true) assertLog("contains('ghost_key')", store:contains("ghost_key"), false) -- ========================================== -- 4. 遍历 (ForEach) -- ========================================== _console:log("\n--- 测试 ForEach ---") local count = 0 local keysFound = {} -- forEach 接收一个 function (key, value) store:forEach(function(key, value) _console:log(" Iterating -> Key: " .. tostring(key) .. ", Value: " .. tostring(value)) table.insert(keysFound, key) count = count + 1 end) -- 验证遍历的数量和内容是否正确 -- 我们插入了 3 个: username, api_token, login_count assertLog("forEach 数量统计", count, 3) if list_contains(keysFound, "username") and list_contains(keysFound, "login_count") then _console:log("✅ forEach 内容验证通过") else _console:error("❌ forEach 内容验证失败: " .. tostring(keysFound)) end -- ========================================== -- 5. 移除与清空 (Remove & Clear) -- ========================================== _console:log("\n--- 测试 Remove & Clear ---") -- Remove 单个 Key local removeRes = store:remove("username") assertLog("remove('username')", removeRes, true) assertLog("contains('username') after remove", store:contains("username"), false) -- Clear 全部 local clearRes = store:clear() assertLog("clear()", clearRes, true) -- 验证是否为空 -- 通过再次遍历或检查 contains 验证 local isEmpty = not store:contains("api_token") and not store:contains("login_count") assertLog("验证 clear 后数据为空", isEmpty, true) -- ========================================== -- 6. 销毁存储实例 (Storages.remove) -- ========================================== _console:log("\n--- 测试 Storages.remove ---") -- 移除整个存储实例(通常意味着删除底层的 XML 文件或数据库文件) local storageRemoveRes = _storages:remove(storeName) assertLog("storages.remove", storageRemoveRes, true) -- 再次获取该名称的 storage,应该是全新的(空的) -- 此时 get 不会返回 nil,而是返回一个新的空实例 local newStore = _storages:get(storeName) -- 验证旧数据确实没了(虽然我们在步骤 5 已经 clear 了,但为了测试 remove 的逻辑,这里假设其重置了状态) assertLog("新实例不包含旧数据", newStore:contains("api_token"), false) _console:log("🎉 Storage 接口测试完毕。") _script:getThreads():getMain():setBackground(true)
<?php /** @var m8test_java\com\m8test\script\core\api\console\Console $console */ global $console; /** @var m8test_java\com\m8test\script\core\api\storage\Storages $storages */ global $storages; /** @var m8test_java\com\m8test\script\core\api\engine\Script $script */ global $script; // ========================================== // 辅助函数 // ========================================== function assertLog($name, $actual, $expected) { global $console; if ($actual === $expected) { // 使用严格比较 $console->log(javaString("✅ [{$name}] Passed. Result: " . var_export($actual, true))); } else { $console->error(javaString("❌ [{$name}] Failed.\n Expected: " . var_export($expected, true) . "\n Actual : " . var_export($actual, true))); } } /** * Storage (键值对存储) 与 Storages (存储管理) 接口测试脚本 * 全局变量: $storages */ $console->log(javaString("🚀 开始测试 Storage 存储模块...")); // ========================================== // 1. 初始化与 Storages 管理测试 // ========================================== $storeName = javaString("test_config_pref"); // 确保测试环境干净:先尝试移除该名称的存储 // remove 返回 boolean $storages->remove($storeName); // 获取存储实例 // 如果不存在会自动创建/打开 $store = $storages->get($storeName); if ($store != null) { $console->log(javaString("✅ 获取 Storage 实例成功: {$storeName}")); } else { $console->error(javaString("❌ 获取 Storage 实例失败")); return; } // 确保是一个空的或干净的存储 $store->clear(); // ========================================== // 2. 基础增删改查 (CRUD) // ========================================== $console->log(javaString("\n--- 测试 Put & Get ---")); // Put $putRes1 = $store->put(javaString("username"), javaString("M8Tester")); $putRes2 = $store->put(javaString("api_token"), javaString("abcdef123456")); $putRes3 = $store->put(javaString("login_count"), javaString("10")); // 接口定义 value 必须是 String assertLog(javaString("put('username')"), $putRes1, true); assertLog(javaString("put('api_token')"), $putRes2, true); // Get (存在的键) $username = $store->get(javaString("username"), javaString("default_user")); assertLog(javaString("get('username')"), $username, javaString("M8Tester")); // Get (不存在的键,测试默认值) $missingVal = $store->get(javaString("not_exist_key"), javaString("DEFAULT_VAL")); assertLog(javaString("get(不存在的键)"), $missingVal, javaString("DEFAULT_VAL")); // ========================================== // 3. 状态判断 (Contains) // ========================================== $console->log(javaString("\n--- 测试 Contains ---")); assertLog(javaString("contains('api_token')"), $store->contains(javaString("api_token")), true); assertLog(javaString("contains('ghost_key')"), $store->contains(javaString("ghost_key")), false); // ========================================== // 4. 遍历 (ForEach) // ========================================== $console->log(javaString("\n--- 测试 ForEach ---")); $count = 0; $keysFound = []; // forEach 接收一个 BiConsumer (String, String) -> Unit // 在 PHP 中,我们需要将外部变量通过 `use` 传入,并使用引用 `&` 来修改它们 $store->forEach(function ($key, $value) use (&$count, &$keysFound) { global $console; $console->log(javaString(" Iterating -> Key: {$key}, Value: {$value}")); $keysFound[] = $key; $count++; }); // 验证遍历的数量和内容是否正确 // 我们插入了 3 个: username, api_token, login_count assertLog(javaString("forEach 数量统计"), $count, 3); //if (in_array(javaString("username"), $keysFound) && in_array(javaString("login_count"), $keysFound)) { // $console->log(javaString("✅ forEach 内容验证通过")); //} else { // $console->error(javaString("❌ forEach 内容验证失败: ") . implode(", ", $keysFound)); //} // ========================================== // 5. 移除与清空 (Remove & Clear) // ========================================== $console->log(javaString("\n--- 测试 Remove & Clear ---")); // Remove 单个 Key $removeRes = $store->remove(javaString("username")); assertLog(javaString("remove('username')"), $removeRes, true); assertLog(javaString("contains('username') after remove"), $store->contains(javaString("username")), false); // Clear 全部 $clearRes = $store->clear(); assertLog(javaString("clear()"), $clearRes, true); // 验证是否为空 // 通过再次遍历或检查 contains 验证 $isEmpty = !$store->contains(javaString("api_token")) && !$store->contains(javaString("login_count")); assertLog(javaString("验证 clear 后数据为空"), $isEmpty, true); // ========================================== // 6. 销毁存储实例 (Storages.remove) // ========================================== $console->log(javaString("\n--- 测试 Storages.remove ---")); // 移除整个存储实例(通常意味着删除底层的 XML 文件或数据库文件) $storageRemoveRes = $storages->remove($storeName); assertLog(javaString("storages.remove"), $storageRemoveRes, true); // 再次获取该名称的 storage,应该是全新的(空的) // 此时 get 不会返回 null,而是返回一个新的空实例 $newStore = $storages->get($storeName); // 验证旧数据确实没了(虽然我们在步骤 5 已经 clear 了,但为了测试 remove 的逻辑,这里假设其重置了状态) assertLog(javaString("新实例不包含旧数据"), $newStore->contains(javaString("api_token")), false); $console->log(javaString("🎉 Storage 接口测试完毕。"));
# 导入所需的全局变量 from m8test_java.com.m8test.script.GlobalVariables import _console from m8test_java.com.m8test.script.GlobalVariables import _storages from m8test_java.com.m8test.script.GlobalVariables import _script # ========================================== # 辅助函数 # ========================================== def assertLog(name, actual, expected): # Java boolean is returned as string 'true'/'false' actual_str = str(actual).lower() if isinstance(actual, str) and actual.lower() in ['true', 'false'] else str(actual) expected_str = str(expected).lower() if isinstance(expected, bool) else str(expected) if actual_str == expected_str: _console.log(f"✅ [{name}] Passed. Result: {actual}") else: _console.error(f"❌ [{name}] Failed.\n Expected: {expected}\n Actual : {actual}") """ Storage (键值对存储) 与 Storages (存储管理) 接口测试脚本 全局变量: $storages """ _console.log("🚀 开始测试 Storage 存储模块...") # ========================================== # 1. 初始化与 Storages 管理测试 # ========================================== storeName = "test_config_pref" # 确保测试环境干净:先尝试移除该名称的存储 _storages.remove(storeName) # 获取存储实例 store = _storages.get(storeName) if store is not None: _console.log(f"✅ 获取 Storage 实例成功: {storeName}") else: _console.error("❌ 获取 Storage 实例失败") store = None # Ensure store is None to avoid further errors if store: # 确保是一个空的或干净的存储 store.clear() # ========================================== # 2. 基础增删改查 (CRUD) # ========================================== _console.log("\n--- 测试 Put & Get ---") putRes1 = store.put("username", "M8Tester") putRes2 = store.put("api_token", "abcdef123456") putRes3 = store.put("login_count", "10") assertLog("put('username')", putRes1, "True") assertLog("put('api_token')", putRes2, "True") username = store.get("username", "default_user") assertLog("get('username')", username, "M8Tester") missingVal = store.get("not_exist_key", "DEFAULT_VAL") assertLog("get(不存在的键)", missingVal, "DEFAULT_VAL") # ========================================== # 3. 状态判断 (Contains) # ========================================== _console.log("\n--- 测试 Contains ---") assertLog("contains('api_token')", store.contains("api_token"), "True") assertLog("contains('ghost_key')", store.contains("ghost_key"), "False") # ========================================== # 4. 遍历 (ForEach) # ========================================== _console.log("\n--- 测试 ForEach ---") count = [0] # Use a mutable list to be modified inside lambda keysFound = [] # forEach takes a BiConsumer, which translates to a two-argument lambda store.forEach(lambda key, value: ( _console.log(f" Iterating -> Key: {key}, Value: {value}"), keysFound.append(key), count.__setitem__(0, count[0] + 1) )) assertLog("forEach 数量统计", count[0], 3) if "username" in keysFound and "login_count" in keysFound: _console.log("✅ forEach 内容验证通过") else: _console.error(f"❌ forEach 内容验证失败: {keysFound}") # ========================================== # 5. 移除与清空 (Remove & Clear) # ========================================== _console.log("\n--- 测试 Remove & Clear ---") removeRes = store.remove("username") assertLog("remove('username')", removeRes, "True") assertLog("contains('username') after remove", store.contains("username"), "False") clearRes = store.clear() assertLog("clear()", clearRes, "True") # Use 'false' for comparison as `contains` returns string from Java isEmpty = store.contains("api_token") == 'false' and store.contains("login_count") == 'false' assertLog("验证 clear 后数据为空", isEmpty, "True") # ========================================== # 6. 销毁存储实例 (Storages.remove) # ========================================== _console.log("\n--- 测试 Storages.remove ---") storageRemoveRes = _storages.remove(storeName) assertLog("storages.remove", storageRemoveRes, "True") newStore = _storages.get(storeName) assertLog("新实例不包含旧数据", newStore.contains("api_token"), "False") _console.log("🎉 Storage 接口测试完毕。") _script.getThreads().getMain().setBackground(True)
# encoding: utf-8 # Storage (键值对存储) 与 Storages (存储管理) 接口测试脚本 # 全局变量: $storages $console.log("🚀 开始测试 Storage 存储模块...") # ========================================== # 辅助函数 # ========================================== def assertLog(name, actual, expected) if actual == expected $console.log("✅ [#{name}] Passed. Result: #{actual}") else $console.error("❌ [#{name}] Failed.\n Expected: #{expected}\n Actual : #{actual}") end end # ========================================== # 1. 初始化与 Storages 管理测试 # ========================================== storeName = "test_config_pref" # 确保测试环境干净:先尝试移除该名称的存储 # remove 返回 boolean $storages.remove(storeName) # 获取存储实例 # 如果不存在会自动创建/打开 store = $storages.get(storeName) if store != nil $console.log("✅ 获取 Storage 实例成功: #{storeName}") else $console.error("❌ 获取 Storage 实例失败") return end # 确保是一个空的或干净的存储 store.clear() # ========================================== # 2. 基础增删改查 (CRUD) # ========================================== $console.log("\n--- 测试 Put & Get ---") # Put putRes1 = store.put("username", "M8Tester") putRes2 = store.put("api_token", "abcdef123456") putRes3 = store.put("login_count", "10") # 接口定义 value 必须是 String assertLog("put('username')", putRes1, true) assertLog("put('api_token')", putRes2, true) # Get (存在的键) username = store.get("username", "default_user") assertLog("get('username')", username, "M8Tester") # Get (不存在的键,测试默认值) missingVal = store.get("not_exist_key", "DEFAULT_VAL") assertLog("get(不存在的键)", missingVal, "DEFAULT_VAL") # ========================================== # 3. 状态判断 (Contains) # ========================================== $console.log("\n--- 测试 Contains ---") assertLog("contains('api_token')", store.contains("api_token"), true) assertLog("contains('ghost_key')", store.contains("ghost_key"), false) # ========================================== # 4. 遍历 (ForEach) # ========================================== $console.log("\n--- 测试 ForEach ---") count = 0 keysFound = [] # forEach 接收一个 BiConsumer (String, String) -> Unit # Ruby 的 block 参数,这里直接挂在 forEach 后面 store.forEach do |key, value| $console.log(" Iterating -> Key: #{key}, Value: #{value}") keysFound << key count += 1 end # 验证遍历的数量和内容是否正确 # 我们插入了 3 个: username, api_token, login_count assertLog("forEach 数量统计", count, 3) if keysFound.include?("username") && keysFound.include?("login_count") $console.log("✅ forEach 内容验证通过") else $console.error("❌ forEach 内容验证失败: " + keysFound.to_s) end # ========================================== # 5. 移除与清空 (Remove & Clear) # ========================================== $console.log("\n--- 测试 Remove & Clear ---") # Remove 单个 Key removeRes = store.remove("username") assertLog("remove('username')", removeRes, true) assertLog("contains('username') after remove", store.contains("username"), false) # Clear 全部 clearRes = store.clear() assertLog("clear()", clearRes, true) # 验证是否为空 # 通过再次遍历或检查 contains 验证 isEmpty = !store.contains("api_token") && !store.contains("login_count") assertLog("验证 clear 后数据为空", isEmpty, true) # ========================================== # 6. 销毁存储实例 (Storages.remove) # ========================================== $console.log("\n--- 测试 Storages.remove ---") # 移除整个存储实例(通常意味着删除底层的 XML 文件或数据库文件) storageRemoveRes = $storages.remove(storeName) assertLog("storages.remove", storageRemoveRes, true) # 再次获取该名称的 storage,应该是全新的(空的) # 此时 get 不会返回 nil,而是返回一个新的空实例 newStore = $storages.get(storeName) # 验证旧数据确实没了(虽然我们在步骤 5 已经 clear 了,但为了测试 remove 的逻辑,这里假设其重置了状态) assertLog("新实例不包含旧数据", newStore.contains("api_token"), false) $console.log("🎉 Storage 接口测试完毕。") $script.getThreads().getMain().setBackground(true)
09 December 2025