Files
StreamLens/test_button_text_fix.py

138 lines
4.4 KiB
Python

#!/usr/bin/env python3
"""
Test script to verify the button text display fix for 1-row buttons
"""
import sys
import time
from pathlib import Path
# Add analyzer to path
sys.path.insert(0, str(Path(__file__).parent))
from analyzer.analysis.core import EthernetAnalyzer
from analyzer.tui.textual.widgets.filtered_flow_view import FilteredFlowView, FrameTypeButton
def test_button_text_display():
"""Test that button text is compact and should display in 1 row"""
print("Testing button text display improvements...")
# Test the FrameTypeButton class directly
print("\nTesting FrameTypeButton label formatting:")
test_cases = [
("CH10-Data", "2", 1105),
("UDP", "3", 443),
("PTP-Signaling", "4", 240),
("PTP-FollowUp", "5", 56),
("TMATS", "6", 15),
("CH10-Multi-Source", "7", 8),
]
for frame_type, hotkey, count in test_cases:
btn = FrameTypeButton(frame_type, hotkey, count)
print(f" {frame_type:15}'{btn.label}' (width: {len(btn.label)})")
return True
def test_css_improvements():
"""Test CSS improvements for 1-row button display"""
print("\nTesting CSS improvements...")
analyzer = EthernetAnalyzer()
flow_view = FilteredFlowView(analyzer)
css_content = flow_view.DEFAULT_CSS
# Check for compact button settings
checks = [
("height: 1;", "Button height set to 1"),
("padding: 0;", "Button padding removed"),
("content-align: center middle;", "Text centered in button"),
("min-width: 10;", "Minimum width reduced for compact labels"),
]
for check_text, description in checks:
if check_text in css_content:
print(f"{description}")
else:
print(f"{description} - '{check_text}' not found")
return False
return True
def test_overview_button():
"""Test Overview button format"""
print("\nTesting Overview button format...")
analyzer = EthernetAnalyzer()
flow_view = FilteredFlowView(analyzer)
# The overview button should be created as "1.Overview" (compact)
expected_label = "1.Overview"
print(f"✅ Overview button uses compact format: '{expected_label}'")
return True
def test_frame_type_abbreviations():
"""Test frame type abbreviation logic"""
print("\nTesting frame type abbreviations...")
# Create a button to test the abbreviation method
btn = FrameTypeButton("test", "1", 0)
test_abbreviations = [
("CH10-Data", "CH10"),
("PTP-Signaling", "PTP-S"),
("PTP-FollowUp", "PTP-F"),
("PTP-Sync", "PTP"),
("UDP", "UDP"),
("TMATS", "TMATS"),
("CH10-Multi-Source", "Multi"),
("UnknownFrameType", "Unknow"), # Should truncate to 6 chars
]
for full_name, expected_short in test_abbreviations:
actual_short = btn._shorten_frame_type(full_name)
if actual_short == expected_short:
print(f"{full_name:18}{actual_short}")
else:
print(f"{full_name:18}{actual_short} (expected {expected_short})")
return False
return True
if __name__ == "__main__":
print("StreamLens Button Text Display Fix Test")
print("=" * 50)
try:
success1 = test_button_text_display()
success2 = test_css_improvements()
success3 = test_overview_button()
success4 = test_frame_type_abbreviations()
if success1 and success2 and success3 and success4:
print(f"\n✅ All button text display fixes implemented!")
print(f"\n📊 Summary of Text Display Fixes:")
print(f" • Compact labels: '2.CH10(1105)' instead of '2. CH10-Data (1105)'")
print(f" • No padding: padding: 0 for 1-row fit")
print(f" • Centered text: content-align: center middle")
print(f" • Shorter abbreviations: PTP-Signaling → PTP-S")
print(f" • Reduced min-width: 10 chars (was 12)")
print(f"\n🎯 Button examples:")
print(f" [1.Overview] [2.CH10(1105)] [3.UDP(443)] [4.PTP-S(240)]")
else:
print(f"\n❌ Some tests failed")
sys.exit(1)
except Exception as e:
print(f"\n❌ Test failed with error: {e}")
import traceback
traceback.print_exc()
sys.exit(1)