 Chromium Code Reviews
 Chromium Code Reviews Issue 2671923002:
  mash: Cleanup ash shelf application menu code.  (Closed)
    
  
    Issue 2671923002:
  mash: Cleanup ash shelf application menu code.  (Closed) 
  | Index: ash/common/shelf/shelf_application_menu_model_unittest.cc | 
| diff --git a/ash/common/shelf/shelf_application_menu_model_unittest.cc b/ash/common/shelf/shelf_application_menu_model_unittest.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..8ab4917798e088c351e5e2bf67983a59eb9457a8 | 
| --- /dev/null | 
| +++ b/ash/common/shelf/shelf_application_menu_model_unittest.cc | 
| @@ -0,0 +1,122 @@ | 
| +// Copyright 2015 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 "ash/common/shelf/shelf_application_menu_model.h" | 
| + | 
| +#include <utility> | 
| + | 
| +#include "ash/public/cpp/shelf_application_menu_item.h" | 
| +#include "base/macros.h" | 
| +#include "base/memory/ptr_util.h" | 
| +#include "base/strings/utf_string_conversions.h" | 
| +#include "base/test/histogram_tester.h" | 
| +#include "testing/gtest/include/gtest/gtest.h" | 
| + | 
| +namespace ash { | 
| + | 
| +namespace { | 
| + | 
| +const char kNumItemsEnabledHistogramName[] = | 
| + "Ash.Shelf.Menu.NumItemsEnabledUponSelection"; | 
| + | 
| +const char kSelectedMenuItemIndexHistogramName[] = | 
| + "Ash.Shelf.Menu.SelectedMenuItemIndex"; | 
| + | 
| +} // namespace | 
| + | 
| +// Test API to provide internal access to a ShelfApplicationMenuModel. | 
| +class ShelfApplicationMenuModelTestAPI { | 
| + public: | 
| + // Creates a test api to access the internals of the |menu|. | 
| + explicit ShelfApplicationMenuModelTestAPI(ShelfApplicationMenuModel* menu) | 
| + : menu_(menu) {} | 
| + ~ShelfApplicationMenuModelTestAPI() {} | 
| + | 
| + // Give public access to this metrics recording functions. | 
| + void RecordMenuItemSelectedMetrics(int command_id, | 
| + int num_menu_items_enabled) { | 
| + menu_->RecordMenuItemSelectedMetrics(command_id, num_menu_items_enabled); | 
| + } | 
| + | 
| + private: | 
| + // The ShelfApplicationMenuModel to provide internal access to. Not owned. | 
| + ShelfApplicationMenuModel* menu_; | 
| + | 
| + DISALLOW_COPY_AND_ASSIGN(ShelfApplicationMenuModelTestAPI); | 
| +}; | 
| + | 
| +// Verifies the menu contents given an empty item list. | 
| +TEST(ShelfApplicationMenuModelTest, VerifyContentsWithNoMenuItems) { | 
| + base::string16 title = base::ASCIIToUTF16("title"); | 
| + ShelfApplicationMenuModel menu(title, ShelfApplicationMenuItems()); | 
| + // Expect the title with separators. | 
| + ASSERT_EQ(static_cast<int>(3), menu.GetItemCount()); | 
| + EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, menu.GetTypeAt(0)); | 
| + EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu.GetTypeAt(1)); | 
| + EXPECT_EQ(title, menu.GetLabelAt(1)); | 
| + EXPECT_FALSE(menu.IsEnabledAt(1)); | 
| + EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, menu.GetTypeAt(2)); | 
| +} | 
| + | 
| +// Verifies the menu contents given a non-empty item list. | 
| +TEST(ShelfApplicationMenuModelTest, VerifyContentsWithMenuItems) { | 
| + ShelfApplicationMenuItems items; | 
| + base::string16 title = base::ASCIIToUTF16("title"); | 
| + items.push_back(base::MakeUnique<ShelfApplicationMenuItem>(title, nullptr)); | 
| + items.push_back(base::MakeUnique<ShelfApplicationMenuItem>(title, nullptr)); | 
| + items.push_back(base::MakeUnique<ShelfApplicationMenuItem>(title, nullptr)); | 
| + | 
| + ShelfApplicationMenuModel menu(title, std::move(items)); | 
| + ShelfApplicationMenuModelTestAPI menu_test_api(&menu); | 
| + | 
| + // Expect the title with separators, the enabled items, and another separator. | 
| + ASSERT_EQ(static_cast<int>(7), menu.GetItemCount()); | 
| + EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, menu.GetTypeAt(0)); | 
| + EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu.GetTypeAt(1)); | 
| + EXPECT_EQ(title, menu.GetLabelAt(1)); | 
| + EXPECT_FALSE(menu.IsEnabledAt(1)); | 
| + EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, menu.GetTypeAt(2)); | 
| + for (size_t i = 0; i < 3; i++) { | 
| 
James Cook
2017/02/06 17:30:21
nit: this might be clearer if you unroll the loop
 
msw
2017/02/07 09:12:01
Done.
 | 
| + EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu.GetTypeAt(i + 3)); | 
| + EXPECT_TRUE(menu.IsEnabledAt(i + 3)); | 
| + } | 
| + EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, menu.GetTypeAt(6)); | 
| +} | 
| + | 
| +// Verifies RecordMenuItemSelectedMetrics uses the correct histogram buckets. | 
| +TEST(ShelfApplicationMenuModelTest, VerifyHistogramBuckets) { | 
| + const int kCommandId = 3; | 
| + const int kNumMenuItemsEnabled = 7; | 
| + | 
| + base::HistogramTester histogram_tester; | 
| + | 
| + ShelfApplicationMenuItems items; | 
| + ShelfApplicationMenuModel menu(base::ASCIIToUTF16("title"), std::move(items)); | 
| + ShelfApplicationMenuModelTestAPI menu_test_api(&menu); | 
| + menu_test_api.RecordMenuItemSelectedMetrics(kCommandId, kNumMenuItemsEnabled); | 
| + | 
| + histogram_tester.ExpectTotalCount(kNumItemsEnabledHistogramName, 1); | 
| + histogram_tester.ExpectBucketCount(kNumItemsEnabledHistogramName, | 
| + kNumMenuItemsEnabled, 1); | 
| + | 
| + histogram_tester.ExpectTotalCount(kSelectedMenuItemIndexHistogramName, 1); | 
| + histogram_tester.ExpectBucketCount(kSelectedMenuItemIndexHistogramName, | 
| + kCommandId, 1); | 
| +} | 
| + | 
| +// Verify histogram data is recorded when ExecuteCommand is called. | 
| +TEST(ShelfApplicationMenuModelTest, VerifyHistogramOnExecute) { | 
| + base::HistogramTester histogram_tester; | 
| + | 
| + ShelfApplicationMenuItems items; | 
| + base::string16 title = base::ASCIIToUTF16("title"); | 
| + items.push_back(base::MakeUnique<ShelfApplicationMenuItem>(title, nullptr)); | 
| + ShelfApplicationMenuModel menu(title, std::move(items)); | 
| + menu.ExecuteCommand(0, 0); | 
| + | 
| + histogram_tester.ExpectTotalCount(kNumItemsEnabledHistogramName, 1); | 
| + histogram_tester.ExpectTotalCount(kSelectedMenuItemIndexHistogramName, 1); | 
| +} | 
| + | 
| +} // namespace ash |