This repository has been archived on 2026-08-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
el-retired/dharma/tests/internal_state/test_query_param.el
T
Will Anderson 90ddbdbfc3 feat: port arbor, dharma, forge El source into monorepo
Brings the remaining foundation repos that were not included in the
original monorepo consolidation:

- arbor/vessels/ — 6 vessels (arbor-cli, arbor-core, arbor-diagram,
  arbor-layout, arbor-parse, arbor-render) with manifests + src/main.el
- dharma/ — CGI Provenance Registry package (flat layout, 14 .el files
  across registry/, sandbox/, training/, validation/, tests/)
- forge/ — consciousness channel tool (8 src .el files + new manifest.el)
- elp/src/ — 36 test fixture files not carried over in original merge
  (dedup_*, realizer_*, semantics_*, morph_*, ext_*, one_extern_* helpers)

el-ide, engram, elql are already complete in ide/, engram/, ql/.
2026-05-05 04:27:34 -05:00

92 lines
2.8 KiB
EmacsLisp

// test_query_param.el unit tests for query_param + str_qmark_index helpers
// in registry/handlers.el. Self-contained: copies the helpers under test so
// the test program doesn't drag in the http server / engram dependency.
fn json_escape(s: String) -> String { return s }
fn str_qmark_index_inner(s: String, idx: Int, total: Int) -> Int {
if idx >= total {
return -1
}
let c: String = str_slice(s, idx, idx + 1)
if str_eq(c, "?") {
return idx
}
return str_qmark_index_inner(s, idx + 1, total)
}
fn str_qmark_index(s: String) -> Int {
return str_qmark_index_inner(s, 0, str_len(s))
}
fn query_param_inner(parts: [String], key: String, idx: Int, total: Int) -> String {
if idx >= total {
return ""
}
let pair: String = list_get(parts, idx)
let kv: [String] = str_split(pair, "=")
let nkv: Int = list_len(kv)
if nkv >= 2 {
let k: String = list_get(kv, 0)
if str_eq(k, key) {
return list_get(kv, 1)
}
}
return query_param_inner(parts, key, idx + 1, total)
}
fn query_param(path: String, key: String) -> String {
let qpos: Int = str_qmark_index(path)
if qpos < 0 {
return ""
}
let qs: String = str_slice(path, qpos + 1, str_len(path))
let parts: [String] = str_split(qs, "&")
return query_param_inner(parts, key, 0, list_len(parts))
}
fn assert_eq_str(name: String, got: String, want: String) -> Bool {
if str_eq(got, want) {
println("PASS " + name)
return true
}
println("FAIL " + name + " want=" + want + " got=" + got)
return false
}
fn assert_eq_int(name: String, got: Int, want: Int) -> Bool {
if got == want {
println("PASS " + name)
return true
}
println("FAIL " + name + " want=" + int_to_str(want) + " got=" + int_to_str(got))
return false
}
fn main() -> Void {
// str_qmark_index
assert_eq_int("qmark/none", str_qmark_index("/internal-state"), -1)
assert_eq_int("qmark/at-15", str_qmark_index("/internal-state?cgi_id=abc"), 15)
assert_eq_int("qmark/empty", str_qmark_index(""), -1)
// query_param: single key, multi key, missing
assert_eq_str("qp/single",
query_param("/internal-state?cgi_id=cgi-001", "cgi_id"),
"cgi-001")
assert_eq_str("qp/multi-first",
query_param("/internal-state?cgi_id=x&domain=cognition&since=100", "cgi_id"),
"x")
assert_eq_str("qp/multi-mid",
query_param("/internal-state?cgi_id=x&domain=cognition&since=100", "domain"),
"cognition")
assert_eq_str("qp/multi-last",
query_param("/internal-state?cgi_id=x&domain=cognition&since=100", "since"),
"100")
assert_eq_str("qp/missing",
query_param("/internal-state?cgi_id=x", "until"),
"")
assert_eq_str("qp/no-qs",
query_param("/internal-state", "cgi_id"),
"")
}