Files
2026-08-22 20:34:42 +02:00

66 lines
2.5 KiB
Python

"""Prüft die Formataushandlung nach dem Wi-Fi-Display-Standard."""
import os
import sys
import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from wfd import formats
class FormatTest(unittest.TestCase):
# So antwortet ein handelsüblicher Fernseher auf M3.
TYPICAL = "00 00 02 04 0001DEFF 155557FF 00000FFF 00 0000 0000 11 none none"
def test_parses_capabilities(self):
caps = formats.parse_video_formats(self.TYPICAL)
self.assertEqual(1, len(caps))
self.assertEqual(0x02, caps[0].profile)
self.assertEqual(0x04, caps[0].level)
self.assertEqual(0x0001DEFF, caps[0].cea_mask)
def test_chooses_720p30(self):
chosen = formats.choose(formats.parse_video_formats(self.TYPICAL))
self.assertEqual((1280, 720, 30), (chosen.width, chosen.height, chosen.fps))
def test_respects_height_limit(self):
caps = formats.parse_video_formats(self.TYPICAL)
chosen = formats.choose(caps, max_height=480)
self.assertEqual(480, chosen.height)
def test_falls_back_to_small_format(self):
caps = formats.parse_video_formats(
"00 00 01 02 00000003 00000000 00000000 00 0000 0000 00 none none")
chosen = formats.choose(caps)
self.assertEqual((640, 480), (chosen.width, chosen.height))
def test_no_common_format(self):
caps = formats.parse_video_formats(
"00 00 01 02 00000000 00000000 00000000 00 0000 0000 00 none none")
self.assertIsNone(formats.choose(caps))
def test_never_picks_interlaced(self):
# Nur interlaced-Bits gesetzt: 2, 4, 9, 14
mask = (1 << 2) | (1 << 4) | (1 << 9) | (1 << 14)
caps = formats.parse_video_formats(
f"00 00 01 02 {mask:08X} 00000000 00000000 00 0000 0000 00 none none")
self.assertIsNone(formats.choose(caps))
def test_selection_announces_exactly_one_format(self):
selection = formats.build_selection(formats.CEA[5], 0x02, 0x04)
fields = selection.split()
self.assertEqual(13, len(fields))
self.assertEqual(1 << 5, int(fields[4], 16))
self.assertEqual(1, bin(int(fields[4], 16)).count("1"))
self.assertEqual(["none", "none"], fields[11:13])
def test_reads_rtp_port(self):
self.assertEqual(19000, formats.parse_rtp_port("RTP/AVP/UDP;unicast 19000 0 mode=play"))
self.assertEqual(0, formats.parse_rtp_port(None))
if __name__ == "__main__":
unittest.main()