]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-133346: add tests for `_colorize.Theme` (GH-139687) (#140622)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 26 Oct 2025 12:49:20 +0000 (13:49 +0100)
committerGitHub <noreply@github.com>
Sun, 26 Oct 2025 12:49:20 +0000 (13:49 +0100)
* gh-133346: add tests for `_colorize.Theme` (GH-139687)
(cherry picked from commit 37827c17526b7d3e1275861a1207be71aef6b284)

Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Lib/test/test__colorize.py

index b2f0bb1386fe5b486368119c3437f9900fdbda76..3ac89987f91e44eb5c0e262d0e32ef08ac35aa52 100644 (file)
@@ -1,4 +1,5 @@
 import contextlib
+import dataclasses
 import io
 import sys
 import unittest
@@ -21,6 +22,41 @@ def supports_virtual_terminal():
         return contextlib.nullcontext()
 
 
+class TestTheme(unittest.TestCase):
+
+    def test_attributes(self):
+        # only theme configurations attributes by default
+        for field in dataclasses.fields(_colorize.Theme):
+            with self.subTest(field.name):
+                self.assertIsSubclass(field.type, _colorize.ThemeSection)
+                self.assertIsNotNone(field.default_factory)
+
+    def test_copy_with(self):
+        theme = _colorize.Theme()
+
+        copy = theme.copy_with()
+        self.assertEqual(theme, copy)
+
+        unittest_no_colors = _colorize.Unittest.no_colors()
+        copy = theme.copy_with(unittest=unittest_no_colors)
+        self.assertEqual(copy.argparse, theme.argparse)
+        self.assertEqual(copy.syntax, theme.syntax)
+        self.assertEqual(copy.traceback, theme.traceback)
+        self.assertEqual(copy.unittest, unittest_no_colors)
+
+    def test_no_colors(self):
+        # idempotence test
+        theme_no_colors = _colorize.Theme().no_colors()
+        theme_no_colors_no_colors = theme_no_colors.no_colors()
+        self.assertEqual(theme_no_colors, theme_no_colors_no_colors)
+
+        # attributes check
+        for section in dataclasses.fields(_colorize.Theme):
+            with self.subTest(section.name):
+                section_theme = getattr(theme_no_colors, section.name)
+                self.assertEqual(section_theme, section.type.no_colors())
+
+
 class TestColorizeFunction(unittest.TestCase):
     def test_colorized_detection_checks_for_environment_variables(self):
         def check(env, fallback, expected):