Набор тестовых данных для автоматического тестирования валидатора строк UTF-8 - PullRequest
4 голосов
/ 02 апреля 2011

Я написал функцию проверки строки UTF-8.

Функция принимает буфер байтов и его длину в символах UTF-8 и проверяет, что буфер состоит именно из заданного числа действительных UTF-8.символов.

Если буфер слишком короткий или большой или содержит недопустимые символы UTF8, проверка не пройдена.

Теперь я хочу написать автоматические тесты для моего валидатора.

Есть ли набор данных, который я могу использовать повторно?

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

Есть какие-нибудь подсказки?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011
  • Допустимые данные UTF-8, чтобы увидеть, что они передают
    • Строки, содержащие символы, требующие 1 единицы кода, 2, 3 и 4!(Не просто тестируйте "ABC" или "café")
  • Явно недопустимые данные, скажем, некоторая строка ISO-8859-1 (это тоже недопустимый UTF-8)
  • Строка, содержащая слишком длинные формы (например, 1-байтовый символ, кодированный как 2). Они не должны передаваться как UTF-8
  • Строка, содержащая кодовые точки вышеU + 10FFFF
  • Все перечисленное здесь: http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences

В зависимости от того, насколько хорош ваш код:

  • Перехват строки UTF-8, которая кодируетчто-нибудь от U + D800 до U + DFFF (суррогатные пары, которые никогда не должны присутствовать в строке UTF-8)

Те тестовые случаи:

Should pass: "ABC"    41 42 43
Should pass: "ABÇ"    41 42 c3 87
Should pass: "ABḈ"    41 42 e1 b8 88
Should pass: "AB?"    41 42 f0 9d 9c 8d
Should fail: Bad data 80 81 82 83
Should fail: Bad data C2 C3
Should fail: Overlong C0 43
Should fail: encodes  F5 80 80 80
             U+140000
Should fail: encodes  F4 90 80 80
             U+110000
Should fail: encodes  ED A0 80
             U+D800

(I 'Мы только что проверили это, так что проверь меня дважды, если получишь неожиданный результат.)

0 голосов
/ 03 апреля 2011

Я закончил загрузкой UTF-8-test.txt построчно, сравнивая результат с ожидаемым (который я жестко запрограммировал на карте line number->ok/fail).

Это работает, но я также хотел бы получить некоторые случаи для неполных символов UTF-8, переполнения буфера и т. Д. Итак, если вы знаете существующий набор тестов (даже не многоразовый, но который может служить источником вдохновения) Пожалуйста, оставьте ссылку здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...