desktop_notifications_unittest.h revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1// Copyright (c) 2010 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#ifndef CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_ 6#define CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_ 7#pragma once 8 9#include <deque> 10#include <string> 11 12#include "base/message_loop.h" 13#include "chrome/browser/chrome_thread.h" 14#include "chrome/browser/notifications/balloon_collection_impl.h" 15#include "chrome/browser/notifications/desktop_notification_service.h" 16#include "chrome/browser/notifications/notification.h" 17#include "chrome/browser/notifications/notification_test_util.h" 18#include "chrome/browser/notifications/notification_ui_manager.h" 19#include "chrome/browser/notifications/notifications_prefs_cache.h" 20#include "chrome/common/render_messages.h" 21#include "chrome/test/testing_profile.h" 22#include "testing/gtest/include/gtest/gtest.h" 23 24class DesktopNotificationsTest; 25typedef LoggingNotificationProxyBase<DesktopNotificationsTest> 26 LoggingNotificationProxy; 27 28// Test version of the balloon collection which counts the number 29// of notifications that are added to it. 30class MockBalloonCollection : public BalloonCollectionImpl { 31 public: 32 MockBalloonCollection() : 33 log_proxy_(new LoggingNotificationProxy()) {} 34 35 // Our mock collection has an area large enough for a fixed number 36 // of balloons. 37 static const int kMockBalloonSpace; 38 int max_balloon_count() const { return kMockBalloonSpace; } 39 40 // BalloonCollectionImpl overrides 41 virtual void Add(const Notification& notification, 42 Profile* profile); 43 virtual bool Remove(const Notification& notification); 44 virtual bool HasSpace() const { return count() < kMockBalloonSpace; } 45 virtual Balloon* MakeBalloon(const Notification& notification, 46 Profile* profile); 47 virtual void DisplayChanged() {} 48 virtual void OnBalloonClosed(Balloon* source); 49 virtual const BalloonCollection::Balloons& GetActiveBalloons() { 50 return balloons_; 51 } 52 53 // Number of balloons being shown. 54 std::deque<Balloon*>& balloons() { return balloons_; } 55 int count() const { return balloons_.size(); } 56 57 // Returns the highest y-coordinate of all the balloons in the collection. 58 int UppermostVerticalPosition(); 59 60 // Returns the height bounds of a balloon. 61 int MinHeight() { return Layout::min_balloon_height(); } 62 int MaxHeight() { return Layout::max_balloon_height(); } 63 64 private: 65 std::deque<Balloon*> balloons_; 66 scoped_refptr<LoggingNotificationProxy> log_proxy_; 67}; 68 69class DesktopNotificationsTest : public testing::Test { 70 public: 71 DesktopNotificationsTest(); 72 ~DesktopNotificationsTest(); 73 74 static void log(const std::string& message) { 75 log_output_.append(message); 76 } 77 78 Profile* profile() { return profile_.get(); } 79 80 protected: 81 // testing::Test overrides 82 virtual void SetUp(); 83 virtual void TearDown(); 84 85 void AllowOrigin(const GURL& origin) { 86 service_->GrantPermission(origin); 87 } 88 89 void DenyOrigin(const GURL& origin) { 90 service_->DenyPermission(origin); 91 } 92 93 int HasPermission(const GURL& origin) { 94 return service_->prefs_cache()->HasPermission(origin); 95 } 96 97 // Constructs a notification parameter structure for use in tests. 98 ViewHostMsg_ShowNotification_Params StandardTestNotification(); 99 100 // Create a message loop to allow notifications code to post tasks, 101 // and a thread so that notifications code runs on the expected thread. 102 MessageLoopForUI message_loop_; 103 ChromeThread ui_thread_; 104 105 // Test profile. 106 scoped_ptr<TestingProfile> profile_; 107 108 // Mock balloon collection -- owned by the NotificationUIManager 109 MockBalloonCollection* balloon_collection_; 110 111 // Real UI manager. 112 scoped_ptr<NotificationUIManager> ui_manager_; 113 114 // Real DesktopNotificationService 115 scoped_ptr<DesktopNotificationService> service_; 116 117 // Contains the cumulative output of the unit test. 118 static std::string log_output_; 119}; 120 121#endif // CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATIONS_UNITTEST_H_ 122