Luigit
repositories / termux-janitor

termux-janitor

Interactive cleanup assistant for Termux: transparent, safe, confirmed disk reclamation.

owned by admin

tools/spec-engine/test-profile.zig

Raw
const std = @import("std");

pub const Suite = enum { quick, scenario, every };
pub const concrete_suites = [_]Suite{ .quick, .scenario };
pub const wildcard_suite: Suite = .every;

pub fn suiteMatches(required: Suite, observed: Suite) bool {
    return required == wildcard_suite or required == observed;
}

pub fn suiteIsConcrete(suite: Suite) bool {
    return suite != wildcard_suite;
}

pub fn suiteRunsLocally(suite: Suite) bool {
    return suite != .scenario;
}

pub fn requirementIdValid(id: []const u8) bool {
    if (!std.mem.startsWith(u8, id, "TJ-")) return false;
    const final_hyphen = std.mem.lastIndexOfScalar(u8, id, '-') orelse return false;
    if (final_hyphen <= 3 or final_hyphen + 3 != id.len) return false;
    for (id[3..final_hyphen]) |byte| if (!std.ascii.isUpper(byte)) return false;
    for (id[final_hyphen + 1 ..]) |byte| if (!std.ascii.isDigit(byte)) return false;
    return true;
}

pub const tool_invocation = "spec-tool";
pub const generate_command = "spec-tool generate";
pub const verify_command = "spec-tool check";

pub fn requirementOwnerLink(owner: []const u8) []const u8 {
    return if (std.mem.startsWith(u8, owner, "spec/")) owner["spec/".len..] else owner;
}

pub const paths = struct {
    pub const documents = "test-profile/documents.zon";
    pub const concepts = "test-profile/concepts.zon";
    pub const requirements = "test-profile/requirements.zon";
    pub const test_specs = "test-profile/tests.zon";
    pub const verification = "test-profile/verification.zon";
    pub const implementations = "test-profile/implementation.zon";
    pub const test_bindings = "test-profile/bindings.zon";
    pub const fixture_root = "test-profile/fixtures/";
    pub const binding_root = "test-profile/";
    pub const binding_inventory_root = "test-profile/fixtures";
    pub const implementation_root = "test-profile/src/";
    pub const implementation_inventory_root = "test-profile/src";
    pub const agents = "test-profile/AGENTS.md";
    pub const requirements_index = "test-profile/REQUIREMENTS.md";
    pub const glossary = "test-profile/GLOSSARY.md";
};

pub const projections = struct {
    pub const glossary_preamble = "# Glossary\n";
    pub const requirements_preamble = "# Requirements\n";
};