| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  | import contextlib | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | import unittest.mock | 
					
						
							|  |  |  | import _colorize | 
					
						
							| 
									
										
										
										
											2025-01-22 21:09:51 +02:00
										 |  |  | from test.support import force_not_colorized, make_clean_env | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | ORIGINAL_CAN_COLORIZE = _colorize.can_colorize | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def setUpModule(): | 
					
						
							| 
									
										
										
										
											2025-01-21 18:14:24 +02:00
										 |  |  |     _colorize.can_colorize = lambda *args, **kwargs: False | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def tearDownModule(): | 
					
						
							|  |  |  |     _colorize.can_colorize = ORIGINAL_CAN_COLORIZE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestColorizeFunction(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2025-01-22 21:09:51 +02:00
										 |  |  |     def setUp(self): | 
					
						
							|  |  |  |         # Remove PYTHON* environment variables to isolate from local user | 
					
						
							|  |  |  |         # settings and simulate running with `-E`. Such variables should be | 
					
						
							|  |  |  |         # added to test methods later to patched os.environ. | 
					
						
							|  |  |  |         patcher = unittest.mock.patch("os.environ", new=make_clean_env()) | 
					
						
							|  |  |  |         self.addCleanup(patcher.stop) | 
					
						
							|  |  |  |         patcher.start() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  |     @force_not_colorized | 
					
						
							|  |  |  |     def test_colorized_detection_checks_for_environment_variables(self): | 
					
						
							| 
									
										
										
										
											2024-12-15 09:41:11 +01:00
										 |  |  |         flags = unittest.mock.MagicMock(ignore_environment=False) | 
					
						
							|  |  |  |         with (unittest.mock.patch("os.isatty") as isatty_mock, | 
					
						
							| 
									
										
										
										
											2025-01-21 18:14:24 +02:00
										 |  |  |               unittest.mock.patch("sys.stdout") as stdout_mock, | 
					
						
							| 
									
										
										
										
											2024-12-15 09:41:11 +01:00
										 |  |  |               unittest.mock.patch("sys.stderr") as stderr_mock, | 
					
						
							|  |  |  |               unittest.mock.patch("sys.flags", flags), | 
					
						
							|  |  |  |               unittest.mock.patch("_colorize.can_colorize", ORIGINAL_CAN_COLORIZE), | 
					
						
							|  |  |  |               (unittest.mock.patch("nt._supports_virtual_terminal", return_value=False) | 
					
						
							|  |  |  |                if sys.platform == "win32" else | 
					
						
							|  |  |  |                contextlib.nullcontext()) as vt_mock): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             isatty_mock.return_value = True | 
					
						
							| 
									
										
										
										
											2025-01-21 18:14:24 +02:00
										 |  |  |             stdout_mock.fileno.return_value = 1 | 
					
						
							|  |  |  |             stdout_mock.isatty.return_value = True | 
					
						
							| 
									
										
										
										
											2024-12-15 09:41:11 +01:00
										 |  |  |             stderr_mock.fileno.return_value = 2 | 
					
						
							|  |  |  |             stderr_mock.isatty.return_value = True | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", {'TERM': 'dumb'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), False) | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", {'PYTHON_COLORS': '1'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), True) | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", {'PYTHON_COLORS': '0'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), False) | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", {'NO_COLOR': '1'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), False) | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", | 
					
						
							|  |  |  |                                      {'NO_COLOR': '1', "PYTHON_COLORS": '1'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), True) | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", {'FORCE_COLOR': '1'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), True) | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", | 
					
						
							|  |  |  |                                      {'FORCE_COLOR': '1', 'NO_COLOR': '1'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), False) | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", | 
					
						
							|  |  |  |                                      {'FORCE_COLOR': '1', "PYTHON_COLORS": '0'}): | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             with unittest.mock.patch("os.environ", {}): | 
					
						
							|  |  |  |                 if sys.platform == "win32": | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  |                     self.assertEqual(_colorize.can_colorize(), False) | 
					
						
							| 
									
										
										
										
											2024-12-15 09:41:11 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |                     vt_mock.return_value = True | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  |                     self.assertEqual(_colorize.can_colorize(), True) | 
					
						
							| 
									
										
										
										
											2024-12-15 09:41:11 +01:00
										 |  |  |                 else: | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  |                     self.assertEqual(_colorize.can_colorize(), True) | 
					
						
							| 
									
										
										
										
											2024-12-15 09:41:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  |                 isatty_mock.return_value = False | 
					
						
							| 
									
										
										
										
											2025-01-21 18:14:24 +02:00
										 |  |  |                 stdout_mock.isatty.return_value = False | 
					
						
							| 
									
										
										
										
											2024-12-15 09:41:11 +01:00
										 |  |  |                 stderr_mock.isatty.return_value = False | 
					
						
							|  |  |  |                 self.assertEqual(_colorize.can_colorize(), False) | 
					
						
							| 
									
										
										
										
											2024-05-01 21:27:06 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     unittest.main() |