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

use strict;
use warnings;

BEGIN { require "t/test.pl" }


note "LC_AlphaNumUS_Str"; {
    {
        package My::LC::AlphaNumUS::Str;

        use TB2::Mouse;
        use TB2::Types;

        has lc_alphanumus_str =>
          is        => 'rw',
          isa       => 'TB2::LC_AlphaNumUS_Str';
    }

    my $obj = My::LC::AlphaNumUS::Str->new;

    $obj->lc_alphanumus_str("helloworld");
    is $obj->lc_alphanumus_str, "helloworld";

    $obj->lc_alphanumus_str("1337");
    is $obj->lc_alphanumus_str, "1337";

    $obj->lc_alphanumus_str("_");
    is $obj->lc_alphanumus_str, "_";

    $obj->lc_alphanumus_str("1world");
    is $obj->lc_alphanumus_str, "1world";

    $obj->lc_alphanumus_str("hello_world");
    is $obj->lc_alphanumus_str, "hello_world";

    $obj->lc_alphanumus_str("_1337");
    is $obj->lc_alphanumus_str, "_1337";

    $obj->lc_alphanumus_str("1_world");
    is $obj->lc_alphanumus_str, "1_world";

    ok !eval { $obj->lc_alphanumus_str("HelloWorld");   1 }, "upper case";
    ok !eval { $obj->lc_alphanumus_str("hello world");  1 }, "space";
    ok !eval { $obj->lc_alphanumus_str(undef);          1 }, "undef";
    ok !eval { $obj->lc_alphanumus_str("");             1 }, "empty string";
    ok !eval { $obj->lc_alphanumus_str("hello!");       1 }, "punctuation";
}

done_testing;