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::RECIPIENT; 36 37TEST(AddressDataTest, GetFieldValue) { 38 AddressData address; 39 address.region_code = "rrr"; 40 address.administrative_area = "sss"; 41 address.locality = "ccc"; 42 address.dependent_locality = "ddd"; 43 address.sorting_code = "xxx"; 44 address.postal_code = "zzz"; 45 address.recipient = "nnn"; 46 47 EXPECT_EQ(address.region_code, 48 address.GetFieldValue(COUNTRY)); 49 EXPECT_EQ(address.administrative_area, 50 address.GetFieldValue(ADMIN_AREA)); 51 EXPECT_EQ(address.locality, 52 address.GetFieldValue(LOCALITY)); 53 EXPECT_EQ(address.dependent_locality, 54 address.GetFieldValue(DEPENDENT_LOCALITY)); 55 EXPECT_EQ(address.sorting_code, 56 address.GetFieldValue(SORTING_CODE)); 57 EXPECT_EQ(address.postal_code, 58 address.GetFieldValue(POSTAL_CODE)); 59 EXPECT_EQ(address.recipient, 60 address.GetFieldValue(RECIPIENT)); 61} 62 63TEST(AddressDataTest, GetRepeatedFieldValue) { 64 AddressData address; 65 address.address_line.push_back("aaa"); 66 address.address_line.push_back("222"); 67 EXPECT_EQ(address.address_line, 68 address.GetRepeatedFieldValue(STREET_ADDRESS)); 69} 70 71TEST(AddressDataTest, IsFieldEmpty) { 72 AddressData address; 73 74 EXPECT_TRUE(address.IsFieldEmpty(COUNTRY)); 75 EXPECT_TRUE(address.IsFieldEmpty(ADMIN_AREA)); 76 EXPECT_TRUE(address.IsFieldEmpty(LOCALITY)); 77 EXPECT_TRUE(address.IsFieldEmpty(DEPENDENT_LOCALITY)); 78 EXPECT_TRUE(address.IsFieldEmpty(SORTING_CODE)); 79 EXPECT_TRUE(address.IsFieldEmpty(POSTAL_CODE)); 80 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 81 EXPECT_TRUE(address.IsFieldEmpty(RECIPIENT)); 82 83 address.region_code = "rrr"; 84 address.administrative_area = "sss"; 85 address.locality = "ccc"; 86 address.dependent_locality = "ddd"; 87 address.sorting_code = "xxx"; 88 address.postal_code = "zzz"; 89 address.address_line.push_back("aaa"); 90 address.recipient = "nnn"; 91 92 EXPECT_FALSE(address.IsFieldEmpty(COUNTRY)); 93 EXPECT_FALSE(address.IsFieldEmpty(ADMIN_AREA)); 94 EXPECT_FALSE(address.IsFieldEmpty(LOCALITY)); 95 EXPECT_FALSE(address.IsFieldEmpty(DEPENDENT_LOCALITY)); 96 EXPECT_FALSE(address.IsFieldEmpty(SORTING_CODE)); 97 EXPECT_FALSE(address.IsFieldEmpty(POSTAL_CODE)); 98 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 99 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); 100} 101 102TEST(AddressDataTest, IsFieldEmptyWhitespace) { 103 AddressData address; 104 address.recipient = " "; 105 EXPECT_TRUE(address.IsFieldEmpty(RECIPIENT)); 106 address.recipient = "abc"; 107 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); 108 address.recipient = " b "; 109 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); 110} 111 112TEST(AddressDataTest, IsFieldEmptyVector) { 113 AddressData address; 114 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 115 address.address_line.push_back(""); 116 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 117 address.address_line.push_back("aaa"); 118 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 119 address.address_line.push_back(""); 120 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 121} 122 123TEST(AddressDataTest, IsFieldEmptyVectorWhitespace) { 124 AddressData address; 125 address.address_line.push_back(" "); 126 address.address_line.push_back(" "); 127 address.address_line.push_back(" "); 128 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); 129 address.address_line.clear(); 130 address.address_line.push_back("abc"); 131 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 132 address.address_line.clear(); 133 address.address_line.push_back(" "); 134 address.address_line.push_back(" b "); 135 address.address_line.push_back(" "); 136 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); 137} 138 139TEST(AddressDataTest, StreamFunction) { 140 std::ostringstream oss; 141 AddressData address; 142 address.address_line.push_back("Line 1"); 143 address.address_line.push_back("Line 2"); 144 address.recipient = "N"; 145 address.region_code = "R"; 146 address.postal_code = "Z"; 147 address.administrative_area = "S"; 148 address.locality = "C"; 149 address.dependent_locality = "D"; 150 address.sorting_code = "X"; 151 address.language_code = "zh-Hant"; 152 oss << address; 153 EXPECT_EQ("region_code: \"R\"\n" 154 "administrative_area: \"S\"\n" 155 "locality: \"C\"\n" 156 "dependent_locality: \"D\"\n" 157 "postal_code: \"Z\"\n" 158 "sorting_code: \"X\"\n" 159 "address_line: \"Line 1\"\n" 160 "address_line: \"Line 2\"\n" 161 "language_code: \"zh-Hant\"\n" 162 "recipient: \"N\"\n", oss.str()); 163} 164 165TEST(AddressDataTest, TestEquals) { 166 AddressData address; 167 address.address_line.push_back("Line 1"); 168 address.address_line.push_back("Line 2"); 169 address.recipient = "N"; 170 address.region_code = "R"; 171 address.postal_code = "Z"; 172 address.administrative_area = "S"; 173 address.locality = "C"; 174 address.dependent_locality = "D"; 175 address.sorting_code = "X"; 176 address.language_code = "zh-Hant"; 177 178 AddressData clone = address; 179 180 EXPECT_EQ(address, clone); 181 clone.language_code.clear(); 182 EXPECT_FALSE(address == clone); 183} 184 185#ifndef NDEBUG 186 187TEST(AddressDataTest, GetFieldValueInvalid) { 188 AddressData address; 189 ASSERT_DEATH(address.GetFieldValue(STREET_ADDRESS), "ssertion.*failed"); 190} 191 192TEST(AddressDataTest, GetVectorFieldValueInvalid) { 193 AddressData address; 194 ASSERT_DEATH(address.GetRepeatedFieldValue(COUNTRY), "ssertion.*failed"); 195} 196 197TEST(AddressDataTest, IsFieldEmptyInvalid) { 198 static const AddressField invalid_field = static_cast<AddressField>(-1); 199 AddressData address; 200 ASSERT_DEATH(address.IsFieldEmpty(invalid_field), "ssertion.*failed"); 201} 202 203#endif // NDEBUG 204 205} // namespace 206