t_dict.c revision 1.1.1.1.2.1
1/* $Id: t_dict.c,v 1.1.1.1.2.1 2011/02/08 16:18:31 bouyer Exp $ */ 2 3/* Copyright (c) 2010 The NetBSD Foundation, Inc. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to The NetBSD Foundation 7 * by Mateusz Kocielski. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software developed by the NetBSD 20 * Foundation, Inc. and its contributors. 21 * 4. Neither the name of The NetBSD Foundation nor the names of its 22 * contributors may be used to endorse or promote products derived 23 * from this software without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 26 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35 * POSSIBILITY OF SUCH DAMAGE. 36 */ 37 38#include <atf-c.h> 39#include <stdio.h> 40#include <dict.h> 41 42/* src/dict.c test cases */ 43 44/* saslc__dict_create() */ 45ATF_TC(t_saslc__dict_create); 46ATF_TC_HEAD(t_saslc__dict_create, tc) 47{ 48 atf_tc_set_md_var(tc, "descr", "saslc__dict_create() tests"); 49} 50ATF_TC_BODY(t_saslc__dict_create, tc) 51{ 52 saslc__dict_t *dict; 53 ATF_REQUIRE(dict = saslc__dict_create()); 54 saslc__dict_destroy(dict); 55} 56 57/* saslc__dict_insert() */ 58ATF_TC(t_saslc__dict_insert); 59ATF_TC_HEAD(t_saslc__dict_insert, tc) 60{ 61 atf_tc_set_md_var(tc, "descr", "saslc__dict_insert() tests"); 62} 63ATF_TC_BODY(t_saslc__dict_insert, tc) 64{ 65 saslc__dict_t *dict; 66 ATF_REQUIRE(dict = saslc__dict_create()); 67 ATF_CHECK_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK); 68 ATF_CHECK_EQ(saslc__dict_insert(dict, "bar", "blah"), DICT_OK); 69 ATF_CHECK_EQ(saslc__dict_insert(dict, " ", "bar"), DICT_KEYINVALID); 70 ATF_CHECK_EQ(saslc__dict_insert(dict, NULL, NULL), DICT_KEYINVALID); 71 ATF_CHECK_EQ(saslc__dict_insert(dict, "a", NULL), DICT_VALBAD); 72 ATF_CHECK_EQ(saslc__dict_insert(dict, 73 "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890", 74 "zero"), DICT_OK); 75 ATF_CHECK_EQ(saslc__dict_insert(dict, "a", "b"), DICT_OK); 76 ATF_CHECK_EQ(saslc__dict_insert(dict, "a", "c"), DICT_KEYEXISTS); 77 ATF_CHECK_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_KEYEXISTS); 78 ATF_CHECK_EQ(saslc__dict_insert(dict, "&^#%$#", "bad"), DICT_KEYINVALID); 79 saslc__dict_destroy(dict); 80} 81 82/* saslc__dict_remove() */ 83ATF_TC(t_saslc__dict_remove); 84ATF_TC_HEAD(t_saslc__dict_remove, tc) 85{ 86 atf_tc_set_md_var(tc, "descr", "saslc__dict_remove() tests"); 87} 88ATF_TC_BODY(t_saslc__dict_remove, tc) 89{ 90 saslc__dict_t *dict; 91 ATF_REQUIRE(dict = saslc__dict_create()); 92 ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND); 93 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK); 94 ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND); 95 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "BAR", "bar"), DICT_OK); 96 ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_OK); 97 ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND); 98 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "BAR", "bar"), DICT_OK); 99 ATF_CHECK_EQ(saslc__dict_remove(dict, "foo"), DICT_OK); 100 ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_OK); 101 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK); 102 ATF_CHECK_EQ(saslc__dict_remove(dict, "foo"), DICT_OK); 103 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "bar"), DICT_OK); 104 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "bar"), DICT_OK); 105 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "bar"), DICT_OK); 106 ATF_CHECK_EQ(saslc__dict_remove(dict, "foo2"), DICT_OK); 107 ATF_CHECK_EQ(saslc__dict_remove(dict, "foo1"), DICT_OK); 108 ATF_CHECK_EQ(saslc__dict_remove(dict, "foo3"), DICT_OK); 109 ATF_CHECK_EQ(saslc__dict_remove(dict, "foo3"), DICT_KEYNOTFOUND); 110 saslc__dict_destroy(dict); 111} 112 113/* saslc__dict_get() */ 114ATF_TC(t_saslc__dict_get); 115ATF_TC_HEAD(t_saslc__dict_get, tc) 116{ 117 atf_tc_set_md_var(tc, "descr", "saslc__dict_get() tests"); 118} 119ATF_TC_BODY(t_saslc__dict_get, tc) 120{ 121 saslc__dict_t *dict; 122 ATF_REQUIRE(dict = saslc__dict_create()); 123 ATF_CHECK_EQ(saslc__dict_get(dict, "BAR"), NULL); 124 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "bar1"), DICT_OK); 125 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "bar2"), DICT_OK); 126 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "bar3"), DICT_OK); 127 ATF_CHECK_STREQ(saslc__dict_get(dict, "foo1"), "bar1"); 128 ATF_CHECK_STREQ(saslc__dict_get(dict, "foo2"), "bar2"); 129 ATF_CHECK_STREQ(saslc__dict_get(dict, "foo3"), "bar3"); 130 ATF_CHECK_EQ(saslc__dict_get(dict, "foo4"), NULL); 131 ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo2"), DICT_OK); 132 ATF_CHECK_STREQ(saslc__dict_get(dict, "foo1"), "bar1"); 133 ATF_CHECK_EQ(saslc__dict_get(dict, "foo2"), NULL); 134 ATF_CHECK_STREQ(saslc__dict_get(dict, "foo3"), "bar3"); 135 ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo1"), DICT_OK); 136 ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo3"), DICT_OK); 137 ATF_CHECK_EQ(saslc__dict_get(dict, "foo2"), NULL); 138 saslc__dict_destroy(dict); 139} 140 141/* saslc__dict_get_len() */ 142ATF_TC(t_saslc__dict_get_len); 143ATF_TC_HEAD(t_saslc__dict_get_len, tc) 144{ 145 atf_tc_set_md_var(tc, "descr", "saslc__dict_get_len() tests"); 146} 147ATF_TC_BODY(t_saslc__dict_get_len, tc) 148{ 149 saslc__dict_t *dict; 150 ATF_REQUIRE(dict = saslc__dict_create()); 151 ATF_CHECK_EQ(saslc__dict_get_len(dict, "BAR"), 0); 152 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "1"), DICT_OK); 153 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "1234567890"), DICT_OK); 154 ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "12345678901234567890"), DICT_OK); 155 ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo4"), 0); 156 ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo1"), 1); 157 ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo2"), 10); 158 ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo3"), 20); 159 saslc__dict_destroy(dict); 160} 161 162ATF_TP_ADD_TCS(tp) 163{ 164 /* constructors and destructors */ 165 ATF_TP_ADD_TC(tp, t_saslc__dict_create); 166 167 /* modifiers */ 168 ATF_TP_ADD_TC(tp, t_saslc__dict_insert); 169 ATF_TP_ADD_TC(tp, t_saslc__dict_remove); 170 171 /* getters */ 172 ATF_TP_ADD_TC(tp, t_saslc__dict_get); 173 ATF_TP_ADD_TC(tp, t_saslc__dict_get_len); 174 175 return atf_no_error(); 176} 177