| OLD | NEW | 
 | (Empty) | 
|    1 // Copyright 2014 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 <stddef.h> |  | 
|    6  |  | 
|    7 #include "base/bind.h" |  | 
|    8 #include "base/macros.h" |  | 
|    9 #include "base/message_loop/message_loop.h" |  | 
|   10 #include "base/run_loop.h" |  | 
|   11 #include "testing/gtest/include/gtest/gtest.h" |  | 
|   12 #include "ui/display/chromeos/configure_displays_task.h" |  | 
|   13 #include "ui/display/chromeos/test/action_logger_util.h" |  | 
|   14 #include "ui/display/chromeos/test/test_native_display_delegate.h" |  | 
|   15 #include "ui/display/fake_display_snapshot.h" |  | 
|   16  |  | 
|   17 namespace ui { |  | 
|   18 namespace test { |  | 
|   19  |  | 
|   20 namespace { |  | 
|   21  |  | 
|   22 class ConfigureDisplaysTaskTest : public testing::Test { |  | 
|   23  public: |  | 
|   24   ConfigureDisplaysTaskTest() |  | 
|   25       : delegate_(&log_), |  | 
|   26         callback_called_(false), |  | 
|   27         status_(ConfigureDisplaysTask::ERROR), |  | 
|   28         small_mode_(gfx::Size(1366, 768), false, 60.0f), |  | 
|   29         big_mode_(gfx::Size(2560, 1600), false, 60.0f) { |  | 
|   30     displays_[0] = display::FakeDisplaySnapshot::Builder() |  | 
|   31                        .SetId(123) |  | 
|   32                        .SetNativeMode(small_mode_.Clone()) |  | 
|   33                        .SetCurrentMode(small_mode_.Clone()) |  | 
|   34                        .Build(); |  | 
|   35  |  | 
|   36     displays_[1] = display::FakeDisplaySnapshot::Builder() |  | 
|   37                        .SetId(456) |  | 
|   38                        .SetNativeMode(big_mode_.Clone()) |  | 
|   39                        .SetCurrentMode(big_mode_.Clone()) |  | 
|   40                        .AddMode(small_mode_.Clone()) |  | 
|   41                        .Build(); |  | 
|   42   } |  | 
|   43   ~ConfigureDisplaysTaskTest() override {} |  | 
|   44  |  | 
|   45   void ConfigureCallback(ConfigureDisplaysTask::Status status) { |  | 
|   46     callback_called_ = true; |  | 
|   47     status_ = status; |  | 
|   48   } |  | 
|   49  |  | 
|   50  protected: |  | 
|   51   base::MessageLoop message_loop_; |  | 
|   52   ActionLogger log_; |  | 
|   53   TestNativeDisplayDelegate delegate_; |  | 
|   54  |  | 
|   55   bool callback_called_; |  | 
|   56   ConfigureDisplaysTask::Status status_; |  | 
|   57  |  | 
|   58   const DisplayMode small_mode_; |  | 
|   59   const DisplayMode big_mode_; |  | 
|   60  |  | 
|   61   std::unique_ptr<DisplaySnapshot> displays_[2]; |  | 
|   62  |  | 
|   63  private: |  | 
|   64   DISALLOW_COPY_AND_ASSIGN(ConfigureDisplaysTaskTest); |  | 
|   65 }; |  | 
|   66  |  | 
|   67 }  // namespace |  | 
|   68  |  | 
|   69 TEST_F(ConfigureDisplaysTaskTest, ConfigureWithNoDisplays) { |  | 
|   70   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|   71       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|   72  |  | 
|   73   ConfigureDisplaysTask task(&delegate_, std::vector<DisplayConfigureRequest>(), |  | 
|   74                              callback); |  | 
|   75  |  | 
|   76   task.Run(); |  | 
|   77  |  | 
|   78   EXPECT_TRUE(callback_called_); |  | 
|   79   EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); |  | 
|   80   EXPECT_EQ(kNoActions, log_.GetActionsAndClear()); |  | 
|   81 } |  | 
|   82  |  | 
|   83 TEST_F(ConfigureDisplaysTaskTest, ConfigureWithOneDisplay) { |  | 
|   84   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|   85       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|   86  |  | 
|   87   std::vector<DisplayConfigureRequest> requests( |  | 
|   88       1, |  | 
|   89       DisplayConfigureRequest(displays_[0].get(), &small_mode_, gfx::Point())); |  | 
|   90   ConfigureDisplaysTask task(&delegate_, requests, callback); |  | 
|   91   task.Run(); |  | 
|   92  |  | 
|   93   EXPECT_TRUE(callback_called_); |  | 
|   94   EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); |  | 
|   95   EXPECT_EQ(GetCrtcAction(*displays_[0], &small_mode_, gfx::Point()), |  | 
|   96             log_.GetActionsAndClear()); |  | 
|   97 } |  | 
|   98  |  | 
|   99 TEST_F(ConfigureDisplaysTaskTest, ConfigureWithTwoDisplay) { |  | 
|  100   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|  101       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|  102  |  | 
|  103   std::vector<DisplayConfigureRequest> requests; |  | 
|  104   for (size_t i = 0; i < arraysize(displays_); ++i) { |  | 
|  105     requests.push_back(DisplayConfigureRequest( |  | 
|  106         displays_[i].get(), displays_[i]->native_mode(), gfx::Point())); |  | 
|  107   } |  | 
|  108  |  | 
|  109   ConfigureDisplaysTask task(&delegate_, requests, callback); |  | 
|  110   task.Run(); |  | 
|  111  |  | 
|  112   EXPECT_TRUE(callback_called_); |  | 
|  113   EXPECT_EQ(ConfigureDisplaysTask::SUCCESS, status_); |  | 
|  114   EXPECT_EQ( |  | 
|  115       JoinActions( |  | 
|  116           GetCrtcAction(*displays_[0], &small_mode_, gfx::Point()).c_str(), |  | 
|  117           GetCrtcAction(*displays_[1], &big_mode_, gfx::Point()).c_str(), |  | 
|  118           nullptr), |  | 
|  119       log_.GetActionsAndClear()); |  | 
|  120 } |  | 
|  121  |  | 
|  122 TEST_F(ConfigureDisplaysTaskTest, DisableDisplayFails) { |  | 
|  123   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|  124       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|  125  |  | 
|  126   delegate_.set_max_configurable_pixels(1); |  | 
|  127  |  | 
|  128   std::vector<DisplayConfigureRequest> requests( |  | 
|  129       1, DisplayConfigureRequest(displays_[0].get(), nullptr, gfx::Point())); |  | 
|  130   ConfigureDisplaysTask task(&delegate_, requests, callback); |  | 
|  131   task.Run(); |  | 
|  132  |  | 
|  133   EXPECT_TRUE(callback_called_); |  | 
|  134   EXPECT_EQ(ConfigureDisplaysTask::ERROR, status_); |  | 
|  135   EXPECT_EQ( |  | 
|  136       JoinActions(GetCrtcAction(*displays_[0], nullptr, gfx::Point()).c_str(), |  | 
|  137                   nullptr), |  | 
|  138       log_.GetActionsAndClear()); |  | 
|  139 } |  | 
|  140  |  | 
|  141 TEST_F(ConfigureDisplaysTaskTest, ConfigureWithOneDisplayFails) { |  | 
|  142   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|  143       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|  144  |  | 
|  145   delegate_.set_max_configurable_pixels(1); |  | 
|  146  |  | 
|  147   std::vector<DisplayConfigureRequest> requests( |  | 
|  148       1, DisplayConfigureRequest(displays_[1].get(), &big_mode_, gfx::Point())); |  | 
|  149   ConfigureDisplaysTask task(&delegate_, requests, callback); |  | 
|  150   task.Run(); |  | 
|  151  |  | 
|  152   EXPECT_TRUE(callback_called_); |  | 
|  153   EXPECT_EQ(ConfigureDisplaysTask::ERROR, status_); |  | 
|  154   EXPECT_EQ( |  | 
|  155       JoinActions( |  | 
|  156           GetCrtcAction(*displays_[1], &big_mode_, gfx::Point()).c_str(), |  | 
|  157           GetCrtcAction(*displays_[1], &small_mode_, gfx::Point()).c_str(), |  | 
|  158           nullptr), |  | 
|  159       log_.GetActionsAndClear()); |  | 
|  160 } |  | 
|  161  |  | 
|  162 TEST_F(ConfigureDisplaysTaskTest, ConfigureWithTwoDisplayFails) { |  | 
|  163   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|  164       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|  165  |  | 
|  166   delegate_.set_max_configurable_pixels(1); |  | 
|  167  |  | 
|  168   std::vector<DisplayConfigureRequest> requests; |  | 
|  169   for (size_t i = 0; i < arraysize(displays_); ++i) { |  | 
|  170     requests.push_back(DisplayConfigureRequest( |  | 
|  171         displays_[i].get(), displays_[i]->native_mode(), gfx::Point())); |  | 
|  172   } |  | 
|  173  |  | 
|  174   ConfigureDisplaysTask task(&delegate_, requests, callback); |  | 
|  175   task.Run(); |  | 
|  176  |  | 
|  177   EXPECT_TRUE(callback_called_); |  | 
|  178   EXPECT_EQ(ConfigureDisplaysTask::ERROR, status_); |  | 
|  179   EXPECT_EQ( |  | 
|  180       JoinActions( |  | 
|  181           GetCrtcAction(*displays_[0], &small_mode_, gfx::Point()).c_str(), |  | 
|  182           GetCrtcAction(*displays_[1], &big_mode_, gfx::Point()).c_str(), |  | 
|  183           GetCrtcAction(*displays_[1], &small_mode_, gfx::Point()).c_str(), |  | 
|  184           nullptr), |  | 
|  185       log_.GetActionsAndClear()); |  | 
|  186 } |  | 
|  187  |  | 
|  188 TEST_F(ConfigureDisplaysTaskTest, ConfigureWithTwoDisplaysPartialSuccess) { |  | 
|  189   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|  190       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|  191  |  | 
|  192   delegate_.set_max_configurable_pixels(small_mode_.size().GetArea()); |  | 
|  193  |  | 
|  194   std::vector<DisplayConfigureRequest> requests; |  | 
|  195   for (size_t i = 0; i < arraysize(displays_); ++i) { |  | 
|  196     requests.push_back(DisplayConfigureRequest( |  | 
|  197         displays_[i].get(), displays_[i]->native_mode(), gfx::Point())); |  | 
|  198   } |  | 
|  199  |  | 
|  200   ConfigureDisplaysTask task(&delegate_, requests, callback); |  | 
|  201   task.Run(); |  | 
|  202  |  | 
|  203   EXPECT_TRUE(callback_called_); |  | 
|  204   EXPECT_EQ(ConfigureDisplaysTask::PARTIAL_SUCCESS, status_); |  | 
|  205   EXPECT_EQ( |  | 
|  206       JoinActions( |  | 
|  207           GetCrtcAction(*displays_[0], &small_mode_, gfx::Point()).c_str(), |  | 
|  208           GetCrtcAction(*displays_[1], &big_mode_, gfx::Point()).c_str(), |  | 
|  209           GetCrtcAction(*displays_[1], &small_mode_, gfx::Point()).c_str(), |  | 
|  210           nullptr), |  | 
|  211       log_.GetActionsAndClear()); |  | 
|  212 } |  | 
|  213  |  | 
|  214 TEST_F(ConfigureDisplaysTaskTest, AsyncConfigureWithTwoDisplaysPartialSuccess) { |  | 
|  215   ConfigureDisplaysTask::ResponseCallback callback = base::Bind( |  | 
|  216       &ConfigureDisplaysTaskTest::ConfigureCallback, base::Unretained(this)); |  | 
|  217  |  | 
|  218   delegate_.set_run_async(true); |  | 
|  219   delegate_.set_max_configurable_pixels(small_mode_.size().GetArea()); |  | 
|  220  |  | 
|  221   std::vector<DisplayConfigureRequest> requests; |  | 
|  222   for (size_t i = 0; i < arraysize(displays_); ++i) { |  | 
|  223     requests.push_back(DisplayConfigureRequest( |  | 
|  224         displays_[i].get(), displays_[i]->native_mode(), gfx::Point())); |  | 
|  225   } |  | 
|  226  |  | 
|  227   ConfigureDisplaysTask task(&delegate_, requests, callback); |  | 
|  228   task.Run(); |  | 
|  229  |  | 
|  230   EXPECT_FALSE(callback_called_); |  | 
|  231   base::RunLoop().RunUntilIdle(); |  | 
|  232  |  | 
|  233   EXPECT_TRUE(callback_called_); |  | 
|  234   EXPECT_EQ(ConfigureDisplaysTask::PARTIAL_SUCCESS, status_); |  | 
|  235   EXPECT_EQ( |  | 
|  236       JoinActions( |  | 
|  237           GetCrtcAction(*displays_[0], &small_mode_, gfx::Point()).c_str(), |  | 
|  238           GetCrtcAction(*displays_[1], &big_mode_, gfx::Point()).c_str(), |  | 
|  239           GetCrtcAction(*displays_[1], &small_mode_, gfx::Point()).c_str(), |  | 
|  240           nullptr), |  | 
|  241       log_.GetActionsAndClear()); |  | 
|  242 } |  | 
|  243  |  | 
|  244 }  // namespace test |  | 
|  245 }  // namespace ui |  | 
| OLD | NEW |