OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "device/nfc/nfc_ndef_record.h" | |
6 | |
7 #include <stddef.h> | |
8 #include <stdint.h> | |
9 | |
10 #include <memory> | |
11 | |
12 #include "base/values.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 | |
15 using base::DictionaryValue; | |
16 using base::ListValue; | |
17 using base::StringValue; | |
18 | |
19 namespace device { | |
20 | |
21 namespace { | |
22 | |
23 const char kTestAction[] = "test-action"; | |
24 const char kTestEncoding[] = "test-encoding"; | |
25 const char kTestLanguageCode[] = "test-language-code"; | |
26 const char kTestMimeType[] = "test-mime-type"; | |
27 const uint32_t kTestTargetSize = 0; | |
28 const char kTestText[] = "test-text"; | |
29 const char kTestURI[] = "test://uri"; | |
30 | |
31 } // namespace | |
32 | |
33 TEST(NfcNdefRecordTest, PopulateTextRecord) { | |
34 DictionaryValue data; | |
35 std::unique_ptr<NfcNdefRecord> record(new NfcNdefRecord()); | |
36 | |
37 // Missing text field. Should fail. | |
38 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); | |
39 EXPECT_FALSE(record->IsPopulated()); | |
40 | |
41 // Text field with incorrect type. Should fail. | |
42 data.SetInteger(NfcNdefRecord::kFieldText, 0); | |
43 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); | |
44 EXPECT_FALSE(record->IsPopulated()); | |
45 | |
46 // Text field with correct type but missing encoding and language. | |
47 // Should fail. | |
48 data.SetString(NfcNdefRecord::kFieldText, kTestText); | |
49 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); | |
50 EXPECT_FALSE(record->IsPopulated()); | |
51 | |
52 // Populating a successfully populated record should fail. | |
53 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); | |
54 | |
55 // Incorrect type for language code. | |
56 data.SetInteger(NfcNdefRecord::kFieldLanguageCode, 0); | |
57 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); | |
58 EXPECT_FALSE(record->IsPopulated()); | |
59 | |
60 // Correct type for language code, invalid encoding. | |
61 data.SetString(NfcNdefRecord::kFieldLanguageCode, kTestLanguageCode); | |
62 data.SetInteger(NfcNdefRecord::kFieldEncoding, 0); | |
63 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); | |
64 EXPECT_FALSE(record->IsPopulated()); | |
65 | |
66 // All entries valid. Should succeed. | |
67 data.SetString(NfcNdefRecord::kFieldEncoding, kTestEncoding); | |
68 EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeText, &data)); | |
69 EXPECT_TRUE(record->IsPopulated()); | |
70 EXPECT_EQ(NfcNdefRecord::kTypeText, record->type()); | |
71 | |
72 // Compare record contents. | |
73 std::string string_value; | |
74 EXPECT_TRUE(record->data().GetString( | |
75 NfcNdefRecord::kFieldText, &string_value)); | |
76 EXPECT_EQ(kTestText, string_value); | |
77 EXPECT_TRUE(record->data().GetString( | |
78 NfcNdefRecord::kFieldLanguageCode, &string_value)); | |
79 EXPECT_EQ(kTestLanguageCode, string_value); | |
80 EXPECT_TRUE(record->data().GetString( | |
81 NfcNdefRecord::kFieldEncoding, &string_value)); | |
82 EXPECT_EQ(kTestEncoding, string_value); | |
83 } | |
84 | |
85 TEST(NfcNdefRecordTest, PopulateUriRecord) { | |
86 DictionaryValue data; | |
87 std::unique_ptr<NfcNdefRecord> record(new NfcNdefRecord()); | |
88 | |
89 // Missing URI field. Should fail. | |
90 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
91 EXPECT_FALSE(record->IsPopulated()); | |
92 | |
93 // URI field with incorrect type. Should fail. | |
94 data.SetInteger(NfcNdefRecord::kFieldURI, 0); | |
95 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
96 EXPECT_FALSE(record->IsPopulated()); | |
97 | |
98 // URI field with correct type but invalid format. | |
99 data.SetString(NfcNdefRecord::kFieldURI, "test.uri"); | |
100 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
101 EXPECT_FALSE(record->IsPopulated()); | |
102 | |
103 data.SetString(NfcNdefRecord::kFieldURI, kTestURI); | |
104 EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
105 EXPECT_TRUE(record->IsPopulated()); | |
106 EXPECT_EQ(NfcNdefRecord::kTypeURI, record->type()); | |
107 | |
108 // Populating a successfully populated record should fail. | |
109 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
110 | |
111 // Recycle the record. | |
112 record.reset(new NfcNdefRecord()); | |
113 EXPECT_FALSE(record->IsPopulated()); | |
114 | |
115 // Incorrect optional fields. Should fail. | |
116 data.SetInteger(NfcNdefRecord::kFieldMimeType, 0); | |
117 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
118 EXPECT_FALSE(record->IsPopulated()); | |
119 | |
120 data.SetString(NfcNdefRecord::kFieldMimeType, kTestMimeType); | |
121 data.SetInteger(NfcNdefRecord::kFieldTargetSize, kTestTargetSize); | |
122 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
123 EXPECT_FALSE(record->IsPopulated()); | |
124 | |
125 // Optional fields are correct. Should succeed. | |
126 data.SetDouble(NfcNdefRecord::kFieldTargetSize, | |
127 static_cast<double>(kTestTargetSize)); | |
128 EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeURI, &data)); | |
129 EXPECT_TRUE(record->IsPopulated()); | |
130 EXPECT_EQ(NfcNdefRecord::kTypeURI, record->type()); | |
131 | |
132 // Compare record contents. | |
133 std::string string_value; | |
134 double double_value; | |
135 EXPECT_TRUE(record->data().GetString( | |
136 NfcNdefRecord::kFieldURI, &string_value)); | |
137 EXPECT_EQ(kTestURI, string_value); | |
138 EXPECT_TRUE(record->data().GetString( | |
139 NfcNdefRecord::kFieldMimeType, &string_value)); | |
140 EXPECT_EQ(kTestMimeType, string_value); | |
141 EXPECT_TRUE(record->data().GetDouble( | |
142 NfcNdefRecord::kFieldTargetSize, &double_value)); | |
143 EXPECT_EQ(kTestTargetSize, static_cast<uint32_t>(double_value)); | |
144 } | |
145 | |
146 TEST(NfcNdefRecordTest, PopulateSmartPoster) { | |
147 DictionaryValue data; | |
148 std::unique_ptr<NfcNdefRecord> record(new NfcNdefRecord()); | |
149 | |
150 // Missing URI field. Should fail. | |
151 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
152 EXPECT_FALSE(record->IsPopulated()); | |
153 | |
154 // URI field with incorrect entry. Should fail. | |
155 data.SetInteger(NfcNdefRecord::kFieldURI, 0); | |
156 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
157 EXPECT_FALSE(record->IsPopulated()); | |
158 | |
159 // URI field with correct entry. Should succeed. | |
160 data.SetString(NfcNdefRecord::kFieldURI, kTestURI); | |
161 EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
162 EXPECT_TRUE(record->IsPopulated()); | |
163 EXPECT_EQ(NfcNdefRecord::kTypeSmartPoster, record->type()); | |
164 | |
165 // Populating a successfully populated record should fail. | |
166 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
167 | |
168 // Recycle the record. | |
169 record.reset(new NfcNdefRecord()); | |
170 EXPECT_FALSE(record->IsPopulated()); | |
171 | |
172 // Incorrect optional fields. Should fail. | |
173 data.SetInteger(NfcNdefRecord::kFieldAction, 0); | |
174 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
175 EXPECT_FALSE(record->IsPopulated()); | |
176 | |
177 data.SetString(NfcNdefRecord::kFieldAction, kTestAction); | |
178 data.SetInteger(NfcNdefRecord::kFieldMimeType, 0); | |
179 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
180 EXPECT_FALSE(record->IsPopulated()); | |
181 | |
182 data.SetString(NfcNdefRecord::kFieldMimeType, kTestMimeType); | |
183 data.SetInteger(NfcNdefRecord::kFieldTargetSize, kTestTargetSize); | |
184 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
185 EXPECT_FALSE(record->IsPopulated()); | |
186 | |
187 data.SetDouble(NfcNdefRecord::kFieldTargetSize, kTestTargetSize); | |
188 data.SetInteger(NfcNdefRecord::kFieldTitles, 0); | |
189 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
190 EXPECT_FALSE(record->IsPopulated()); | |
191 | |
192 // Empty titles value should fail. | |
193 ListValue* list_value = new ListValue(); | |
194 data.Set(NfcNdefRecord::kFieldTitles, list_value); | |
195 | |
196 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
197 EXPECT_FALSE(record->IsPopulated()); | |
198 | |
199 // Title value with missing required field. | |
200 DictionaryValue* title_value = new DictionaryValue(); | |
201 list_value->Append(title_value); | |
202 | |
203 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
204 EXPECT_FALSE(record->IsPopulated()); | |
205 | |
206 // Title value with invalid "text" field. | |
207 title_value->SetInteger(NfcNdefRecord::kFieldText, 0); | |
208 | |
209 EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
210 EXPECT_FALSE(record->IsPopulated()); | |
211 | |
212 // Title value with valid entries. | |
213 title_value->SetString(NfcNdefRecord::kFieldText, kTestText); | |
214 title_value->SetString(NfcNdefRecord::kFieldLanguageCode, kTestLanguageCode); | |
215 title_value->SetString(NfcNdefRecord::kFieldEncoding, kTestEncoding); | |
216 | |
217 EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); | |
218 EXPECT_TRUE(record->IsPopulated()); | |
219 | |
220 // Verify the record contents. | |
221 std::string string_value; | |
222 double double_value; | |
223 const ListValue* const_list_value; | |
224 const DictionaryValue* const_dictionary_value; | |
225 EXPECT_TRUE(record->data().GetString( | |
226 NfcNdefRecord::kFieldURI, &string_value)); | |
227 EXPECT_EQ(kTestURI, string_value); | |
228 EXPECT_TRUE(record->data().GetString( | |
229 NfcNdefRecord::kFieldMimeType, &string_value)); | |
230 EXPECT_EQ(kTestMimeType, string_value); | |
231 EXPECT_TRUE(record->data().GetDouble( | |
232 NfcNdefRecord::kFieldTargetSize, &double_value)); | |
233 EXPECT_EQ(kTestTargetSize, static_cast<uint32_t>(double_value)); | |
234 EXPECT_TRUE(record->data().GetString( | |
235 NfcNdefRecord::kFieldAction, &string_value)); | |
236 EXPECT_EQ(kTestAction, string_value); | |
237 EXPECT_TRUE(record->data().GetList( | |
238 NfcNdefRecord::kFieldTitles, &const_list_value)); | |
239 EXPECT_EQ(static_cast<size_t>(1), const_list_value->GetSize()); | |
240 EXPECT_TRUE(const_list_value->GetDictionary(0, &const_dictionary_value)); | |
241 EXPECT_TRUE(const_dictionary_value->GetString( | |
242 NfcNdefRecord::kFieldText, &string_value)); | |
243 EXPECT_EQ(kTestText, string_value); | |
244 EXPECT_TRUE(const_dictionary_value->GetString( | |
245 NfcNdefRecord::kFieldLanguageCode, &string_value)); | |
246 EXPECT_EQ(kTestLanguageCode, string_value); | |
247 EXPECT_TRUE(const_dictionary_value->GetString( | |
248 NfcNdefRecord::kFieldEncoding, &string_value)); | |
249 EXPECT_EQ(kTestEncoding, string_value); | |
250 } | |
251 | |
252 } // namespace device | |
OLD | NEW |