xref: /freebsd/contrib/libcbor/test/unicode_test.c (revision 10ff414c14eef433d8157f0c17904d740693933b)
1*10ff414cSEd Maste /*
2*10ff414cSEd Maste  * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com>
3*10ff414cSEd Maste  *
4*10ff414cSEd Maste  * libcbor is free software; you can redistribute it and/or modify
5*10ff414cSEd Maste  * it under the terms of the MIT license. See LICENSE for details.
6*10ff414cSEd Maste  */
7*10ff414cSEd Maste 
8*10ff414cSEd Maste #include <setjmp.h>
9*10ff414cSEd Maste #include <stdarg.h>
10*10ff414cSEd Maste #include <stddef.h>
11*10ff414cSEd Maste 
12*10ff414cSEd Maste #include <cmocka.h>
13*10ff414cSEd Maste 
14*10ff414cSEd Maste #include "../src/cbor/internal/unicode.h"
15*10ff414cSEd Maste 
16*10ff414cSEd Maste struct _cbor_unicode_status status;
17*10ff414cSEd Maste 
18*10ff414cSEd Maste unsigned char missing_bytes_data[] = {0xC4, 0x8C};
19*10ff414cSEd Maste 
20*10ff414cSEd Maste /* Capital accented C */
21*10ff414cSEd Maste static void test_missing_bytes(void **state) {
22*10ff414cSEd Maste   _cbor_unicode_codepoint_count(missing_bytes_data, 1, &status);
23*10ff414cSEd Maste   assert_true(status.status == _CBOR_UNICODE_BADCP);
24*10ff414cSEd Maste   _cbor_unicode_codepoint_count(missing_bytes_data, 2, &status);
25*10ff414cSEd Maste   assert_true(status.status == _CBOR_UNICODE_OK);
26*10ff414cSEd Maste }
27*10ff414cSEd Maste 
28*10ff414cSEd Maste unsigned char invalid_sequence_data[] = {0x65, 0xC4, 0x00};
29*10ff414cSEd Maste 
30*10ff414cSEd Maste /* e, invalid seq */
31*10ff414cSEd Maste static void test_invalid_sequence(void **state) {
32*10ff414cSEd Maste   _cbor_unicode_codepoint_count(invalid_sequence_data, 3, &status);
33*10ff414cSEd Maste   assert_true(status.status == _CBOR_UNICODE_BADCP);
34*10ff414cSEd Maste   assert_true(status.location == 2);
35*10ff414cSEd Maste }
36*10ff414cSEd Maste 
37*10ff414cSEd Maste int main(void) {
38*10ff414cSEd Maste   const struct CMUnitTest tests[] = {cmocka_unit_test(test_missing_bytes),
39*10ff414cSEd Maste                                      cmocka_unit_test(test_invalid_sequence)};
40*10ff414cSEd Maste   return cmocka_run_group_tests(tests, NULL, NULL);
41*10ff414cSEd Maste }
42