commit 6d2b873f128b92e616abfdb2c1934bf210bca65c
parent daf3007d61c7b40e3873fea76febf3b59f09ff80
Author: Lou Woell <lou.woell@posteo.de>
Date:   Mon,  6 Oct 2025 23:04:02 +0200

[find_refs] more tests

Diffstat:
Mcmd/harehelper/+test/find_references.ha | 102+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
1 file changed, 66 insertions(+), 36 deletions(-)

diff --git a/cmd/harehelper/+test/find_references.ha b/cmd/harehelper/+test/find_references.ha @@ -1,10 +1,25 @@ use os; use hare::module; -use path; +use path::{init}; use dirs; -use fmt; +use fmt::*; +use s = strings; +use hare::parse; +use hare::unparse; -@test fn scan_tree_local_test () void = { +def this_file = "cmd/harehelper/+test/find_references.ha"; + +fn test_xrefs (refs: []xref) void = { + for (let ref .. refs) { + let ref_id = unparse::identstr(ref.name); + defer free(ref_id); + + errorf("needle: {}, haystack: {}", ref_id, ref.context)!; + assert(ref.context != "" && s::contains(ref.context, ref_id)); + }; +}; + +fn test_scan_tree (id: str, in: str = "") void = { const ctx = module::context { harepath = harepath(), @@ -17,56 +32,71 @@ use fmt; tags = ["linux", "test"], }; - let p = path::init(".")!; - let r = scan_tree(&ctx, &p, ["scan_tree"]); + let ident = parse::identstr(id)!; + let p = init(".")!; + let r = scan_tree(&ctx, &p, ident); + + errorfln("found \"{}\" in {} files", id, len(r))!; + assert(len(r) > 0, "no refs found"); + + let found = false; + for (let f .. r) { + errorfln("{} refs in {}", len(f.refs), f.path)!; + assert(len(f.refs) > 0, "empty []xref"); + + test_xrefs(f.refs); + if (in != "") { + found = s::contains(f.path, in); + if (found) return; + }; + }; + + if (in != "") assert(false); - fmt::errorfln("found \"scan_tree\" in {} files", len(r))!; - assert(len(r) == 2); }; + @test fn scan_file_local () void = { - let p = path::init(".")!; - let r = scan_file("./cmd/harehelper/find_refs.ha", ["scan_tree"]); + let p = init(".")!; + let id = parse::identstr("scan_tree")!; + let r = scan_file("./cmd/harehelper/find_refs.ha", id); assert(len(r as []xref) == 2); }; +@test fn scan_tree_local () void = { + + test_scan_tree("scan_tree"); +}; + @test fn scan_tree_stdlib () void = { - const ctx = module::context { - harepath = harepath(), - harecache = match (os::getenv("harecache")) { - case let s: str => - yield s; - case void => - yield dirs::cache("hare"); - }, - tags = ["linux", "test"], - }; + test_scan_tree("fmt::println"); +}; - let p = path::init(".")!; - let r = scan_tree(&ctx, &p, ["fmt", "println"]); +@test fn scan_tree_local_test () void = { - assert(len(r) != 0); + test_scan_tree("scan_tree", this_file); }; + @test fn scan_tree_local_ns () void = { - const ctx = module::context { - harepath = harepath(), - harecache = match (os::getenv("harecache")) { - case let s: str => - yield s; - case void => - yield dirs::cache("hare"); - }, - tags = ["linux", "test"], - }; + test_scan_tree("cmd::harehelper::scan_tree"); +}; + +@test fn scan_tree_stdlib_alias () void = { + + test_scan_tree("strings::contains", this_file); +}; + +@test fn scan_tree_stdlib_import () void = { + + test_scan_tree("path::init", this_file); +}; - let p = path::init(".")!; - let r = scan_tree(&ctx, &p, ["cmd", "harehelper", "scan_tree"]); +@test fn scan_tree_stdlib_wildcard () void = { - fmt::errorfln("found \"cmd::harehelper::scan_tree\" in {} files", len(r))!; - assert(len(r) == 2); + test_scan_tree("fmt::errorfln", this_file); };