Files
Marble-shell-theme/tests/utils/global_theme/test_gdm_theme_prepare.py

118 lines
4.6 KiB
Python

import os.path
import shutil
from unittest import TestCase
from unittest.mock import MagicMock
from scripts import config
from scripts.utils.global_theme.gdm_theme_prepare import GDMThemePrepare
from ..._helpers import create_dummy_file, try_remove_file
class GDMThemePrepareTestCase(TestCase):
def setUp(self):
self.temp_folder = os.path.join(config.temp_tests_folder, "gdm_theme_prepare")
self.main_styles = os.path.join(self.temp_folder, "gnome-shell.css")
self.theme = MagicMock()
self.theme.add_to_start.return_value = None
self.theme.temp_folder = self.temp_folder
self.theme.main_styles = self.main_styles
self.main_styles_destination = os.path.join(self.temp_folder, "gnome-shell-result.css")
create_dummy_file(self.main_styles_destination, "body { background-color: #000; }")
self.files_labeler = MagicMock()
self.theme_prepare = GDMThemePrepare(
theme=self.theme,
theme_file=self.main_styles_destination,
label=None,
files_labeler=self.files_labeler,
)
def tearDown(self):
shutil.rmtree(self.temp_folder, ignore_errors=True)
def test_label_files_calls_labeler(self):
self.theme_prepare.label = "dark"
self.theme_prepare.label_theme()
self.files_labeler.append_label.assert_called_once_with("dark")
def test_label_files_raises_value_error_if_label_none(self):
self.theme_prepare.label = None
with self.assertRaises(ValueError):
self.theme_prepare.label_theme()
def test_remove_keywords_removes_destination_keywords(self):
try_remove_file(self.main_styles_destination)
expected_content = "body { background-color: #000; }"
create_dummy_file(self.main_styles_destination, "body {keyword1 background-color: #000 !important; }")
keywords = ["keyword1", " !important"]
self.theme_prepare.remove_keywords(*keywords)
with open(self.main_styles_destination, 'r') as file:
content = file.read()
self.assertEqual(content, expected_content)
try_remove_file(self.main_styles_destination)
def test_remove_properties_removes_destination_properties(self):
try_remove_file(self.main_styles_destination)
expected_content = "body {\n}\n"
create_dummy_file(self.main_styles_destination, "body {\nbackground-color: #000;\n}")
properties = ["background-color"]
self.theme_prepare.remove_properties(*properties)
with open(self.main_styles_destination, 'r') as file:
actual_content = file.read()
self.assertEqual(expected_content, actual_content)
try_remove_file(self.main_styles_destination)
def test_remove_properties_removes_one_line_properties(self):
try_remove_file(self.main_styles_destination)
expected_content = ""
create_dummy_file(self.main_styles_destination, "body { background-color: #000; }")
properties = ["background-color"]
self.theme_prepare.remove_properties(*properties)
with open(self.main_styles_destination, 'r') as file:
actual_content = file.read()
self.assertEqual(expected_content, actual_content)
try_remove_file(self.main_styles_destination)
def test_prepend_source_styles_prepends_destination_styles(self):
try_remove_file(self.main_styles_destination)
expected_content = "body { background-color: #000; }\n"
create_dummy_file(self.main_styles_destination, "body { background-color: #000; }")
self.theme_prepare.prepend_source_styles("")
called_content: str = self.theme.add_to_start.call_args[0][0]
self.assertTrue(called_content.startswith(expected_content))
try_remove_file(self.main_styles_destination)
def test_prepend_source_styles_adds_trigger(self):
try_remove_file(self.main_styles_destination)
expected_content = "\ntrigger\n"
create_dummy_file(self.main_styles_destination)
trigger = "trigger"
self.theme_prepare.prepend_source_styles(trigger)
called_content: str = self.theme.add_to_start.call_args[0][0]
self.assertTrue(expected_content in called_content)
try_remove_file(self.main_styles_destination)
def test_install_passes_arguments_to_theme(self):
hue = 0
color = "#000000"
sat = 100
destination = os.path.join(self.temp_folder, "destination")
self.theme_prepare.install(hue, color, sat, destination)
self.theme.install.assert_called_once_with(hue, color, sat, destination=destination)