1/* Copyright libuv project contributors. All rights reserved. 2* 3* Permission is hereby granted, free of charge, to any person obtaining a copy 4* of this software and associated documentation files (the "Software"), to 5* deal in the Software without restriction, including without limitation the 6* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7* sell copies of the Software, and to permit persons to whom the Software is 8* furnished to do so, subject to the following conditions: 9* 10* The above copyright notice and this permission notice shall be included in 11* all copies or substantial portions of the Software. 12* 13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19* IN THE SOFTWARE. 20*/ 21 22#include "uv.h" 23#include "task.h" 24#include <string.h> 25 26#include "../src/strtok.h" 27#include "../src/strtok.c" 28 29struct strtok_test_case { 30 const char* str; 31 const char* sep; 32}; 33 34const char* tokens[] = { 35 "abc", 36 NULL, 37 38 "abc", 39 "abf", 40 NULL, 41 42 "This", 43 "is.a", 44 "test", 45 "of", 46 "the", 47 "string", 48 "tokenizer", 49 "function.", 50 NULL, 51 52 "Hello", 53 "This-is-a-nice", 54 "-string", 55 NULL 56}; 57 58#define ASSERT_STRCMP(x, y) \ 59 ASSERT((x != NULL && y != NULL && strcmp(x, y) == 0) || (x == y && x == NULL)) 60 61TEST_IMPL(strtok) { 62 struct strtok_test_case tests[] = { 63 { "abc", "" }, 64 { "abc.abf", "." }, 65 { "This;is.a:test:of=the/string\\tokenizer-function.", "\\/:;=-" }, 66 { "Hello This-is-a-nice.-string", " ." }, 67 }; 68 size_t tokens_len = ARRAY_SIZE(tokens); 69 size_t tests_len = ARRAY_SIZE(tests); 70 size_t i; 71 size_t j; 72 char* itr; 73 char* tok_r; 74 char current_test[2048]; 75 76 for (i = 0, j = 0; i < tests_len; i += 1) { 77 ASSERT(j < tokens_len); 78 snprintf(current_test, sizeof(current_test), "%s", tests[i].str); 79 tok_r = uv__strtok(current_test, tests[i].sep, &itr); 80 ASSERT_STRCMP(tok_r, tokens[j]); 81 j++; 82 while (tok_r) { 83 ASSERT(j < tokens_len); 84 tok_r = uv__strtok(NULL, tests[i].sep, &itr); 85 ASSERT_STRCMP(tok_r, tokens[j]); 86 j++; 87 } 88 } 89 return 0; 90} 91