File indexing completed on 2024-05-12 05:36:59

0001 #!/usr/bin/env python3
0002 
0003 # SPDX-FileCopyrightText: 2023 Fushan Wen <qydwhotmail@gmail.com>
0004 # SPDX-License-Identifier: MIT
0005 
0006 import os
0007 import shutil
0008 import unittest
0009 from typing import Final
0010 
0011 from appium import webdriver
0012 from appium.options.common.base import AppiumOptions
0013 from appium.webdriver.common.appiumby import AppiumBy
0014 from gi.repository import GLib
0015 
0016 KDE_VERSION: Final = 6
0017 KCM_ID: Final = "kcm_soundtheme"
0018 
0019 
0020 class KCMSoundThemeTest(unittest.TestCase):
0021     """
0022     Tests for kcm_soundtheme
0023     """
0024 
0025     driver: webdriver.Remote
0026 
0027     @classmethod
0028     def setUpClass(cls) -> None:
0029         """
0030         Opens the KCM and initialize the webdriver
0031         """
0032         # In CI there is no sound theme by default, so manually install one
0033         system_data_dirs: Final[list[str]] = GLib.get_system_data_dirs()
0034         freedesktop_sound_theme_installed: bool = False
0035         for system_data_dir in system_data_dirs:
0036             if os.path.exists(os.path.join(system_data_dir, "sounds", "freedesktop", "index.theme")):
0037                 freedesktop_sound_theme_installed = True
0038                 break
0039 
0040         if not freedesktop_sound_theme_installed:
0041             user_data_dir: Final[str] = GLib.get_user_data_dir()
0042             sounds_folder: Final = os.path.join(user_data_dir, "sounds")
0043             if not os.path.exists(sounds_folder):
0044                 os.mkdir(sounds_folder)
0045                 cls.addClassCleanup(lambda: shutil.rmtree(sounds_folder))
0046 
0047             fdo_sound_theme_folder: Final = os.path.join(user_data_dir, "sounds", "freedesktop")
0048             if not os.path.exists(fdo_sound_theme_folder):
0049                 shutil.copytree("../kcms/soundtheme/autotests/data/freedesktop", fdo_sound_theme_folder)
0050                 cls.addClassCleanup(lambda: shutil.rmtree(fdo_sound_theme_folder))
0051 
0052         options = AppiumOptions()
0053         options.set_capability("app", f"kcmshell{KDE_VERSION} {KCM_ID}")
0054         options.set_capability("timeouts", {'implicit': 10000})
0055         cls.driver = webdriver.Remote(command_executor='http://127.0.0.1:4723', options=options)
0056 
0057     def tearDown(self) -> None:
0058         """
0059         Take screenshot when the current test fails
0060         """
0061         if not self._outcome.result.wasSuccessful():
0062             self.driver.get_screenshot_as_file(f"failed_test_shot_{KCM_ID}_#{self.id()}.png")
0063 
0064     @classmethod
0065     def tearDownClass(cls) -> None:
0066         """
0067         Make sure to terminate the driver again, lest it dangles.
0068         """
0069         cls.driver.quit()
0070 
0071     def test_0_open(self) -> None:
0072         """
0073         Tests the KCM can be opened
0074         """
0075         self.driver.find_element(AppiumBy.NAME, "FreeDesktop")
0076         self.driver.find_element(AppiumBy.NAME, "Fallback sound theme from freedesktop.org")
0077         self.driver.find_element(AppiumBy.NAME, "Preview sounds:")
0078 
0079 
0080 if __name__ == '__main__':
0081     unittest.main()