```{index} single: Test2::Compare::Custom ``` # Test2::Compare::Custom Custom field check for comparisons. ## DESCRIPTION Sometimes you want to do something complicated or unusual when validating a field nested inside a deep data structure. You could pull it out of the structure and test it separately, or you can use this to embed the check. This provides a way for you to write custom checks for fields in deep comparisons. ## SYNOPSIS ```perl my $cus = Test2::Compare::Custom->new( name => 'IsRef', operator => 'ref(...)', stringify_got => 1, code => sub { my %args = @_; return $args{got} ? 1 : 0; }, ); ## Pass is( { a => 1, ref => {}, b => 2 }, { a => 1, ref => $cus, b => 2 }, "This will pass" ); ## Fail is( {a => 1, ref => 'notref', b => 2}, {a => 1, ref => $cus, b => 2}, "This will fail" ); ``` ## ARGUMENTS Your custom sub will be passed 4 arguments in a hash: ```perl code => sub { my %args = @_; # provides got, exists, operator, name return ref($args{got}) ? 1 : 0; }, ``` `$_` is also localized to `got` to make it easier for those who need to use regexes. - got - $\_ The value to be checked. - exists This will be a boolean. This will be true if `got` exists at all. If `exists` is false then it means `got` is not simply undef, but doesn't exist at all (think checking the value of a hash key that does not exist). - operator The operator specified at construction. - name The name provided at construction. ## METHODS - $code = $cus->code Returns the coderef provided at construction. - $name = $cus->name Returns the name provided at construction. - $op = $cus->operator Returns the operator provided at construction. - $stringify = $cus->stringify\_got Returns the stringify\_got flag provided at construction. - $bool = $cus->verify(got => $got, exists => $bool) ## SOURCE The source code repository for Test2-Suite can be found at `https://github.com/Test-More/test-more/`. ## MAINTAINERS - Chad Granum ## AUTHORS - Chad Granum - Daniel Böhmer ## COPYRIGHT Copyright Chad Granum . This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See `http://dev.perl.org/licenses/`