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