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

use strict;
use warnings;
use Test::More tests => 14;
use Test::Exception;

{
  package FooTest;
  use Mouse;
  use MouseX::Types::Common::String (
    qw(SimpleStr NonEmptySimpleStr Password StrongPassword NonEmptyStr),
  );

  has simplestr => ( is => 'rw', isa => SimpleStr);
  has nestr => ( is => 'rw', isa => NonEmptyStr);
  has nesimplestr => ( is => 'rw', isa => NonEmptySimpleStr);
  has password => ( is => 'rw', isa => Password);
  has strongpassword => ( is => 'rw', isa => StrongPassword);
}

my $ins = FooTest->new;

lives_ok { $ins->simplestr('') } 'SimpleStr';
lives_ok { $ins->simplestr('good string') } 'SimpleStr 2';
dies_ok { $ins->simplestr("bad\nstring") } 'SimpleStr 3';
dies_ok { $ins->simplestr(join('', ("long string" x 25))) } 'SimpleStr 4';

dies_ok { $ins->nestr('') } 'NonEmptyStr';
lives_ok { $ins->nestr('good string') } 'NonEmptyStr 2';
lives_ok { $ins->nestr("bad\nstring") } 'NonEmptyStr 3';
lives_ok { $ins->nestr(join('', ("long string" x 25))) } 'NonEmptyStr 4';

lives_ok { $ins->nesimplestr('good str') } 'NonEmptySimplrStr ';
dies_ok { $ins->nesimplestr('') } 'NonEmptyStr 2';

dies_ok { $ins->password('no') } 'Password';
lives_ok { $ins->password('okay') } 'Password 2';

dies_ok { $ins->strongpassword('notokay') } 'StrongPassword';
lives_ok { $ins->strongpassword('83773r_ch01c3') } 'StrongPassword 2';