blob: 138444f48c927b38b135505ceb77a4067c01ac5d [file] [log] [blame]
// Copyright 2016 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 <utility>
#include "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "testing/gmock/include/gmock/gmock-matchers.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/image/image_unittest_util.h"
#include "ui/message_center/public/cpp/notification.h"
#include "ui/message_center/public/cpp/notifier_id.h"
#include "ui/message_center/public/mojo/traits_test_service.mojom.h"
namespace message_center {
namespace {
class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
public:
StructTraitsTest() {}
protected:
mojom::TraitsTestServicePtr GetTraitsTestProxy() {
mojom::TraitsTestServicePtr proxy;
traits_test_bindings_.AddBinding(this, mojo::MakeRequest(&proxy));
return proxy;
}
void Compare(const Notification& input, const Notification& output) {
EXPECT_EQ(input.type(), output.type());
EXPECT_EQ(input.id(), output.id());
EXPECT_EQ(input.title(), output.title());
EXPECT_EQ(input.message(), output.message());
EXPECT_EQ(input.icon().Width(), output.icon().Width());
EXPECT_EQ(input.icon().Height(), output.icon().Height());
EXPECT_EQ(input.display_source(), output.display_source());
EXPECT_EQ(input.origin_url(), output.origin_url());
EXPECT_EQ(input.notifier_id(), output.notifier_id());
EXPECT_EQ(input.priority(), output.priority());
EXPECT_TRUE(gfx::test::AreImagesEqual(input.image(), output.image()));
EXPECT_TRUE(
gfx::test::AreImagesEqual(input.small_image(), output.small_image()));
EXPECT_EQ(input.timestamp(), output.timestamp());
EXPECT_EQ(input.progress(), output.progress());
EXPECT_EQ(input.progress_status(), output.progress_status());
EXPECT_EQ(input.rich_notification_data()
.should_make_spoken_feedback_for_popup_updates,
output.rich_notification_data()
.should_make_spoken_feedback_for_popup_updates);
EXPECT_EQ(input.pinned(), output.pinned());
EXPECT_EQ(input.renotify(), output.renotify());
EXPECT_EQ(input.accessible_name(), output.accessible_name());
EXPECT_EQ(input.accent_color(), output.accent_color());
EXPECT_EQ(input.should_show_settings_button(),
output.should_show_settings_button());
EXPECT_EQ(input.fullscreen_visibility(), output.fullscreen_visibility());
}
private:
// TraitsTestService:
void EchoNotification(const Notification& n,
EchoNotificationCallback callback) override {
std::move(callback).Run(n);
}
base::MessageLoop loop_;
mojo::BindingSet<TraitsTestService> traits_test_bindings_;
DISALLOW_COPY_AND_ASSIGN(StructTraitsTest);
};
} // namespace
TEST_F(StructTraitsTest, Notification) {
NotificationType type = NotificationType::NOTIFICATION_TYPE_SIMPLE;
std::string id("notification_id");
base::string16 title(base::ASCIIToUTF16("Notification"));
base::string16 message(base::ASCIIToUTF16("I'm a notification!"));
gfx::Image icon(gfx::test::CreateImage(64, 64));
base::string16 display_source(base::ASCIIToUTF16("display_source"));
GURL origin_url("www.example.com");
NotifierId notifier_id(NotifierType::APPLICATION, id);
notifier_id.profile_id = "profile_id";
RichNotificationData optional_fields;
optional_fields.settings_button_handler = SettingsButtonHandler::INLINE;
Notification input(type, id, title, message, icon, display_source, origin_url,
notifier_id, optional_fields, nullptr);
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
Notification output;
proxy->EchoNotification(input, &output);
Compare(input, output);
// Set some optional fields to non-default values and test again.
input.set_never_timeout(true);
input.set_type(NotificationType::NOTIFICATION_TYPE_PROGRESS);
input.set_progress(50);
input.set_progress_status(base::ASCIIToUTF16("progress text"));
input.set_image(gfx::test::CreateImage(48, 48));
input.set_small_image(gfx::test::CreateImage(16, 16));
input.set_accent_color(SK_ColorMAGENTA);
input.set_fullscreen_visibility(FullscreenVisibility::OVER_USER);
proxy->EchoNotification(input, &output);
Compare(input, output);
}
TEST_F(StructTraitsTest, EmptyIconNotification) {
NotificationType type = NotificationType::NOTIFICATION_TYPE_SIMPLE;
std::string id("notification_id");
base::string16 title(base::ASCIIToUTF16("Notification"));
base::string16 message(
base::ASCIIToUTF16("I'm a notification with no icon!"));
base::string16 display_source(base::ASCIIToUTF16("display_source"));
GURL origin_url("www.example.com");
NotifierId notifier_id(NotifierType::APPLICATION, id);
Notification input(type, id, title, message, gfx::Image(), display_source,
origin_url, notifier_id, RichNotificationData(), nullptr);
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
Notification output;
proxy->EchoNotification(input, &output);
Compare(input, output);
}
} // namespace message_center