Unicode тестовые строки для модульных тестов - PullRequest
12 голосов
/ 26 мая 2011

Мне нужно несколько тестовых строк Utf32, чтобы применить кросс-платформенный код манипуляции со строками. Мне бы хотелось, чтобы набор тестовых строк, использующих кодировки utf32 <-> utf16 <-> utf8, проверял, можно ли преобразовывать символы вне BMP из utf32, через суррогаты utf16, через utf8 и обратно. должным образом.

И я всегда нахожу немного более элегантным, если рассматриваемые строки не просто состоят из случайных байтов, но на самом деле имеют смысл в (различных) языках, которые они кодируют.

Ответы [ 6 ]

14 голосов
/ 30 июля 2011

Хотя это не совсем то, о чем вы просили, я всегда находил этот тестовый документ полезным.

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt

Этот же сайт предлагает это

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt

... которые являются эквивалентами английского текста "Quick brown fox", в котором используются все используемые символы для различных языков. Эта страница относится к большему списку «панграмм», которые раньше были в Википедии, но, видимо, там были удалены. Это все еще доступно здесь:

http://clagnut.com/blog/2380/

0 голосов
/ 02 июня 2019

https://github.com/noct/cutf/tree/master/bin

Включает следующие файлы:

UTF-8-demo.txt
big.txt
quickbrown.txt
utf8_invalid.txt
0 голосов
/ 16 июня 2014

Чтобы действительно проверить все возможные преобразования между форматами, в отличие от преобразования символов (например, towupper (), towlower ()), вы должны проверить все символы.Следующий цикл дает вам все это:

for(wint_t c(0); c < 0x110000; ++c)
{
    if(c >= 0xD800 && c <= 0xDFFF)
    {
        continue;
    }
    // here 'c' is any one Unicode character in UTF-32
    ...
}

Таким образом, вы можете быть уверены, что ничего не пропустите (т. Е. 100% завершите тест). Это всего 1 112 065 символов, так что это будет очень быстрос современным компьютером.

0 голосов
/ 09 ноября 2012

Вы можете попробовать это (есть несколько предложений на русском, греческом, китайском и т. Д. Для тестирования Unicode):

http://www.madore.org/~david/misc/unitest/

0 голосов
/ 12 сентября 2012

Если вам не нужно ничего более обширного, чем http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt тестовых случаев, следующий инструмент полезен для создания нескольких интересующих тестовых случаев:

http://rishida.net/tools/conversion/

Например:

// point    UTF-16      UTF-8
// U+007A   007A        7A
// U+6C34   6C34        E6 B0 B4
// U+10000  D800 DC00   F0 90 80 80
// U+1D11E  D834 DD1E   F0 9D 84 9E
// U+10FFFD DBFF DFFD   F4 8F BF BD
0 голосов
/ 26 мая 2011

Хммм

Вы можете найти много случайных данных, используя поиск в Google (и посмотрите правильный столбец для вопросов, подобных этим на SO ...)

Однако, я рекомендую вам в значительной степени собратьваши тестовые строки в виде байтового массива.Дело не в том, «какие данные», просто в том, что юникод обрабатывается правильно.

Например, вам нужно убедиться, что идентичные строки в разных нормализованных формах (т.е. даже если не в канонической форме) все равно сравниваются.

Вы захотите убедиться, что определение длины строки является надежным (и распознает одиночные, двойные, тройные и четырехкратные байтовые символы).Вы захотите проверить, что обход строки от начала до конца учитывает ту же логику.Более целенаправленные тесты для произвольного доступа к символам Юникода.

Это все, что вы знали, я уверен.Я просто излагаю их, чтобы напомнить вам, что вам нужны тестовые данные, ориентированные именно на крайние случаи, логические свойства, присущие Unicode.

Только тогда у вас будут правильные тестовые данные.


За пределами этой области (технически правильная обработка Unicode) находится фактическая локализация (сопоставление, преобразование кодировки и т. Д.).Я имею в виду тест Турции

Вот полезные ссылки:

...