aboutsummaryrefslogtreecommitdiff
path: root/tests/integration/test-indicator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/integration/test-indicator.cpp')
-rw-r--r--tests/integration/test-indicator.cpp981
1 files changed, 0 insertions, 981 deletions
diff --git a/tests/integration/test-indicator.cpp b/tests/integration/test-indicator.cpp
deleted file mode 100644
index 33e62b5..0000000
--- a/tests/integration/test-indicator.cpp
+++ /dev/null
@@ -1,981 +0,0 @@
-/*
- * Copyright (C) 2015 Canonical, Ltd.
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3, as published
- * by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranties of
- * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Xavi Garcia <xavi.garcia.mena@canonical.com>
- */
-
-#include <indicator-sound-test-base.h>
-
-#include <QDebug>
-#include <QTestEventLoop>
-#include <QSignalSpy>
-
-using namespace std;
-using namespace testing;
-namespace mh = unity::gmenuharness;
-namespace
-{
-
-class TestIndicator: public IndicatorSoundTestBase
-{
-};
-
-TEST_F(TestIndicator, PhoneChangeRoleVolume)
-{
- double INITIAL_VOLUME = 0.0;
-
- ASSERT_NO_THROW(startAccountsService());
- ASSERT_NO_THROW(startPulsePhone());
-
- // initialize volumes in pulseaudio
- EXPECT_TRUE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
- EXPECT_TRUE(setStreamRestoreVolume("multimedia", INITIAL_VOLUME));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- // Generate a random volume
- QTime now = QTime::currentTime();
- qsrand(now.msec());
- int randInt = qrand() % 100;
- double randomVolume = randInt / 100.0;
-
- QSignalSpy &userAccountsSpy = *signal_spy_volume_changed_;
- // set an initial volume to the alert role
- userAccountsSpy.clear();
- EXPECT_TRUE(setVolumeUntilAccountsIsConnected(1.0));
- userAccountsSpy.clear();
- // play a test sound, it should change the role in the indicator
- EXPECT_TRUE(startTestSound("multimedia"));
-
- // this time we only expect 1 signal as it's only the indicator
- // updating the value
- WAIT_FOR_SIGNALS(userAccountsSpy, 1);
- //EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- userAccountsSpy.clear();
- // set the random volume to the multimedia role
- setActionValue("volume", QVariant::fromValue(randomVolume));
- if (randomVolume != INITIAL_VOLUME)
- {
- WAIT_FOR_SIGNALS(userAccountsSpy, 1);
- }
-
- // check the indicator
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::starts_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(randomVolume, "Volume"))
- )
- ).match());
-
- // check that the last item is Sound Settings
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::ends_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- .action("indicator.phone-settings")
- )
- ).match());
-
- // initialize the signal spy
- EXPECT_TRUE(initializeMenuChangedSignal());
- userAccountsSpy.clear();
- // stop the test sound, the role should change again to alert
- stopTestSound();
- if (randomVolume != 1.0)
- {
- // wait for the menu change
- EXPECT_TRUE(waitMenuChange());
- }
-
- // check the initial volume for the alert role
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::starts_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(1.0, "Volume"))
- )
- ).match());
-
- // check that the last item is Sound Settings
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::ends_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- .action("indicator.phone-settings")
- )
- ).match());
-}
-
-TEST_F(TestIndicator, PhoneBasicInitialVolume)
-{
- double INITIAL_VOLUME = 0.0;
-
- ASSERT_NO_THROW(startAccountsService());
- EXPECT_TRUE(clearGSettingsPlayers());
- ASSERT_NO_THROW(startPulsePhone());
-
- // initialize volumes in pulseaudio
- EXPECT_TRUE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- .action("indicator.phone-settings")
- )
- ).match());
-}
-
-TEST_F(TestIndicator, PhoneAddMprisPlayer)
-{
- double INITIAL_VOLUME = 0.0;
-
- ASSERT_NO_THROW(startAccountsService());
- EXPECT_TRUE(clearGSettingsPlayers());
- ASSERT_NO_THROW(startPulsePhone());
-
- // initialize volumes in pulseaudio
- EXPECT_TRUE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- .action("indicator.phone-settings")
- )
- ).match());
-
- // initialize the signal spy
- EXPECT_TRUE(initializeMenuChangedSignal());
-
- // start the test player
- EXPECT_TRUE(startTestMprisPlayer("testplayer1"));
-
- // wait for the menu change
- EXPECT_TRUE(waitMenuChange());
-
- // finally verify that the player is added
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher()
- .action("indicator.testplayer1.desktop")
- .label("TestPlayer1")
- .themed_icon("icon", {"testplayer"})
- .string_attribute("x-canonical-type", "com.canonical.unity.media-player")
- )
- .item(mh::MenuItemMatcher()
- .string_attribute("x-canonical-previous-action","indicator.previous.testplayer1.desktop")
- .string_attribute("x-canonical-play-action","indicator.play.testplayer1.desktop")
- .string_attribute("x-canonical-next-action","indicator.next.testplayer1.desktop")
- .string_attribute("x-canonical-type","com.canonical.unity.playback-item")
- )
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- .action("indicator.phone-settings")
- )
- ).match());
-}
-
-TEST_F(TestIndicator, DesktopBasicInitialVolume)
-{
- double INITIAL_VOLUME = 0.0;
-
- ASSERT_NO_THROW(startAccountsService());
- EXPECT_TRUE(clearGSettingsPlayers());
- ASSERT_NO_THROW(startPulseDesktop());
-
- // initialize volumes in pulseaudio
- EXPECT_FALSE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
- EXPECT_TRUE(setSinkVolume(INITIAL_VOLUME));
-
- // start the test player
- EXPECT_TRUE(startTestMprisPlayer("testplayer1"));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher().checkbox()
- .label("Mute")
- )
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher()
- .action("indicator.testplayer1.desktop")
- .label("TestPlayer1")
- .themed_icon("icon", {"testplayer"})
- .string_attribute("x-canonical-type", "com.canonical.unity.media-player")
- )
- .item(mh::MenuItemMatcher()
- .string_attribute("x-canonical-previous-action","indicator.previous.testplayer1.desktop")
- .string_attribute("x-canonical-play-action","indicator.play.testplayer1.desktop")
- .string_attribute("x-canonical-next-action","indicator.next.testplayer1.desktop")
- .string_attribute("x-canonical-type","com.canonical.unity.playback-item")
- )
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- )
- ).match());
-}
-
-TEST_F(TestIndicator, DesktopAddMprisPlayer)
-{
- double INITIAL_VOLUME = 0.0;
-
- ASSERT_NO_THROW(startAccountsService());
- EXPECT_TRUE(clearGSettingsPlayers());
- ASSERT_NO_THROW(startPulseDesktop());
-
- // initialize volumes in pulseaudio
- EXPECT_FALSE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
- EXPECT_TRUE(setSinkVolume(INITIAL_VOLUME));
-
- // start the test player
- EXPECT_TRUE(startTestMprisPlayer("testplayer1"));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- // check that the player is added
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher().checkbox()
- .label("Mute")
- )
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher()
- .action("indicator.testplayer1.desktop")
- .label("TestPlayer1")
- .themed_icon("icon", {"testplayer"})
- .string_attribute("x-canonical-type", "com.canonical.unity.media-player")
- )
- .item(mh::MenuItemMatcher()
- .string_attribute("x-canonical-previous-action","indicator.previous.testplayer1.desktop")
- .string_attribute("x-canonical-play-action","indicator.play.testplayer1.desktop")
- .string_attribute("x-canonical-next-action","indicator.next.testplayer1.desktop")
- .string_attribute("x-canonical-type","com.canonical.unity.playback-item")
- )
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- )
- ).match());
-}
-
-TEST_F(TestIndicator, DesktopMprisPlayerButtonsState)
-{
- double INITIAL_VOLUME = 0.0;
-
- ASSERT_NO_THROW(startAccountsService());
- EXPECT_TRUE(clearGSettingsPlayers());
- ASSERT_NO_THROW(startPulseDesktop());
-
- // initialize volumes in pulseaudio
- EXPECT_FALSE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
- EXPECT_TRUE(setSinkVolume(INITIAL_VOLUME));
-
- // start the test player
- EXPECT_TRUE(startTestMprisPlayer("testplayer1"));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- // check that the player is added
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher().checkbox()
- .label("Mute")
- )
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher()
- .action("indicator.testplayer1.desktop")
- .label("TestPlayer1")
- .themed_icon("icon", {"testplayer"})
- .string_attribute("x-canonical-type", "com.canonical.unity.media-player")
- )
- .item(mh::MenuItemMatcher()
- .string_attribute("x-canonical-previous-action","indicator.previous.testplayer1.desktop")
- .string_attribute("x-canonical-play-action","indicator.play.testplayer1.desktop")
- .string_attribute("x-canonical-next-action","indicator.next.testplayer1.desktop")
- .string_attribute("x-canonical-type","com.canonical.unity.playback-item")
- )
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- )
- ).match());
-
- // change the state of CanGoNext
- EXPECT_TRUE(setTestMprisPlayerProperty("testplayer1", "CanGoNext", false));
-
- // verify that the action changes
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher().checkbox()
- .label("Mute")
- )
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher()
- .action("indicator.testplayer1.desktop")
- .label("TestPlayer1")
- .themed_icon("icon", {"testplayer"})
- .string_attribute("x-canonical-type", "com.canonical.unity.media-player")
- )
- .item(mh::MenuItemMatcher()
- .string_attribute("x-canonical-previous-action","indicator.previous.testplayer1.desktop")
- .string_attribute("x-canonical-play-action","indicator.play.testplayer1.desktop")
- .attribute_not_set("x-canonical-next-action")
- .string_attribute("x-canonical-type","com.canonical.unity.playback-item")
- )
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- )
- ).match());
-
-
- // change the state of CanGoPrevious
- EXPECT_TRUE(setTestMprisPlayerProperty("testplayer1", "CanGoPrevious", false));
-
- // verify that the action changes
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher().checkbox()
- .label("Mute")
- )
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher()
- .action("indicator.testplayer1.desktop")
- .label("TestPlayer1")
- .themed_icon("icon", {"testplayer"})
- .string_attribute("x-canonical-type", "com.canonical.unity.media-player")
- )
- .item(mh::MenuItemMatcher()
- .attribute_not_set("x-canonical-previous-action")
- .string_attribute("x-canonical-play-action","indicator.play.testplayer1.desktop")
- .attribute_not_set("x-canonical-next-action")
- .string_attribute("x-canonical-type","com.canonical.unity.playback-item")
- )
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- )
- ).match());
-
- // set back both to true
- EXPECT_TRUE(setTestMprisPlayerProperty("testplayer1", "CanGoNext", true));
- EXPECT_TRUE(setTestMprisPlayerProperty("testplayer1", "CanGoPrevious", true));
-
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher().checkbox()
- .label("Mute")
- )
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher()
- .action("indicator.testplayer1.desktop")
- .label("TestPlayer1")
- .themed_icon("icon", {"testplayer"})
- .string_attribute("x-canonical-type", "com.canonical.unity.media-player")
- )
- .item(mh::MenuItemMatcher()
- .string_attribute("x-canonical-previous-action","indicator.previous.testplayer1.desktop")
- .string_attribute("x-canonical-play-action","indicator.play.testplayer1.desktop")
- .string_attribute("x-canonical-next-action","indicator.next.testplayer1.desktop")
- .string_attribute("x-canonical-type","com.canonical.unity.playback-item")
- )
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- )
- ).match());
-}
-
-TEST_F(TestIndicator, DesktopChangeRoleVolume)
-{
- double INITIAL_VOLUME = 0.0;
-
- ASSERT_NO_THROW(startAccountsService());
- ASSERT_NO_THROW(startPulseDesktop());
-
- // initialize volumes in pulseaudio
- // expect false for stream restore, because the module
- // is not loaded in the desktop pulseaudio instance
- EXPECT_FALSE(setStreamRestoreVolume("mutimedia", INITIAL_VOLUME));
- EXPECT_FALSE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
-
- EXPECT_TRUE(setSinkVolume(INITIAL_VOLUME));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- // Generate a random volume
- QTime now = QTime::currentTime();
- qsrand(now.msec());
- int randInt = qrand() % 100;
- double randomVolume = randInt / 100.0;
-
- // play a test sound, it should NOT change the role in the indicator
- EXPECT_TRUE(startTestSound("multimedia"));
- EXPECT_FALSE(waitVolumeChangedInIndicator());
-
- // set the random volume
- EXPECT_TRUE(setSinkVolume(randomVolume));
- if (randomVolume != INITIAL_VOLUME)
- {
- EXPECT_TRUE(waitVolumeChangedInIndicator());
- }
-
- // check the indicator
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::starts_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(mh::MenuItemMatcher().checkbox()
- .label("Mute")
- )
- .item(volumeSlider(randomVolume, "Volume"))
- )
- ).match());
-
- // check that the last item is Sound Settings
- EXPECT_MATCHRESULT(mh::MenuMatcher(desktopParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::ends_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- )
- ).match());
-
- // stop the test sound, the role should change again to alert
- stopTestSound();
-
- // although we were playing something in the multimedia role
- // the server does not have the streamrestore module, so
- // the volume does not change (the role does not change)
- EXPECT_FALSE(waitVolumeChangedInIndicator());
-
- // check the initial volume for the alert role
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::starts_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(randomVolume, "Volume"))
- )
- ).match());
-
- // check that the last item is Sound Settings
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .mode(mh::MenuItemMatcher::Mode::ends_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- .action("indicator.phone-settings")
- )
- ).match());
-}
-
-TEST_F(TestIndicator, PhoneNotificationVolume)
-{
- double INITIAL_VOLUME = 0.0;
-
- QSignalSpy notificationsSpy(&notificationsMockInterface(),
- SIGNAL(MethodCalled(const QString &, const QVariantList &)));
-
- ASSERT_NO_THROW(startAccountsService());
- EXPECT_TRUE(clearGSettingsPlayers());
- ASSERT_NO_THROW(startPulsePhone());
-
- // initialize volumes in pulseaudio
- EXPECT_TRUE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- // check the initial state
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::all)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(INITIAL_VOLUME, "Volume"))
- )
- .item(mh::MenuItemMatcher()
- .label("Sound Settings…")
- .action("indicator.phone-settings")
- )
- ).match());
-
- // change volume to 1.0
- setActionValue("volume", QVariant::fromValue(1.0));
-
- WAIT_FOR_SIGNALS(notificationsSpy, 3);
-
- // the first time we also have the calls to
- // GetServerInformation and GetCapabilities
- checkNotificationWithNoArgs("GetServerInformation", notificationsSpy.at(0));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(1));
- checkVolumeNotification(1.0, "Speakers", false, notificationsSpy.at(2));
-
- notificationsSpy.clear();
- setActionValue("volume", QVariant::fromValue(0.0));
-
- WAIT_FOR_SIGNALS(notificationsSpy, 2)
-
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkVolumeNotification(0.0, "Speakers", false, notificationsSpy.at(1));
-
- notificationsSpy.clear();
- setActionValue("volume", QVariant::fromValue(0.5));
-
- WAIT_FOR_SIGNALS(notificationsSpy, 2)
-
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkVolumeNotification(0.5, "Speakers", false, notificationsSpy.at(1));
-}
-
-TEST_F(TestIndicator, PhoneNotificationWarningVolume)
-{
- double INITIAL_VOLUME = 0.0;
-
- QSignalSpy notificationsSpy(&notificationsMockInterface(),
- SIGNAL(MethodCalled(const QString &, const QVariantList &)));
-
- ASSERT_NO_THROW(startAccountsService());
- ASSERT_NO_THROW(startPulsePhone());
-
- // initialize volumes in pulseaudio
- EXPECT_TRUE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
- EXPECT_TRUE(setStreamRestoreVolume("multimedia", INITIAL_VOLUME));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- // activate the headphones
- EXPECT_TRUE(activateHeadphones(true));
-
- // set an initial volume to the alert role
- setStreamRestoreVolume("alert", 1.0);
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- // play a test sound, it should change the role in the indicator
- EXPECT_TRUE(startTestSound("multimedia"));
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- WAIT_FOR_SIGNALS(notificationsSpy, 3);
- // the first time we also have the calls to
- // GetServerInformation and GetCapabilities
- checkNotificationWithNoArgs("GetServerInformation", notificationsSpy.at(0));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(1));
- checkVolumeNotification(0.0, "Headphones", false, notificationsSpy.at(2));
- notificationsSpy.clear();
-
- // change volume to 0.3... no warning should be emitted
- setActionValue("volume", QVariant::fromValue(0.3));
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- WAIT_FOR_SIGNALS(notificationsSpy, 2);
-
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkVolumeNotification(0.3, "Headphones", false, notificationsSpy.at(1));
- notificationsSpy.clear();
-
- // change volume to 0.5... no warning should be emitted
- setActionValue("volume", QVariant::fromValue(0.5));
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- WAIT_FOR_SIGNALS(notificationsSpy, 2);
-
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkVolumeNotification(0.5, "Headphones", false, notificationsSpy.at(1));
- notificationsSpy.clear();
-
- // change volume to 1.0... warning should be emitted
- setActionValue("volume", QVariant::fromValue(1.0));
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- WAIT_FOR_SIGNALS(notificationsSpy, 8);
-
- // the notification is sent twice (TODO check why)
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkCloseNotification(1, notificationsSpy.at(1));
- checkHighVolumeNotification(notificationsSpy.at(2));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(3));
- checkCloseNotification(1, notificationsSpy.at(4));
- checkHighVolumeNotification(notificationsSpy.at(5));
-
- // get the last notification ID
- int idNotification = getNotificationID(notificationsSpy.at(5));
- ASSERT_NE(-1, idNotification);
-
- qWarning() << "XGM: id Notification: " << idNotification;
-
- // cancel the dialog
- pressNotificationButton(idNotification, "cancel");
-
- // check that the volume was clamped
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::starts_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(0.74, "Volume (Headphones)"))
- )
- ).match());
-
- // try again...
- notificationsSpy.clear();
-
- qWarning() << "-----------------------------------------------------------";
- // change volume to 1.0... warning should be emitted
- setActionValue("volume", QVariant::fromValue(1.0));
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- WAIT_FOR_SIGNALS(notificationsSpy, 6);
-
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkHighVolumeNotification(notificationsSpy.at(1));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(2));
- checkHighVolumeNotification(notificationsSpy.at(3));
-
- // get the last notification ID
- idNotification = getNotificationID(notificationsSpy.at(1));
- ASSERT_NE(-1, idNotification);
-
- // this time we approve
- pressNotificationButton(idNotification, "ok");
-
- // check that the volume was applied
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::starts_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(1.0, "Volume (Headphones)"))
- .item(mh::MenuItemMatcher()
- .action("indicator.high-volume-warning-item")
- .label("High volume can damage your hearing.")
- )
- )
- ).match());
-
- // after the warning was approved we should be able to modify the volume
- // and don't get the warning
- notificationsSpy.clear();
-
- // change volume to 0.5... no warning should be emitted
- setActionValue("volume", QVariant::fromValue(0.5));
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- WAIT_FOR_SIGNALS(notificationsSpy, 6);
-
- // check the notification TODO check why the sound indicator sends it twice
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkCloseNotification(idNotification, notificationsSpy.at(1));
- checkVolumeNotification(0.5, "Headphones", false, notificationsSpy.at(2));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(3));
- checkCloseNotification(idNotification, notificationsSpy.at(4));
- checkVolumeNotification(0.5, "Headphones", false, notificationsSpy.at(5));
-
- // check that the volume was applied
- // and that we don't have the warning item
- EXPECT_MATCHRESULT(mh::MenuMatcher(phoneParameters())
- .item(mh::MenuItemMatcher()
- .action("indicator.root")
- .string_attribute("x-canonical-type", "com.canonical.indicator.root")
- .string_attribute("x-canonical-scroll-action", "indicator.scroll")
- .string_attribute("x-canonical-secondary-action", "indicator.mute")
- .string_attribute("submenu-action", "indicator.indicator-shown")
- .mode(mh::MenuItemMatcher::Mode::starts_with)
- .submenu()
- .item(mh::MenuItemMatcher()
- .section()
- .item(silentModeSwitch(false))
- .item(volumeSlider(0.5, "Volume (Headphones)"))
- )
- ).match());
-
- // now set high volume again, we should not get the warning dialog
- // as we already approved it
- notificationsSpy.clear();
-
- setActionValue("volume", QVariant::fromValue(1.0));
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- WAIT_FOR_SIGNALS(notificationsSpy, 4);
-
- // check the notification TODO check why the sound indicator sends it twice
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkVolumeNotification(1.0, "Headphones", true, notificationsSpy.at(1));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(2));
- checkVolumeNotification(1.0, "Headphones", true, notificationsSpy.at(3));
-}
-
-
-TEST_F(TestIndicator, PhoneNotificationWarningVolumeAlertMode)
-{
- double INITIAL_VOLUME = 0.0;
-
- QSignalSpy notificationsSpy(&notificationsMockInterface(),
- SIGNAL(MethodCalled(const QString &, const QVariantList &)));
-
- ASSERT_NO_THROW(startAccountsService());
- ASSERT_NO_THROW(startPulsePhone());
-
- // initialize volumes in pulseaudio
- EXPECT_TRUE(setStreamRestoreVolume("alert", INITIAL_VOLUME));
- EXPECT_TRUE(setStreamRestoreVolume("multimedia", INITIAL_VOLUME));
-
- // start now the indicator, so it picks the new volumes
- ASSERT_NO_THROW(startIndicator());
-
- // activate the headphones
- EXPECT_TRUE(activateHeadphones(true));
-
- // set an initial volume to the alert role
- setStreamRestoreVolume("alert", 1.0);
- EXPECT_TRUE(waitVolumeChangedInIndicator());
-
- // change volume to 0.0... no warning should be emitted
- setActionValue("volume", QVariant::fromValue(0.0));
-
- WAIT_FOR_SIGNALS(notificationsSpy, 5);
-
- // the first time we also have the calls to
- // GetServerInformation and GetCapabilities
- checkNotificationWithNoArgs("GetServerInformation", notificationsSpy.at(0));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(1));
- checkVolumeNotification(0.0, "Headphones", false, notificationsSpy.at(2));
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(3));
- checkVolumeNotification(0.0, "Headphones", false, notificationsSpy.at(4));
- notificationsSpy.clear();
-
- // change volume to 0.5... no warning should be emitted
- setActionValue("volume", QVariant::fromValue(0.5));
-
- WAIT_FOR_SIGNALS(notificationsSpy, 2);
-
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkVolumeNotification(0.5, "Headphones", false, notificationsSpy.at(1));
- notificationsSpy.clear();
-
- // change volume to 1.0... no warning should be emitted, we are in alert mode
- setActionValue("volume", QVariant::fromValue(1.0));
-
- WAIT_FOR_SIGNALS(notificationsSpy, 2);
-
- checkNotificationWithNoArgs("GetCapabilities", notificationsSpy.at(0));
- checkVolumeNotification(1.0, "Headphones", false, notificationsSpy.at(1));
- notificationsSpy.clear();
-}
-
-TEST_F(TestIndicator, PhoneNotificationHeadphoneSpeakerWiredLabels)
-{
- checkPortDevicesLabels(WIRED, WIRED);
-}
-
-TEST_F(TestIndicator, PhoneNotificationHeadphoneSpeakerBluetoothLabels)
-{
- checkPortDevicesLabels(BLUETOOTH, BLUETOOTH);
-}
-
-TEST_F(TestIndicator, PhoneNotificationHeadphoneSpeakerUSBLabels)
-{
- checkPortDevicesLabels(USB, USB);
-}
-
-TEST_F(TestIndicator, PhoneNotificationHeadphoneSpeakerHDMILabels)
-{
- checkPortDevicesLabels(HDMI, HDMI);
-}
-
-} // namespace