The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl
use strict;

use String::ShowDiff qw/ansi_colored_diff/;
use Term::ANSIColor qw/:constants uncolor colored/;

use constant TEST_STRINGS => (
	["", "abcehjlmnpt", [split //, "abcehjlmnpt"],
	                    [split //, "+++++++++++"]],
	
	["abcehjlmnpt", "", [split //, "abcehjlmnpt"],
	                    [split //, "-----------"]],
	
	["abcehjlmnpt", "bcdefjklmrst", [split //, "abcdehfjklmnprst"],
	                                [split //, "-uu+u-+u+uu--++u"]],

	["abcehjlmnp", "bcdefjklmrst", [split //, "abcdehfjklmnprst"],
	                               [split //, "-uu+u-+u+uu--+++"]],
);

use constant TEST_OPTIONS => (
	[undef,              {'-' => 'on_red',  '+' => 'on_green', 'u' => 'reset'}],
	[{'-' => 'on_blue'}, {'-' => 'on_blue', '+' => 'on_green', 'u' => 'reset'}], 
	[{'-' => 'on_blue', '+' => 'on_yellow', 'u' => 'on_white'}, 
	 {'-' => 'on_blue', '+' => 'on_yellow', 'u' => 'on_white'}],
);

use Test::More tests => 12;

foreach (TEST_OPTIONS) {
	my ($options, $colors) = @$_; 
	foreach (TEST_STRINGS) {
		my ($s1, $s2, $s12, $mod) = @$_;
		is ansi_colored_diff($s1, $s2,$options),
		   join("", map {colored($s12->[$_],$colors->{$mod->[$_]})} (0 .. @{$mod}-1)),
		   "Comparing $s1 and $s2";
	}
}

print RESET;