/* test_string.c * strophe XMPP client library -- tests for re-implemented string functions * * Copyright (C) 2016 Dmitry Podgorny * * This software is provided AS-IS with no warranty, either express * or implied. * * This program is dual licensed under the MIT and GPLv3 licenses. */ #include #include #include #include #include "strophe.h" #include "common.h" #include "util.h" #include "test.h" /* ARRAY_SIZE */ /* strtok_s() has appeared in visual studio 2005. Use own implementation for older versions. */ #ifdef _MSC_VER # if (_MSC_VER >= 1400) # define strtok_r strtok_s # else # define strtok_r xmpp_strtok_r # endif #endif /* _MSC_VER */ static int test_strtok_r(void) { const char *test = "-abc-=-def--"; char *s1, *s2, *sub1, *sub2; char *sp1, *sp2; s1 = strdup(test); s2 = strdup(test); assert(strcmp(s1, s2) == 0); sub1 = strtok_r(s1, "-", &sp1); sub2 = xmpp_strtok_r(s2, "-", &sp2); if (strcmp(sub1, sub2) != 0) { printf("1st token is '%s', must be '%s'\n", sub2, sub1); return -1; } sub1 = strtok_r(NULL, "-=", &sp1); sub2 = xmpp_strtok_r(NULL, "-=", &sp2); if (strcmp(sub1, sub2) != 0) { printf("2nd token is '%s', must be '%s'\n", sub2, sub1); return -1; } sub1 = strtok_r(NULL, "-", &sp1); sub2 = xmpp_strtok_r(NULL, "-", &sp2); if (sub1 != sub2) { printf("3rd call returns %p instead of NULL\n", sub2); return -1; } free(s1); free(s2); return 0; } static int test_strdup_one(xmpp_ctx_t *ctx, const char *s) { char *s1, *s2; int rc = 0; s1 = strdup(s); s2 = xmpp_strdup(ctx, s); if (!s1 || !s2 || strcmp(s1, s2) != 0) { rc = -1; printf("strdup: '%s', xmpp_strdup: '%s'\n", s1 ? s1 : "", s2 ? s2 : ""); } free(s1); if (s2) xmpp_free(ctx, s2); return rc; } static int test_strdup(void) { xmpp_ctx_t *ctx; size_t i; int rc = 0; static const char *tests[] = { "", "\0", "test", "s p a c e", "\n\r" }; ctx = xmpp_ctx_new(NULL, NULL); assert(ctx != NULL); for (i = 0; i < ARRAY_SIZE(tests); ++i) { rc = test_strdup_one(ctx, tests[i]); if (rc != 0) break; } xmpp_ctx_free(ctx); return rc; } int main() { int rc; printf("xmpp_strtok_r() tests... "); rc = test_strtok_r(); if (rc != 0) return 1; printf("ok\n"); printf("xmpp_strdup() tests... "); rc = test_strdup(); if (rc != 0) return 1; printf("ok\n"); return 0; }