Luigit
repositories / termux-janitor

termux-janitor

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

owned by admin

tests/fixtures/android_allowlist.zig

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

const expected_identifiers = [_][]const u8{
    "com.termux",
    "com.termux.api",
    "com.termux.boot",
    "com.termux.float",
    "com.termux.gui",
    "com.termux.styling",
    "com.termux.tasker",
    "com.termux.widget",
    "com.termux.x11",
};

pub const Fixture = struct {
    given: bool = false,
    inspected: bool = false,

    pub fn init() !Fixture {
        return .{};
    }

    pub fn deinit(fixture: *Fixture) void {
        fixture.* = undefined;
    }

    pub fn given_generated_android_allowlist(fixture: *Fixture) !void {
        std.debug.assert(!fixture.given);
        try std.testing.expectEqual(expected_identifiers.len, spec_data.android_packages.len);
        fixture.given = true;
    }

    pub fn when_inspect_android_allowlist(fixture: *Fixture) !void {
        std.debug.assert(fixture.given);
        std.debug.assert(!fixture.inspected);
        fixture.inspected = true;
    }

    pub fn then_inv_android_allowlist_identities(fixture: *Fixture) !void {
        std.debug.assert(fixture.inspected);
        for (expected_identifiers, 0..) |identifier, index| {
            try std.testing.expectEqualStrings(
                identifier,
                spec_data.android_packages[index].identifier,
            );
            for (spec_data.android_packages[0..index]) |previous| {
                try std.testing.expect(!std.mem.eql(u8, previous.identifier, identifier));
            }
        }
    }

    pub fn then_inv_android_allowlist_roles(fixture: *Fixture) !void {
        std.debug.assert(fixture.inspected);
        for (spec_data.android_packages) |package| {
            if (std.mem.eql(u8, package.identifier, "com.termux")) {
                try std.testing.expectEqual(spec_data.AndroidPackageRole.base, package.role);
            } else {
                try std.testing.expectEqual(spec_data.AndroidPackageRole.add_on, package.role);
            }
        }
    }

    pub fn forbid_no_android_allowlist_base_addon(fixture: *Fixture) !void {
        std.debug.assert(fixture.inspected);
        for (spec_data.android_packages) |package| {
            if (std.mem.eql(u8, package.identifier, "com.termux")) {
                try std.testing.expect(package.role != .add_on);
            }
        }
    }
};