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