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