From d10f738c758d312db4f8b5ade369abcf74f86f1d Mon Sep 17 00:00:00 2001 From: Yves Biener Date: Mon, 24 Feb 2025 16:54:05 +0100 Subject: [PATCH] add(test): cell conversion to ansi enhanced strings --- src/cell.zig | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/cell.zig b/src/cell.zig index 470a2e3..54faa61 100644 --- a/src/cell.zig +++ b/src/cell.zig @@ -19,3 +19,47 @@ pub fn reset(this: *Cell) void { pub fn value(this: Cell, writer: anytype) !void { try this.style.value(writer, this.cp); } + +test "ascii styled text" { + const cells: [4]Cell = .{ + .{ .cp = 'Y', .style = .{ .fg = .green, .bg = .grey, .emphasis = &.{} } }, + .{ .cp = 'v', .style = .{ .emphasis = &.{ .bold, .underline } } }, + .{ .cp = 'e', .style = .{ .emphasis = &.{.italic} } }, + .{ .cp = 's', .style = .{ .fg = .light_green, .bg = .black, .emphasis = &.{.underline} } }, + }; + + var string = std.ArrayList(u8).init(std.testing.allocator); + defer string.deinit(); + + const writer = string.writer(); + for (cells) |cell| { + try cell.value(writer); + } + try std.testing.expectEqualSlices( + u8, + "\x1b[38;5;10;48;5;8;59mY\x1b[0m\x1b[39;49;59;1;4mv\x1b[0m\x1b[39;49;59;3me\x1b[0m\x1b[38;5;2;48;5;16;59;4ms\x1b[0m", + string.items, + ); +} + +test "utf-8 styled text" { + const cells: [4]Cell = .{ + .{ .cp = '╭', .style = .{ .fg = .green, .bg = .grey, .emphasis = &.{} } }, + .{ .cp = '─', .style = .{ .emphasis = &.{} } }, + .{ .cp = '┄', .style = .{ .emphasis = &.{} } }, + .{ .cp = '┘', .style = .{ .fg = .light_green, .bg = .black, .emphasis = &.{.underline} } }, + }; + + var string = std.ArrayList(u8).init(std.testing.allocator); + defer string.deinit(); + + const writer = string.writer(); + for (cells) |cell| { + try cell.value(writer); + } + try std.testing.expectEqualSlices( + u8, + "\x1b[38;5;10;48;5;8;59m╭\x1b[0m\x1b[39;49;59m─\x1b[0m\x1b[39;49;59m┄\x1b[0m\x1b[38;5;2;48;5;16;59;4m┘\x1b[0m", + string.items, + ); +}