Chromium Code Reviews| Index: remoting/host/resizing_host_observer_unittest.cc |
| diff --git a/remoting/host/resizing_host_observer_unittest.cc b/remoting/host/resizing_host_observer_unittest.cc |
| index 2d61e5e4e8dd312d0f1508e028d303c2bf2cc31e..a4b943b9ffe4ed40b18028f75f31ad7040ee41aa 100644 |
| --- a/remoting/host/resizing_host_observer_unittest.cc |
| +++ b/remoting/host/resizing_host_observer_unittest.cc |
| @@ -6,6 +6,9 @@ |
| #include "base/compiler_specific.h" |
| #include "base/logging.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/message_loop.h" |
| +#include "base/run_loop.h" |
| #include "remoting/host/desktop_resizer.h" |
| #include "remoting/host/resizing_host_observer.h" |
| #include "remoting/host/screen_resolution.h" |
| @@ -69,9 +72,27 @@ class FakeDesktopResizer : public DesktopResizer { |
| int set_size_call_count_; |
| }; |
| +class AutoIncrementNow : public base::RefCountedThreadSafe<AutoIncrementNow> { |
| + public: |
| + AutoIncrementNow() : now_(base::Time::Now()) { |
| + } |
| + virtual ~AutoIncrementNow() { } |
| + |
| + base::Time Now() { |
| + base::Time result = now_; |
| + now_ += base::TimeDelta::FromSeconds(10); |
| + return result; |
| + } |
| + |
| + private: |
| + base::Time now_; |
| +}; |
| + |
| class ResizingHostObserverTest : public testing::Test { |
| public: |
| - ResizingHostObserverTest() : desktop_resizer_(NULL) { |
| + ResizingHostObserverTest() |
| + : desktop_resizer_(NULL), |
| + now_function_(new AutoIncrementNow) { |
| } |
| void SetDesktopResizer(scoped_ptr<FakeDesktopResizer> desktop_resizer) { |
| @@ -80,6 +101,8 @@ class ResizingHostObserverTest : public testing::Test { |
| resizing_host_observer_.reset( |
| new ResizingHostObserver(desktop_resizer.PassAs<DesktopResizer>())); |
| + resizing_host_observer_->SetNowFunctionForTesting( |
| + base::Bind(&AutoIncrementNow::Now, now_function_)); |
|
alexeypa (please no reviews)
2013/06/07 19:50:25
AutoIncrementNow::Now does not need to be in a sep
Jamie
2013/06/07 20:20:14
Done.
|
| } |
| SkISize GetBestSize(const SkISize& client_size) { |
| @@ -98,9 +121,10 @@ class ResizingHostObserverTest : public testing::Test { |
| } |
| } |
| - private: |
| + protected: |
| scoped_ptr<ResizingHostObserver> resizing_host_observer_; |
| FakeDesktopResizer* desktop_resizer_; |
| + scoped_refptr<AutoIncrementNow> now_function_; |
| }; |
| // Check that the host is not resized if GetSupportedSizes returns an empty |
| @@ -191,4 +215,54 @@ TEST_F(ResizingHostObserverTest, NoSetSizeForSameSize) { |
| EXPECT_EQ(desktop_resizer->set_size_call_count(), 0); |
| } |
| +class ManualIncrementNow : |
| + public base::RefCountedThreadSafe<ManualIncrementNow> { |
| + public: |
| + ManualIncrementNow() : now_(base::Time::Now()) { |
| + } |
| + virtual ~ManualIncrementNow() { } |
| + |
| + base::Time Now() { |
| + return now_; |
| + } |
| + |
| + void Increment(const base::TimeDelta& delta) { |
| + now_ += delta; |
| + }; |
| + |
| + private: |
| + base::Time now_; |
| +}; |
| + |
| +// Check that desktop resizes are rate-limited, and that if multiple resize |
| +// requests are received in the time-out period, the most recent is respected. |
| +TEST_F(ResizingHostObserverTest, RateLimited) { |
| + FakeDesktopResizer* desktop_resizer = |
| + new FakeDesktopResizer(SkISize::Make(640, 480), true, NULL, 0); |
| + SetDesktopResizer(scoped_ptr<FakeDesktopResizer>(desktop_resizer)); |
| + scoped_refptr<ManualIncrementNow> now_function(new ManualIncrementNow); |
| + resizing_host_observer_->SetNowFunctionForTesting( |
| + base::Bind(&ManualIncrementNow::Now, now_function)); |
| + |
| + base::MessageLoop message_loop; |
| + base::RunLoop run_loop; |
| + |
| + EXPECT_EQ(GetBestSize(SkISize::Make(100, 100)), SkISize::Make(100, 100)); |
| + now_function->Increment(base::TimeDelta::FromMilliseconds(900)); |
| + EXPECT_EQ(GetBestSize(SkISize::Make(200, 200)), SkISize::Make(100, 100)); |
| + now_function->Increment(base::TimeDelta::FromMilliseconds(99)); |
| + EXPECT_EQ(GetBestSize(SkISize::Make(300, 300)), SkISize::Make(100, 100)); |
| + now_function->Increment(base::TimeDelta::FromMilliseconds(1)); |
|
alexeypa (please no reviews)
2013/06/07 19:50:25
nit: remove this line.
Jamie
2013/06/07 20:20:14
It's needed, otherwise when the delayed resize hap
|
| + |
| + // The most recent resize was requested 999ms after the first, so it should |
| + // be processed within 1ms. |
|
alexeypa (please no reviews)
2013/06/07 19:50:25
Mention that |kDefaultMinimumResizeIntervalMs| mus
Jamie
2013/06/07 20:20:14
Done.
|
| + message_loop.PostDelayedTask( |
| + FROM_HERE, |
| + run_loop.QuitClosure(), |
| + base::TimeDelta::FromMilliseconds(1)); |
|
alexeypa (please no reviews)
2013/06/07 19:50:25
nit: Make it 2ms
Jamie
2013/06/07 20:20:14
Done.
|
| + run_loop.Run(); |
| + |
| + EXPECT_EQ(desktop_resizer_->GetCurrentSize(), SkISize::Make(300, 300)); |
| +} |
| + |
| } // namespace remoting |