/* * 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 . * * Author: Xavi Garcia */ #pragma once #include #include #include #include #include #include #include class MenusInterface; class DBusPulseVolume; class DBusPropertiesInterface; class AccountsInterface; class QSignalSpy; #define WAIT_FOR_SIGNALS(signalSpy, signalsExpected)\ {\ while (signalSpy.size() < signalsExpected)\ {\ ASSERT_TRUE(signalSpy.wait());\ }\ ASSERT_EQ(signalsExpected, signalSpy.size());\ } #define WAIT_AT_LEAST_SIGNALS(signalSpy, signalsExpected)\ {\ while (signalSpy.size() < signalsExpected)\ {\ ASSERT_TRUE(signalSpy.wait());\ }\ ASSERT_TRUE(signalsExpected <= signalSpy.size());\ } class IndicatorSoundTestBase: public testing::Test { public: IndicatorSoundTestBase(); ~IndicatorSoundTestBase(); enum DevicePortType { WIRED, BLUETOOTH, USB, HDMI }; protected: void SetUp() override; void TearDown() override; void startIndicator(); void startPulseDesktop(DevicePortType speakerPort=WIRED, DevicePortType headphonesPort=WIRED); void startPulsePhone(DevicePortType speakerPort=WIRED, DevicePortType headphonesPort=WIRED); void startAccountsService(); bool clearGSettingsPlayers(); bool resetAllowAmplifiedVolume(); bool runProcess(QProcess&); bool startTestMprisPlayer(QString const& playerName); bool stopTestMprisPlayer(QString const& playerName); int findRunningTestMprisPlayer(QString const& playerName); bool setTestMprisPlayerProperty(QString const &testPlayer, QString const &property, bool value); bool setStreamRestoreVolume(QString const &role, double volume); bool setSinkVolume(double volume); bool startTestSound(QString const &role); void stopTestSound(); static std::shared_ptr volume_variant(double volume); static lomiri::gmenuharness::MenuMatcher::Parameters desktopParameters(); static lomiri::gmenuharness::MenuMatcher::Parameters phoneParameters(); static lomiri::gmenuharness::MenuItemMatcher volumeSlider(double volume, QString const &label); static lomiri::gmenuharness::MenuItemMatcher micSlider(double volume, QString const &label); static lomiri::gmenuharness::MenuItemMatcher silentModeSwitch(bool toggled); bool waitMenuChange(); bool initializeMenuChangedSignal(); bool waitVolumeChangedInIndicator(); void initializeAccountsInterface(); OrgFreedesktopDBusMockInterface& notificationsMockInterface(); bool setActionValue(const QString & action, QVariant value); bool pressNotificationButton(int id, const QString & button); bool qDBusArgumentToMap(QVariant const& variant, QVariantMap& map); void checkVolumeNotification(double volume, QString const& label, bool isLoud, QVariantList call); void checkHighVolumeNotification(QVariantList call); void checkCloseNotification(int id, QVariantList call); void checkNotificationWithNoArgs(QString const& method, QVariantList call); int getNotificationID(QVariantList call); bool activateHeadphones(bool headphonesActive); bool plugExternalMic(bool activate); bool setDefaultSinkOrSource(bool runForSinks, const QString & active, const QStringList & inactive); QString getDevicePortString(DevicePortType port); void checkPortDevicesLabels(DevicePortType speakerPort, DevicePortType headphonesPort); bool setVolumeUntilAccountsIsConnected(double volume); QVariantList getActionValue(QString const &action); qlonglong getVolumeSyncValue(bool *isValid = nullptr); QStringList getRootIconValue(bool *isValid = nullptr); float getVolumeValue(bool *isValid = nullptr); static QVariant waitPropertyChanged(QSignalSpy * signalSpy, QString property); QVariant waitLastRunningPlayerChanged(); QtDBusTest::DBusTestRunner dbusTestRunner; QtDBusMock::DBusMock dbusMock; QtDBusTest::DBusServicePtr indicator; QtDBusTest::DBusServicePtr pulseaudio; QtDBusTest::DBusServicePtr accountsService; QProcess testSoundProcess; QProcess testPlayer1; struct TestPlayer { std::shared_ptr process; QString name; }; QVector testPlayers; std::unique_ptr menu_interface_; std::unique_ptr accounts_interface_; std::unique_ptr main_accounts_interface_; std::unique_ptr signal_spy_volume_changed_; std::unique_ptr signal_spy_menu_changed_; };