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