The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME

    Test::Moose::More - More tools for testing Moose packages

VERSION

    This document describes version 0.043 of Test::Moose::More - released
    February 14, 2017 as part of Test-Moose-More.

SYNOPSIS

        use Test::Moose::More;
    
        is_class_ok 'Some::Class';
        is_role_ok  'Some::Role';
        has_method_ok 'Some::Class', 'foo';
    
        # ... etc

DESCRIPTION

    This package contains a number of additional tests that can be employed
    against Moose classes/roles. It is intended to replace Test::Moose in
    your tests, and re-exports any tests that it has and we do not, yet.

 Export Groups

    By default, this package exports all test functions. You can be more
    selective, however, and there are a number of export groups (aside from
    the default ':all') to help you achieve those dreams!

    :all

      All exportable functions.

    :validate

      "validate_attribute", "validate_class", "validate_role",
      "validate_thing"

FUNCTIONS

 does_not_metaroles_ok $thing => { $mop => [ @traits ], ... };

    As with "does_metaroles_ok", but test that the metaroles are not
    consumed, a la "does_not_ok".

TEST FUNCTIONS

 meta_ok $thing

    Tests $thing to see if it has a metaclass; $thing may be the class name
    or instance of the class you wish to check.

 does_ok $thing, < $role | \@roles >, [ $message ]

    Checks to see if $thing does the given roles. $thing may be the class
    name or instance of the class you wish to check.

    Note that the message will be taken verbatim unless it contains %s
    somewhere; this will be replaced with the name of the role being tested
    for.

 does_not_ok $thing, < $role | \@roles >, [ $message ]

    Checks to see if $thing does not do the given roles. $thing may be the
    class name or instance of the class you wish to check.

    Note that the message will be taken verbatim unless it contains %s
    somewhere; this will be replaced with the name of the role being tested
    for.

 has_attribute_ok $thing, $attribute_name, [ $message ]

    Checks $thing for an attribute named $attribute_name; $thing may be a
    class name, instance, or role name.

 has_method_ok $thing, @methods

    Queries $thing's metaclass to see if $thing has the methods named in
    @methods.

 role_wraps_around_method_ok $role, @methods

    Queries $role's metaclass to see if $role wraps the methods named in
    @methods with an around method modifier.

 role_wraps_before_method_ok $role, @methods

    Queries $role's metaclass to see if $role wraps the methods named in
    @methods with an before method modifier.

 role_wraps_after_method_ok $role, @methods

    Queries $role's metaclass to see if $role wraps the methods named in
    @methods with an after method modifier.

 requires_method_ok $thing, @methods

    Queries $thing's metaclass to see if $thing requires the methods named
    in @methods.

    Note that this really only makes sense if $thing is a role.

 is_immutable_ok $thing

    Passes if $thing is immutable.

 is_not_immutable_ok $thing

    Passes if $thing is not immutable; that is, is mutable.

 is_role_ok $thing

    Passes if $thing's metaclass is a Moose::Meta::Role.

 is_class_ok $thing

    Passes if $thing's metaclass is a Moose::Meta::Class.

 is_anon_ok $thing

    Passes if $thing is "anonymous".

 is_not_anon_ok $thing

    Passes if $thing is not "anonymous".

 check_sugar_removed_ok $thing

    Ensures that all the standard Moose sugar is no longer directly
    callable on a given package.

 check_sugar_ok $thing

    Checks and makes sure a class/etc can still do all the standard Moose
    sugar.

 does_metaroles_ok $thing => { $mop => [ @traits ], ... };

    Validate the metaclasses associated with a class/role metaclass.

    e.g., if I wanted to validate that the attribute trait for
    MooseX::AttributeShortcuts is actually applied, I could do this:

        { package TestClass; use Moose; use MooseX::AttributeShortcuts; }
        use Test::Moose::More;
        use Test::More;
    
        does_metaroles_ok TestClass => {
           attribute => ['MooseX::AttributeShortcuts::Trait::Attribute'],
        };
        done_testing;

    This function will accept either class or role metaclasses for $thing.

    The MOPs available for classes (Moose::Meta::Class) are:

    class

    attribute

    method

    wrapped_method

    instance

    constructor

    destructor

    The MOPs available for roles (Moose::Meta::Role) are:

    role

    attribute

    method

    required_method

    wrapped_method

    conflicting_method

    application_to_class

    application_to_role

    application_to_instance

    applied_attribute

 validate_thing

    Runs a bunch of tests against the given $thing, as defined:

        validate_thing $thing => (
    
            attributes => [ ... ],
            methods    => [ ... ],
            isa        => [ ... ],
    
            # ensures sugar is/is-not present
            sugar      => 0,
    
            # ensures $thing does these roles
            does       => [ ... ],
    
            # ensures $thing does not do these roles
            does_not   => [ ... ],
        );

    $thing can be the name of a role or class, an object instance, or a
    metaclass.

      * -subtest => 'subtest name...'

      If set, all tests run will be wrapped in a subtest, the name of which
      will be whatever -subtest is set to.

      * isa => [ ... ]

      A list of superclasses thing should have.

      * anonymous => 0|1

      Check to see if the class is/isn't anonymous.

      * does => [ ... ]

      A list of roles the thing should do.

      * does_not => [ ... ]

      A list of roles the thing should not do.

      * attributes => [ ... ]

      The attributes list specified here is in the form of a list of names,
      each optionally followed by a hashref of options to test the
      attribute for; this hashref takes the same arguments
      "validate_attribute" does. e.g.:

          validate_thing $thing => (
      
              attributes => [
                  'foo',
                  'bar',
                  baz => { is => 'ro', ... },
                  'bip',
              ],
          );

      * methods => [ ... ]

      A list of methods the thing should have.

      * sugar => 0|1

      Ensure that thing can/cannot do the standard Moose sugar.

 validate_role

    The same as validate_thing(), but ensures $thing is a role, and allows
    for additional role-specific tests.

        validate_role $thing => (
    
            required_methods => [ ... ],
    
            # ...and all other options from validate_thing()
        );

      * -compose => 0|1

      When true, attempt to compose the role into an anonymous class, then
      use it to run "validate_class". The options we're given are passed to
      validate_class() directly, except that any required_methods entry is
      removed and its contents pushed onto methods. (A stub method for each
      entry in required_methods will also be created in the new class.)

      e.g.:

          ok 1 - TestRole has a metaclass
          ok 2 - TestRole is a Moose role
          ok 3 - TestRole requires method blargh
          ok 4 - TestRole does TestRole
          ok 5 - TestRole does not do TestRole::Two
          ok 6 - TestRole has method method1
          ok 7 - TestRole has an attribute named bar
          # Subtest: role composed into Moose::Meta::Class::__ANON__::SERIAL::1
              ok 1 - TestRole's composed class has a metaclass
              ok 2 - TestRole's composed class is a Moose class
              ok 3 - TestRole's composed class does TestRole
              ok 4 - TestRole's composed class does not do TestRole::Two
              ok 5 - TestRole's composed class has method method1
              ok 6 - TestRole's composed class has method blargh
              ok 7 - TestRole's composed class has an attribute named bar
              1..7
          ok 8 - role composed into Moose::Meta::Class::__ANON__::SERIAL::1
          1..8

      * -subtest => 'subtest name...'

      If set, all tests run will be wrapped in a subtest, the name of which
      will be whatever -subtest is set to.

      * required_methods => [ ... ]

      A list of methods the role requires a consuming class to supply.

      * before => [ ... ]

      A list of methods the role expects to wrap before, on application to
      a class.

      See "before" in Moose for information on before method modifiers.

      * around => [ ... ]

      A list of methods the role expects to wrap around, on application to
      a class.

      See "around" in Moose for information on around method modifiers.

      * after => [ ... ]

      A list of methods the role expects to wrap after, on application to a
      class.

      See "after" in Moose for information on after method modifiers.

 validate_class

    The same as validate_thing(), but ensures $thing is a class, and allows
    for additional class-specific tests.

        validate_class $thing => (
    
            isa  => [ ... ],
    
            attributes => [ ... ],
            methods    => [ ... ],
    
            # ensures sugar is/is-not present
            sugar      => 0,
    
            # ensures $thing does these roles
            does       => [ ... ],
    
            # ensures $thing does not do these roles
            does_not   => [ ... ],
    
            # ...and all other options from validate_thing()
        );

      * -subtest => 'subtest name...'

      If set, all tests run will be wrapped in a subtest, the name of which
      will be whatever -subtest is set to.

      * immutable => 0|1

      Checks the class to see if it is/isn't immutable.

 validate_attribute

    validate_attribute() allows you to test how an attribute looks once
    built and attached to a class.

    Let's say you have an attribute defined like this:

        has foo => (
            traits  => [ 'TestRole' ],
            is      => 'ro',
            isa     => 'Int',
            builder => '_build_foo',
            lazy    => 1,
        );

    You can use validate_attribute() to ensure that it's built out in the
    way you expect:

        validate_attribute TestClass => foo => (
    
            # tests the attribute metaclass instance to ensure it does the roles
            -does => [ 'TestRole' ],
            # tests the attribute metaclass instance's inheritance
            -isa  => [ 'Moose::Meta::Attribute' ], # for demonstration's sake
    
            traits   => [ 'TestRole' ],
            isa      => 'Int',
            does     => 'Bar',
            handles  => { },
            reader   => 'foo',
            builder  => '_build_foo',
            default  => undef,
            init_arg => 'foo',
            lazy     => 1,
            required => undef,
        );

    Options passed to validate_attribute() prefixed with '-' test the
    attribute's metaclass instance rather than a setting on the attribute;
    that is, '-does' ensures that the metaclass does a particular role
    (e.g. MooseX::AttributeShortcuts), while 'does' tests the setting of
    the attribute to require the value do a given role.

    This function takes all the options "attribute_options_ok" takes, as
    well as the following:

      * -subtest => 'subtest name...'

      If set, all tests run will be wrapped in a subtest, the name of which
      will be whatever -subtest is set to.

 attribute_options_ok

    Validates that an attribute is set up as expected; like
    validate_attribute(), but only concerns itself with attribute options.

    Note that some of these options will skip if used against attributes
    defined in a role.

      * -subtest => 'subtest name...'

      If set, all tests run (save the first, "does this thing even have
      this attribute?" test) will be wrapped in a subtest, the name of
      which will be whatever -subtest is set to.

      * is => ro|rw

      Tests for reader/writer options set as one would expect.

      * isa => ...

      Validates that the attribute requires its value to be a given type.

      * does => ...

      Validates that the attribute requires its value to do a given role.

      * builder => '...'

      Validates that the attribute expects the method name given to be its
      builder.

      * default => ...

      Validates that the attribute has the given default.

      * init_arg => '...'

      Validates that the attribute has the given initial argument name.

      * lazy => 0|1

      Validates that the attribute is/isn't lazy.

      * required => 0|1

      Validates that setting the attribute's value is/isn't required.

SEE ALSO

    Please see those modules/websites for more information related to this
    module.

      * Test::Moose

BUGS

    Please report any bugs or feature requests on the bugtracker website
    https://github.com/RsrchBoy/Test-Moose-More/issues

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

AUTHOR

    Chris Weyl <cweyl@alumni.drew.edu>

 I'm a material boy in a material world

    Please note I do not expect to be gittip'ed or flattr'ed for this work,
    rather it is simply a very pleasant surprise. I largely create and
    release works like this because I need them or I find it enjoyable;
    however, don't let that stop you if you feel like it ;)

    Flattr
    <https://flattr.com/submit/auto?user_id=RsrchBoy&url=https%3A%2F%2Fgithub.com%2FRsrchBoy%2FTest-Moose-More&title=RsrchBoy's%20CPAN%20Test-Moose-More&tags=%22RsrchBoy's%20Test-Moose-More%20in%20the%20CPAN%22>,
    Gratipay <https://gratipay.com/RsrchBoy/>, or indulge my Amazon
    Wishlist <http://bit.ly/rsrchboys-wishlist>... If and *only* if you so
    desire.

CONTRIBUTORS

      * Chad Granum <chad.granum@dreamhost.com>

      * Karen Etheridge <ether@cpan.org>

COPYRIGHT AND LICENSE

    This software is Copyright (c) 2012 by Chris Weyl.

    This is free software, licensed under:

      The GNU Lesser General Public License, Version 2.1, February 1999