The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use Test::More;
use Test::Warnings;
use Term::ANSIColor qw/:constants/;
use File::CodeSearch::Replacer;

highlights();
done_testing();

sub highlights {
    my $hl = File::CodeSearch::Replacer->new(
        re             => ['test'],
        replace        => 'replaced',
        before_match   => '',
        after_match    => '',
        before_nomatch => '',
        after_nomatch  => '',
    );
    $hl->make_replace_re;
    my $actual = [ $hl->highlight("this test string\n") ];
    my $expected = ['', "this test string\n", "this replaced string\n", "this replaced string\n"];
    is_deeply($actual, $expected, 'no extra text gives back string')
        or diag explain $actual, $expected;

    $hl = File::CodeSearch::Replacer->new(
        re             => ['test'],
        replace        => 'replaced',
        before_match   => '-',
        after_match    => '=',
        before_nomatch => '*',
        after_nomatch  => '#',
    );
    $actual = [ $hl->highlight('this test string') ];
    $expected = ['', "*this #-test=* string#\\N\n", "*this #-replaced=* string#\\N\n", 'this replaced string'];
    is_deeply($actual, $expected, 'the appropriate higlights are put in')
        or diag explain $actual, $expected;

    $hl = File::CodeSearch::Replacer->new(
        re             => ['test'],
        replace        => 'replaced',
        before_match   => '-',
        after_match    => '=',
        before_nomatch => '*',
        after_nomatch  => '#',
    );
    $actual = [ $hl->highlight('this test string with test again') ];
    $expected = ['', "*this #-test=* string with #-test=* again#\\N\n", "*this #-replaced=* string with #-replaced=* again#\\N\n", 'this replaced string with replaced again'];
    is_deeply($actual, $expected, 'the appropriate higlights are put in')
        or diag explain $actual, $expected;
}