1 /* 2 * Copyright (C) 2014 Intel Corporation. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #include <errno.h> 19 #include <stddef.h> 20 #include <stdio.h> 21 #include <stdlib.h> 22 #include <string.h> 23 #include <unistd.h> 24 25 #include <shared/strbuf.h> 26 #include <shared/util.h> 27 28 #include "testsuite.h" 29 30 static const char *TEXT = 31 "this is a very long test that is longer than the size we initially se in the strbuf"; 32 33 static int test_strbuf_pushchar(const struct test *t) 34 { 35 struct strbuf buf; 36 char *result1, *result2; 37 const char *c; 38 39 strbuf_init(&buf); 40 41 for (c = TEXT; *c != '\0'; c++) 42 strbuf_pushchar(&buf, *c); 43 44 result1 = (char *) strbuf_str(&buf); 45 assert_return(result1 == buf.bytes, EXIT_FAILURE); 46 assert_return(streq(result1, TEXT), EXIT_FAILURE); 47 result1 = strdup(result1); 48 49 result2 = strbuf_steal(&buf); 50 assert_return(streq(result1, result2), EXIT_FAILURE); 51 52 free(result1); 53 free(result2); 54 55 return 0; 56 } 57 DEFINE_TEST(test_strbuf_pushchar, 58 .description = "test strbuf_{pushchar, str, steal}"); 59 60 static int test_strbuf_pushchars(const struct test *t) 61 { 62 struct strbuf buf; 63 char *result1, *saveptr = NULL, *str, *result2; 64 const char *c; 65 int lastwordlen = 0; 66 67 strbuf_init(&buf); 68 str = strdup(TEXT); 69 for (c = strtok_r(str, " ", &saveptr); c != NULL; 70 c = strtok_r(NULL, " ", &saveptr)) { 71 strbuf_pushchars(&buf, c); 72 strbuf_pushchar(&buf, ' '); 73 lastwordlen = strlen(c); 74 } 75 76 strbuf_popchar(&buf); 77 result1 = (char *) strbuf_str(&buf); 78 assert_return(result1 == buf.bytes, EXIT_FAILURE); 79 assert_return(streq(result1, TEXT), EXIT_FAILURE); 80 81 strbuf_popchars(&buf, lastwordlen); 82 result2 = strbuf_steal(&buf); 83 assert_return(!streq(TEXT, result2), EXIT_FAILURE); 84 assert_return(strncmp(TEXT, result2, strlen(TEXT) - lastwordlen) == 0, 85 EXIT_FAILURE); 86 assert_return(result2[strlen(TEXT) - lastwordlen] == '\0', 87 EXIT_FAILURE); 88 89 free(str); 90 free(result2); 91 92 return 0; 93 } 94 DEFINE_TEST(test_strbuf_pushchars, 95 .description = "test strbuf_{pushchars, popchar, popchars}"); 96 97 98 TESTSUITE_MAIN(); 99