Index: device/nfc/nfc_chromeos_unittest.cc |
diff --git a/device/nfc/nfc_chromeos_unittest.cc b/device/nfc/nfc_chromeos_unittest.cc |
deleted file mode 100644 |
index 7b62970e17ee22283cd0a6fd0e18d36005638e3a..0000000000000000000000000000000000000000 |
--- a/device/nfc/nfc_chromeos_unittest.cc |
+++ /dev/null |
@@ -1,862 +0,0 @@ |
-// Copyright 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 <stddef.h> |
-#include <stdint.h> |
- |
-#include <memory> |
- |
-#include "base/callback.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/run_loop.h" |
-#include "base/values.h" |
-#include "chromeos/dbus/dbus_thread_manager.h" |
-#include "chromeos/dbus/fake_nfc_adapter_client.h" |
-#include "chromeos/dbus/fake_nfc_device_client.h" |
-#include "chromeos/dbus/fake_nfc_record_client.h" |
-#include "chromeos/dbus/fake_nfc_tag_client.h" |
-#include "device/nfc/nfc_adapter_chromeos.h" |
-#include "device/nfc/nfc_ndef_record.h" |
-#include "device/nfc/nfc_ndef_record_utils_chromeos.h" |
-#include "device/nfc/nfc_peer.h" |
-#include "device/nfc/nfc_tag.h" |
-#include "device/nfc/nfc_tag_technology.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/cros_system_api/dbus/service_constants.h" |
- |
-using device::NfcAdapter; |
-using device::NfcNdefMessage; |
-using device::NfcNdefRecord; |
-using device::NfcNdefTagTechnology; |
-using device::NfcPeer; |
-using device::NfcTag; |
- |
-namespace chromeos { |
- |
-namespace { |
- |
-// Callback passed to property structures. |
-void OnPropertyChangedCallback(const std::string& property_name) { |
-} |
- |
-// Callback passed to dbus::PropertyBase::Set. |
-void OnSet(bool success) { |
-} |
- |
-class TestObserver : public NfcAdapter::Observer, |
- public NfcPeer::Observer, |
- public NfcTag::Observer, |
- public NfcNdefTagTechnology::Observer { |
- public: |
- TestObserver(scoped_refptr<NfcAdapter> adapter) |
- : present_changed_count_(0), |
- powered_changed_count_(0), |
- polling_changed_count_(0), |
- peer_records_received_count_(0), |
- tag_records_received_count_(0), |
- peer_count_(0), |
- tag_count_(0), |
- adapter_(adapter) { |
- } |
- |
- ~TestObserver() override {} |
- |
- // NfcAdapter::Observer override. |
- void AdapterPresentChanged(NfcAdapter* adapter, bool present) override { |
- EXPECT_EQ(adapter_.get(), adapter); |
- present_changed_count_++; |
- } |
- |
- // NfcAdapter::Observer override. |
- void AdapterPoweredChanged(NfcAdapter* adapter, bool powered) override { |
- EXPECT_EQ(adapter_.get(), adapter); |
- powered_changed_count_++; |
- } |
- |
- // NfcAdapter::Observer override. |
- void AdapterPollingChanged(NfcAdapter* adapter, bool powered) override { |
- EXPECT_EQ(adapter_.get(), adapter); |
- polling_changed_count_++; |
- } |
- |
- // NfcAdapter::Observer override. |
- void PeerFound(NfcAdapter* adapter, NfcPeer* peer) override { |
- EXPECT_EQ(adapter_.get(), adapter); |
- peer_count_++; |
- peer_identifier_ = peer->GetIdentifier(); |
- } |
- |
- // NfcAdapter::Observer override. |
- void PeerLost(NfcAdapter* adapter, NfcPeer* peer) override { |
- EXPECT_EQ(adapter_.get(), adapter); |
- EXPECT_EQ(peer_identifier_, peer->GetIdentifier()); |
- peer_count_--; |
- peer_identifier_.clear(); |
- } |
- |
- // NfcAdapter::Observer override. |
- void TagFound(NfcAdapter* adapter, NfcTag* tag) override { |
- EXPECT_EQ(adapter_.get(), adapter); |
- tag_count_++; |
- tag_identifier_ = tag->GetIdentifier(); |
- } |
- |
- // NfcAdapter::Observer override. |
- void TagLost(NfcAdapter* adapter, NfcTag* tag) override { |
- EXPECT_EQ(adapter_.get(), adapter); |
- EXPECT_EQ(tag_identifier_, tag->GetIdentifier()); |
- tag_count_--; |
- tag_identifier_.clear(); |
- } |
- |
- // NfcPeer::Observer override. |
- void RecordReceived(NfcPeer* peer, const NfcNdefRecord* record) override { |
- EXPECT_EQ(peer, adapter_->GetPeer(peer_identifier_)); |
- EXPECT_EQ(peer_identifier_, peer->GetIdentifier()); |
- peer_records_received_count_++; |
- } |
- |
- // NfcNdefTagTechnology::Observer override. |
- void RecordReceived(NfcTag* tag, const NfcNdefRecord* record) override { |
- EXPECT_EQ(tag, adapter_->GetTag(tag_identifier_)); |
- EXPECT_EQ(tag_identifier_, tag->GetIdentifier()); |
- tag_records_received_count_++; |
- } |
- |
- int present_changed_count_; |
- int powered_changed_count_; |
- int polling_changed_count_; |
- int peer_records_received_count_; |
- int tag_records_received_count_; |
- int peer_count_; |
- int tag_count_; |
- std::string peer_identifier_; |
- std::string tag_identifier_; |
- scoped_refptr<NfcAdapter> adapter_; |
-}; |
- |
-} // namespace |
- |
-class NfcChromeOSTest : public testing::Test { |
- public: |
- void SetUp() override { |
- DBusThreadManager::Initialize(); |
- fake_nfc_adapter_client_ = static_cast<FakeNfcAdapterClient*>( |
- DBusThreadManager::Get()->GetNfcAdapterClient()); |
- fake_nfc_device_client_ = static_cast<FakeNfcDeviceClient*>( |
- DBusThreadManager::Get()->GetNfcDeviceClient()); |
- fake_nfc_record_client_ = static_cast<FakeNfcRecordClient*>( |
- DBusThreadManager::Get()->GetNfcRecordClient()); |
- fake_nfc_tag_client_ = static_cast<FakeNfcTagClient*>( |
- DBusThreadManager::Get()->GetNfcTagClient()); |
- |
- fake_nfc_adapter_client_->EnablePairingOnPoll(false); |
- fake_nfc_device_client_->DisableSimulationTimeout(); |
- fake_nfc_tag_client_->DisableSimulationTimeout(); |
- success_callback_count_ = 0; |
- error_callback_count_ = 0; |
- } |
- |
- void TearDown() override { |
- adapter_ = NULL; |
- DBusThreadManager::Shutdown(); |
- } |
- |
- // Assigns a new instance of NfcAdapterChromeOS to |adapter_|. |
- void SetAdapter() { |
- adapter_ = new NfcAdapterChromeOS(); |
- ASSERT_TRUE(adapter_.get() != NULL); |
- ASSERT_TRUE(adapter_->IsInitialized()); |
- base::RunLoop().RunUntilIdle(); |
- } |
- |
- // Generic callbacks for success and error. |
- void SuccessCallback() { |
- success_callback_count_++; |
- } |
- |
- void ErrorCallback() { |
- error_callback_count_++; |
- } |
- |
- void ErrorCallbackWithParameters(const std::string& error_name, |
- const std::string& error_message) { |
- LOG(INFO) << "Error callback called: " << error_name << ", " |
- << error_message; |
- error_callback_count_++; |
- } |
- |
- protected: |
- // MessageLoop instance, used to simulate asynchronous behavior. |
- base::MessageLoop message_loop_; |
- |
- // Fields for storing the number of times SuccessCallback and ErrorCallback |
- // have been called. |
- int success_callback_count_; |
- int error_callback_count_; |
- |
- // The NfcAdapter instance under test. |
- scoped_refptr<NfcAdapter> adapter_; |
- |
- // The fake D-Bus client instances used for testing. |
- FakeNfcAdapterClient* fake_nfc_adapter_client_; |
- FakeNfcDeviceClient* fake_nfc_device_client_; |
- FakeNfcRecordClient* fake_nfc_record_client_; |
- FakeNfcTagClient* fake_nfc_tag_client_; |
-}; |
- |
-// Tests that the adapter updates correctly to reflect the current "default" |
-// adapter, when multiple adapters appear and disappear. |
-TEST_F(NfcChromeOSTest, PresentChanged) { |
- SetAdapter(); |
- EXPECT_TRUE(adapter_->IsPresent()); |
- |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- // Remove all adapters. |
- fake_nfc_adapter_client_->SetAdapterPresent(false); |
- EXPECT_EQ(1, observer.present_changed_count_); |
- EXPECT_FALSE(adapter_->IsPresent()); |
- |
- // Add two adapters. |
- fake_nfc_adapter_client_->SetAdapterPresent(true); |
- fake_nfc_adapter_client_->SetSecondAdapterPresent(true); |
- EXPECT_EQ(2, observer.present_changed_count_); |
- EXPECT_TRUE(adapter_->IsPresent()); |
- |
- // Remove the first adapter. Adapter should update to the second one. |
- fake_nfc_adapter_client_->SetAdapterPresent(false); |
- EXPECT_EQ(4, observer.present_changed_count_); |
- EXPECT_TRUE(adapter_->IsPresent()); |
- |
- fake_nfc_adapter_client_->SetSecondAdapterPresent(false); |
- EXPECT_EQ(5, observer.present_changed_count_); |
- EXPECT_FALSE(adapter_->IsPresent()); |
-} |
- |
-// Tests that the adapter correctly reflects the power state. |
-TEST_F(NfcChromeOSTest, SetPowered) { |
- SetAdapter(); |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- EXPECT_FALSE(adapter_->IsPowered()); |
- |
- // SetPowered(false), while not powered. |
- adapter_->SetPowered( |
- false, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_FALSE(adapter_->IsPowered()); |
- EXPECT_EQ(0, observer.powered_changed_count_); |
- EXPECT_EQ(0, success_callback_count_); |
- EXPECT_EQ(1, error_callback_count_); |
- |
- // SetPowered(true). |
- adapter_->SetPowered( |
- true, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_TRUE(adapter_->IsPowered()); |
- EXPECT_EQ(1, observer.powered_changed_count_); |
- EXPECT_EQ(1, success_callback_count_); |
- EXPECT_EQ(1, error_callback_count_); |
- |
- // SetPowered(true), while powered. |
- adapter_->SetPowered( |
- true, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_TRUE(adapter_->IsPowered()); |
- EXPECT_EQ(1, observer.powered_changed_count_); |
- EXPECT_EQ(1, success_callback_count_); |
- EXPECT_EQ(2, error_callback_count_); |
- |
- // SetPowered(false). |
- adapter_->SetPowered( |
- false, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_FALSE(adapter_->IsPowered()); |
- EXPECT_EQ(2, observer.powered_changed_count_); |
- EXPECT_EQ(2, success_callback_count_); |
- EXPECT_EQ(2, error_callback_count_); |
-} |
- |
-// Tests that the power state updates correctly when the adapter disappears. |
-TEST_F(NfcChromeOSTest, PresentChangedWhilePowered) { |
- SetAdapter(); |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- EXPECT_FALSE(adapter_->IsPowered()); |
- EXPECT_TRUE(adapter_->IsPresent()); |
- |
- adapter_->SetPowered( |
- true, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_TRUE(adapter_->IsPowered()); |
- |
- fake_nfc_adapter_client_->SetAdapterPresent(false); |
- EXPECT_EQ(1, observer.present_changed_count_); |
- EXPECT_EQ(2, observer.powered_changed_count_); |
- EXPECT_FALSE(adapter_->IsPowered()); |
- EXPECT_FALSE(adapter_->IsPresent()); |
-} |
- |
-// Tests that peer and record objects are created for all peers and records |
-// that already exist when the adapter is created. |
-TEST_F(NfcChromeOSTest, PeersInitializedWhenAdapterCreated) { |
- // Set up the adapter client. |
- NfcAdapterClient::Properties* properties = |
- fake_nfc_adapter_client_->GetProperties( |
- dbus::ObjectPath(FakeNfcAdapterClient::kAdapterPath0)); |
- properties->powered.Set(true, base::Bind(&OnSet)); |
- |
- fake_nfc_adapter_client_->StartPollLoop( |
- dbus::ObjectPath(FakeNfcAdapterClient::kAdapterPath0), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallbackWithParameters, |
- base::Unretained(this))); |
- EXPECT_EQ(1, success_callback_count_); |
- EXPECT_TRUE(properties->powered.value()); |
- EXPECT_TRUE(properties->polling.value()); |
- |
- // Start pairing simulation, which will add a fake device and fake records. |
- fake_nfc_device_client_->BeginPairingSimulation(0, 0); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Create the adapter. |
- SetAdapter(); |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- // Observer shouldn't have received any calls, as it got created AFTER the |
- // notifications were sent. |
- EXPECT_EQ(0, observer.present_changed_count_); |
- EXPECT_EQ(0, observer.powered_changed_count_); |
- EXPECT_EQ(0, observer.polling_changed_count_); |
- EXPECT_EQ(0, observer.peer_count_); |
- |
- EXPECT_TRUE(adapter_->IsPresent()); |
- EXPECT_TRUE(adapter_->IsPowered()); |
- EXPECT_FALSE(adapter_->IsPolling()); |
- |
- NfcAdapter::PeerList peers; |
- adapter_->GetPeers(&peers); |
- EXPECT_EQ(static_cast<size_t>(1), peers.size()); |
- |
- NfcPeer* peer = peers[0]; |
- const NfcNdefMessage& message = peer->GetNdefMessage(); |
- EXPECT_EQ(static_cast<size_t>(3), message.records().size()); |
-} |
- |
-// Tests that tag and record objects are created for all tags and records that |
-// already exist when the adapter is created. |
-TEST_F(NfcChromeOSTest, TagsInitializedWhenAdapterCreated) { |
- const char kTestURI[] = "fake://path/for/testing"; |
- |
- // Set up the adapter client. |
- NfcAdapterClient::Properties* properties = |
- fake_nfc_adapter_client_->GetProperties( |
- dbus::ObjectPath(FakeNfcAdapterClient::kAdapterPath0)); |
- properties->powered.Set(true, base::Bind(&OnSet)); |
- |
- fake_nfc_adapter_client_->StartPollLoop( |
- dbus::ObjectPath(FakeNfcAdapterClient::kAdapterPath0), |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallbackWithParameters, |
- base::Unretained(this))); |
- EXPECT_EQ(1, success_callback_count_); |
- EXPECT_TRUE(properties->powered.value()); |
- EXPECT_TRUE(properties->polling.value()); |
- |
- // Add the fake tag. |
- fake_nfc_tag_client_->BeginPairingSimulation(0); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Create a fake record. |
- base::DictionaryValue test_record_data; |
- test_record_data.SetString(nfc_record::kTypeProperty, nfc_record::kTypeUri); |
- test_record_data.SetString(nfc_record::kUriProperty, kTestURI); |
- fake_nfc_tag_client_->Write( |
- dbus::ObjectPath(FakeNfcTagClient::kTagPath), |
- test_record_data, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallbackWithParameters, |
- base::Unretained(this))); |
- EXPECT_EQ(2, success_callback_count_); |
- |
- // Create the adapter. |
- SetAdapter(); |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- // Observer shouldn't have received any calls, as it got created AFTER the |
- // notifications were sent. |
- EXPECT_EQ(0, observer.present_changed_count_); |
- EXPECT_EQ(0, observer.powered_changed_count_); |
- EXPECT_EQ(0, observer.polling_changed_count_); |
- EXPECT_EQ(0, observer.peer_count_); |
- |
- EXPECT_TRUE(adapter_->IsPresent()); |
- EXPECT_TRUE(adapter_->IsPowered()); |
- EXPECT_FALSE(adapter_->IsPolling()); |
- |
- NfcAdapter::TagList tags; |
- adapter_->GetTags(&tags); |
- EXPECT_EQ(static_cast<size_t>(1), tags.size()); |
- |
- NfcTag* tag = tags[0]; |
- const NfcNdefMessage& message = tag->GetNdefTagTechnology()->GetNdefMessage(); |
- EXPECT_EQ(static_cast<size_t>(1), message.records().size()); |
- |
- const NfcNdefRecord* record = message.records()[0]; |
- std::string uri; |
- EXPECT_TRUE(record->data().GetString(NfcNdefRecord::kFieldURI, &uri)); |
- EXPECT_EQ(kTestURI, uri); |
-} |
- |
-// Tests that the adapter correctly updates its state when polling is started |
-// and stopped. |
-TEST_F(NfcChromeOSTest, StartAndStopPolling) { |
- SetAdapter(); |
- EXPECT_TRUE(adapter_->IsPresent()); |
- |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- // Start polling while not powered. Should fail. |
- EXPECT_FALSE(adapter_->IsPowered()); |
- adapter_->StartPolling( |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(0, success_callback_count_); |
- EXPECT_EQ(1, error_callback_count_); |
- EXPECT_FALSE(adapter_->IsPolling()); |
- |
- // Start polling while powered. Should succeed. |
- adapter_->SetPowered( |
- true, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(1, success_callback_count_); |
- EXPECT_EQ(1, error_callback_count_); |
- EXPECT_TRUE(adapter_->IsPowered()); |
- |
- adapter_->StartPolling( |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(2, success_callback_count_); |
- EXPECT_EQ(1, error_callback_count_); |
- EXPECT_TRUE(adapter_->IsPolling()); |
- |
- // Start polling while already polling. Should fail. |
- adapter_->StartPolling( |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(2, success_callback_count_); |
- EXPECT_EQ(2, error_callback_count_); |
- EXPECT_TRUE(adapter_->IsPolling()); |
- |
- // Stop polling. Should succeed. |
- adapter_->StopPolling( |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(3, success_callback_count_); |
- EXPECT_EQ(2, error_callback_count_); |
- EXPECT_FALSE(adapter_->IsPolling()); |
- |
- // Stop polling while not polling. Should fail. |
- adapter_->StopPolling( |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(3, success_callback_count_); |
- EXPECT_EQ(3, error_callback_count_); |
- EXPECT_FALSE(adapter_->IsPolling()); |
-} |
- |
-// Tests a simple peer pairing simulation. |
-TEST_F(NfcChromeOSTest, PeerTest) { |
- SetAdapter(); |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- adapter_->SetPowered( |
- true, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- adapter_->StartPolling( |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(2, success_callback_count_); |
- |
- EXPECT_TRUE(adapter_->IsPowered()); |
- EXPECT_TRUE(adapter_->IsPolling()); |
- EXPECT_EQ(0, observer.peer_count_); |
- |
- // Add the fake device. |
- fake_nfc_device_client_->BeginPairingSimulation(0, -1); |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_EQ(1, observer.peer_count_); |
- EXPECT_EQ(FakeNfcDeviceClient::kDevicePath, observer.peer_identifier_); |
- |
- NfcPeer* peer = adapter_->GetPeer(observer.peer_identifier_); |
- CHECK(peer); |
- peer->AddObserver(&observer); |
- |
- // Peer should have no records on it. |
- EXPECT_TRUE(peer->GetNdefMessage().records().empty()); |
- EXPECT_EQ(0, observer.peer_records_received_count_); |
- |
- // Make records visible. |
- fake_nfc_record_client_->SetDeviceRecordsVisible(true); |
- EXPECT_EQ(3, observer.peer_records_received_count_); |
- EXPECT_EQ(static_cast<size_t>(3), peer->GetNdefMessage().records().size()); |
- |
- // End the simulation. Peer should get removed. |
- fake_nfc_device_client_->EndPairingSimulation(); |
- EXPECT_EQ(0, observer.peer_count_); |
- EXPECT_TRUE(observer.peer_identifier_.empty()); |
- |
- peer = adapter_->GetPeer(observer.peer_identifier_); |
- EXPECT_FALSE(peer); |
- |
- // No record related notifications will be sent when a peer gets removed. |
- EXPECT_EQ(3, observer.peer_records_received_count_); |
-} |
- |
-// Tests a simple tag pairing simulation. |
-TEST_F(NfcChromeOSTest, TagTest) { |
- const char kTestURI[] = "fake://path/for/testing"; |
- |
- SetAdapter(); |
- TestObserver observer(adapter_); |
- adapter_->AddObserver(&observer); |
- |
- adapter_->SetPowered( |
- true, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- adapter_->StartPolling( |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(2, success_callback_count_); |
- |
- EXPECT_TRUE(adapter_->IsPowered()); |
- EXPECT_TRUE(adapter_->IsPolling()); |
- EXPECT_EQ(0, observer.tag_count_); |
- |
- // Add the fake tag. |
- fake_nfc_tag_client_->BeginPairingSimulation(0); |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_EQ(1, observer.tag_count_); |
- EXPECT_EQ(FakeNfcTagClient::kTagPath, observer.tag_identifier_); |
- |
- NfcTag* tag = adapter_->GetTag(observer.tag_identifier_); |
- CHECK(tag); |
- tag->AddObserver(&observer); |
- EXPECT_TRUE(tag->IsReady()); |
- CHECK(tag->GetNdefTagTechnology()); |
- tag->GetNdefTagTechnology()->AddObserver(&observer); |
- |
- NfcNdefTagTechnology* tag_technology = tag->GetNdefTagTechnology(); |
- EXPECT_TRUE(tag_technology->IsSupportedByTag()); |
- |
- // Tag should have no records on it. |
- EXPECT_TRUE(tag_technology->GetNdefMessage().records().empty()); |
- EXPECT_EQ(0, observer.tag_records_received_count_); |
- |
- // Set the tag record visible. By default the record has no content, so no |
- // NfcNdefMessage should be received. |
- fake_nfc_record_client_->SetTagRecordsVisible(true); |
- EXPECT_TRUE(tag_technology->GetNdefMessage().records().empty()); |
- EXPECT_EQ(0, observer.tag_records_received_count_); |
- fake_nfc_record_client_->SetTagRecordsVisible(false); |
- |
- // Write an NDEF record to the tag. |
- EXPECT_EQ(2, success_callback_count_); // 2 for SetPowered and StartPolling. |
- EXPECT_EQ(0, error_callback_count_); |
- |
- base::DictionaryValue record_data; |
- record_data.SetString(NfcNdefRecord::kFieldURI, kTestURI); |
- NfcNdefRecord written_record; |
- written_record.Populate(NfcNdefRecord::kTypeURI, &record_data); |
- NfcNdefMessage written_message; |
- written_message.AddRecord(&written_record); |
- |
- tag_technology->WriteNdef( |
- written_message, |
- base::Bind(&NfcChromeOSTest::SuccessCallback, |
- base::Unretained(this)), |
- base::Bind(&NfcChromeOSTest::ErrorCallback, |
- base::Unretained(this))); |
- EXPECT_EQ(3, success_callback_count_); |
- EXPECT_EQ(0, error_callback_count_); |
- |
- EXPECT_EQ(static_cast<size_t>(1), |
- tag_technology->GetNdefMessage().records().size()); |
- EXPECT_EQ(1, observer.tag_records_received_count_); |
- |
- NfcNdefRecord* received_record = |
- tag_technology->GetNdefMessage().records()[0]; |
- EXPECT_EQ(NfcNdefRecord::kTypeURI, received_record->type()); |
- std::string uri; |
- EXPECT_TRUE(received_record->data().GetString( |
- NfcNdefRecord::kFieldURI, &uri)); |
- EXPECT_EQ(kTestURI, uri); |
- |
- // End the simulation. Tag should get removed. |
- fake_nfc_tag_client_->EndPairingSimulation(); |
- EXPECT_EQ(0, observer.tag_count_); |
- EXPECT_TRUE(observer.tag_identifier_.empty()); |
- |
- tag = adapter_->GetTag(observer.tag_identifier_); |
- EXPECT_FALSE(tag); |
- |
- // No record related notifications will be sent when a tag gets removed. |
- EXPECT_EQ(1, observer.tag_records_received_count_); |
-} |
- |
-// Unit tests for nfc_ndef_record_utils methods. |
-TEST_F(NfcChromeOSTest, NfcNdefRecordToDBusAttributes) { |
- const char kText[] = "text"; |
- const char kURI[] = "test://uri"; |
- const char kEncoding[] = "encoding"; |
- const char kLanguageCode[] = "en"; |
- const char kMimeType[] = "mime-type"; |
- const double kSize = 5; |
- |
- // Text record. |
- base::DictionaryValue data; |
- data.SetString(NfcNdefRecord::kFieldText, kText); |
- data.SetString(NfcNdefRecord::kFieldLanguageCode, kLanguageCode); |
- data.SetString(NfcNdefRecord::kFieldEncoding, kEncoding); |
- |
- std::unique_ptr<NfcNdefRecord> record(new NfcNdefRecord()); |
- ASSERT_TRUE(record->Populate(NfcNdefRecord::kTypeText, &data)); |
- |
- base::DictionaryValue result; |
- EXPECT_TRUE(nfc_ndef_record_utils::NfcNdefRecordToDBusAttributes( |
- record.get(), &result)); |
- |
- std::string string_value; |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kTypeProperty, &string_value)); |
- EXPECT_EQ(nfc_record::kTypeText, string_value); |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kRepresentationProperty, &string_value)); |
- EXPECT_EQ(kText, string_value); |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kLanguageProperty, &string_value)); |
- EXPECT_EQ(kLanguageCode, string_value); |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kEncodingProperty, &string_value)); |
- EXPECT_EQ(kEncoding, string_value); |
- |
- // URI record. |
- data.Clear(); |
- data.SetString(NfcNdefRecord::kFieldURI, kURI); |
- data.SetString(NfcNdefRecord::kFieldMimeType, kMimeType); |
- data.SetDouble(NfcNdefRecord::kFieldTargetSize, kSize); |
- |
- record.reset(new NfcNdefRecord()); |
- ASSERT_TRUE(record->Populate(NfcNdefRecord::kTypeURI, &data)); |
- |
- result.Clear(); |
- EXPECT_TRUE(nfc_ndef_record_utils::NfcNdefRecordToDBusAttributes( |
- record.get(), &result)); |
- |
- EXPECT_TRUE(result.GetString(nfc_record::kTypeProperty, &string_value)); |
- EXPECT_EQ(nfc_record::kTypeUri, string_value); |
- EXPECT_TRUE(result.GetString(nfc_record::kUriProperty, &string_value)); |
- EXPECT_EQ(kURI, string_value); |
- EXPECT_TRUE(result.GetString(nfc_record::kMimeTypeProperty, &string_value)); |
- EXPECT_EQ(kMimeType, string_value); |
- double double_value; |
- EXPECT_TRUE(result.GetDouble(nfc_record::kSizeProperty, &double_value)); |
- EXPECT_EQ(kSize, double_value); |
- |
- // SmartPoster record. |
- base::DictionaryValue* title = new base::DictionaryValue(); |
- title->SetString(NfcNdefRecord::kFieldText, kText); |
- title->SetString(NfcNdefRecord::kFieldLanguageCode, kLanguageCode); |
- title->SetString(NfcNdefRecord::kFieldEncoding, kEncoding); |
- |
- base::ListValue* titles = new base::ListValue(); |
- titles->Append(title); |
- data.Set(NfcNdefRecord::kFieldTitles, titles); |
- |
- record.reset(new NfcNdefRecord()); |
- ASSERT_TRUE(record->Populate(NfcNdefRecord::kTypeSmartPoster, &data)); |
- |
- result.Clear(); |
- EXPECT_TRUE(nfc_ndef_record_utils::NfcNdefRecordToDBusAttributes( |
- record.get(), &result)); |
- |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kTypeProperty, &string_value)); |
- EXPECT_EQ(nfc_record::kTypeSmartPoster, string_value); |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kRepresentationProperty, &string_value)); |
- EXPECT_EQ(kText, string_value); |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kLanguageProperty, &string_value)); |
- EXPECT_EQ(kLanguageCode, string_value); |
- EXPECT_TRUE(result.GetString( |
- nfc_record::kEncodingProperty, &string_value)); |
- EXPECT_EQ(kEncoding, string_value); |
- EXPECT_TRUE(result.GetString(nfc_record::kUriProperty, &string_value)); |
- EXPECT_EQ(kURI, string_value); |
- EXPECT_TRUE(result.GetString(nfc_record::kMimeTypeProperty, &string_value)); |
- EXPECT_EQ(kMimeType, string_value); |
- EXPECT_TRUE(result.GetDouble(nfc_record::kSizeProperty, &double_value)); |
- EXPECT_EQ(kSize, double_value); |
-} |
- |
-TEST_F(NfcChromeOSTest, RecordPropertiesToNfcNdefRecord) { |
- const char kText[] = "text"; |
- const char kURI[] = "test://uri"; |
- const char kEncoding[] = "encoding"; |
- const char kLanguageCode[] = "en"; |
- const char kMimeType[] = "mime-type"; |
- const uint32_t kSize = 5; |
- |
- FakeNfcRecordClient::Properties record_properties( |
- base::Bind(&OnPropertyChangedCallback)); |
- |
- // Text record. |
- record_properties.type.ReplaceValue(nfc_record::kTypeText); |
- record_properties.representation.ReplaceValue(kText); |
- record_properties.language.ReplaceValue(kLanguageCode); |
- record_properties.encoding.ReplaceValue(kEncoding); |
- |
- std::unique_ptr<NfcNdefRecord> record(new NfcNdefRecord()); |
- EXPECT_TRUE(nfc_ndef_record_utils::RecordPropertiesToNfcNdefRecord( |
- &record_properties, record.get())); |
- EXPECT_TRUE(record->IsPopulated()); |
- |
- std::string string_value; |
- EXPECT_EQ(NfcNdefRecord::kTypeText, record->type()); |
- EXPECT_TRUE(record->data().GetString( |
- NfcNdefRecord::kFieldText, &string_value)); |
- EXPECT_EQ(kText, string_value); |
- EXPECT_TRUE(record->data().GetString( |
- NfcNdefRecord::kFieldLanguageCode, &string_value)); |
- EXPECT_EQ(kLanguageCode, string_value); |
- EXPECT_TRUE(record->data().GetString( |
- NfcNdefRecord::kFieldEncoding, &string_value)); |
- EXPECT_EQ(kEncoding, string_value); |
- |
- // URI record. |
- record_properties.representation.ReplaceValue(""); |
- record_properties.language.ReplaceValue(""); |
- record_properties.encoding.ReplaceValue(""); |
- |
- record_properties.type.ReplaceValue(nfc_record::kTypeUri); |
- record_properties.uri.ReplaceValue(kURI); |
- record_properties.mime_type.ReplaceValue(kMimeType); |
- record_properties.size.ReplaceValue(kSize); |
- |
- record.reset(new NfcNdefRecord()); |
- EXPECT_TRUE(nfc_ndef_record_utils::RecordPropertiesToNfcNdefRecord( |
- &record_properties, record.get())); |
- EXPECT_TRUE(record->IsPopulated()); |
- |
- EXPECT_EQ(NfcNdefRecord::kTypeURI, record->type()); |
- EXPECT_TRUE(record->data().GetString( |
- NfcNdefRecord::kFieldURI, &string_value)); |
- EXPECT_EQ(kURI, string_value); |
- EXPECT_TRUE(record->data().GetString( |
- NfcNdefRecord::kFieldMimeType, &string_value)); |
- EXPECT_EQ(kMimeType, string_value); |
- double double_value; |
- EXPECT_TRUE(record->data().GetDouble( |
- NfcNdefRecord::kFieldTargetSize, &double_value)); |
- EXPECT_EQ(kSize, double_value); |
- |
- // Contents not matching type. |
- record_properties.representation.ReplaceValue(kText); |
- record_properties.language.ReplaceValue(kLanguageCode); |
- record_properties.encoding.ReplaceValue(kEncoding); |
- |
- record.reset(new NfcNdefRecord()); |
- EXPECT_FALSE(nfc_ndef_record_utils::RecordPropertiesToNfcNdefRecord( |
- &record_properties, record.get())); |
- EXPECT_FALSE(record->IsPopulated()); |
- |
- // SmartPoster record. |
- record_properties.type.ReplaceValue(nfc_record::kTypeSmartPoster); |
- EXPECT_TRUE(nfc_ndef_record_utils::RecordPropertiesToNfcNdefRecord( |
- &record_properties, record.get())); |
- EXPECT_TRUE(record->IsPopulated()); |
- |
- EXPECT_EQ(NfcNdefRecord::kTypeSmartPoster, record->type()); |
- EXPECT_TRUE(record->data().GetString( |
- NfcNdefRecord::kFieldURI, &string_value)); |
- EXPECT_EQ(kURI, string_value); |
- EXPECT_TRUE(record->data().GetString( |
- NfcNdefRecord::kFieldMimeType, &string_value)); |
- EXPECT_EQ(kMimeType, string_value); |
- EXPECT_TRUE(record->data().GetDouble( |
- NfcNdefRecord::kFieldTargetSize, &double_value)); |
- EXPECT_EQ(kSize, double_value); |
- |
- const base::ListValue* titles = NULL; |
- EXPECT_TRUE(record->data().GetList(NfcNdefRecord::kFieldTitles, &titles)); |
- EXPECT_EQ(static_cast<size_t>(1), titles->GetSize()); |
- ASSERT_TRUE(titles); |
- const base::DictionaryValue* title = NULL; |
- EXPECT_TRUE(titles->GetDictionary(0, &title)); |
- CHECK(title); |
- |
- EXPECT_TRUE(title->GetString(NfcNdefRecord::kFieldText, &string_value)); |
- EXPECT_EQ(kText, string_value); |
- EXPECT_TRUE(title->GetString( |
- NfcNdefRecord::kFieldLanguageCode, &string_value)); |
- EXPECT_EQ(kLanguageCode, string_value); |
- EXPECT_TRUE(title->GetString(NfcNdefRecord::kFieldEncoding, &string_value)); |
- EXPECT_EQ(kEncoding, string_value); |
-} |
- |
-} // namespace chromeos |