The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T
use strict;
use warnings;

use Test::More tests => 28;

BEGIN { use_ok('String::Truncate'); }

package String::Truncate::ELIDE;

eval { String::Truncate->import(qw(elide)); };

main::ok(__PACKAGE__->can('elide'),  "elide is exported on request");
main::ok(!__PACKAGE__->can('trunc'), "trunc is not exported sans request");

package String::Truncate::TRUNC;

String::Truncate->import(qw(trunc));

main::ok(__PACKAGE__->can('trunc'),  "trunc is exported on request");
main::ok(!__PACKAGE__->can('elide'), "elide is not exported sans request");

package String::Truncate::BOTH;

String::Truncate->import(qw(trunc elide));

main::ok(__PACKAGE__->can('trunc'), "trunc is exported on request");
main::ok(__PACKAGE__->can('elide'), "elide is exported on request");

package String::Truncate::ALL;

eval { String::Truncate->import(qw(:all)); };

main::ok(__PACKAGE__->can('trunc'), "trunc is exported for ':all'");
main::ok(__PACKAGE__->can('elide'), "elide is exported for ':all'");

package String::Truncate::JUNK;

eval { String::Truncate->import(qw(huggalugga)); };
main::like(
  $@,
  qr/"huggalugga" is not exported by the String::Truncate module/,
  "don't accept bogus exports"
);

package String::Truncate::DEFAULT_ELIDE;

String::Truncate->import(elide => defaults => { marker => '--', length => 10 });

main::ok(__PACKAGE__->can('elide'),  "elide is exported on request");
main::ok(!__PACKAGE__->can('trunc'), "trunc is not exported sans request");

main::is(
  elide("123456789ABCDEF"),
  "12345678--",
  "elide with default marker/length",
);

package String::Truncate::DEFAULT_TRUNC;

String::Truncate->import(
  trunc => defaults => { truncate => 'left', length => 10 }
);

main::ok(__PACKAGE__->can('trunc'),  "trunc is exported on request");
main::ok(!__PACKAGE__->can('elide'), "elide is not exported sans request");

main::is(
  trunc("123456789ABCDEF"),
  "6789ABCDEF",
  "trunc with default truncate/length",
);

package String::Truncate::DEFAULT_ALL;

String::Truncate->import(
  ':all' => defaults => { truncate => 'left', length => 10, marker => '--' }
);

main::ok(__PACKAGE__->can('trunc'),  "trunc is exported on request");
main::ok(__PACKAGE__->can('elide'),  "elide is exported on request");

main::is(
  elide("123456789ABCDEF"),
  "--89ABCDEF",
  "elide with default truncate/length",
);

main::is(
  elide("123456789ABCDEF", 11),
  "--789ABCDEF",
  "elide with overridden default length",
);


main::is(
  elide("123456789ABCDEF", undef, { truncate => 'right' }),
  "12345678--",
  "elide with overridden default truncate",
);

main::is(
  trunc("123456789ABCDEF"),
  "6789ABCDEF",
  "trunc with default truncate/length",
);

package String::Truncate::DEFAULT_ARG;

String::Truncate->import(
  -all => { truncate => 'left', length => 10, marker => '--' }
);

main::ok(__PACKAGE__->can('trunc'),  "trunc is exported on request");
main::ok(__PACKAGE__->can('elide'),  "elide is exported on request");

main::is(
  elide("123456789ABCDEF"),
  "--89ABCDEF",
  "elide with default truncate/length",
);

main::is(
  elide("123456789ABCDEF", 11),
  "--789ABCDEF",
  "elide with overridden default length",
);


main::is(
  elide("123456789ABCDEF", undef, { truncate => 'right' }),
  "12345678--",
  "elide with overridden default truncate",
);

main::is(
  trunc("123456789ABCDEF"),
  "6789ABCDEF",
  "trunc with default truncate/length",
);