Index: content/browser/device_orientation/device_motion_provider_unittest.cc |
diff --git a/content/browser/device_orientation/device_motion_provider_unittest.cc b/content/browser/device_orientation/device_motion_provider_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cd0f3d843e319771d612949ea3423087e7d1213a |
--- /dev/null |
+++ b/content/browser/device_orientation/device_motion_provider_unittest.cc |
@@ -0,0 +1,98 @@ |
+// 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 "content/browser/device_orientation/device_motion_provider.h" |
+ |
+#include "base/logging.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/synchronization/waitable_event.h" |
+#include "content/browser/device_orientation/data_fetcher_shared_memory.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace content { |
+ |
+namespace { |
+ |
+const int kPeriodInMilliseconds = 100; |
+ |
+class FakeDataFetcherSharedMemory : public DataFetcherSharedMemory { |
+ public: |
+ FakeDataFetcherSharedMemory() |
+ : start_fetching_data_(false, false), |
+ stop_fetching_data_(false, false), |
+ fetched_data_(false, false) { |
+ } |
+ virtual ~FakeDataFetcherSharedMemory() { } |
+ |
+ virtual bool NeedsPolling() OVERRIDE { |
+ return true; |
+ } |
+ |
+ virtual bool FetchDeviceMotionDataIntoBuffer() OVERRIDE { |
+ buffer_->seqlock.WriteBegin(); |
+ buffer_->data.interval = kPeriodInMilliseconds; |
+ buffer_->seqlock.WriteEnd(); |
+ fetched_data_.Signal(); |
+ return true; |
+ } |
+ |
+ virtual bool StartFetchingDeviceMotionData( |
+ DeviceMotionHardwareBuffer* buffer) OVERRIDE { |
+ buffer_ = buffer; |
+ start_fetching_data_.Signal(); |
+ return true; |
+ } |
+ |
+ virtual void StopFetchingDeviceMotionData() OVERRIDE { |
+ stop_fetching_data_.Signal(); |
+ } |
+ |
+ void WaitForStart() { |
+ start_fetching_data_.Wait(); |
+ } |
+ |
+ void WaitForStop() { |
+ stop_fetching_data_.Wait(); |
+ } |
+ |
+ void WaitForDataFetch() { |
+ fetched_data_.Wait(); |
+ } |
+ |
+ DeviceMotionHardwareBuffer* GetBuffer() { |
+ return buffer_; |
+ } |
+ |
+ private: |
+ base::WaitableEvent start_fetching_data_; |
+ base::WaitableEvent stop_fetching_data_; |
+ base::WaitableEvent fetched_data_; |
+ DeviceMotionHardwareBuffer* buffer_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeDataFetcherSharedMemory); |
+}; |
+ |
+ |
+TEST(DeviceMotionProviderTest, DoesPolling) { |
+ FakeDataFetcherSharedMemory* mock_data_fetcher = |
+ new FakeDataFetcherSharedMemory(); |
+ EXPECT_TRUE(mock_data_fetcher->NeedsPolling()); |
+ |
+ scoped_ptr<DeviceMotionProvider> provider(new DeviceMotionProvider( |
+ scoped_ptr<DataFetcherSharedMemory>(mock_data_fetcher))); |
+ |
+ provider->StartFetchingDeviceMotionData(); |
+ mock_data_fetcher->WaitForStart(); |
+ mock_data_fetcher->WaitForDataFetch(); |
+ |
+ EXPECT_EQ(kPeriodInMilliseconds, |
+ mock_data_fetcher->GetBuffer()->data.interval); |
+ |
+ provider->StopFetchingDeviceMotionData(); |
+ mock_data_fetcher->WaitForStop(); |
+} |
+ |
+} // namespace |
+ |
+} // namespace content |