tui-piechart 0.3.3

A customizable pie chart widget for Ratatui TUI applications
Documentation
#!/usr/bin/env nu
# Run all Nu test suites in scripts/tests/.
#
# Usage: nu scripts/tests/run_all.nu

def main [] {
    let green  = (ansi green)
    let red    = (ansi red)
    let cyan   = (ansi cyan)
    let bold   = (ansi --escape {attr: b})
    let reset  = (ansi reset)

    let tests_dir = ($env.CURRENT_FILE | path dirname)

    let suites = (
        ls $tests_dir
        | where { |f| ($f.name | path basename) =~ '^test_.*\.nu$' }
        | get name
        | sort
    )

    let total_suites = ($suites | length)

    if $total_suites == 0 {
        print $"($red)No test suites found in ($tests_dir)($reset)"
        exit 1
    }

    print $"($cyan)($bold)════════════════════════════════════════($reset)"
    print $"($cyan)($bold)  tui-piechart — Nu Script Test Runner($reset)"
    print $"($cyan)($bold)════════════════════════════════════════($reset)"
    print $"Found ($total_suites) suite\(s\)"
    print ""

    mut passed_suites  = 0
    mut failed_suites  = 0
    mut suite_results  = []

    for suite in $suites {
        let name = ($suite | path basename)
        print $"($bold)▶ ($name)($reset)"

        let res = (do { nu $suite } | complete)

        # Print the suite's output indented
        for line in ($res.stdout | lines) {
            print $"  ($line)"
        }

        if $res.exit_code == 0 {
            $passed_suites = $passed_suites + 1
            $suite_results = ($suite_results | append { suite: $name, status: "passed" })
        } else {
            # Also print stderr if present
            if not ($res.stderr | is-empty) {
                for line in ($res.stderr | lines) {
                    print $"  ($red)($line)($reset)"
                }
            }
            $failed_suites = $failed_suites + 1
            $suite_results = ($suite_results | append { suite: $name, status: "failed" })
        }

        print ""
    }

    # ── Summary table ─────────────────────────────────────────────────────────
    print $"($cyan)($bold)════════════════════════════════════════($reset)"
    print $"($bold)Summary($reset)"
    print $"($cyan)($bold)════════════════════════════════════════($reset)"

    for r in $suite_results {
        let icon   = if $r.status == "passed" { $"($green)✓($reset)" } else { $"($red)✗($reset)" }
        let status = if $r.status == "passed" { $"($green)passed($reset)" } else { $"($red)failed($reset)" }
        print $"  ($icon) ($r.suite)  ($status)"
    }

    print ""
    print $"Suites: ($green)($passed_suites) passed($reset) · ($red)($failed_suites) failed($reset) · ($total_suites) total suites"

    if $failed_suites > 0 {
        print ""
        print $"($red)($bold)✗ ($failed_suites) suite\(s\) failed.($reset)"
        exit 1
    }

    print ""
    print $"($green)($bold)✓ All ($total_suites) suites passed!($reset)"
}