App-Greple-md

 view release on metacpan or  search on metacpan

t/01_colorize.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use open qw(:std :encoding(utf-8));

use lib '.';
use t::Util;

# Test that module loads
use_ok('App::Greple::md');

my $test_md = 't/test.md';

SKIP: {
    skip "$test_md not found", 9 unless -f $test_md;

    # Basic output test
    my $r = run("-Mmd $test_md");
    my $out = $r->stdout;
    ok(length($out) > 0, "greple -Mmd produces output");

    # Output should contain ANSI escape sequences
    like($out, qr/\e\[/, "output contains ANSI color sequences");

    # Dark mode should also work
    my $dark = run("'-Mmd::config(mode=dark)' $test_md")->stdout;
    ok(length($dark) > 0, "dark mode produces output");
    like($dark, qr/\e\[/, "dark mode contains ANSI sequences");

    # --cm override should work
    my $override = run("-Mmd --cm h1=RD -- $test_md")->stdout;
    ok(length($override) > 0, "--cm override produces output");

    # OSC 8 test: output should contain OSC 8 sequences for links
    like($out, qr/\e\]8;;/, "output contains OSC 8 hyperlink sequences");

    # ;sub{...} text transformation (hashed theme)
    my $hashed = run("-Mmd --cm 'h3=RD;sub{s/(?<!#)\$/ ###/r}' -- $test_md")->stdout;
    my $strip = sub { local $_ = shift; s/\e\[[0-9;]*[mK]//g; $_ };
    my ($h3_line) = map { $strip->($_) } grep { /Heading 3/ } split /\n/, $hashed;
    like($h3_line, qr/### Heading 3 ###/, "sub{} appends closing hashes to h3");
    my ($h4_line) = map { $strip->($_) } grep { /Heading 4/ } split /\n/, $hashed;
    unlike($h4_line, qr/####$/, "sub{} on h3 does not affect h4");

    # Empty ;sub{} suffix should not break colorization
    my $no_sub = run("-Mmd --cm 'h3=RD' -- $test_md")->stdout;
    my ($h3_plain) = map { $strip->($_) } grep { /Heading 3/ } split /\n/, $no_sub;
    unlike($h3_plain, qr/### Heading 3 ###/, "no sub{} means no closing hashes");
}

done_testing;



( run in 2.403 seconds using v1.01-cache-2.11-cpan-b9db842bd85 )