Files
2026-05-05 01:38:51 -05:00

99 lines
3.2 KiB
EmacsLisp

// test_state.el - native test suite for runtime/state.el
//
// Covers: state_set/get/del, state_has, state_get_or, state_keys,
// and edge cases such as empty values, overwrite, and multiple keys.
test "state-set-get-basic" {
state_set("test_key", "hello")
let v: String = state_get("test_key")
assert v == "hello", "get returns set value"
}
test "state-get-missing" {
let v: String = state_get("__nonexistent_key_xyz__")
assert v == "", "missing key returns empty string"
}
test "state-overwrite" {
state_set("ow_key", "first")
state_set("ow_key", "second")
let v: String = state_get("ow_key")
assert v == "second", "second write overwrites first"
}
test "state-del" {
state_set("del_key", "to be deleted")
state_del("del_key")
let v: String = state_get("del_key")
assert v == "", "deleted key returns empty string"
}
test "state-del-nonexistent" {
// Should not panic or error on deleting a non-existent key.
state_del("__never_set_key__")
let v: String = state_get("__never_set_key__")
assert v == "", "del of nonexistent key is a no-op"
}
test "state-has" {
state_set("has_key", "value")
assert state_has("has_key"), "has returns true for set key"
assert !state_has("__no_has_key__"), "has returns false for absent key"
state_del("has_key")
assert !state_has("has_key"), "has returns false after del"
}
test "state-get-or" {
state_set("gor_key", "actual")
let v1: String = state_get_or("gor_key", "default")
assert v1 == "actual", "get_or returns value when key set"
let v2: String = state_get_or("__absent_gor_key__", "fallback")
assert v2 == "fallback", "get_or returns default when key absent"
}
test "state-multiple-keys" {
state_set("mk_a", "alpha")
state_set("mk_b", "beta")
state_set("mk_c", "gamma")
let a: String = state_get("mk_a")
let b: String = state_get("mk_b")
let c: String = state_get("mk_c")
assert a == "alpha", "key a correct"
assert b == "beta", "key b correct"
assert c == "gamma", "key c correct"
state_del("mk_a")
state_del("mk_b")
state_del("mk_c")
}
test "state-keys-returns-json-array" {
state_set("keys_test_1", "v1")
state_set("keys_test_2", "v2")
let ks: String = state_keys()
// The result is a JSON array string like ["keys_test_1","keys_test_2",...]
assert str_starts_with(ks, "["), "state_keys returns JSON array"
assert str_ends_with(ks, "]"), "state_keys JSON array is closed"
assert str_contains(ks, "keys_test_1"), "keys array contains keys_test_1"
assert str_contains(ks, "keys_test_2"), "keys array contains keys_test_2"
state_del("keys_test_1")
state_del("keys_test_2")
}
test "state-numeric-value-as-string" {
state_set("num_key", "42")
let v: String = state_get("num_key")
let n: Int = str_to_int(v)
assert n == 42, "stored numeric string round-trips to int"
state_del("num_key")
}
test "state-long-value" {
let long_val: String = str_repeat("abcdefghij", 100)
state_set("long_val_key", long_val)
let got: String = state_get("long_val_key")
assert got == long_val, "long value round-trips correctly"
let got_len: Int = str_len(got)
assert got_len == 1000, "long value is 1000 bytes"
state_del("long_val_key")
}