diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-02-25 15:34:17 -0800 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-02-26 11:42:03 -0800 |
| commit | a70307e7ffc608643bbd940796eaeb5bca6bbc8f (patch) | |
| tree | 544804a8aaa72e04e427b2c4c3932e465a30a97c /src/main.zig | |
| parent | eff1716b6c7800e6876d95d900b472fe351b0355 (diff) | |
| download | zig-a70307e7ffc608643bbd940796eaeb5bca6bbc8f.tar.gz zig-a70307e7ffc608643bbd940796eaeb5bca6bbc8f.zip | |
CLI: add unit test and improve sanitizeExampleName
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/main.zig b/src/main.zig index cbdc32e203..f32d205538 100644 --- a/src/main.zig +++ b/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 { - if (bytes.len == 0) return "foo"; var result: std.ArrayListUnmanaged(u8) = .empty; - try result.append(arena, switch (bytes[0]) { - '_', 'a'...'z', 'A'...'Z' => |c| c, - else => '_', - }); - for (bytes[1..]) |byte| switch (byte) { - '_', 'a'...'z', 'A'...'Z', '0'...'9' => try result.append(arena, byte), + for (bytes, 0..) |byte, i| switch (byte) { + '0'...'9' => { + if (i == 0) try result.append(arena, '_'); + try result.append(arena, byte); + }, + '_', 'a'...'z', 'A'...'Z' => try result.append(arena, byte), + '-', '.', ' ' => try result.append(arena, '_'), else => continue, }; + if (result.items.len == 0) return "foo"; if (result.items.len > Package.Manifest.max_name_len) result.shrinkRetainingCapacity(Package.Manifest.max_name_len); 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 { dev.check(.build_command); |
