1af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes/*
2af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * Copyright (C) 2011 The Android Open Source Project
3af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes *
4af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
5af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * you may not use this file except in compliance with the License.
6af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * You may obtain a copy of the License at
7af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes *
8af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
9af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes *
10af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * Unless required by applicable law or agreed to in writing, software
11af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * See the License for the specific language governing permissions and
14af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes * limitations under the License.
15af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes */
16af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes
17af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes#include <cutils/str_parms.h>
18af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes#include <gtest/gtest.h>
19af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes
20af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughesstatic void test_str_parms_str(const char* str, const char* expected) {
21af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    str_parms* str_parms = str_parms_create_str(str);
22af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    str_parms_add_str(str_parms, "dude", "woah");
23af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    str_parms_add_str(str_parms, "dude", "woah");
24af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    str_parms_del(str_parms, "dude");
25af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    str_parms_dump(str_parms);
26af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    char* out_str = str_parms_to_str(str_parms);
27af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    str_parms_destroy(str_parms);
28af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    ASSERT_STREQ(expected, out_str) << str;
29af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    free(out_str);
30af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes}
31af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes
32af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott HughesTEST(str_parms, smoke) {
33af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("", "");
34af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str(";", "");
35af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("=", "");
36af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("=;", "");
37af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("=bar", "");
38af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("=bar;", "");
39af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=", "foo=");
40af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=;", "foo=");
41af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar", "foo=bar");
42af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar;", "foo=bar");
43af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar;baz", "foo=bar;baz=");
44af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar;baz=", "foo=bar;baz=");
45af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar;baz=bat", "foo=bar;baz=bat");
46af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar;baz=bat;", "foo=bar;baz=bat");
47af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar1;baz=bat;foo=bar2", "foo=bar2;baz=bat");
48af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes}
49af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes
50af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott HughesTEST(str_parms, put_ENOMEM) {
51af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    // hashmapPut reports errors by setting errno to ENOMEM.
52af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    // Test that we're not confused by running in an environment where this is already true.
53af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    errno = ENOMEM;
54af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar;baz=", "foo=bar;baz=");
55af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    ASSERT_EQ(ENOMEM, errno);
56af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes    test_str_parms_str("foo=bar;baz=", "foo=bar;baz=");
57af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes}
58