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()