xref: /freebsd/contrib/libcbor/test/unicode_test.c (revision 5d3e7166)
110ff414cSEd Maste /*
210ff414cSEd Maste  * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com>
310ff414cSEd Maste  *
410ff414cSEd Maste  * libcbor is free software; you can redistribute it and/or modify
510ff414cSEd Maste  * it under the terms of the MIT license. See LICENSE for details.
610ff414cSEd Maste  */
710ff414cSEd Maste 
8*5d3e7166SEd Maste #include "assertions.h"
910ff414cSEd Maste 
1010ff414cSEd Maste #include "../src/cbor/internal/unicode.h"
1110ff414cSEd Maste struct _cbor_unicode_status status;
1210ff414cSEd Maste 
1310ff414cSEd Maste unsigned char missing_bytes_data[] = {0xC4, 0x8C};
1410ff414cSEd Maste 
1510ff414cSEd Maste /* Capital accented C */
test_missing_bytes(void ** _CBOR_UNUSED (_state))16*5d3e7166SEd Maste static void test_missing_bytes(void **_CBOR_UNUSED(_state)) {
17*5d3e7166SEd Maste   assert_true(_cbor_unicode_codepoint_count(missing_bytes_data, 1, &status) ==
18*5d3e7166SEd Maste               0);
1910ff414cSEd Maste   assert_true(status.status == _CBOR_UNICODE_BADCP);
20*5d3e7166SEd Maste   assert_true(status.location == 1);
21*5d3e7166SEd Maste 
22*5d3e7166SEd Maste   assert_true(_cbor_unicode_codepoint_count(missing_bytes_data, 2, &status) ==
23*5d3e7166SEd Maste               1);
2410ff414cSEd Maste   assert_true(status.status == _CBOR_UNICODE_OK);
25*5d3e7166SEd Maste   assert_true(status.location == 0);
2610ff414cSEd Maste }
2710ff414cSEd Maste 
2810ff414cSEd Maste unsigned char invalid_sequence_data[] = {0x65, 0xC4, 0x00};
2910ff414cSEd Maste 
3010ff414cSEd Maste /* e, invalid seq */
test_invalid_sequence(void ** _CBOR_UNUSED (_state))31*5d3e7166SEd Maste static void test_invalid_sequence(void **_CBOR_UNUSED(_state)) {
32*5d3e7166SEd Maste   assert_true(
33*5d3e7166SEd Maste       _cbor_unicode_codepoint_count(invalid_sequence_data, 3, &status) == 0);
3410ff414cSEd Maste   assert_true(status.status == _CBOR_UNICODE_BADCP);
3510ff414cSEd Maste   assert_true(status.location == 2);
3610ff414cSEd Maste }
3710ff414cSEd Maste 
main(void)3810ff414cSEd Maste int main(void) {
3910ff414cSEd Maste   const struct CMUnitTest tests[] = {cmocka_unit_test(test_missing_bytes),
4010ff414cSEd Maste                                      cmocka_unit_test(test_invalid_sequence)};
4110ff414cSEd Maste   return cmocka_run_group_tests(tests, NULL, NULL);
4210ff414cSEd Maste }
43