zfish 0.1.10

Ultra-light, zero-dependency Rust CLI framework for building beautiful command-line applications
//! Test edge cases and complex Unicode sequences
//! This verifies the most challenging Unicode rendering scenarios

use zfish::table::{BoxStyle, Table};

fn main() {
    println!("\n๐Ÿงช Edge Case & Complex Unicode Test ๐Ÿงช\n");

    // Test 1: Emoji with skin tone modifiers
    println!("Test 1: Skin Tone Modifiers");
    let mut table1 = Table::new(vec!["Emoji", "Description", "Codepoints"]);
    table1.set_box_style(BoxStyle::Single);
    table1.add_row(vec!["๐Ÿ‘‹", "Wave (neutral)", "U+1F44B"]);
    table1.add_row(vec!["๐Ÿ‘‹๐Ÿป", "Wave (light)", "U+1F44B U+1F3FB"]);
    table1.add_row(vec!["๐Ÿ‘‹๐Ÿผ", "Wave (medium-light)", "U+1F44B U+1F3FC"]);
    table1.add_row(vec!["๐Ÿ‘‹๐Ÿฝ", "Wave (medium)", "U+1F44B U+1F3FD"]);
    table1.add_row(vec!["๐Ÿ‘‹๐Ÿพ", "Wave (medium-dark)", "U+1F44B U+1F3FE"]);
    table1.add_row(vec!["๐Ÿ‘‹๐Ÿฟ", "Wave (dark)", "U+1F44B U+1F3FF"]);
    table1.print();

    // Test 2: Zero-Width Joiner (ZWJ) sequences
    println!("\n\nTest 2: ZWJ Sequences (Compound Emoji)");
    let mut table2 = Table::new(vec!["Emoji", "Description"]);
    table2.set_box_style(BoxStyle::Double);
    table2.add_row(vec!["๐Ÿ‘จโ€๐Ÿ’ป", "Man Technologist"]);
    table2.add_row(vec!["๐Ÿ‘ฉโ€๐Ÿ”ฌ", "Woman Scientist"]);
    table2.add_row(vec!["๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "Family"]);
    table2.add_row(vec!["๐Ÿณ๏ธโ€๐ŸŒˆ", "Rainbow Flag"]);
    table2.add_row(vec!["๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ", "Eye in Speech Bubble"]);
    table2.print();

    // Test 3: Regional Indicator Symbols (Flags)
    println!("\n\nTest 3: Flag Emoji (Regional Indicators)");
    let mut table3 = Table::new(vec!["Flag", "Country", "Indicators"]);
    table3.set_box_style(BoxStyle::Heavy);
    table3.add_row(vec!["๐Ÿ‡บ๐Ÿ‡ธ", "USA", "U+1F1FA U+1F1F8"]);
    table3.add_row(vec!["๐Ÿ‡ฌ๐Ÿ‡ง", "UK", "U+1F1EC U+1F1E7"]);
    table3.add_row(vec!["๐Ÿ‡ฏ๐Ÿ‡ต", "Japan", "U+1F1EF U+1F1F5"]);
    table3.add_row(vec!["๐Ÿ‡จ๐Ÿ‡ณ", "China", "U+1F1E8 U+1F1F3"]);
    table3.add_row(vec!["๐Ÿ‡ฎ๐Ÿ‡ณ", "India", "U+1F1EE U+1F1F3"]);
    table3.print();

    // Test 4: Combining characters
    println!("\n\nTest 4: Combining Diacritical Marks");
    let mut table4 = Table::new(vec!["Base", "Combined", "Description"]);
    table4.set_box_style(BoxStyle::Rounded);
    table4.add_row(vec!["e", "รฉ", "e + acute accent"]);
    table4.add_row(vec!["e", "รช", "e + circumflex"]);
    table4.add_row(vec!["n", "รฑ", "n + tilde"]);
    table4.add_row(vec!["u", "รผ", "u + diaeresis"]);
    table4.add_row(vec!["c", "รง", "c + cedilla"]);
    table4.print();

    // Test 5: Keycap sequences
    println!("\n\nTest 5: Keycap & Special Sequences");
    let mut table5 = Table::new(vec!["Emoji", "Type", "Notes"]);
    table5.set_box_style(BoxStyle::Ascii);
    table5.add_row(vec!["1๏ธโƒฃ", "Keycap", "1 + VS + Combining"]);
    table5.add_row(vec!["#๏ธโƒฃ", "Keycap", "# + VS + Combining"]);
    table5.add_row(vec!["*๏ธโƒฃ", "Keycap", "* + VS + Combining"]);
    table5.add_row(vec!["๐Ÿ”Ÿ", "Number", "Encircled 10"]);
    table5.print();

    // Test 6: Mixed complex scenarios
    println!("\n\nTest 6: Real-World Mixed Content");
    let mut table6 = Table::new(vec!["User", "Status", "Message"]);
    table6.set_box_style(BoxStyle::Single);
    table6.add_row(vec!["Alice ๐Ÿ‘ฉโ€๐Ÿ’ป", "โœ… Online", "Working on ้ …็›ฎ project ๐Ÿš€"]);
    table6.add_row(vec!["Bob ๐Ÿ‘จโ€๐Ÿ”ฌ", "โš ๏ธ Away", "In cafรฉ drinking โ˜•"]);
    table6.add_row(vec!["็”ฐไธญใ•ใ‚“", "โŒ Offline", "ไผš่ญฐไธญใงใ™ ๐Ÿ“"]);
    table6.add_row(vec!["Josรฉ Garcรญa", "โœ… Online", "ยกHola! ๐Ÿ‘‹๐Ÿฝ"]);
    table6.print();

    // Test 7: Emoji sequences vs plain
    println!("\n\nTest 7: Variation Selector Comparison");
    let mut table7 = Table::new(vec!["Plain", "With VS-16", "Notes"]);
    table7.set_box_style(BoxStyle::Double);
    table7.add_row(vec!["โš ", "โš ๏ธ", "Warning sign"]);
    table7.add_row(vec!["โ˜บ", "โ˜บ๏ธ", "Smiling face"]);
    table7.add_row(vec!["โœ‰", "โœ‰๏ธ", "Envelope"]);
    table7.add_row(vec!["โ˜Ž", "โ˜Ž๏ธ", "Telephone"]);
    table7.add_row(vec!["โœ", "โœ๏ธ", "Pencil"]);
    table7.print();

    println!("\nโœ… All edge case tests completed successfully!");
    println!("   Zero dependencies - Pure Rust implementation!");
    println!("   Based on Unicode UAX #11 (East Asian Width)");
    println!("   Handles: Emoji, ZWJ, VS, Modifiers, Combining Marks\n");
}