2014-02-09 00:53:28 +01:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
|
/*
|
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
|
*
|
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <vcl/IconThemeSelector.hxx>
|
|
|
|
|
|
|
|
|
|
#include <vcl/IconThemeInfo.hxx>
|
|
|
|
|
|
|
|
|
|
#include <cppunit/TestAssert.h>
|
|
|
|
|
#include <cppunit/TestFixture.h>
|
|
|
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
|
#include <cppunit/plugin/TestPlugIn.h>
|
|
|
|
|
|
|
|
|
|
class IconThemeSelectorTest : public CppUnit::TestFixture
|
|
|
|
|
{
|
2018-05-25 11:45:29 +02:00
|
|
|
#ifndef _WIN32 //default theme on Windows is Colibre independently from any desktop environment
|
2019-06-25 19:56:13 +00:00
|
|
|
void BreezeIsReturnedForKde5Desktop();
|
|
|
|
|
void ElementaryIsReturnedForGnomeDesktop();
|
|
|
|
|
void ThemeIsOverriddenByPreferredTheme();
|
|
|
|
|
void ThemeIsOverriddenByHighContrastMode();
|
|
|
|
|
void NotInstalledThemeDoesNotOverride();
|
|
|
|
|
void InstalledThemeIsFound();
|
|
|
|
|
void FirstThemeIsReturnedIfRequestedThemeIsNotFound();
|
|
|
|
|
void FallbackThemeIsReturnedForEmptyInput();
|
|
|
|
|
void DifferentPreferredThemesAreInequal();
|
|
|
|
|
void DifferentHighContrastModesAreInequal();
|
|
|
|
|
static std::vector<vcl::IconThemeInfo> GetFakeInstalledThemes();
|
2018-05-25 11:45:29 +02:00
|
|
|
#endif
|
2014-02-09 00:53:28 +01:00
|
|
|
|
|
|
|
|
// Adds code needed to register the test suite
|
|
|
|
|
CPPUNIT_TEST_SUITE(IconThemeSelectorTest);
|
|
|
|
|
|
2018-05-25 11:45:29 +02:00
|
|
|
#ifndef _WIN32
|
2018-03-29 17:39:35 +02:00
|
|
|
CPPUNIT_TEST(BreezeIsReturnedForKde5Desktop);
|
|
|
|
|
CPPUNIT_TEST(ElementaryIsReturnedForGnomeDesktop);
|
2014-02-09 00:53:28 +01:00
|
|
|
CPPUNIT_TEST(ThemeIsOverriddenByPreferredTheme);
|
|
|
|
|
CPPUNIT_TEST(ThemeIsOverriddenByHighContrastMode);
|
|
|
|
|
CPPUNIT_TEST(NotInstalledThemeDoesNotOverride);
|
|
|
|
|
CPPUNIT_TEST(InstalledThemeIsFound);
|
|
|
|
|
CPPUNIT_TEST(FirstThemeIsReturnedIfRequestedThemeIsNotFound);
|
|
|
|
|
CPPUNIT_TEST(FallbackThemeIsReturnedForEmptyInput);
|
|
|
|
|
CPPUNIT_TEST(DifferentPreferredThemesAreInequal);
|
|
|
|
|
CPPUNIT_TEST(DifferentHighContrastModesAreInequal);
|
2018-05-25 11:45:29 +02:00
|
|
|
#endif
|
2014-02-09 00:53:28 +01:00
|
|
|
|
|
|
|
|
// End of test suite definition
|
|
|
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
|
};
|
|
|
|
|
|
2018-05-25 11:45:29 +02:00
|
|
|
#ifndef _WIN32
|
|
|
|
|
|
2014-02-09 00:53:28 +01:00
|
|
|
/*static*/ std::vector<vcl::IconThemeInfo>
|
|
|
|
|
IconThemeSelectorTest::GetFakeInstalledThemes()
|
|
|
|
|
{
|
|
|
|
|
std::vector<vcl::IconThemeInfo> r;
|
2014-02-21 23:10:26 +00:00
|
|
|
vcl::IconThemeInfo a;
|
2018-03-29 17:39:35 +02:00
|
|
|
a.mThemeId = "breeze";
|
|
|
|
|
r.push_back(a);
|
|
|
|
|
a.mThemeId = "elementary";
|
2014-02-09 00:53:28 +01:00
|
|
|
r.push_back(a);
|
2018-05-25 11:45:29 +02:00
|
|
|
a.mThemeId = "colibre";
|
|
|
|
|
r.push_back(a);
|
2018-04-17 17:26:33 +02:00
|
|
|
a.mThemeId = "sifr";
|
2014-02-09 00:53:28 +01:00
|
|
|
r.push_back(a);
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-03-29 17:39:35 +02:00
|
|
|
IconThemeSelectorTest::BreezeIsReturnedForKde5Desktop()
|
2014-02-09 00:53:28 +01:00
|
|
|
{
|
|
|
|
|
std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
|
|
|
|
|
vcl::IconThemeSelector s;
|
2019-07-09 15:28:29 +00:00
|
|
|
OUString r = s.SelectIconThemeForDesktopEnvironment(themes, "plasma5");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'breeze' theme is returned for Plasma 5 desktop", OUString("breeze"), r);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-03-29 17:39:35 +02:00
|
|
|
IconThemeSelectorTest::ElementaryIsReturnedForGnomeDesktop()
|
2014-02-09 00:53:28 +01:00
|
|
|
{
|
|
|
|
|
std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
|
|
|
|
|
vcl::IconThemeSelector s;
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString r = s.SelectIconThemeForDesktopEnvironment(themes, "gnome");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'elementary' theme is returned for gnome desktop", OUString("elementary"), r);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::ThemeIsOverriddenByPreferredTheme()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s;
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString preferred("breeze");
|
2016-11-14 15:57:03 +01:00
|
|
|
s.SetPreferredIconTheme(preferred, false);
|
2014-02-09 00:53:28 +01:00
|
|
|
std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString selected = s.SelectIconThemeForDesktopEnvironment(themes, "gnome");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'elementary' theme is overridden by breeze", preferred, selected);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::ThemeIsOverriddenByHighContrastMode()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s;
|
|
|
|
|
s.SetUseHighContrastTheme(true);
|
|
|
|
|
std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString selected = s.SelectIconTheme(themes, "breeze");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'breeze' theme is overridden by high contrast mode",
|
2018-04-17 17:26:33 +02:00
|
|
|
OUString("sifr"), selected);
|
2014-02-09 00:53:28 +01:00
|
|
|
s.SetUseHighContrastTheme(false);
|
2018-03-29 17:39:35 +02:00
|
|
|
selected = s.SelectIconTheme(themes, "breeze");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'breeze' theme is no longer overridden by high contrast mode",
|
|
|
|
|
OUString("breeze"), selected);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::NotInstalledThemeDoesNotOverride()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s;
|
2018-03-29 17:39:35 +02:00
|
|
|
s.SetPreferredIconTheme("breeze_foo", false);
|
2014-02-09 00:53:28 +01:00
|
|
|
std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString selected = s.SelectIconTheme(themes, "colibre");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'colibre' theme is not overridden by 'breeze_foo'", OUString("colibre"), selected);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::InstalledThemeIsFound()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s;
|
|
|
|
|
std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString selected = s.SelectIconTheme(themes, "colibre");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'colibre' theme is found", OUString("colibre"), selected);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::FirstThemeIsReturnedIfRequestedThemeIsNotFound()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s;
|
|
|
|
|
std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString selected = s.SelectIconTheme(themes, "breeze_foo");
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("'breeze' theme is found", themes.front().GetThemeId(), selected);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::FallbackThemeIsReturnedForEmptyInput()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s;
|
2018-03-29 17:39:35 +02:00
|
|
|
OUString selected = s.SelectIconTheme(std::vector<vcl::IconThemeInfo>(), "colibre");
|
2014-02-09 00:53:28 +01:00
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("fallback is returned for empty input",
|
2016-07-21 14:23:23 +02:00
|
|
|
OUString(vcl::IconThemeSelector::FALLBACK_ICON_THEME_ID), selected);
|
2014-02-09 00:53:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::DifferentHighContrastModesAreInequal()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s1;
|
|
|
|
|
vcl::IconThemeSelector s2;
|
|
|
|
|
s1.SetUseHighContrastTheme(true);
|
|
|
|
|
s2.SetUseHighContrastTheme(false);
|
|
|
|
|
bool equal = (s1 == s2);
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("Different high contrast modes are detected as inequal", false, equal);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
IconThemeSelectorTest::DifferentPreferredThemesAreInequal()
|
|
|
|
|
{
|
|
|
|
|
vcl::IconThemeSelector s1;
|
|
|
|
|
vcl::IconThemeSelector s2;
|
2018-03-29 17:39:35 +02:00
|
|
|
s1.SetPreferredIconTheme("breeze", false);
|
2014-02-21 22:23:35 +02:00
|
|
|
s2.SetUseHighContrastTheme(true);
|
2014-02-09 00:53:28 +01:00
|
|
|
bool equal = (s1 == s2);
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE("Different preferred themes are detected as inequal", false, equal);
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-25 11:45:29 +02:00
|
|
|
#endif
|
|
|
|
|
|
2014-02-09 00:53:28 +01:00
|
|
|
// Put the test suite in the registry
|
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION(IconThemeSelectorTest);
|
|
|
|
|
|
|
|
|
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
|
|
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|