terminal: fix up some tests to be more robust

pull/8417/head
Mitchell Hashimoto 2025-08-27 07:15:39 -07:00
parent a3f4997fbc
commit adfc93047c
No known key found for this signature in database
GPG Key ID: 523D5DC389D273BC
1 changed files with 35 additions and 11 deletions

View File

@ -193,7 +193,7 @@ pub const Action = union(enum) {
/// Maximum number of intermediate characters during parsing. This is
/// 4 because we also use the intermediates array for UTF8 decoding which
/// can be at most 4 bytes.
const MAX_INTERMEDIATE = 4;
pub const MAX_INTERMEDIATE = 4;
/// Maximum number of CSI parameters. This is arbitrary. Practically, the
/// only CSI command that uses more than 3 parameters is the SGR command
@ -949,17 +949,17 @@ test "csi: too many params" {
}
}
test "csi: 17 parameters" {
// Test with exactly 17 parameters (the Kakoune case)
test "csi: sgr with up to our max parameters" {
for (1..MAX_PARAMS + 1) |max| {
var p = init();
_ = p.next(0x1B);
_ = p.next('[');
// Build 17 parameters separated by semicolons
for (0..16) |_| {
for (0..max - 1) |_| {
_ = p.next('1');
_ = p.next(';');
}
_ = p.next('2'); // 17th parameter
_ = p.next('2');
{
const a = p.next('H');
@ -969,8 +969,32 @@ test "csi: 17 parameters" {
try testing.expect(a[2] == null);
const csi = a[1].?.csi_dispatch;
try testing.expectEqual(@as(usize, 17), csi.params.len);
try testing.expectEqual(@as(u16, 2), csi.params[16]);
try testing.expectEqual(@as(usize, max), csi.params.len);
try testing.expectEqual(@as(u16, 2), csi.params[max - 1]);
}
}
}
test "csi: sgr beyond our max drops it" {
// Has to be +2 for the loops below
const max = MAX_PARAMS + 2;
var p = init();
_ = p.next(0x1B);
_ = p.next('[');
for (0..max - 1) |_| {
_ = p.next('1');
_ = p.next(';');
}
_ = p.next('2');
{
const a = p.next('H');
try testing.expect(p.state == .ground);
try testing.expect(a[0] == null);
try testing.expect(a[1] == null);
try testing.expect(a[2] == null);
}
}