LibUnicode: Avoid rejecting end-of-text position as a valid boundary

When the cursor was positioned at the end of text,
attempting to move it left(using the left arrow key)
would fail because align_boundary() was rejecting
the end-of-text position as a valid boundary.
This commit is contained in:
mikiubo 2025-04-07 23:13:31 +02:00 committed by Tim Flynn
commit 8ec72d6906
Notes: github-actions[bot] 2025-04-11 19:31:19 +00:00
2 changed files with 38 additions and 18 deletions

View file

@ -136,11 +136,23 @@ TEST_CASE(out_of_bounds)
auto segmenter = Unicode::Segmenter::create(Unicode::SegmenterGranularity::Word);
segmenter->set_segmented_text(text);
auto result = segmenter->previous_boundary(text.byte_count());
auto result = segmenter->previous_boundary(text.byte_count() + 1);
EXPECT(result.has_value());
result = segmenter->next_boundary(text.byte_count() + 1);
EXPECT(!result.has_value());
result = segmenter->previous_boundary(text.byte_count());
EXPECT(result.has_value());
result = segmenter->next_boundary(text.byte_count());
EXPECT(!result.has_value());
result = segmenter->next_boundary(0);
EXPECT(result.has_value());
result = segmenter->previous_boundary(0);
EXPECT(!result.has_value());
}
{
auto text = MUST(AK::utf8_to_utf16("foo"sv));
@ -148,10 +160,22 @@ TEST_CASE(out_of_bounds)
auto segmenter = Unicode::Segmenter::create(Unicode::SegmenterGranularity::Word);
segmenter->set_segmented_text(Utf16View { text });
auto result = segmenter->previous_boundary(text.size());
auto result = segmenter->previous_boundary(text.size() + 1);
EXPECT(result.has_value());
result = segmenter->next_boundary(text.size() + 1);
EXPECT(!result.has_value());
result = segmenter->previous_boundary(text.size());
EXPECT(result.has_value());
result = segmenter->next_boundary(text.size());
EXPECT(!result.has_value());
result = segmenter->next_boundary(0);
EXPECT(result.has_value());
result = segmenter->previous_boundary(0);
EXPECT(!result.has_value());
}
}