mirror of
https://github.com/textmate/textmate.git
synced 2026-01-14 09:18:07 -05:00
48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
#include "../src/helpers/add_to_buffer.h"
|
|
|
|
static void small_adds (std::string const& expect, std::string const& src, size_t n, bool clearPrevious)
|
|
{
|
|
char const* first = src.data();
|
|
char const* last = src.data() + src.size();
|
|
|
|
std::string tmp, dst;
|
|
while(first != last)
|
|
{
|
|
auto next = std::min(first + n, last);
|
|
auto range = add_bytes_to_utf8_buffer(tmp, first, next, clearPrevious);
|
|
OAK_ASSERT(utf8::is_valid(range.first, range.second));
|
|
dst.insert(dst.end(), range.first, range.second);
|
|
first = next;
|
|
}
|
|
|
|
if(!clearPrevious)
|
|
OAK_ASSERT_EQ(std::string(tmp.begin(), utf8::find_safe_end(tmp.begin(), tmp.end())), expect);
|
|
|
|
OAK_ASSERT_EQ(dst, expect);
|
|
}
|
|
|
|
void test_add_to_buffer ()
|
|
{
|
|
static std::string const GoodUTF8 =
|
|
"Surrogate: 𠻵\n"
|
|
"Diacritics: c̄̌\n"
|
|
"Thai: ไปกินปูดำที่บ้านกตัญญู\n"
|
|
"Right-to-left: ومصادر اخرى ايضاً تُشير بأن اسم الآيفون سيكون\n"
|
|
"Double width: 南野 繁弘\n";
|
|
|
|
static std::string const BadUTF8 =
|
|
"Surrogate: 𠻵\n"
|
|
"Diacritics: \xFE" "c̄̌\xFE\n"
|
|
"Thai: ไปกินปูดำที่บ้านกตัญญู\xE2\x99\n"
|
|
"Right-to-left: ومصادر اخرى ايضاً تُشير بأن\xC0\xFE اسم الآيفون سيكون\n"
|
|
"Double width: \xF0\xA0\xBB南野 繁弘\n\xE2\x99";
|
|
|
|
for(size_t i = 1; i <= 16; ++i)
|
|
{
|
|
small_adds(GoodUTF8, GoodUTF8, i, true);
|
|
small_adds(GoodUTF8, BadUTF8, i, true);
|
|
small_adds(GoodUTF8, GoodUTF8, i, false);
|
|
small_adds(GoodUTF8, BadUTF8, i, false);
|
|
}
|
|
}
|