.\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .if !\nF .nr F 0 .if \nF>0 \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} .\} .\" ======================================================================== .\" .IX Title "Test2::Compare::Base 3pm" .TH Test2::Compare::Base 3pm "2019-05-06" "perl v5.24.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Test2::Compare::Base \- Base class for comparison classes. .SH "DESCRIPTION" .IX Header "DESCRIPTION" All comparison classes for Test2::Compare should inherit from this base class. .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& package Test2::Compare::MyCheck; \& use strict; \& use warnings; \& \& use base \*(AqTest2::Compare::Base\*(Aq; \& use Test2::Util::HashBase qw/stuff/; \& \& sub name { \*(AqSTUFF\*(Aq } \& \& sub operator { \& my $self = shift; \& my ($got) = @_; \& return \*(Aqeq\*(Aq; \& } \& \& sub verify { \& my $self = shift; \& my $params = @_; \& \& # Always check if $got exists! This method must return false if no \& # value at all was received. \& return 0 unless $params{exists}; \& \& my $got = $params{got}; \& \& # Returns true if both values match. This includes undef, 0, and other \& # false\-y values! \& return $got eq $self\->stuff; \& } .Ve .SH "METHODS" .IX Header "METHODS" Some of these must be overridden, others can be. .ie n .IP "$dclass = $check\->delta_class" 4 .el .IP "\f(CW$dclass\fR = \f(CW$check\fR\->delta_class" 4 .IX Item "$dclass = $check->delta_class" Returns the delta subclass that should be used. By default Test2::Compare::Delta is used. .ie n .IP "@deltas = $check\->deltas(id => $id, exists => $bool, got => $got, convert => \e&convert, seen => \e%seen)" 4 .el .IP "\f(CW@deltas\fR = \f(CW$check\fR\->deltas(id => \f(CW$id\fR, exists => \f(CW$bool\fR, got => \f(CW$got\fR, convert => \e&convert, seen => \e%seen)" 4 .IX Item "@deltas = $check->deltas(id => $id, exists => $bool, got => $got, convert => &convert, seen => %seen)" Should return child deltas. .ie n .IP "@lines = $check\->got_lines($got)" 4 .el .IP "\f(CW@lines\fR = \f(CW$check\fR\->got_lines($got)" 4 .IX Item "@lines = $check->got_lines($got)" This is your chance to provide line numbers for errors in the \f(CW$got\fR structure. .ie n .IP "$op = $check\->\fIoperator()\fR" 4 .el .IP "\f(CW$op\fR = \f(CW$check\fR\->\fIoperator()\fR" 4 .IX Item "$op = $check->operator()" .PD 0 .ie n .IP "$op = $check\->operator($got)" 4 .el .IP "\f(CW$op\fR = \f(CW$check\fR\->operator($got)" 4 .IX Item "$op = $check->operator($got)" .PD Returns the operator that was used to compare the check with the received data in \f(CW$got\fR. If there was no value for got then there will be no arguments, undef will only be an argument if undef was seen in \f(CW$got\fR. This is how you can tell the difference between a missing value and an undefined one. .ie n .IP "$bool = $check\->verify(id => $id, exists => $bool, got => $got, convert => \e&convert, seen => \e%seen)" 4 .el .IP "\f(CW$bool\fR = \f(CW$check\fR\->verify(id => \f(CW$id\fR, exists => \f(CW$bool\fR, got => \f(CW$got\fR, convert => \e&convert, seen => \e%seen)" 4 .IX Item "$bool = $check->verify(id => $id, exists => $bool, got => $got, convert => &convert, seen => %seen)" Return true if there is a shallow match, that is both items are arrayrefs, both items are the same string or same number, etc. This should not recurse, as deep checks are done in \f(CW\*(C`$check\->deltas()\*(C'\fR. .ie n .IP "$name = $check\->name" 4 .el .IP "\f(CW$name\fR = \f(CW$check\fR\->name" 4 .IX Item "$name = $check->name" Get the name of the check. .ie n .IP "$display = $check\->render" 4 .el .IP "\f(CW$display\fR = \f(CW$check\fR\->render" 4 .IX Item "$display = $check->render" What should be displayed in a table for this check, usually the name or value. .ie n .IP "$delta = $check\->run(id => $id, exists => $bool, got => $got, convert => \e&convert, seen => \e%seen)" 4 .el .IP "\f(CW$delta\fR = \f(CW$check\fR\->run(id => \f(CW$id\fR, exists => \f(CW$bool\fR, got => \f(CW$got\fR, convert => \e&convert, seen => \e%seen)" 4 .IX Item "$delta = $check->run(id => $id, exists => $bool, got => $got, convert => &convert, seen => %seen)" This is where the checking is done, first a shallow check using \&\f(CW\*(C`$check\->verify\*(C'\fR, then checking \f(CW\*(C`$check\->deltas()\*(C'\fR. \f(CW\*(C`\e%seen\*(C'\fR is used to prevent cycles. .SH "SOURCE" .IX Header "SOURCE" The source code repository for Test2\-Suite can be found at \&\fIhttps://github.com/Test\-More/Test2\-Suite/\fR. .SH "MAINTAINERS" .IX Header "MAINTAINERS" .IP "Chad Granum " 4 .IX Item "Chad Granum " .SH "AUTHORS" .IX Header "AUTHORS" .PD 0 .IP "Chad Granum " 4 .IX Item "Chad Granum " .PD .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright 2018 Chad Granum . .PP This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. .PP See \fIhttp://dev.perl.org/licenses/\fR