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:
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);
};