1// Copyright (C) 2014 Google Inc. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15#include <libaddressinput/address_data.h> 16 17#include <libaddressinput/address_field.h> 18 19#include <sstream> 20 21#include <gtest/gtest.h> 22 23namespace { 24 25using i18n::addressinput::AddressData; 26using i18n::addressinput::AddressField; 27 28using i18n::addressinput::COUNTRY; 29using i18n::addressinput::ADMIN_AREA; 30using i18n::addressinput::LOCALITY; 31using i18n::addressinput::DEPENDENT_LOCALITY; 32using i18n::addressinput::SORTING_CODE; 33using i18n::addressinput::POSTAL_CODE; 34using i18n::addressinput::STREET_ADDRESS; 35using i18n::addressinput::ORGANIZATION; 36using i18n::addressinput::RECIPIENT; 37 38TEST(AddressDataTest, GetFieldValue) { 39 AddressData address; 40 address.region_code = "rrr"; 41 address.administrative_area = "sss"; 42 address.locality = "ccc"; 43 address.dependent_locality = "ddd"; 44 address.sorting_code = "xxx"; 45 address.postal_code = "zzz"; 46 address.organization = "ooo"; 47 address.recipient = "nnn"; 48 49 EXPECT_EQ(address.region_code, 50 address.GetFieldValue(COUNTRY)); 51 EXPECT_EQ(address.administrative_area, 52 address.GetFieldValue(ADMIN_AREA)); 53 EXPECT_EQ(address.locality, 54 address.GetFieldValue(LOCALITY)); 55 EXPECT_EQ(address.dependent_locality, 56 address.GetFieldValue(DEPENDENT_LOCALITY)); 57 EXPECT_EQ(address.sorting_code, 58 address.GetFieldValue(SORTING_CODE)); 59 EXPECT_EQ(address.postal_code, 60 address.GetFieldValue(POSTAL_CODE)); 61 EXPECT_EQ(address.organization, 62 address.GetFieldValue(ORGANIZATION)); 63 EXPECT_EQ(address.recipient, 64 address.GetFieldValue(RECIPIENT)); 65} 66 67TEST(AddressDataTest, GetRepeatedFieldValue) { 68 AddressData address; 69 address.address_line.push_back("aaa"); 70 address.address_line.push_back("222"); 71 EXPECT_EQ(address.address_line, 72 address.GetRepeatedFieldValue(STREET_ADDRESS)); 73} 74 75TEST(AddressDataTest, IsFieldEmpty) { 76 AddressData address; 77 78 EXPECT_TRUE(address.IsFieldEmpty(COUNTRY)); 79 EXPECT_TRUE(address.IsFieldEmpty(ADMIN_AREA)); 80 EXPECT_TRUE(address.IsFieldEmpty(LOCALITY)); 81 EXPECT_TRUE(address.IsFieldEmpty(DEPENDENT_LOCALITY)); 82 EXPECT_TRUE(address.IsFieldEmpty(SORTING_CODE)); 83 EXPECT_TRUE(address.IsFieldEmpty(POSTAL_CODE)); 84 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 85 EXPECT_TRUE(address.IsFieldEmpty(ORGANIZATION)); 86 EXPECT_TRUE(address.IsFieldEmpty(RECIPIENT)); 87 88 address.region_code = "rrr"; 89 address.administrative_area = "sss"; 90 address.locality = "ccc"; 91 address.dependent_locality = "ddd"; 92 address.sorting_code = "xxx"; 93 address.postal_code = "zzz"; 94 address.address_line.push_back("aaa"); 95 address.organization = "ooo"; 96 address.recipient = "nnn"; 97 98 EXPECT_FALSE(address.IsFieldEmpty(COUNTRY)); 99 EXPECT_FALSE(address.IsFieldEmpty(ADMIN_AREA)); 100 EXPECT_FALSE(address.IsFieldEmpty(LOCALITY)); 101 EXPECT_FALSE(address.IsFieldEmpty(DEPENDENT_LOCALITY)); 102 EXPECT_FALSE(address.IsFieldEmpty(SORTING_CODE)); 103 EXPECT_FALSE(address.IsFieldEmpty(POSTAL_CODE)); 104 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 105 EXPECT_FALSE(address.IsFieldEmpty(ORGANIZATION)); 106 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); 107} 108 109TEST(AddressDataTest, IsFieldEmptyWhitespace) { 110 AddressData address; 111 address.recipient = " "; 112 EXPECT_TRUE(address.IsFieldEmpty(RECIPIENT)); 113 address.recipient = "abc"; 114 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); 115 address.recipient = " b "; 116 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); 117} 118 119TEST(AddressDataTest, IsFieldEmptyVector) { 120 AddressData address; 121 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 122 address.address_line.push_back(""); 123 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 124 address.address_line.push_back("aaa"); 125 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 126 address.address_line.push_back(""); 127 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 128} 129 130TEST(AddressDataTest, IsFieldEmptyVectorWhitespace) { 131 AddressData address; 132 address.address_line.push_back(" "); 133 address.address_line.push_back(" "); 134 address.address_line.push_back(" "); 135 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 136 address.address_line.clear(); 137 address.address_line.push_back("abc"); 138 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 139 address.address_line.clear(); 140 address.address_line.push_back(" "); 141 address.address_line.push_back(" b "); 142 address.address_line.push_back(" "); 143 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 144} 145 146TEST(AddressDataTest, StreamFunction) { 147 std::ostringstream oss; 148 AddressData address; 149 address.address_line.push_back("Line 1"); 150 address.address_line.push_back("Line 2"); 151 address.recipient = "N"; 152 address.region_code = "R"; 153 address.postal_code = "Z"; 154 address.administrative_area = "S"; 155 address.locality = "C"; 156 address.dependent_locality = "D"; 157 address.sorting_code = "X"; 158 address.language_code = "zh-Hant"; 159 address.organization = "O"; 160 oss << address; 161 EXPECT_EQ("region_code: \"R\"\n" 162 "administrative_area: \"S\"\n" 163 "locality: \"C\"\n" 164 "dependent_locality: \"D\"\n" 165 "postal_code: \"Z\"\n" 166 "sorting_code: \"X\"\n" 167 "address_line: \"Line 1\"\n" 168 "address_line: \"Line 2\"\n" 169 "language_code: \"zh-Hant\"\n" 170 "organization: \"O\"\n" 171 "recipient: \"N\"\n", oss.str()); 172} 173 174TEST(AddressDataTest, TestEquals) { 175 AddressData address; 176 address.address_line.push_back("Line 1"); 177 address.address_line.push_back("Line 2"); 178 address.recipient = "N"; 179 address.region_code = "R"; 180 address.postal_code = "Z"; 181 address.administrative_area = "S"; 182 address.locality = "C"; 183 address.dependent_locality = "D"; 184 address.sorting_code = "X"; 185 address.organization = "O"; 186 address.language_code = "zh-Hant"; 187 188 AddressData clone = address; 189 190 EXPECT_EQ(address, clone); 191 clone.language_code.clear(); 192 EXPECT_FALSE(address == clone); 193} 194 195#ifndef NDEBUG 196 197TEST(AddressDataTest, GetFieldValueInvalid) { 198 AddressData address; 199 ASSERT_DEATH(address.GetFieldValue(STREET_ADDRESS), "ssertion.*failed"); 200} 201 202TEST(AddressDataTest, GetVectorFieldValueInvalid) { 203 AddressData address; 204 ASSERT_DEATH(address.GetRepeatedFieldValue(COUNTRY), "ssertion.*failed"); 205} 206 207TEST(AddressDataTest, IsFieldEmptyInvalid) { 208 static const AddressField invalid_field = static_cast<AddressField>(-1); 209 AddressData address; 210 ASSERT_DEATH(address.IsFieldEmpty(invalid_field), "ssertion.*failed"); 211} 212 213#endif // NDEBUG 214 215} // namespace 216