1*beea8b97Schristos /* $NetBSD: t_dict.c,v 1.4 2011/02/12 23:21:33 christos Exp $ */
2231558cbSagc
3231558cbSagc /* Copyright (c) 2010 The NetBSD Foundation, Inc.
4231558cbSagc * All rights reserved.
5231558cbSagc *
6231558cbSagc * This code is derived from software contributed to The NetBSD Foundation
7231558cbSagc * by Mateusz Kocielski.
8231558cbSagc *
9231558cbSagc * Redistribution and use in source and binary forms, with or without
10231558cbSagc * modification, are permitted provided that the following conditions
11231558cbSagc * are met:
12231558cbSagc * 1. Redistributions of source code must retain the above copyright
13231558cbSagc * notice, this list of conditions and the following disclaimer.
14231558cbSagc * 2. Redistributions in binary form must reproduce the above copyright
15231558cbSagc * notice, this list of conditions and the following disclaimer in the
16231558cbSagc * documentation and/or other materials provided with the distribution.
17231558cbSagc * 3. All advertising materials mentioning features or use of this software
18231558cbSagc * must display the following acknowledgement:
19231558cbSagc * This product includes software developed by the NetBSD
20231558cbSagc * Foundation, Inc. and its contributors.
21231558cbSagc * 4. Neither the name of The NetBSD Foundation nor the names of its
22231558cbSagc * contributors may be used to endorse or promote products derived
23231558cbSagc * from this software without specific prior written permission.
24231558cbSagc *
25231558cbSagc * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
26231558cbSagc * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27231558cbSagc * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28231558cbSagc * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
29231558cbSagc * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30231558cbSagc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31231558cbSagc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32231558cbSagc * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33231558cbSagc * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34231558cbSagc * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35231558cbSagc * POSSIBILITY OF SUCH DAMAGE.
36231558cbSagc */
3719c14409Schristos #include <sys/cdefs.h>
38*beea8b97Schristos __RCSID("$NetBSD: t_dict.c,v 1.4 2011/02/12 23:21:33 christos Exp $");
39231558cbSagc
40231558cbSagc #include <atf-c.h>
41231558cbSagc #include <stdio.h>
4219c14409Schristos
4319c14409Schristos #include "dict.h"
4419c14409Schristos
45231558cbSagc /* src/dict.c test cases */
46231558cbSagc
47231558cbSagc /* saslc__dict_create() */
48231558cbSagc ATF_TC(t_saslc__dict_create);
ATF_TC_HEAD(t_saslc__dict_create,tc)49231558cbSagc ATF_TC_HEAD(t_saslc__dict_create, tc)
50231558cbSagc {
5119c14409Schristos
52231558cbSagc atf_tc_set_md_var(tc, "descr", "saslc__dict_create() tests");
53231558cbSagc }
ATF_TC_BODY(t_saslc__dict_create,tc)54231558cbSagc ATF_TC_BODY(t_saslc__dict_create, tc)
55231558cbSagc {
5619c14409Schristos
57231558cbSagc saslc__dict_t *dict;
58231558cbSagc ATF_REQUIRE(dict = saslc__dict_create());
59231558cbSagc saslc__dict_destroy(dict);
60231558cbSagc }
61231558cbSagc
62231558cbSagc /* saslc__dict_insert() */
63231558cbSagc ATF_TC(t_saslc__dict_insert);
ATF_TC_HEAD(t_saslc__dict_insert,tc)64231558cbSagc ATF_TC_HEAD(t_saslc__dict_insert, tc)
65231558cbSagc {
6619c14409Schristos
67231558cbSagc atf_tc_set_md_var(tc, "descr", "saslc__dict_insert() tests");
68231558cbSagc }
ATF_TC_BODY(t_saslc__dict_insert,tc)69231558cbSagc ATF_TC_BODY(t_saslc__dict_insert, tc)
70231558cbSagc {
7119c14409Schristos
72231558cbSagc saslc__dict_t *dict;
73231558cbSagc ATF_REQUIRE(dict = saslc__dict_create());
74231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK);
75231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, "bar", "blah"), DICT_OK);
76231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, " ", "bar"), DICT_KEYINVALID);
77231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, NULL, NULL), DICT_KEYINVALID);
78231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, "a", NULL), DICT_VALBAD);
79231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict,
80231558cbSagc "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",
81231558cbSagc "zero"), DICT_OK);
82231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, "a", "b"), DICT_OK);
83231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, "a", "c"), DICT_KEYEXISTS);
84231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_KEYEXISTS);
85231558cbSagc ATF_CHECK_EQ(saslc__dict_insert(dict, "&^#%$#", "bad"), DICT_KEYINVALID);
86231558cbSagc saslc__dict_destroy(dict);
87231558cbSagc }
88231558cbSagc
89231558cbSagc /* saslc__dict_remove() */
90231558cbSagc ATF_TC(t_saslc__dict_remove);
ATF_TC_HEAD(t_saslc__dict_remove,tc)91231558cbSagc ATF_TC_HEAD(t_saslc__dict_remove, tc)
92231558cbSagc {
9319c14409Schristos
94231558cbSagc atf_tc_set_md_var(tc, "descr", "saslc__dict_remove() tests");
95231558cbSagc }
ATF_TC_BODY(t_saslc__dict_remove,tc)96231558cbSagc ATF_TC_BODY(t_saslc__dict_remove, tc)
97231558cbSagc {
9819c14409Schristos
99231558cbSagc saslc__dict_t *dict;
100231558cbSagc ATF_REQUIRE(dict = saslc__dict_create());
101231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND);
102231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK);
103231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND);
104231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "BAR", "bar"), DICT_OK);
105231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_OK);
106231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND);
107231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "BAR", "bar"), DICT_OK);
108231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "foo"), DICT_OK);
109231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_OK);
110231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK);
111231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "foo"), DICT_OK);
112231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "bar"), DICT_OK);
113231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "bar"), DICT_OK);
114231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "bar"), DICT_OK);
115231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "foo2"), DICT_OK);
116231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "foo1"), DICT_OK);
117231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "foo3"), DICT_OK);
118231558cbSagc ATF_CHECK_EQ(saslc__dict_remove(dict, "foo3"), DICT_KEYNOTFOUND);
119231558cbSagc saslc__dict_destroy(dict);
120231558cbSagc }
121231558cbSagc
122231558cbSagc /* saslc__dict_get() */
123231558cbSagc ATF_TC(t_saslc__dict_get);
ATF_TC_HEAD(t_saslc__dict_get,tc)124231558cbSagc ATF_TC_HEAD(t_saslc__dict_get, tc)
125231558cbSagc {
12619c14409Schristos
127231558cbSagc atf_tc_set_md_var(tc, "descr", "saslc__dict_get() tests");
128231558cbSagc }
ATF_TC_BODY(t_saslc__dict_get,tc)129231558cbSagc ATF_TC_BODY(t_saslc__dict_get, tc)
130231558cbSagc {
13119c14409Schristos
132231558cbSagc saslc__dict_t *dict;
133231558cbSagc ATF_REQUIRE(dict = saslc__dict_create());
134231558cbSagc ATF_CHECK_EQ(saslc__dict_get(dict, "BAR"), NULL);
135231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "bar1"), DICT_OK);
136231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "bar2"), DICT_OK);
137231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "bar3"), DICT_OK);
138231558cbSagc ATF_CHECK_STREQ(saslc__dict_get(dict, "foo1"), "bar1");
139231558cbSagc ATF_CHECK_STREQ(saslc__dict_get(dict, "foo2"), "bar2");
140231558cbSagc ATF_CHECK_STREQ(saslc__dict_get(dict, "foo3"), "bar3");
141231558cbSagc ATF_CHECK_EQ(saslc__dict_get(dict, "foo4"), NULL);
142231558cbSagc ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo2"), DICT_OK);
143231558cbSagc ATF_CHECK_STREQ(saslc__dict_get(dict, "foo1"), "bar1");
144231558cbSagc ATF_CHECK_EQ(saslc__dict_get(dict, "foo2"), NULL);
145231558cbSagc ATF_CHECK_STREQ(saslc__dict_get(dict, "foo3"), "bar3");
146231558cbSagc ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo1"), DICT_OK);
147231558cbSagc ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo3"), DICT_OK);
148231558cbSagc ATF_CHECK_EQ(saslc__dict_get(dict, "foo2"), NULL);
149231558cbSagc saslc__dict_destroy(dict);
150231558cbSagc }
151231558cbSagc
152231558cbSagc /* saslc__dict_get_len() */
153231558cbSagc ATF_TC(t_saslc__dict_get_len);
ATF_TC_HEAD(t_saslc__dict_get_len,tc)154231558cbSagc ATF_TC_HEAD(t_saslc__dict_get_len, tc)
155231558cbSagc {
15619c14409Schristos
157231558cbSagc atf_tc_set_md_var(tc, "descr", "saslc__dict_get_len() tests");
158231558cbSagc }
ATF_TC_BODY(t_saslc__dict_get_len,tc)159231558cbSagc ATF_TC_BODY(t_saslc__dict_get_len, tc)
160231558cbSagc {
16119c14409Schristos
162231558cbSagc saslc__dict_t *dict;
163231558cbSagc ATF_REQUIRE(dict = saslc__dict_create());
164231558cbSagc ATF_CHECK_EQ(saslc__dict_get_len(dict, "BAR"), 0);
165231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "1"), DICT_OK);
166231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "1234567890"), DICT_OK);
167231558cbSagc ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "12345678901234567890"), DICT_OK);
168231558cbSagc ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo4"), 0);
169231558cbSagc ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo1"), 1);
170231558cbSagc ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo2"), 10);
171231558cbSagc ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo3"), 20);
172231558cbSagc saslc__dict_destroy(dict);
173231558cbSagc }
174231558cbSagc
ATF_TP_ADD_TCS(tp)175231558cbSagc ATF_TP_ADD_TCS(tp)
176231558cbSagc {
177231558cbSagc /* constructors and destructors */
178231558cbSagc ATF_TP_ADD_TC(tp, t_saslc__dict_create);
179231558cbSagc
180231558cbSagc /* modifiers */
181231558cbSagc ATF_TP_ADD_TC(tp, t_saslc__dict_insert);
182231558cbSagc ATF_TP_ADD_TC(tp, t_saslc__dict_remove);
183231558cbSagc
184231558cbSagc /* getters */
185231558cbSagc ATF_TP_ADD_TC(tp, t_saslc__dict_get);
186231558cbSagc ATF_TP_ADD_TC(tp, t_saslc__dict_get_len);
187231558cbSagc
188231558cbSagc return atf_no_error();
189231558cbSagc }
190