From a4dd0ad63c00f4dee3b86dfd3075d1d61b2b3180 Mon Sep 17 00:00:00 2001 From: sanine Date: Sat, 27 Aug 2022 23:52:56 -0500 Subject: add plibsys --- 3rdparty/plibsys/tests/perror_test.cpp | 236 +++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 3rdparty/plibsys/tests/perror_test.cpp (limited to '3rdparty/plibsys/tests/perror_test.cpp') diff --git a/3rdparty/plibsys/tests/perror_test.cpp b/3rdparty/plibsys/tests/perror_test.cpp new file mode 100644 index 0000000..1db2f4d --- /dev/null +++ b/3rdparty/plibsys/tests/perror_test.cpp @@ -0,0 +1,236 @@ +/* + * The MIT License + * + * Copyright (C) 2016-2017 Alexander Saprykin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * 'Software'), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "plibsys.h" +#include "ptestmacros.h" + +#include + +P_TEST_MODULE_INIT (); + +#define PERROR_TEST_MESSAGE "PError test error message" +#define PERROR_TEST_MESSAGE_2 "Another PError test error message" + +extern "C" ppointer pmem_alloc (psize nbytes) +{ + P_UNUSED (nbytes); + return (ppointer) NULL; +} + +extern "C" ppointer pmem_realloc (ppointer block, psize nbytes) +{ + P_UNUSED (block); + P_UNUSED (nbytes); + return (ppointer) NULL; +} + +extern "C" void pmem_free (ppointer block) +{ + P_UNUSED (block); +} + +P_TEST_CASE_BEGIN (perror_nomem_test) +{ + p_libsys_init (); + + PError *error = p_error_new_literal (0, 0, NULL); + P_TEST_CHECK (error != NULL); + + PMemVTable vtable; + + vtable.free = pmem_free; + vtable.malloc = pmem_alloc; + vtable.realloc = pmem_realloc; + + P_TEST_CHECK (p_mem_set_vtable (&vtable) == TRUE); + + P_TEST_CHECK (p_error_new () == NULL); + P_TEST_CHECK (p_error_new_literal (0, 0, NULL) == NULL); + P_TEST_CHECK (p_error_copy (error) == NULL); + + p_mem_restore_vtable (); + + p_error_free (error); + + p_libsys_shutdown (); +} +P_TEST_CASE_END () + +P_TEST_CASE_BEGIN (perror_invalid_test) +{ + p_libsys_init (); + + P_TEST_CHECK (p_error_get_message (NULL) == NULL); + P_TEST_CHECK (p_error_get_code (NULL) == 0); + P_TEST_CHECK (p_error_get_native_code (NULL) == 0); + P_TEST_CHECK (p_error_get_domain (NULL) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (p_error_copy (NULL) == NULL); + + PError *error = (PError *) 0x1; + + p_error_set_code (NULL, 0); + p_error_set_native_code (NULL, 0); + p_error_set_message (NULL, NULL); + + p_error_set_error (NULL, 0, 0, NULL); + p_error_set_error_p (NULL, 0, 0, NULL); + + p_error_set_error_p (&error, 0, 0, NULL); + P_TEST_CHECK (error == (PError *) 0x1); + + p_error_clear (NULL); + p_error_free (NULL); + + p_libsys_shutdown (); +} +P_TEST_CASE_END () + +P_TEST_CASE_BEGIN (perror_general_test) +{ + p_libsys_init (); + + /* Empty initialization test */ + PError *error = p_error_new (); + + P_TEST_CHECK (error != NULL); + P_TEST_CHECK (p_error_get_code (error) == 0); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (p_error_get_message (error) == NULL); + + PError *copy_error = p_error_copy (error); + + P_TEST_CHECK (copy_error != NULL); + P_TEST_CHECK (p_error_get_code (copy_error) == 0); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (p_error_get_message (copy_error) == NULL); + + p_error_free (copy_error); + copy_error = NULL; + + p_error_set_error (error, (pint) P_ERROR_DOMAIN_IO, -10, PERROR_TEST_MESSAGE); + + P_TEST_CHECK (p_error_get_code (error) == (pint) P_ERROR_DOMAIN_IO); + P_TEST_CHECK (p_error_get_native_code (error) == -10); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_IO); + P_TEST_CHECK (strcmp (p_error_get_message (error), PERROR_TEST_MESSAGE) == 0); + + /* Change internal data */ + p_error_set_code (error, (pint) P_ERROR_DOMAIN_IPC); + p_error_set_native_code (error, -20); + p_error_set_message (error, PERROR_TEST_MESSAGE_2); + + P_TEST_CHECK (p_error_get_code (error) == (pint) P_ERROR_DOMAIN_IPC); + P_TEST_CHECK (p_error_get_native_code (error) == -20); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_IPC); + P_TEST_CHECK (strcmp (p_error_get_message (error), PERROR_TEST_MESSAGE_2) == 0); + + /* Revert data back */ + p_error_set_code (error, 10); + p_error_set_native_code (error, -10); + p_error_set_message (error, PERROR_TEST_MESSAGE); + + copy_error = p_error_copy (error); + + P_TEST_CHECK (copy_error != NULL); + P_TEST_CHECK (p_error_get_code (copy_error) == 10); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (p_error_get_native_code (copy_error) == -10); + + P_TEST_CHECK (strcmp (p_error_get_message (copy_error), PERROR_TEST_MESSAGE) == 0); + + p_error_free (copy_error); + copy_error = NULL; + + p_error_set_error (error, 20, -20, PERROR_TEST_MESSAGE_2); + + P_TEST_CHECK (p_error_get_code (error) == 20); + P_TEST_CHECK (p_error_get_native_code (error) == -20); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (strcmp (p_error_get_message (error), PERROR_TEST_MESSAGE_2) == 0); + + p_error_clear (error); + + P_TEST_CHECK (p_error_get_code (error) == 0); + P_TEST_CHECK (p_error_get_native_code (error) == 0); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (p_error_get_message (error) == NULL); + + p_error_free (error); + error = NULL; + + /* Literal initialization test */ + error = p_error_new_literal (30, -30, PERROR_TEST_MESSAGE); + + P_TEST_CHECK (p_error_get_code (error) == 30); + P_TEST_CHECK (p_error_get_native_code (error) == -30); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (strcmp (p_error_get_message (error), PERROR_TEST_MESSAGE) == 0); + + copy_error = p_error_copy (error); + + P_TEST_CHECK (copy_error != NULL); + P_TEST_CHECK (p_error_get_code (copy_error) == 30); + P_TEST_CHECK (p_error_get_native_code (copy_error) == -30); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (strcmp (p_error_get_message (copy_error), PERROR_TEST_MESSAGE) == 0); + + p_error_free (copy_error); + p_error_free (error); + + /* Through the double pointer */ + error = NULL; + p_error_set_error_p (&error, 10, -10, PERROR_TEST_MESSAGE); + + P_TEST_CHECK (p_error_get_code (error) == 10); + P_TEST_CHECK (p_error_get_native_code (error) == -10); + P_TEST_CHECK (p_error_get_domain (error) == P_ERROR_DOMAIN_NONE); + P_TEST_CHECK (strcmp (p_error_get_message (error), PERROR_TEST_MESSAGE) == 0); + + p_error_free (error); + + /* System codes */ + p_error_set_last_system (10); + P_TEST_CHECK (p_error_get_last_system () == 10); + p_error_set_last_system (0); + P_TEST_CHECK (p_error_get_last_system () == 0); + +#ifndef P_OS_OS2 + p_error_set_last_net (20); + P_TEST_CHECK (p_error_get_last_net () == 20); + p_error_set_last_net (0); + P_TEST_CHECK (p_error_get_last_net () == 0); +#endif + + p_libsys_shutdown (); +} +P_TEST_CASE_END () + +P_TEST_SUITE_BEGIN() +{ + P_TEST_SUITE_RUN_CASE (perror_nomem_test); + P_TEST_SUITE_RUN_CASE (perror_invalid_test); + P_TEST_SUITE_RUN_CASE (perror_general_test); +} +P_TEST_SUITE_END() -- cgit v1.2.1