Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "remoting/host/resizing_host_observer.h" | |
| 6 #include "remoting/host/desktop_resizer.h" | |
| 7 | |
| 8 #include <list> | |
| 9 | |
| 10 #include "base/compiler_specific.h" | |
| 11 #include "base/logging.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | |
| 13 #include "third_party/skia/include/core/SkSize.h" | |
| 14 | |
| 15 std::ostream& operator<<(std::ostream& os, const SkISize& size) { | |
|
Wez
2012/09/20 21:35:15
nit: Wrap this in an anonymous namespace.
Jamie
2012/09/20 22:59:59
Done.
Jamie
2012/09/25 19:50:24
Undone. It seems that gtest can't see the definiti
| |
| 16 return os << size.width() << "x" << size.height(); | |
| 17 } | |
| 18 | |
| 19 namespace remoting { | |
| 20 | |
| 21 class MockDesktopResizer : public DesktopResizer { | |
| 22 public: | |
| 23 MockDesktopResizer(const SkISize& initial_size, bool exact_size_supported, | |
| 24 const SkISize* supported_sizes, int num_supported_sizes) | |
| 25 : initial_size_(initial_size), | |
| 26 current_size_(initial_size), | |
| 27 exact_size_supported_(exact_size_supported) { | |
| 28 for (int i = 0; i < num_supported_sizes; ++i) { | |
| 29 supported_sizes_.push_back(supported_sizes[i]); | |
| 30 } | |
| 31 } | |
| 32 | |
| 33 const SkISize& initial_size() { return initial_size_; } | |
| 34 | |
| 35 // remoting::DesktopResizer interface | |
| 36 virtual SkISize GetCurrentSize() OVERRIDE { | |
| 37 return current_size_; | |
| 38 } | |
| 39 virtual std::list<SkISize> GetSupportedSizes( | |
| 40 const SkISize& preferred) OVERRIDE { | |
| 41 std::list<SkISize> result = supported_sizes_; | |
| 42 if (exact_size_supported_) { | |
| 43 result.push_back(preferred); | |
| 44 } | |
| 45 return result; | |
| 46 } | |
| 47 virtual void SetSize(const SkISize& size) OVERRIDE { | |
| 48 current_size_ = size; | |
| 49 } | |
| 50 | |
| 51 private: | |
| 52 SkISize initial_size_; | |
| 53 SkISize current_size_; | |
| 54 bool exact_size_supported_; | |
| 55 std::list<SkISize> supported_sizes_; | |
| 56 }; | |
| 57 | |
| 58 class ResizingHostObserverTest : public testing::Test { | |
| 59 public: | |
| 60 void SetDesktopResizer(MockDesktopResizer* desktop_resizer) { | |
| 61 CHECK(!desktop_resizer_.get()) << "Call SetDeskopResizer once per test"; | |
| 62 resizing_host_observer_.reset(new ResizingHostObserver(desktop_resizer)); | |
| 63 desktop_resizer_.reset(desktop_resizer); | |
| 64 resizing_host_observer_->OnClientAuthenticated(""); | |
| 65 } | |
| 66 | |
| 67 SkISize GetBestSize(const SkISize& client_size) { | |
| 68 resizing_host_observer_->OnClientDimensionsChanged("", client_size); | |
| 69 return desktop_resizer_->GetCurrentSize(); | |
| 70 } | |
| 71 | |
| 72 void VerifySizes(const SkISize* client_sizes, const SkISize* expected_sizes, | |
| 73 int number_of_sizes) { | |
| 74 for (int i = 0; i < number_of_sizes; ++i) { | |
| 75 SkISize best_size = GetBestSize(client_sizes[i]); | |
| 76 EXPECT_EQ(expected_sizes[i], best_size) | |
| 77 << "Input size = " << client_sizes[i]; | |
| 78 } | |
| 79 } | |
| 80 | |
| 81 // testing::Test interface | |
| 82 virtual void TearDown() OVERRIDE { | |
| 83 resizing_host_observer_->OnClientDisconnected(""); | |
| 84 EXPECT_EQ(desktop_resizer_->initial_size(), | |
| 85 desktop_resizer_->GetCurrentSize()); | |
| 86 } | |
| 87 | |
| 88 private: | |
| 89 scoped_ptr<ResizingHostObserver> resizing_host_observer_; | |
| 90 scoped_ptr<MockDesktopResizer> desktop_resizer_; | |
| 91 }; | |
| 92 | |
| 93 // Check that if the implementation supports exact size matching, it is used. | |
|
Wez
2012/09/20 21:35:15
nit: This test is no different from including all
Jamie
2012/09/20 22:59:59
It's different insofar as the same DesktopResizer
| |
| 94 TEST_F(ResizingHostObserverTest, SelectExactSize) { | |
| 95 SetDesktopResizer( | |
| 96 new MockDesktopResizer(SkISize::Make(640, 480), true, NULL, 0)); | |
| 97 SkISize client_sizes[] = { SkISize::Make(200, 100), SkISize::Make(100, 200), | |
|
Wez
2012/09/20 21:35:15
nit: The members of SkISize are public, so I think
Jamie
2012/09/20 22:59:59
Sweet!
| |
| 98 SkISize::Make(640, 480), SkISize::Make(480, 640), | |
| 99 SkISize::Make(1280, 1024) }; | |
| 100 VerifySizes(client_sizes, client_sizes, arraysize(client_sizes)); | |
| 101 } | |
| 102 | |
| 103 // Check that if the implementation supports a size that is no larger than | |
|
Wez
2012/09/20 21:35:15
nit: ... supports sizes smaller than ...
Jamie
2012/09/20 22:59:59
The distinction between "no larger" and "smaller"
| |
| 104 // the requested size, then the largest such size is used. | |
| 105 TEST_F(ResizingHostObserverTest, SelectBestSmallerSize) { | |
| 106 SkISize supported_sizes[] = { | |
| 107 SkISize::Make(639, 479), SkISize::Make(640, 480) }; | |
| 108 SetDesktopResizer( | |
| 109 new MockDesktopResizer(SkISize::Make(640, 480), false, | |
| 110 supported_sizes, arraysize(supported_sizes))); | |
| 111 SkISize client_sizes[] = { SkISize::Make(639, 479), SkISize::Make(640, 480), | |
| 112 SkISize::Make(641, 481), SkISize::Make(999, 999) }; | |
| 113 SkISize expected_sizes[] = { supported_sizes[0], supported_sizes[1], | |
| 114 supported_sizes[1], supported_sizes[1] }; | |
| 115 VerifySizes(client_sizes, expected_sizes, arraysize(client_sizes)); | |
| 116 } | |
| 117 | |
| 118 // Check that if the implementation supports only sizes that are larger than | |
| 119 // the requested size, then the one that maximizes the resultant scale factor | |
|
Wez
2012/09/20 21:35:15
nit: ... the one closest to the requested size is
Jamie
2012/09/20 22:59:59
Done.
| |
| 120 // is used. | |
| 121 TEST_F(ResizingHostObserverTest, SelectBestScaleFactor) { | |
| 122 SkISize supported_sizes[] = { | |
| 123 SkISize::Make(100, 100), SkISize::Make(200, 100) }; | |
| 124 SetDesktopResizer( | |
| 125 new MockDesktopResizer(SkISize::Make(200, 100), false, | |
| 126 supported_sizes, arraysize(supported_sizes))); | |
| 127 SkISize client_sizes[] = { SkISize::Make(1, 1), SkISize::Make(99, 99), | |
| 128 SkISize::Make(199, 99) }; | |
| 129 SkISize expected_sizes[] = { supported_sizes[0], supported_sizes[0], | |
| 130 supported_sizes[1] }; | |
| 131 VerifySizes(client_sizes, expected_sizes, arraysize(client_sizes)); | |
| 132 } | |
| 133 | |
| 134 // Check that if the implementation supports two sizes that have the same | |
| 135 // resultant scale factor, then the widest one is selected. | |
| 136 TEST_F(ResizingHostObserverTest, SelectWidest) { | |
| 137 SkISize supported_sizes[] = { | |
| 138 SkISize::Make(640, 480), SkISize::Make(480, 640) }; | |
| 139 SetDesktopResizer( | |
| 140 new MockDesktopResizer(SkISize::Make(480, 640), false, | |
| 141 supported_sizes, arraysize(supported_sizes))); | |
| 142 SkISize client_sizes[] = { SkISize::Make(100, 100), SkISize::Make(480, 480), | |
| 143 SkISize::Make(500, 500), SkISize::Make(640, 640), | |
| 144 SkISize::Make(1000, 1000) }; | |
| 145 SkISize expected_sizes[] = { supported_sizes[0], supported_sizes[0], | |
| 146 supported_sizes[0], supported_sizes[0], | |
| 147 supported_sizes[0] }; | |
| 148 VerifySizes(client_sizes, expected_sizes, arraysize(client_sizes)); | |
| 149 } | |
| 150 | |
| 151 } // namespace remoting | |
| OLD | NEW |