blob: 56968fd3079b318e74301c93c55f2a263a847faf [file] [log] [blame]
#!/usr/bin/python3
# SPDX-License-Identifier: MIT
"""
This module contains unit tests for the display functions in the amd-debug-tools package.
"""
import logging
import unittest
from unittest.mock import patch, MagicMock
from amd_debug.display import Display
class TestDisplay(unittest.TestCase):
"""Unit tests for the Display class in amd-debug-tools"""
@classmethod
def setUpClass(cls):
logging.basicConfig(filename="/dev/null", level=logging.DEBUG)
@patch("amd_debug.display.Context")
@patch("amd_debug.display.read_file")
@patch("os.path.exists")
def test_display_initialization(self, mock_exists, mock_read_file, mock_context):
"""Test the Display class initialization and EDID retrieval"""
# Mock the pyudev Context and its list_devices method
mock_device = MagicMock()
mock_device.device_path = "/devices/card0"
mock_device.sys_path = "/sys/devices/card0"
mock_device.sys_name = "card0"
mock_context.return_value.list_devices.return_value = [mock_device]
# Mock os.path.exists and read_file behavior
mock_exists.side_effect = lambda path: "status" in path or "enabled" in path
mock_read_file.side_effect = lambda path: (
"connected" if "status" in path else "enabled"
)
# Initialize the Display class
display = Display()
# Verify the EDID paths are correctly set
expected_edid = {"card0": "/sys/devices/card0/edid"}
self.assertEqual(display.get_edid(), expected_edid)
mock_context.assert_called_once()
@patch("amd_debug.display.Context")
def test_no_connected_displays(self, mock_context):
"""Test the Display class when no connected displays are found"""
# Mock the pyudev Context to return no devices
mock_context.return_value.list_devices.return_value = []
# Initialize the Display class
display = Display()
# Verify the EDID dictionary is empty
self.assertEqual(display.get_edid(), {})
@patch("amd_debug.display.Context")
def test_device_without_card(self, mock_context):
"""Test the Display class with a device that does not have 'card' in the name"""
# Mock the pyudev Context to return a device without 'card' in the name
mock_device = MagicMock()
mock_device.device_path = "/devices/other_device"
mock_device.sys_path = "/sys/devices/other_device"
mock_device.sys_name = "other_device"
mock_context.return_value.list_devices.return_value = [mock_device]
# Initialize the Display class
display = Display()
# Verify the EDID dictionary is empty
self.assertEqual(display.get_edid(), {})
@patch("amd_debug.display.Context")
@patch("amd_debug.display.read_file")
@patch("os.path.exists")
def test_device_not_enabled(self, mock_exists, mock_read_file, mock_context):
"""Test the Display class with a device that is not enabled"""
# Mock the pyudev Context to return a device that is not enabled
mock_device = MagicMock()
mock_device.device_path = "/devices/card0"
mock_device.sys_path = "/sys/devices/card0"
mock_device.sys_name = "card0"
mock_context.return_value.list_devices.return_value = [mock_device]
# Mock os.path.exists and read_file behavior
mock_exists.side_effect = lambda path: "status" in path or "enabled" in path
mock_read_file.side_effect = lambda path: (
"connected" if "status" in path else "disabled"
)
# Initialize the Display class
display = Display()
# Verify the EDID dictionary is empty
self.assertEqual(display.get_edid(), {})
@patch("amd_debug.display.Context")
@patch("amd_debug.display.read_file")
@patch("os.path.exists")
def test_missing_status_file(self, mock_exists, mock_read_file, mock_context):
"""Test the Display class when the status file is missing"""
# Mock the pyudev Context to return a device with a missing status file
mock_device = MagicMock()
mock_device.device_path = "/devices/card0"
mock_device.sys_path = "/sys/devices/card0"
mock_device.sys_name = "card0"
mock_context.return_value.list_devices.return_value = [mock_device]
# Mock os.path.exists to return False for the status file
mock_exists.side_effect = lambda path: "enabled" in path
mock_read_file.side_effect = lambda path: "enabled" if "enabled" in path else ""
# Initialize the Display class
display = Display()
# Verify the EDID dictionary is empty
self.assertEqual(display.get_edid(), {})
@patch("amd_debug.display.Context")
@patch("amd_debug.display.read_file")
@patch("os.path.exists")
def test_status_not_connected(self, mock_exists, mock_read_file, mock_context):
"""Test the Display class when the status file does not indicate connected"""
# Mock the pyudev Context to return a device with a status file that does not indicate connected
mock_device = MagicMock()
mock_device.device_path = "/devices/card0"
mock_device.sys_path = "/sys/devices/card0"
mock_device.sys_name = "card0"
mock_context.return_value.list_devices.return_value = [mock_device]
# Mock os.path.exists and read_file behavior
mock_exists.side_effect = lambda path: "status" in path or "enabled" in path
mock_read_file.side_effect = lambda path: (
"not_connected" if "status" in path else "enabled"
)
# Initialize the Display class
display = Display()
# Verify the EDID dictionary is empty
self.assertEqual(display.get_edid(), {})