blob: e2603753542d8266dcac02917998040af9b82a13 [file] [log] [blame]
// Copyright (c) 2012 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 <gmock/gmock.h>
#include <gtest/gtest.h>
#include <string>
#include "base/utf_string_conversions.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/chromeos/extensions/file_browser_notifications.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
using ::testing::_;
using ::testing::InSequence;
using ::testing::Return;
using ::testing::StrEq;
using ::testing::AnyNumber;
namespace chromeos {
namespace {
class MockFileBrowserNotificationsOnMount : public FileBrowserNotifications {
public:
explicit MockFileBrowserNotificationsOnMount(Profile* profile)
: FileBrowserNotifications(profile) {
}
virtual ~MockFileBrowserNotificationsOnMount() {}
MOCK_METHOD3(ShowNotificationWithMessage, void(NotificationType,
const std::string&, const string16&));
MOCK_METHOD2(HideNotification, void(NotificationType, const std::string&));
};
MATCHER_P2(String16Equals, id, label, "") {
return arg == l10n_util::GetStringFUTF16(id, ASCIIToUTF16(label));
}
} // namespace
TEST(FileBrowserMountNotificationsTest, GoodDevice) {
MockFileBrowserNotificationsOnMount* mocked_notifications =
new MockFileBrowserNotificationsOnMount(NULL);
scoped_ptr<FileBrowserNotifications> notifications(mocked_notifications);
std::string notification_path("system_path_prefix");
std::string device_label("label");
notifications->RegisterDevice(notification_path);
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE, StrEq(notification_path)));
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, true, true, false);
};
TEST(FileBrowserMountNotificationsTest, GoodDeviceWithBadParent) {
MockFileBrowserNotificationsOnMount* mocked_notifications =
new MockFileBrowserNotificationsOnMount(NULL);
scoped_ptr<FileBrowserNotifications> notifications(mocked_notifications);
std::string notification_path("system_path_prefix");
std::string device_label("label");
notifications->RegisterDevice(notification_path);
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE, StrEq(notification_path)));
{
InSequence s;
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path), _));
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE_FAIL,
StrEq(notification_path)));
}
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, true, false, false);
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, true, false);
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, true, false);
}
TEST(FileBrowserMountNotificationsTest, UnsupportedDevice) {
MockFileBrowserNotificationsOnMount* mocked_notifications =
new MockFileBrowserNotificationsOnMount(NULL);
scoped_ptr<FileBrowserNotifications> notifications(mocked_notifications);
std::string notification_path("system_path_prefix");
std::string device_label("label");
notifications->RegisterDevice(notification_path);
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE, StrEq(notification_path)));
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path),
String16Equals(IDS_DEVICE_UNSUPPORTED_MESSAGE, device_label)));
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, false, true);
}
TEST(FileBrowserMountNotificationsTest, UnsupportedWithUnknownParent) {
MockFileBrowserNotificationsOnMount* mocked_notifications =
new MockFileBrowserNotificationsOnMount(NULL);
scoped_ptr<FileBrowserNotifications> notifications(mocked_notifications);
std::string notification_path("system_path_prefix");
std::string device_label("label");
notifications->RegisterDevice(notification_path);
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE, StrEq(notification_path)));
{
InSequence s;
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path), _));
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path)));
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path),
String16Equals(IDS_DEVICE_UNSUPPORTED_MESSAGE,
device_label)));
}
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, true, false, false);
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, false, true);
}
TEST(FileBrowserMountNotificationsTest, MountPartialSuccess) {
MockFileBrowserNotificationsOnMount* mocked_notifications =
new MockFileBrowserNotificationsOnMount(NULL);
scoped_ptr<FileBrowserNotifications> notifications(mocked_notifications);
std::string notification_path("system_path_prefix");
std::string device_label("label");
notifications->RegisterDevice(notification_path);
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE, StrEq(notification_path)));
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path),
String16Equals(IDS_MULTIPART_DEVICE_UNSUPPORTED_MESSAGE,
device_label)));
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, true, false);
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, false, true);
}
TEST(FileBrowserMountNotificationsTest, Unknown) {
MockFileBrowserNotificationsOnMount* mocked_notifications =
new MockFileBrowserNotificationsOnMount(NULL);
scoped_ptr<FileBrowserNotifications> notifications(mocked_notifications);
std::string notification_path("system_path_prefix");
std::string device_label("label");
notifications->RegisterDevice(notification_path);
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE, StrEq(notification_path)));
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path),
String16Equals(IDS_DEVICE_UNKNOWN_MESSAGE, device_label)));
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, false, false);
}
TEST(FileBrowserMountNotificationsTest, MulitpleFail) {
MockFileBrowserNotificationsOnMount* mocked_notifications =
new MockFileBrowserNotificationsOnMount(NULL);
scoped_ptr<FileBrowserNotifications> notifications(mocked_notifications);
std::string notification_path("system_path_prefix");
std::string device_label("label");
notifications->RegisterDevice(notification_path);
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE, StrEq(notification_path)));
{
InSequence s;
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path),
String16Equals(IDS_DEVICE_UNKNOWN_MESSAGE, device_label)))
.RetiresOnSaturation();
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE_FAIL, notification_path));
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path),
String16Equals(IDS_DEVICE_UNKNOWN_MESSAGE, device_label)));
EXPECT_CALL(*mocked_notifications, HideNotification(
FileBrowserNotifications::DEVICE_FAIL, notification_path));
EXPECT_CALL(*mocked_notifications, ShowNotificationWithMessage(
FileBrowserNotifications::DEVICE_FAIL, StrEq(notification_path),
String16Equals(IDS_MULTIPART_DEVICE_UNSUPPORTED_MESSAGE,
device_label)));
}
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, true, false, false);
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, false, false);
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, false, false);
notifications->ManageNotificationsOnMountCompleted(notification_path,
device_label, false, false, false);
}
} // namespace chromeos.