Back to Repositories

Testing Column Layout Rendering Implementation in Textualize/rich

This test suite validates the Columns component functionality in the Rich library, focusing on various column layout configurations and rendering options. The tests verify column formatting, expansion, directionality, and width constraints.

Test Coverage Overview

The test suite provides comprehensive coverage of the Columns component’s core features.

  • Tests empty column initialization
  • Validates optimal column layout and spacing
  • Verifies column expansion behavior
  • Tests column-first ordering and right-to-left display
  • Validates equal-width column distribution
  • Verifies fixed-width column constraints

Implementation Analysis

The testing approach uses a systematic verification of column rendering configurations through Console output comparison. The implementation leverages StringIO for output capture and explicit width constraints to ensure consistent rendering across environments.

Key patterns include:
  • Direct rendering validation against expected string output
  • Comprehensive configuration permutations
  • Explicit console width control

Technical Details

Testing infrastructure includes:

  • Python’s built-in io.StringIO for output capture
  • Rich’s Console class with controlled width settings
  • Custom render() function for output generation
  • Assert-based validation against expected string output

Best Practices Demonstrated

The test implementation showcases several testing best practices for UI component validation.

  • Isolated test environment with controlled console parameters
  • Comprehensive feature coverage through systematic configuration testing
  • Explicit expected output definition
  • Clean separation of rendering and verification logic

textualize/rich

tests/test_columns.py

            
# encoding=utf-8

import io

from rich.columns import Columns
from rich.console import Console

COLUMN_DATA = [
    "Ursus americanus",
    "American buffalo",
    "Bison bison",
    "American crow",
    "Corvus brachyrhynchos",
    "American marten",
    "Martes americana",
    "American racer",
    "Coluber constrictor",
    "American woodcock",
    "Scolopax minor",
    "Anaconda (unidentified)",
    "Eunectes sp.",
    "Andean goose",
    "Chloephaga melanoptera",
    "Ant",
    "Anteater, australian spiny",
    "Tachyglossus aculeatus",
    "Anteater, giant",
]


def render():
    console = Console(file=io.StringIO(), width=100, legacy_windows=False)

    console.rule("empty")
    empty_columns = Columns([])
    console.print(empty_columns)
    columns = Columns(COLUMN_DATA)
    columns.add_renderable("Myrmecophaga tridactyla")
    console.rule("optimal")
    console.print(columns)
    console.rule("optimal, expand")
    columns.expand = True
    console.print(columns)
    console.rule("column first, optimal")
    columns.column_first = True
    columns.expand = False
    console.print(columns)
    console.rule("column first, right to left")
    columns.right_to_left = True
    console.print(columns)
    console.rule("equal columns, expand")
    columns.equal = True
    columns.expand = True
    console.print(columns)
    console.rule("fixed width")
    columns.width = 16
    columns.expand = False
    console.print(columns)
    console.print()
    render_result = console.file.getvalue()
    return render_result


def test_render():
    expected = "────────────────────────────────────────────── empty ───────────────────────────────────────────────
───────────────────────────────────────────── optimal ──────────────────────────────────────────────
Ursus americanus           American buffalo       Bison bison            American crow          
Corvus brachyrhynchos      American marten        Martes americana       American racer         
Coluber constrictor        American woodcock      Scolopax minor         Anaconda (unidentified)
Eunectes sp.               Andean goose           Chloephaga melanoptera Ant                    
Anteater, australian spiny Tachyglossus aculeatus Anteater, giant        Myrmecophaga tridactyla
───────────────────────────────────────── optimal, expand ──────────────────────────────────────────
Ursus americanus             American buffalo        Bison bison             American crow          
Corvus brachyrhynchos        American marten         Martes americana        American racer         
Coluber constrictor          American woodcock       Scolopax minor          Anaconda (unidentified)
Eunectes sp.                 Andean goose            Chloephaga melanoptera  Ant                    
Anteater, australian spiny   Tachyglossus aculeatus  Anteater, giant         Myrmecophaga tridactyla
────────────────────────────────────── column first, optimal ───────────────────────────────────────
Ursus americanus      American marten     Scolopax minor          Ant                       
American buffalo      Martes americana    Anaconda (unidentified) Anteater, australian spiny
Bison bison           American racer      Eunectes sp.            Tachyglossus aculeatus    
American crow         Coluber constrictor Andean goose            Anteater, giant           
Corvus brachyrhynchos American woodcock   Chloephaga melanoptera  Myrmecophaga tridactyla   
─────────────────────────────────── column first, right to left ────────────────────────────────────
Ant                        Scolopax minor          American marten     Ursus americanus     
Anteater, australian spiny Anaconda (unidentified) Martes americana    American buffalo     
Tachyglossus aculeatus     Eunectes sp.            American racer      Bison bison          
Anteater, giant            Andean goose            Coluber constrictor American crow        
Myrmecophaga tridactyla    Chloephaga melanoptera  American woodcock   Corvus brachyrhynchos
────────────────────────────────────── equal columns, expand ───────────────────────────────────────
Chloephaga melanoptera                American racer                    Ursus americanus            
Ant                                   Coluber constrictor               American buffalo            
Anteater, australian spiny            American woodcock                 Bison bison                 
Tachyglossus aculeatus                Scolopax minor                    American crow               
Anteater, giant                       Anaconda (unidentified)           Corvus brachyrhynchos       
Myrmecophaga tridactyla               Eunectes sp.                      American marten             
                                      Andean goose                      Martes americana            
─────────────────────────────────────────── fixed width ────────────────────────────────────────────
Anteater,         Eunectes sp.     Coluber          Corvus           Ursus americanus 
australian spiny                   constrictor      brachyrhynchos                    
Tachyglossus      Andean goose     American         American marten  American buffalo 
aculeatus                          woodcock                                           
Anteater, giant   Chloephaga       Scolopax minor   Martes americana Bison bison      
                  melanoptera                                                         
Myrmecophaga      Ant              Anaconda         American racer   American crow    
tridactyla                         (unidentified)                                     

"
    assert render() == expected


if __name__ == "__main__":
    result = render()
    print(result)
    print(repr(result))