135 lines
5.6 KiB
Zig
135 lines
5.6 KiB
Zig
const std = @import("std");
|
|
const clap = @import("../index.zig");
|
|
|
|
const debug = std.debug;
|
|
const mem = std.mem;
|
|
const core = clap.core;
|
|
|
|
const assert = debug.assert;
|
|
|
|
const ArgSliceIterator = core.ArgSliceIterator;
|
|
const Names = core.Names;
|
|
const Param = core.Param;
|
|
const Clap = core.Clap;
|
|
|
|
fn testNoErr(params: []const Param(u8), args: []const []const u8, ids: []const u8, values: []const ?[]const u8) void {
|
|
var arg_iter = ArgSliceIterator.init(args);
|
|
var iter = Clap(u8, ArgSliceIterator.Error).init(params, &arg_iter.iter);
|
|
|
|
var i: usize = 0;
|
|
while (iter.next() catch unreachable) |arg| : (i += 1) {
|
|
debug.assert(ids[i] == arg.param.id);
|
|
const expected_value = values[i] ?? {
|
|
debug.assert(arg.value == null);
|
|
continue;
|
|
};
|
|
const actual_value = arg.value ?? unreachable;
|
|
|
|
debug.assert(mem.eql(u8, expected_value, actual_value));
|
|
}
|
|
}
|
|
|
|
test "clap.core: short" {
|
|
const params = []Param(u8) {
|
|
Param(u8).init(0, false, Names.short('a')),
|
|
Param(u8).init(1, false, Names.short('b')),
|
|
Param(u8).init(2, true, Names.short('c')),
|
|
};
|
|
|
|
testNoErr(params, [][]const u8 { "-a" }, []u8{0}, []?[]const u8{null});
|
|
testNoErr(params, [][]const u8 { "-a", "-b" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "-ab" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "-c=100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "-c100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "-c", "100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "-abc", "100" }, []u8{0,1,2}, []?[]const u8{null,null,"100"});
|
|
testNoErr(params, [][]const u8 { "-abc=100" }, []u8{0,1,2}, []?[]const u8{null,null,"100"});
|
|
testNoErr(params, [][]const u8 { "-abc100" }, []u8{0,1,2}, []?[]const u8{null,null,"100"});
|
|
}
|
|
|
|
test "clap.core: long" {
|
|
const params = []Param(u8) {
|
|
Param(u8).init(0, false, Names.long("aa")),
|
|
Param(u8).init(1, false, Names.long("bb")),
|
|
Param(u8).init(2, true, Names.long("cc")),
|
|
};
|
|
|
|
testNoErr(params, [][]const u8 { "--aa" }, []u8{0}, []?[]const u8{null});
|
|
testNoErr(params, [][]const u8 { "--aa", "--bb" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "--cc=100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "--cc", "100" }, []u8{2}, []?[]const u8{"100"});
|
|
}
|
|
|
|
test "clap.core: bare" {
|
|
const params = []Param(u8) {
|
|
Param(u8).init(0, false, Names.bare("aa")),
|
|
Param(u8).init(1, false, Names.bare("bb")),
|
|
Param(u8).init(2, true, Names.bare("cc")),
|
|
};
|
|
|
|
testNoErr(params, [][]const u8 { "aa" }, []u8{0}, []?[]const u8{null});
|
|
testNoErr(params, [][]const u8 { "aa", "bb" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "cc=100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "cc", "100" }, []u8{2}, []?[]const u8{"100"});
|
|
}
|
|
|
|
test "clap.core: none" {
|
|
const params = []Param(u8) {
|
|
Param(u8).init(0, true, Names.none()),
|
|
};
|
|
|
|
testNoErr(params, [][]const u8 { "aa" }, []u8{0}, []?[]const u8{"aa"});
|
|
}
|
|
|
|
test "clap.core: all" {
|
|
const params = []Param(u8) {
|
|
Param(u8).init(
|
|
0,
|
|
false,
|
|
Names{
|
|
.bare = "aa",
|
|
.short = 'a',
|
|
.long = "aa",
|
|
}
|
|
),
|
|
Param(u8).init(
|
|
1,
|
|
false,
|
|
Names{
|
|
.bare = "bb",
|
|
.short = 'b',
|
|
.long = "bb",
|
|
}
|
|
),
|
|
Param(u8).init(
|
|
2,
|
|
true,
|
|
Names{
|
|
.bare = "cc",
|
|
.short = 'c',
|
|
.long = "cc",
|
|
}
|
|
),
|
|
Param(u8).init(3, true, Names.none()),
|
|
};
|
|
|
|
testNoErr(params, [][]const u8 { "-a" }, []u8{0}, []?[]const u8{null});
|
|
testNoErr(params, [][]const u8 { "-a", "-b" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "-ab" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "-c=100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "-c100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "-c", "100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "-abc", "100" }, []u8{0,1,2}, []?[]const u8{null,null,"100"});
|
|
testNoErr(params, [][]const u8 { "-abc=100" }, []u8{0,1,2}, []?[]const u8{null,null,"100"});
|
|
testNoErr(params, [][]const u8 { "-abc100" }, []u8{0,1,2}, []?[]const u8{null,null,"100"});
|
|
testNoErr(params, [][]const u8 { "--aa" }, []u8{0}, []?[]const u8{null});
|
|
testNoErr(params, [][]const u8 { "--aa", "--bb" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "--cc=100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "--cc", "100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "aa" }, []u8{0}, []?[]const u8{null});
|
|
testNoErr(params, [][]const u8 { "aa", "bb" }, []u8{0,1}, []?[]const u8{null,null});
|
|
testNoErr(params, [][]const u8 { "cc=100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "cc", "100" }, []u8{2}, []?[]const u8{"100"});
|
|
testNoErr(params, [][]const u8 { "dd" }, []u8{3}, []?[]const u8{"dd"});
|
|
}
|