mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
CLI: add unit test and improve sanitizeExampleName
This commit is contained in:
parent
eff1716b6c
commit
a70307e7ff
28
src/main.zig
28
src/main.zig
@ -4773,22 +4773,36 @@ fn cmdInit(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn sanitizeExampleName(arena: Allocator, bytes: []const u8) error{OutOfMemory}![]const u8 {
|
fn sanitizeExampleName(arena: Allocator, bytes: []const u8) error{OutOfMemory}![]const u8 {
|
||||||
if (bytes.len == 0) return "foo";
|
|
||||||
var result: std.ArrayListUnmanaged(u8) = .empty;
|
var result: std.ArrayListUnmanaged(u8) = .empty;
|
||||||
try result.append(arena, switch (bytes[0]) {
|
for (bytes, 0..) |byte, i| switch (byte) {
|
||||||
'_', 'a'...'z', 'A'...'Z' => |c| c,
|
'0'...'9' => {
|
||||||
else => '_',
|
if (i == 0) try result.append(arena, '_');
|
||||||
});
|
try result.append(arena, byte);
|
||||||
for (bytes[1..]) |byte| switch (byte) {
|
},
|
||||||
'_', 'a'...'z', 'A'...'Z', '0'...'9' => try result.append(arena, byte),
|
'_', 'a'...'z', 'A'...'Z' => try result.append(arena, byte),
|
||||||
|
'-', '.', ' ' => try result.append(arena, '_'),
|
||||||
else => continue,
|
else => continue,
|
||||||
};
|
};
|
||||||
|
if (result.items.len == 0) return "foo";
|
||||||
if (result.items.len > Package.Manifest.max_name_len)
|
if (result.items.len > Package.Manifest.max_name_len)
|
||||||
result.shrinkRetainingCapacity(Package.Manifest.max_name_len);
|
result.shrinkRetainingCapacity(Package.Manifest.max_name_len);
|
||||||
|
|
||||||
return result.toOwnedSlice(arena);
|
return result.toOwnedSlice(arena);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test sanitizeExampleName {
|
||||||
|
var arena_instance = std.heap.ArenaAllocator.init(std.testing.allocator);
|
||||||
|
defer arena_instance.deinit();
|
||||||
|
const arena = arena_instance.allocator();
|
||||||
|
|
||||||
|
try std.testing.expectEqualStrings("foo_bar", try sanitizeExampleName(arena, "foo bar+"));
|
||||||
|
try std.testing.expectEqualStrings("foo", try sanitizeExampleName(arena, ""));
|
||||||
|
try std.testing.expectEqualStrings("foo", try sanitizeExampleName(arena, "!"));
|
||||||
|
try std.testing.expectEqualStrings("a", try sanitizeExampleName(arena, "!a"));
|
||||||
|
try std.testing.expectEqualStrings("a_b", try sanitizeExampleName(arena, "a.b!"));
|
||||||
|
try std.testing.expectEqualStrings("_01234", try sanitizeExampleName(arena, "01234"));
|
||||||
|
}
|
||||||
|
|
||||||
fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
|
fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
|
||||||
dev.check(.build_command);
|
dev.check(.build_command);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user