#!/usr/bin/perl -I../lib use strict; use warnings; use Test::Simple tests => 16; use Mail::DKIM::TextWrap; my $tw; $tw = Mail::DKIM::TextWrap->new; ok($tw, "new() works"); my $output = ""; my @lines; $tw = Mail::DKIM::TextWrap->new( Margin => 10, Output => \$output, ); $tw->add("Mary had a little lamb, whose fleece was white as snow.\n"); $tw->finish; my $saved1 = $output; check_output("basic wrapping"); ok(@lines == 7, "basic wrapping got expected number of lines"); foreach ("Mary ", "had ", "a ", "little ", "lamb, ", "whose ", "fleece ", "was ", "white ", "as ", "snow.\n") { $tw->add($_); } $tw->finish; my $saved2 = $output; check_output("basic wrapping- words added separately, space following each"); ok($saved1 eq $saved2, "same result when words added separately, space following each"); foreach ("Mary", " had", " a", " little", " lamb,", " whose", " fleece", " was", " white", " as", " snow.\n") { $tw->add($_); } $tw->finish; my $saved3 = $output; check_output("basic wrapping- words added separately, space preceding each"); ok($saved1 eq $saved3, "same result when words added separately, space preceding each"); $tw->{Separator} = "\n "; $tw->add("Mary had a little lamb, whose fleece was white as snow.\n"); $tw->finish; check_output("with second-line indent"); ok($lines[0] =~ /^Mary had a/, "first line looks ok"); $tw = Mail::DKIM::TextWrap->new( Margin => 10, Output => \$output, Break => qr/[\s:]/, ); $tw->add("apple:orange:banana:apricot:blueberry:strawberry-kiwi\n"); $tw->finish; check_output("colon-separated list"); ok($lines[0] eq "apple:", "first line looks ok"); ok($lines[1] eq "orange:", "second line looks ok"); ok($lines[$#lines] =~ "strawberry-kiwi", "over-long word did not get split"); $tw->add(" apple : orange : apricot : kiwi \n"); $tw->finish; check_output("colon-separated list with spaces"); ok($lines[0] =~ /^\s/, "first line begins with space"); ok($lines[$#lines] =~ /\s$/, "last line ends with space"); ok(grep(!/(^\s|\s$)/, @lines[1 .. ($#lines - 1)]), "middle lines neither begin nor end with space"); $tw = Mail::DKIM::TextWrap->new( Margin => 10, Output => \$output, Break => qr/[\s:]/, BreakBefore => qr/[:]/, ); $tw->add("apple:orange:banana:apricot:lime:kiwi\n"); $tw->finish; check_output("colon-separated list, split before colons"); ok($lines[0] eq "apple", "first line looks ok"); ok($lines[1] eq ":orange", "second line looks ok"); ok($lines[$#lines] =~ /:kiwi$/, "last line looks ok"); $tw = Mail::DKIM::TextWrap->new( Margin => 10, Output => \$output, ); $tw->add("apple"); $tw->add("orange"); $tw->add("banana"); $tw->add("apricot"); $tw->finish; check_output(""); ok(@lines == 1, "no wrapping took place"); $tw = Mail::DKIM::TextWrap->new( Margin => 10, Output => \$output, ); foreach (qw(apple orange banana apricot)) { $tw->add($_); $tw->flush; } $tw->finish; check_output(""); ok(!(grep { length($_) > 10 } @lines), "no long lines"); sub check_output { my ($test_name) = @_; @lines = split /\n/, $output; $output = ""; print "# $test_name\n"; print "# " . ('-' x $tw->{Margin}) . "\n"; foreach my $l (@lines) { print "# $l\n"; } print "# " . ('-' x $tw->{Margin}) . "\n"; }