Index: device/nfc/nfc_ndef_record_unittest.cc |
diff --git a/device/nfc/nfc_ndef_record_unittest.cc b/device/nfc/nfc_ndef_record_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cd19352b4235b1df57d6414688481a169dbc9f5c |
--- /dev/null |
+++ b/device/nfc/nfc_ndef_record_unittest.cc |
@@ -0,0 +1,238 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/memory/scoped_ptr.h" |
+#include "base/values.h" |
+#include "device/nfc/nfc_ndef_record.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+using base::DictionaryValue; |
+using base::ListValue; |
+using base::StringValue; |
+ |
+namespace device { |
+ |
+namespace { |
+ |
+const char kTestAction[] = "test-action"; |
+const char kTestEncoding[] = "test-encoding"; |
+const char kTestLanguageCode[] = "test-language-code"; |
+const char kTestMimeType[] = "test-mime-type"; |
+const uint32 kTestTargetSize = 0; |
+const char kTestText[] = "test-text"; |
+const char kTestURI[] = "test-uri"; |
+ |
+} // namespace |
+ |
+TEST(NfcNdefRecordTest, PopulateTextRecord) { |
+ DictionaryValue data; |
+ scoped_ptr<NfcNdefRecord> record(new NfcNdefRecord()); |
+ |
+ // Missing text field. Should fail. |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Text field with incorrect entry. Should fail. |
+ data.SetInteger(NfcNdefRecord::kFieldText, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Text field with correct entry. Should succeed. |
+ data.SetString(NfcNdefRecord::kFieldText, kTestText); |
+ EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
+ EXPECT_TRUE(record->IsPopulated()); |
+ EXPECT_EQ(NfcNdefRecord::kTypeText, record->type()); |
+ |
+ // Populating a successfully populated record should fail. |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
+ |
+ // Recycle the record. |
+ record.reset(new NfcNdefRecord()); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Incorrect optional fields. Should fail. |
+ data.SetInteger(NfcNdefRecord::kFieldLanguageCode, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ data.SetString(NfcNdefRecord::kFieldLanguageCode, kTestLanguageCode); |
+ data.SetInteger(NfcNdefRecord::kFieldEncoding, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Optional fields are correct. Should succeed. |
+ data.SetString(NfcNdefRecord::kFieldEncoding, kTestEncoding); |
+ EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
+ EXPECT_TRUE(record->IsPopulated()); |
+ EXPECT_EQ(NfcNdefRecord::kTypeText, record->type()); |
+ |
+ // Compare record contents. |
+ std::string string_value; |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldText, &string_value)); |
+ EXPECT_EQ(kTestText, string_value); |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldLanguageCode, &string_value)); |
+ EXPECT_EQ(kTestLanguageCode, string_value); |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldEncoding, &string_value)); |
+ EXPECT_EQ(kTestEncoding, string_value); |
+} |
+ |
+TEST(NfcNdefRecordTest, PopulateUriRecord) { |
+ DictionaryValue data; |
+ scoped_ptr<NfcNdefRecord> record(new NfcNdefRecord()); |
+ |
+ // Missing URI field. Should fail. |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // URI field with incorrect entry. Should fail. |
+ data.SetInteger(NfcNdefRecord::kFieldURI, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // URI field with correct entry. Should succeed. |
+ data.SetString(NfcNdefRecord::kFieldURI, kTestURI); |
+ EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
+ EXPECT_TRUE(record->IsPopulated()); |
+ EXPECT_EQ(NfcNdefRecord::kTypeURI, record->type()); |
+ |
+ // Populating a successfully populated record should fail. |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
+ |
+ // Recycle the record. |
+ record.reset(new NfcNdefRecord()); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Incorrect optional fields. Should fail. |
+ data.SetInteger(NfcNdefRecord::kFieldMimeType, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ data.SetString(NfcNdefRecord::kFieldMimeType, kTestMimeType); |
+ data.SetInteger(NfcNdefRecord::kFieldTargetSize, kTestTargetSize); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Optional fields are correct. Should succeed. |
+ data.SetDouble(NfcNdefRecord::kFieldTargetSize, |
+ static_cast<double>(kTestTargetSize)); |
+ EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
+ EXPECT_TRUE(record->IsPopulated()); |
+ EXPECT_EQ(NfcNdefRecord::kTypeURI, record->type()); |
+ |
+ // Compare record contents. |
+ std::string string_value; |
+ double double_value; |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldURI, &string_value)); |
+ EXPECT_EQ(kTestURI, string_value); |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldMimeType, &string_value)); |
+ EXPECT_EQ(kTestMimeType, string_value); |
+ EXPECT_TRUE(record->data().GetDouble( |
+ NfcNdefRecord::kFieldTargetSize, &double_value)); |
+ EXPECT_EQ(kTestTargetSize, static_cast<uint32>(double_value)); |
+} |
+ |
+TEST(NfcNdefRecordTest, PopulateSmartPoster) { |
+ DictionaryValue data; |
+ scoped_ptr<NfcNdefRecord> record(new NfcNdefRecord()); |
+ |
+ // Missing URI field. Should fail. |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // URI field with incorrect entry. Should fail. |
+ data.SetInteger(NfcNdefRecord::kFieldURI, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // URI field with correct entry. Should succeed. |
+ data.SetString(NfcNdefRecord::kFieldURI, kTestURI); |
+ EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_TRUE(record->IsPopulated()); |
+ EXPECT_EQ(NfcNdefRecord::kTypeSmartPoster, record->type()); |
+ |
+ // Populating a successfully populated record should fail. |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ |
+ // Recycle the record. |
+ record.reset(new NfcNdefRecord()); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Incorrect optional fields. Should fail. |
+ data.SetInteger(NfcNdefRecord::kFieldAction, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ data.SetString(NfcNdefRecord::kFieldAction, kTestAction); |
+ data.SetInteger(NfcNdefRecord::kFieldMimeType, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ data.SetString(NfcNdefRecord::kFieldMimeType, kTestMimeType); |
+ data.SetInteger(NfcNdefRecord::kFieldTargetSize, kTestTargetSize); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ data.SetDouble(NfcNdefRecord::kFieldTargetSize, kTestTargetSize); |
+ data.SetInteger(NfcNdefRecord::kFieldTitles, 0); |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Empty titles value should fail. |
+ ListValue* list_value = new ListValue(); |
+ data.Set(NfcNdefRecord::kFieldTitles, list_value); |
+ |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Title value with missing required field. |
+ DictionaryValue* title_value = new DictionaryValue(); |
+ list_value->Append(title_value); |
+ |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Title value with invalid "text" field. |
+ title_value->SetInteger(NfcNdefRecord::kFieldText, 0); |
+ |
+ EXPECT_FALSE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_FALSE(record->IsPopulated()); |
+ |
+ // Title value with valid "text" field. |
+ title_value->SetString(NfcNdefRecord::kFieldText, kTestText); |
+ |
+ EXPECT_TRUE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
+ EXPECT_TRUE(record->IsPopulated()); |
+ |
+ // Verify the record contents. |
+ std::string string_value; |
+ double double_value; |
+ const ListValue* const_list_value; |
+ const DictionaryValue* const_dictionary_value; |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldURI, &string_value)); |
+ EXPECT_EQ(kTestURI, string_value); |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldMimeType, &string_value)); |
+ EXPECT_EQ(kTestMimeType, string_value); |
+ EXPECT_TRUE(record->data().GetDouble( |
+ NfcNdefRecord::kFieldTargetSize, &double_value)); |
+ EXPECT_EQ(kTestTargetSize, static_cast<uint32>(double_value)); |
+ EXPECT_TRUE(record->data().GetString( |
+ NfcNdefRecord::kFieldAction, &string_value)); |
+ EXPECT_EQ(kTestAction, string_value); |
+ EXPECT_TRUE(record->data().GetList( |
+ NfcNdefRecord::kFieldTitles, &const_list_value)); |
+ EXPECT_EQ(static_cast<size_t>(1), const_list_value->GetSize()); |
+ EXPECT_TRUE(const_list_value->GetDictionary(0, &const_dictionary_value)); |
+ EXPECT_TRUE(const_dictionary_value->GetString( |
+ NfcNdefRecord::kFieldText, &string_value)); |
+ EXPECT_EQ(kTestText, string_value); |
+} |
+ |
+} // namespace device |