summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgregor herrmann <gregoa@debian.org>2023-01-08 20:42:08 +0100
committergregor herrmann <gregoa@debian.org>2023-01-08 20:42:08 +0100
commit2f8e6e72641d9fbe1dac2a488a88f7a39e61c6d5 (patch)
tree0e9fda2cf439be819235c5a70038ab5c303afaed
parent32e4eae1915b2ff6177a5670700cc70e523331e0 (diff)
parent3b1d791cfc52799705ec59759ea7e954b5e990e3 (diff)
New upstream version 1.204
-rw-r--r--Changes23
-rw-r--r--LICENSE379
-rw-r--r--MANIFEST25
-rw-r--r--META.json586
-rw-r--r--META.yml452
-rw-r--r--Makefile.PL115
-rw-r--r--README16
-rw-r--r--dist.ini20
-rw-r--r--lib/Test/Deep.pm1368
-rw-r--r--lib/Test/Deep/All.pm49
-rw-r--r--lib/Test/Deep/Any.pm49
-rw-r--r--lib/Test/Deep/Array.pm49
-rw-r--r--lib/Test/Deep/ArrayEach.pm49
-rw-r--r--lib/Test/Deep/ArrayElementsOnly.pm49
-rw-r--r--lib/Test/Deep/ArrayLength.pm49
-rw-r--r--lib/Test/Deep/ArrayLengthOnly.pm49
-rw-r--r--lib/Test/Deep/Blessed.pm49
-rw-r--r--lib/Test/Deep/Boolean.pm49
-rw-r--r--lib/Test/Deep/Cache.pm49
-rw-r--r--lib/Test/Deep/Cache/Simple.pm50
-rw-r--r--lib/Test/Deep/Class.pm49
-rw-r--r--lib/Test/Deep/Cmp.pm49
-rw-r--r--lib/Test/Deep/Code.pm49
-rw-r--r--lib/Test/Deep/Hash.pm53
-rw-r--r--lib/Test/Deep/HashEach.pm49
-rw-r--r--lib/Test/Deep/HashElements.pm55
-rw-r--r--lib/Test/Deep/HashKeys.pm53
-rw-r--r--lib/Test/Deep/HashKeysOnly.pm53
-rw-r--r--lib/Test/Deep/Ignore.pm49
-rw-r--r--lib/Test/Deep/Isa.pm49
-rw-r--r--lib/Test/Deep/ListMethods.pm49
-rw-r--r--lib/Test/Deep/MM.pm49
-rw-r--r--lib/Test/Deep/Methods.pm49
-rw-r--r--lib/Test/Deep/NoTest.pm59
-rw-r--r--lib/Test/Deep/None.pm49
-rw-r--r--lib/Test/Deep/Number.pm49
-rw-r--r--lib/Test/Deep/Obj.pm49
-rw-r--r--lib/Test/Deep/Ref.pm49
-rw-r--r--lib/Test/Deep/RefType.pm49
-rw-r--r--lib/Test/Deep/Regexp.pm49
-rw-r--r--lib/Test/Deep/RegexpMatches.pm49
-rw-r--r--lib/Test/Deep/RegexpOnly.pm49
-rw-r--r--lib/Test/Deep/RegexpRef.pm49
-rw-r--r--lib/Test/Deep/RegexpRefOnly.pm49
-rw-r--r--lib/Test/Deep/RegexpVersion.pm49
-rw-r--r--lib/Test/Deep/ScalarRef.pm49
-rw-r--r--lib/Test/Deep/ScalarRefOnly.pm49
-rw-r--r--lib/Test/Deep/Set.pm49
-rw-r--r--lib/Test/Deep/Shallow.pm49
-rw-r--r--lib/Test/Deep/Stack.pm49
-rw-r--r--lib/Test/Deep/String.pm49
-rw-r--r--t/00-report-prereqs.dd34
-rw-r--r--t/00-report-prereqs.t193
-rw-r--r--t/no-clobber-globals.t35
-rw-r--r--t/notest_withtest.t22
-rw-r--r--xt/author/pod-syntax.t7
-rw-r--r--xt/release/changes_has_content.t42
57 files changed, 5209 insertions, 195 deletions
diff --git a/Changes b/Changes
index bc3fd7f..1e08693 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,28 @@
Revision history for Test-Deep
+1.204 2023-01-07 18:01:37-05:00 America/New_York
+ - restore v5.12 compatibility (see commit 66b79eb for the amusing
+ anecdote)
+
+1.203 2023-01-07 11:38:14-05:00 America/New_York
+ - try to avoid clobbering global error variables when loading test
+ libraries (thanks, Felipe Gasper)
+ - hash_each now enumates keys in sort() order, to make errors more
+ consistent
+
+1.202 2023-01-04 20:40:46-05:00 America/New_York
+ - no changes since trial releases
+ - Test::Deep now requires perl v5.12.
+
+1.201 2023-01-03 19:28:05-05:00 America/New_York (TRIAL RELEASE)
+ - correct Changes entry about which version version of perl is required
+
+1.200 2023-01-02 16:55:10-05:00 America/New_York (TRIAL RELEASE)
+ - converted to Dist::Zilla
+ - Test::Deep will now require v5.12, and this may go up. This change
+ allows simplification of the Makefile.PL, which was coping with a
+ mistake made twelve years ago.
+
1.130 2020-03-01
- no changes since 1.129
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5f5d60c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,379 @@
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+ Software Foundation; either version 1, or (at your option) any
+ later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 2003 by Fergal Daly.
+
+This is free software, licensed under:
+
+ The GNU General Public License, Version 1, February 1989
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 2003 by Fergal Daly.
+
+This is free software, licensed under:
+
+ The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+ - "Package" refers to the collection of files distributed by the Copyright
+ Holder, and derivatives of that collection of files created through
+ textual modification.
+ - "Standard Version" refers to such a Package if it has not been modified,
+ or has been modified in accordance with the wishes of the Copyright
+ Holder.
+ - "Copyright Holder" is whoever is named in the copyright or copyrights for
+ the package.
+ - "You" is you, if you're thinking about copying or distributing this Package.
+ - "Reasonable copying fee" is whatever you can justify on the basis of media
+ cost, duplication charges, time of people involved, and so on. (You will
+ not be required to justify it to the Copyright Holder, but only to the
+ computing community at large as a market that must bear the fee.)
+ - "Freely Available" means that no fee is charged for the item itself, though
+ there may be fees involved in handling the item. It also means that
+ recipients of the item may redistribute it under the same conditions they
+ received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or an
+ equivalent medium, or placing the modifications on a major archive site
+ such as ftp.uu.net, or by allowing the Copyright Holder to include your
+ modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict with
+ standard executables, which must also be provided, and provide a separate
+ manual page for each non-standard executable that clearly documents how it
+ differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where to
+ get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of the Package
+ with your modifications.
+
+ c) accompany any non-standard executables with their corresponding Standard
+ Version executables, giving the non-standard executables non-standard
+ names, and clearly documenting the differences in manual pages (or
+ equivalent), together with instructions on where to get the Standard
+ Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
diff --git a/MANIFEST b/MANIFEST
index 1c0a63a..0148c74 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,4 +1,13 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.030.
Changes
+LICENSE
+MANIFEST
+META.json
+META.yml
+Makefile.PL
+README
+TODO
+dist.ini
lib/Test/Deep.pm
lib/Test/Deep/All.pm
lib/Test/Deep/Any.pm
@@ -22,10 +31,10 @@ lib/Test/Deep/HashKeysOnly.pm
lib/Test/Deep/Ignore.pm
lib/Test/Deep/Isa.pm
lib/Test/Deep/ListMethods.pm
-lib/Test/Deep/Methods.pm
lib/Test/Deep/MM.pm
-lib/Test/Deep/None.pm
+lib/Test/Deep/Methods.pm
lib/Test/Deep/NoTest.pm
+lib/Test/Deep/None.pm
lib/Test/Deep/Number.pm
lib/Test/Deep/Obj.pm
lib/Test/Deep/Ref.pm
@@ -42,9 +51,8 @@ lib/Test/Deep/Set.pm
lib/Test/Deep/Shallow.pm
lib/Test/Deep/Stack.pm
lib/Test/Deep/String.pm
-Makefile.PL
-MANIFEST This list of files
-README
+t/00-report-prereqs.dd
+t/00-report-prereqs.t
t/all.t
t/any.t
t/array.t
@@ -73,9 +81,11 @@ t/lib/Std.pm
t/listmethods.t
t/memory.t
t/methods.t
+t/no-clobber-globals.t
t/none.t
t/notest.t
t/notest_extra.t
+t/notest_withtest.t
t/number.t
t/reftype.t
t/regexp.t
@@ -87,6 +97,5 @@ t/scalarref.t
t/set.t
t/shallow.t
t/string.t
-TODO
-META.yml Module YAML meta-data (added by MakeMaker)
-META.json Module JSON meta-data (added by MakeMaker)
+xt/author/pod-syntax.t
+xt/release/changes_has_content.t
diff --git a/META.json b/META.json
index 0b7b579..456c5fb 100644
--- a/META.json
+++ b/META.json
@@ -1,10 +1,11 @@
{
- "abstract" : "unknown",
+ "abstract" : "Extremely flexible deep comparison",
"author" : [
- "Fergal Daly <fergal@esatclear.ie>"
+ "Fergal Daly",
+ "Ricardo SIGNES <cpan@semiotic.systems>"
],
- "dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
+ "dynamic_config" : 0,
+ "generated_by" : "Dist::Zilla version 6.030, CPAN::Meta::Converter version 2.150010",
"license" : [
"perl_5"
],
@@ -13,51 +14,590 @@
"version" : 2
},
"name" : "Test-Deep",
- "no_index" : {
- "directory" : [
- "t",
- "inc"
- ]
- },
"prereqs" : {
- "build" : {
+ "configure" : {
"requires" : {
- "ExtUtils::MakeMaker" : "0"
+ "ExtUtils::MakeMaker" : "6.78"
}
},
- "configure" : {
+ "develop" : {
"requires" : {
- "ExtUtils::MakeMaker" : "0"
+ "Test::Pod" : "1.41"
}
},
"runtime" : {
"requires" : {
"List::Util" : "1.09",
"Scalar::Util" : "1.09",
- "Test::Builder" : "0"
+ "Test::Builder" : "0",
+ "Test::More" : "0.96",
+ "perl" : "5.012"
}
},
"test" : {
+ "recommends" : {
+ "CPAN::Meta" : "2.120900"
+ },
"requires" : {
- "Test::More" : "0.88",
- "Test::Tester" : "0.04"
+ "ExtUtils::MakeMaker" : "0",
+ "File::Spec" : "0",
+ "Test::More" : "0.96",
+ "Test::Tester" : "0.107"
}
}
},
"release_status" : "stable",
"resources" : {
"bugtracker" : {
- "web" : "http://github.com/rjbs/Test-Deep/issues"
+ "web" : "https://github.com/rjbs/Test-Deep/issues"
},
- "homepage" : "http://github.com/rjbs/Test-Deep/",
+ "homepage" : "https://github.com/rjbs/Test-Deep",
"repository" : {
"type" : "git",
"url" : "https://github.com/rjbs/Test-Deep.git",
"web" : "https://github.com/rjbs/Test-Deep"
+ }
+ },
+ "version" : "1.204",
+ "x_Dist_Zilla" : {
+ "perl" : {
+ "version" : "5.037002"
},
- "x_IRC" : "irc://irc.perl.org/#perl-qa",
- "x_MailingList" : "http://lists.perl.org/list/perl-qa.html"
+ "plugins" : [
+ {
+ "class" : "Dist::Zilla::Plugin::Git::GatherDir",
+ "config" : {
+ "Dist::Zilla::Plugin::GatherDir" : {
+ "exclude_filename" : [],
+ "exclude_match" : [],
+ "follow_symlinks" : 0,
+ "include_dotfiles" : 0,
+ "prefix" : "",
+ "prune_directory" : [],
+ "root" : "."
+ },
+ "Dist::Zilla::Plugin::Git::GatherDir" : {
+ "include_untracked" : 0
+ }
+ },
+ "name" : "@Filter/Git::GatherDir",
+ "version" : "2.048"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
+ "name" : "@Filter/CheckPrereqsIndexed",
+ "version" : "0.021"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::CheckExtraTests",
+ "name" : "@Filter/CheckExtraTests",
+ "version" : "0.029"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PromptIfStale",
+ "config" : {
+ "Dist::Zilla::Plugin::PromptIfStale" : {
+ "check_all_plugins" : 0,
+ "check_all_prereqs" : 0,
+ "modules" : [
+ "Dist::Zilla::PluginBundle::RJBS"
+ ],
+ "phase" : "build",
+ "run_under_travis" : 0,
+ "skip" : []
+ }
+ },
+ "name" : "@Filter/RJBS-Outdated",
+ "version" : "0.057"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PromptIfStale",
+ "config" : {
+ "Dist::Zilla::Plugin::PromptIfStale" : {
+ "check_all_plugins" : 1,
+ "check_all_prereqs" : 0,
+ "modules" : [],
+ "phase" : "release",
+ "run_under_travis" : 0,
+ "skip" : [
+ "Dist::Zilla::Plugin::RJBSMisc"
+ ]
+ }
+ },
+ "name" : "@Filter/CPAN-Outdated",
+ "version" : "0.057"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PruneCruft",
+ "name" : "@Filter/@Filter/PruneCruft",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::ManifestSkip",
+ "name" : "@Filter/@Filter/ManifestSkip",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaYAML",
+ "name" : "@Filter/@Filter/MetaYAML",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::License",
+ "name" : "@Filter/@Filter/License",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Readme",
+ "name" : "@Filter/@Filter/Readme",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::ExecDir",
+ "name" : "@Filter/@Filter/ExecDir",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::ShareDir",
+ "name" : "@Filter/@Filter/ShareDir",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Manifest",
+ "name" : "@Filter/@Filter/Manifest",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::TestRelease",
+ "name" : "@Filter/@Filter/TestRelease",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::ConfirmRelease",
+ "name" : "@Filter/@Filter/ConfirmRelease",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::UploadToCPAN",
+ "name" : "@Filter/@Filter/UploadToCPAN",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MakeMaker",
+ "config" : {
+ "Dist::Zilla::Role::TestRunner" : {
+ "default_jobs" : 9
+ }
+ },
+ "name" : "@Filter/MakeMaker",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::NextVersion",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::NextVersion" : {
+ "first_version" : "0.001",
+ "version_by_branch" : 1,
+ "version_regexp" : "(?^:^([0-9]+\\.[0-9]+)$)"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.38.0",
+ "repo_root" : "."
+ }
+ },
+ "name" : "@Filter/Git::NextVersion",
+ "version" : "2.048"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PkgVersion",
+ "name" : "@Filter/PkgVersion",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaConfig",
+ "name" : "@Filter/MetaConfig",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MetaJSON",
+ "name" : "@Filter/MetaJSON",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::NextRelease",
+ "name" : "@Filter/NextRelease",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
+ "name" : "@Filter/Test::ChangesHasContent",
+ "version" : "0.011"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PodSyntaxTests",
+ "name" : "@Filter/PodSyntaxTests",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
+ "name" : "@Filter/Test::ReportPrereqs",
+ "version" : "0.028"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Remote::Check",
+ "name" : "@Filter/Git::Remote::Check",
+ "version" : "0.1.2"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Prereqs",
+ "config" : {
+ "Dist::Zilla::Plugin::Prereqs" : {
+ "phase" : "test",
+ "type" : "requires"
+ }
+ },
+ "name" : "@Filter/TestMoreWithSubtests",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PodWeaver",
+ "config" : {
+ "Dist::Zilla::Plugin::PodWeaver" : {
+ "config_plugins" : [
+ "@RJBS"
+ ],
+ "finder" : [
+ ":InstallModules",
+ ":ExecFiles"
+ ],
+ "plugins" : [
+ {
+ "class" : "Pod::Weaver::Plugin::EnsurePod5",
+ "name" : "@CorePrep/EnsurePod5",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Plugin::H1Nester",
+ "name" : "@CorePrep/H1Nester",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Plugin::SingleEncoding",
+ "name" : "@RJBS/SingleEncoding",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Name",
+ "name" : "@RJBS/Name",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Version",
+ "name" : "@RJBS/Version",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Region",
+ "name" : "@RJBS/Prelude",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Synopsis",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Description",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Overview",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Stability",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::GenerateSection",
+ "name" : "@RJBS/PerlSupport",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Collect",
+ "name" : "Attributes",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Collect",
+ "name" : "Methods",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Collect",
+ "name" : "Functions",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Leftovers",
+ "name" : "@RJBS/Leftovers",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Region",
+ "name" : "@RJBS/postlude",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Authors",
+ "name" : "@RJBS/Authors",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Contributors",
+ "name" : "@RJBS/Contributors",
+ "version" : "0.009"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Legal",
+ "name" : "@RJBS/Legal",
+ "version" : "4.018"
+ },
+ {
+ "class" : "Pod::Weaver::Plugin::Transformer",
+ "name" : "@RJBS/List",
+ "version" : "4.018"
+ }
+ ]
+ }
+ },
+ "name" : "@Filter/PodWeaver",
+ "version" : "4.009"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::RJBSMisc",
+ "name" : "@Filter/RJBSMisc",
+ "version" : "5.021"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::GithubMeta",
+ "name" : "@Filter/GithubMeta",
+ "version" : "0.58"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Check",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Check" : {
+ "untracked_files" : "die"
+ },
+ "Dist::Zilla::Role::Git::DirtyFiles" : {
+ "allow_dirty" : [
+ "Changes",
+ "dist.ini"
+ ],
+ "allow_dirty_match" : [],
+ "changelog" : "Changes"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.38.0",
+ "repo_root" : "."
+ }
+ },
+ "name" : "@Filter/@Git/Check",
+ "version" : "2.048"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Commit",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Commit" : {
+ "add_files_in" : [],
+ "commit_msg" : "v%V%n%n%c",
+ "signoff" : 0
+ },
+ "Dist::Zilla::Role::Git::DirtyFiles" : {
+ "allow_dirty" : [
+ "Changes",
+ "dist.ini"
+ ],
+ "allow_dirty_match" : [],
+ "changelog" : "Changes"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.38.0",
+ "repo_root" : "."
+ },
+ "Dist::Zilla::Role::Git::StringFormatter" : {
+ "time_zone" : "local"
+ }
+ },
+ "name" : "@Filter/@Git/Commit",
+ "version" : "2.048"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Tag",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Tag" : {
+ "branch" : null,
+ "changelog" : "Changes",
+ "signed" : 0,
+ "tag" : "1.204",
+ "tag_format" : "%v",
+ "tag_message" : "v%V"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.38.0",
+ "repo_root" : "."
+ },
+ "Dist::Zilla::Role::Git::StringFormatter" : {
+ "time_zone" : "local"
+ }
+ },
+ "name" : "@Filter/@Git/Tag",
+ "version" : "2.048"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Push",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Push" : {
+ "push_to" : [
+ "github :"
+ ],
+ "remotes_must_exist" : 0
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "git_version" : "2.38.0",
+ "repo_root" : "."
+ }
+ },
+ "name" : "@Filter/@Git/Push",
+ "version" : "2.048"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Git::Contributors",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Contributors" : {
+ "git_version" : "2.38.0",
+ "include_authors" : 0,
+ "include_releaser" : 1,
+ "order_by" : "name",
+ "paths" : []
+ }
+ },
+ "name" : "@Filter/Git::Contributors",
+ "version" : "0.036"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Prereqs",
+ "config" : {
+ "Dist::Zilla::Plugin::Prereqs" : {
+ "phase" : "runtime",
+ "type" : "requires"
+ }
+ },
+ "name" : "Prereqs",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Prereqs",
+ "config" : {
+ "Dist::Zilla::Plugin::Prereqs" : {
+ "phase" : "test",
+ "type" : "requires"
+ }
+ },
+ "name" : "TestRequires",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":InstallModules",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":IncModules",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":TestFiles",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":ExtraTestFiles",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":ExecFiles",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":PerlExecFiles",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":ShareFiles",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":MainModule",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":AllFiles",
+ "version" : "6.030"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":NoFiles",
+ "version" : "6.030"
+ }
+ ],
+ "zilla" : {
+ "class" : "Dist::Zilla::Dist::Builder",
+ "config" : {
+ "is_trial" : 0
+ },
+ "version" : "6.030"
+ }
},
- "version" : "1.130",
- "x_serialization_backend" : "JSON::PP version 4.02"
+ "x_contributors" : [
+ "Alexander Karelas <karjala@karjala.org>",
+ "Belden Lyman <blyman@shutterstock.com>",
+ "Daniel B\u00f6hmer <dboehmer@cpan.org>",
+ "David Steinbrunner <dsteinbrunner@pobox.com>",
+ "Denis Ibaev <dionys@gmail.com>",
+ "Ed Adjei <edmund@cpan.org>",
+ "Fabrice Gabolde <fabrice.gabolde@gmail.com>",
+ "Felipe Gasper <felipe@felipegasper.com>",
+ "Fergal Daly <fergal@esatclear.ie>",
+ "George Hartzell <hartzell@alerce.com>",
+ "Graham Knop <haarg@haarg.org>",
+ "Ivan Bessarabov <ivan@bessarabov.ru>",
+ "Jos\u00e9 Joaqu\u00edn Atria <jjatria@cpan.org>",
+ "Karen Etheridge <ether@cpan.org>",
+ "Kent Fredric <kentfredric@gmail.com>",
+ "Lance Wicks <lancew@cpan.org>",
+ "Matthew Horsfall <wolfsage@gmail.com>",
+ "Michael Hamlin <myrrhlin@gmail.com>",
+ "Mohammad S Anwar <mohammad.anwar@yahoo.com>",
+ "Peter Haworth <peter.haworth@headforwards.com>",
+ "Philip J. Ludlam <p.ludlam@cv-library.co.uk>",
+ "Ricardo Signes <rjbs@semiotic.systems>",
+ "Zoffix Znet <cpan@zoffix.com>"
+ ],
+ "x_generated_by_perl" : "v5.37.2",
+ "x_rjbs_perl_window" : "long-term",
+ "x_serialization_backend" : "Cpanel::JSON::XS version 4.30",
+ "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later"
}
+
diff --git a/META.yml b/META.yml
index 3727bb3..a603d32 100644
--- a/META.yml
+++ b/META.yml
@@ -1,33 +1,451 @@
---
-abstract: unknown
+abstract: 'Extremely flexible deep comparison'
author:
- - 'Fergal Daly <fergal@esatclear.ie>'
+ - 'Fergal Daly'
+ - 'Ricardo SIGNES <cpan@semiotic.systems>'
build_requires:
ExtUtils::MakeMaker: '0'
- Test::More: '0.88'
- Test::Tester: '0.04'
+ File::Spec: '0'
+ Test::More: '0.96'
+ Test::Tester: '0.107'
configure_requires:
- ExtUtils::MakeMaker: '0'
-dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
+ ExtUtils::MakeMaker: '6.78'
+dynamic_config: 0
+generated_by: 'Dist::Zilla version 6.030, CPAN::Meta::Converter version 2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: Test-Deep
-no_index:
- directory:
- - t
- - inc
requires:
List::Util: '1.09'
Scalar::Util: '1.09'
Test::Builder: '0'
+ Test::More: '0.96'
+ perl: '5.012'
resources:
- IRC: irc://irc.perl.org/#perl-qa
- MailingList: http://lists.perl.org/list/perl-qa.html
- bugtracker: http://github.com/rjbs/Test-Deep/issues
- homepage: http://github.com/rjbs/Test-Deep/
+ bugtracker: https://github.com/rjbs/Test-Deep/issues
+ homepage: https://github.com/rjbs/Test-Deep
repository: https://github.com/rjbs/Test-Deep.git
-version: '1.130'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
+version: '1.204'
+x_Dist_Zilla:
+ perl:
+ version: '5.037002'
+ plugins:
+ -
+ class: Dist::Zilla::Plugin::Git::GatherDir
+ config:
+ Dist::Zilla::Plugin::GatherDir:
+ exclude_filename: []
+ exclude_match: []
+ follow_symlinks: 0
+ include_dotfiles: 0
+ prefix: ''
+ prune_directory: []
+ root: .
+ Dist::Zilla::Plugin::Git::GatherDir:
+ include_untracked: 0
+ name: '@Filter/Git::GatherDir'
+ version: '2.048'
+ -
+ class: Dist::Zilla::Plugin::CheckPrereqsIndexed
+ name: '@Filter/CheckPrereqsIndexed'
+ version: '0.021'
+ -
+ class: Dist::Zilla::Plugin::CheckExtraTests
+ name: '@Filter/CheckExtraTests'
+ version: '0.029'
+ -
+ class: Dist::Zilla::Plugin::PromptIfStale
+ config:
+ Dist::Zilla::Plugin::PromptIfStale:
+ check_all_plugins: 0
+ check_all_prereqs: 0
+ modules:
+ - Dist::Zilla::PluginBundle::RJBS
+ phase: build
+ run_under_travis: 0
+ skip: []
+ name: '@Filter/RJBS-Outdated'
+ version: '0.057'
+ -
+ class: Dist::Zilla::Plugin::PromptIfStale
+ config:
+ Dist::Zilla::Plugin::PromptIfStale:
+ check_all_plugins: 1
+ check_all_prereqs: 0
+ modules: []
+ phase: release
+ run_under_travis: 0
+ skip:
+ - Dist::Zilla::Plugin::RJBSMisc
+ name: '@Filter/CPAN-Outdated'
+ version: '0.057'
+ -
+ class: Dist::Zilla::Plugin::PruneCruft
+ name: '@Filter/@Filter/PruneCruft'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::ManifestSkip
+ name: '@Filter/@Filter/ManifestSkip'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::MetaYAML
+ name: '@Filter/@Filter/MetaYAML'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::License
+ name: '@Filter/@Filter/License'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::Readme
+ name: '@Filter/@Filter/Readme'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::ExecDir
+ name: '@Filter/@Filter/ExecDir'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::ShareDir
+ name: '@Filter/@Filter/ShareDir'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::Manifest
+ name: '@Filter/@Filter/Manifest'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::TestRelease
+ name: '@Filter/@Filter/TestRelease'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::ConfirmRelease
+ name: '@Filter/@Filter/ConfirmRelease'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::UploadToCPAN
+ name: '@Filter/@Filter/UploadToCPAN'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::MakeMaker
+ config:
+ Dist::Zilla::Role::TestRunner:
+ default_jobs: 9
+ name: '@Filter/MakeMaker'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::Git::NextVersion
+ config:
+ Dist::Zilla::Plugin::Git::NextVersion:
+ first_version: '0.001'
+ version_by_branch: 1
+ version_regexp: (?^:^([0-9]+\.[0-9]+)$)
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.38.0
+ repo_root: .
+ name: '@Filter/Git::NextVersion'
+ version: '2.048'
+ -
+ class: Dist::Zilla::Plugin::PkgVersion
+ name: '@Filter/PkgVersion'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::MetaConfig
+ name: '@Filter/MetaConfig'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::MetaJSON
+ name: '@Filter/MetaJSON'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::NextRelease
+ name: '@Filter/NextRelease'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::Test::ChangesHasContent
+ name: '@Filter/Test::ChangesHasContent'
+ version: '0.011'
+ -
+ class: Dist::Zilla::Plugin::PodSyntaxTests
+ name: '@Filter/PodSyntaxTests'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::Test::ReportPrereqs
+ name: '@Filter/Test::ReportPrereqs'
+ version: '0.028'
+ -
+ class: Dist::Zilla::Plugin::Git::Remote::Check
+ name: '@Filter/Git::Remote::Check'
+ version: 0.1.2
+ -
+ class: Dist::Zilla::Plugin::Prereqs
+ config:
+ Dist::Zilla::Plugin::Prereqs:
+ phase: test
+ type: requires
+ name: '@Filter/TestMoreWithSubtests'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::PodWeaver
+ config:
+ Dist::Zilla::Plugin::PodWeaver:
+ config_plugins:
+ - '@RJBS'
+ finder:
+ - ':InstallModules'
+ - ':ExecFiles'
+ plugins:
+ -
+ class: Pod::Weaver::Plugin::EnsurePod5
+ name: '@CorePrep/EnsurePod5'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Plugin::H1Nester
+ name: '@CorePrep/H1Nester'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Plugin::SingleEncoding
+ name: '@RJBS/SingleEncoding'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Name
+ name: '@RJBS/Name'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Version
+ name: '@RJBS/Version'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Region
+ name: '@RJBS/Prelude'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Synopsis'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Description'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Overview'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Stability'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::GenerateSection
+ name: '@RJBS/PerlSupport'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Collect
+ name: Attributes
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Collect
+ name: Methods
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Collect
+ name: Functions
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Leftovers
+ name: '@RJBS/Leftovers'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Region
+ name: '@RJBS/postlude'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Authors
+ name: '@RJBS/Authors'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Section::Contributors
+ name: '@RJBS/Contributors'
+ version: '0.009'
+ -
+ class: Pod::Weaver::Section::Legal
+ name: '@RJBS/Legal'
+ version: '4.018'
+ -
+ class: Pod::Weaver::Plugin::Transformer
+ name: '@RJBS/List'
+ version: '4.018'
+ name: '@Filter/PodWeaver'
+ version: '4.009'
+ -
+ class: Dist::Zilla::Plugin::RJBSMisc
+ name: '@Filter/RJBSMisc'
+ version: '5.021'
+ -
+ class: Dist::Zilla::Plugin::GithubMeta
+ name: '@Filter/GithubMeta'
+ version: '0.58'
+ -
+ class: Dist::Zilla::Plugin::Git::Check
+ config:
+ Dist::Zilla::Plugin::Git::Check:
+ untracked_files: die
+ Dist::Zilla::Role::Git::DirtyFiles:
+ allow_dirty:
+ - Changes
+ - dist.ini
+ allow_dirty_match: []
+ changelog: Changes
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.38.0
+ repo_root: .
+ name: '@Filter/@Git/Check'
+ version: '2.048'
+ -
+ class: Dist::Zilla::Plugin::Git::Commit
+ config:
+ Dist::Zilla::Plugin::Git::Commit:
+ add_files_in: []
+ commit_msg: v%V%n%n%c
+ signoff: 0
+ Dist::Zilla::Role::Git::DirtyFiles:
+ allow_dirty:
+ - Changes
+ - dist.ini
+ allow_dirty_match: []
+ changelog: Changes
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.38.0
+ repo_root: .
+ Dist::Zilla::Role::Git::StringFormatter:
+ time_zone: local
+ name: '@Filter/@Git/Commit'
+ version: '2.048'
+ -
+ class: Dist::Zilla::Plugin::Git::Tag
+ config:
+ Dist::Zilla::Plugin::Git::Tag:
+ branch: ~
+ changelog: Changes
+ signed: 0
+ tag: '1.204'
+ tag_format: '%v'
+ tag_message: v%V
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.38.0
+ repo_root: .
+ Dist::Zilla::Role::Git::StringFormatter:
+ time_zone: local
+ name: '@Filter/@Git/Tag'
+ version: '2.048'
+ -
+ class: Dist::Zilla::Plugin::Git::Push
+ config:
+ Dist::Zilla::Plugin::Git::Push:
+ push_to:
+ - 'github :'
+ remotes_must_exist: 0
+ Dist::Zilla::Role::Git::Repo:
+ git_version: 2.38.0
+ repo_root: .
+ name: '@Filter/@Git/Push'
+ version: '2.048'
+ -
+ class: Dist::Zilla::Plugin::Git::Contributors
+ config:
+ Dist::Zilla::Plugin::Git::Contributors:
+ git_version: 2.38.0
+ include_authors: 0
+ include_releaser: 1
+ order_by: name
+ paths: []
+ name: '@Filter/Git::Contributors'
+ version: '0.036'
+ -
+ class: Dist::Zilla::Plugin::Prereqs
+ config:
+ Dist::Zilla::Plugin::Prereqs:
+ phase: runtime
+ type: requires
+ name: Prereqs
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::Prereqs
+ config:
+ Dist::Zilla::Plugin::Prereqs:
+ phase: test
+ type: requires
+ name: TestRequires
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':InstallModules'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':IncModules'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':TestFiles'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':ExtraTestFiles'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':ExecFiles'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':PerlExecFiles'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':ShareFiles'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':MainModule'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':AllFiles'
+ version: '6.030'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':NoFiles'
+ version: '6.030'
+ zilla:
+ class: Dist::Zilla::Dist::Builder
+ config:
+ is_trial: 0
+ version: '6.030'
+x_contributors:
+ - 'Alexander Karelas <karjala@karjala.org>'
+ - 'Belden Lyman <blyman@shutterstock.com>'
+ - 'Daniel Böhmer <dboehmer@cpan.org>'
+ - 'David Steinbrunner <dsteinbrunner@pobox.com>'
+ - 'Denis Ibaev <dionys@gmail.com>'
+ - 'Ed Adjei <edmund@cpan.org>'
+ - 'Fabrice Gabolde <fabrice.gabolde@gmail.com>'
+ - 'Felipe Gasper <felipe@felipegasper.com>'
+ - 'Fergal Daly <fergal@esatclear.ie>'
+ - 'George Hartzell <hartzell@alerce.com>'
+ - 'Graham Knop <haarg@haarg.org>'
+ - 'Ivan Bessarabov <ivan@bessarabov.ru>'
+ - 'José Joaquín Atria <jjatria@cpan.org>'
+ - 'Karen Etheridge <ether@cpan.org>'
+ - 'Kent Fredric <kentfredric@gmail.com>'
+ - 'Lance Wicks <lancew@cpan.org>'
+ - 'Matthew Horsfall <wolfsage@gmail.com>'
+ - 'Michael Hamlin <myrrhlin@gmail.com>'
+ - 'Mohammad S Anwar <mohammad.anwar@yahoo.com>'
+ - 'Peter Haworth <peter.haworth@headforwards.com>'
+ - 'Philip J. Ludlam <p.ludlam@cv-library.co.uk>'
+ - 'Ricardo Signes <rjbs@semiotic.systems>'
+ - 'Zoffix Znet <cpan@zoffix.com>'
+x_generated_by_perl: v5.37.2
+x_rjbs_perl_window: long-term
+x_serialization_backend: 'YAML::Tiny version 1.73'
+x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later'
diff --git a/Makefile.PL b/Makefile.PL
index 17daa0e..24b920a 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -1,75 +1,58 @@
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.030.
use strict;
-
-use ExtUtils::MakeMaker;
-
-# this ugliness comes from incompatibility of certain versions of
-# Test::Tester with certain version of Test::Builder. The problem is
-# that people might have an old TT lying around and are also likely to
-# have quite a new TB. This detects that situation and hopefully
-# demands an install of a newer TT.
-
-my $tt_prereq = "0.04";
-
-if (eval { require Test::Tester; require Test::Builder; 1 } &&
- $Test::Tester::VERSION <= 0.106 &&
- $Test::Builder::VERSION >= 0.78) {
-
- $tt_prereq = "0.107";
-}
-
-my $mm_ver = ExtUtils::MakeMaker->VERSION;
-
-my %t_prereq = (
- 'Test::More' => '0.88',
- 'Test::Tester' => $tt_prereq,
+use warnings;
+
+use 5.012;
+
+use ExtUtils::MakeMaker 6.78;
+
+my %WriteMakefileArgs = (
+ "ABSTRACT" => "Extremely flexible deep comparison",
+ "AUTHOR" => "Fergal Daly, Ricardo SIGNES <cpan\@semiotic.systems>",
+ "CONFIGURE_REQUIRES" => {
+ "ExtUtils::MakeMaker" => "6.78"
+ },
+ "DISTNAME" => "Test-Deep",
+ "LICENSE" => "perl",
+ "MIN_PERL_VERSION" => "5.012",
+ "NAME" => "Test::Deep",
+ "PREREQ_PM" => {
+ "List::Util" => "1.09",
+ "Scalar::Util" => "1.09",
+ "Test::Builder" => 0,
+ "Test::More" => "0.96"
+ },
+ "TEST_REQUIRES" => {
+ "ExtUtils::MakeMaker" => 0,
+ "File::Spec" => 0,
+ "Test::More" => "0.96",
+ "Test::Tester" => "0.107"
+ },
+ "VERSION" => "1.204",
+ "test" => {
+ "TESTS" => "t/*.t"
+ }
);
-my %prereq = (
- 'Test::Builder' => '0',
- 'Scalar::Util' => '1.09',
-
- # apparently CPAN doesn't get the version of Scalar::Util
- 'List::Util' => '1.09',
- ($mm_ver < 6.55_01 ? %t_prereq : ()),
+my %FallbackPrereqs = (
+ "ExtUtils::MakeMaker" => 0,
+ "File::Spec" => 0,
+ "List::Util" => "1.09",
+ "Scalar::Util" => "1.09",
+ "Test::Builder" => 0,
+ "Test::More" => "0.96",
+ "Test::Tester" => "0.107"
);
-my %extra_meta = $mm_ver >= 6.55_01
- ? $mm_ver >= 6.63_03 ? (TEST_REQUIRES => \%t_prereq)
- : (BUILD_REQUIRES => \%t_prereq)
- : ();
-
-WriteMakefile(
- AUTHOR => 'Fergal Daly <fergal@esatclear.ie>',
- NAME => 'Test::Deep',
- VERSION_FROM => './lib/Test/Deep.pm',
- PREREQ_PM => \%prereq,
- %extra_meta,
- LICENSE => "perl",
-
- # This is a dumb mistake. Why did it get done? I'm the one who did it and I
- # don't know. It only affects perl 5.8, and stopping doing it now would be a
- # problem, because upgrades wouldn't actually upgrade. I'll just leave it
- # here until 5.8 is really and truly dead enough. -- rjbs, 2013-11-30
- ($] < 5.010 ? (INSTALLDIRS => 'perl') : ()),
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+ delete $WriteMakefileArgs{TEST_REQUIRES};
+ delete $WriteMakefileArgs{BUILD_REQUIRES};
+ $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
+}
- ($mm_ver < 6.46 ? () : (META_MERGE => {
- 'meta-spec' => { version => 2 },
- dynamic_config => 1,
- resources => {
- homepage => 'http://github.com/rjbs/Test-Deep/',
- repository => {
- url => 'https://github.com/rjbs/Test-Deep.git',
- web => 'https://github.com/rjbs/Test-Deep',
- type => 'git',
- },
- bugtracker => {
- web => 'http://github.com/rjbs/Test-Deep/issues',
- },
- x_MailingList => 'http://lists.perl.org/list/perl-qa.html',
- x_IRC => 'irc://irc.perl.org/#perl-qa',
- },
- })),
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+ unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
-);
+WriteMakefile(%WriteMakefileArgs);
diff --git a/README b/README
index d07c6b4..544f896 100644
--- a/README
+++ b/README
@@ -1,10 +1,12 @@
-This module gives you lots of flexibility when testing deep structures.
+This archive contains the distribution Test-Deep,
+version 1.204:
-Install as usual - untar it the
+ Extremely flexible deep comparison
-perl Makefile.PL
-make
-make test
-make install
+This software is copyright (c) 2003 by Fergal Daly.
-See the pod for full details of how to use this.
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+
+This README file was generated by Dist::Zilla::Plugin::Readme v6.030.
diff --git a/dist.ini b/dist.ini
new file mode 100644
index 0000000..0b95d2a
--- /dev/null
+++ b/dist.ini
@@ -0,0 +1,20 @@
+name = Test-Deep
+author = Fergal Daly
+author = Ricardo SIGNES <cpan@semiotic.systems>
+license = Perl_5
+copyright_holder = Fergal Daly
+copyright_year = 2003
+
+[@Filter]
+-bundle = @RJBS
+-remove = AutoPrereqs
+perl-window = long-term
+
+[Prereqs]
+List::Util = 1.09
+Scalar::Util = 1.09
+Test::More = 0.88
+Test::Builder = 0
+
+[Prereqs / TestRequires]
+Test::Tester = 0.107
diff --git a/lib/Test/Deep.pm b/lib/Test/Deep.pm
index e8c332e..531fc1b 100644
--- a/lib/Test/Deep.pm
+++ b/lib/Test/Deep.pm
@@ -1,7 +1,10 @@
+use v5.10.0;
use strict;
use warnings;
-package Test::Deep;
+package Test::Deep 1.204;
+# ABSTRACT: Extremely flexible deep comparison
+
use Carp qw( confess );
use Test::Deep::Cache;
@@ -21,9 +24,6 @@ unless (defined $Test::Deep::NoTest::NoTest)
our ($Stack, %Compared, $CompareCache, %WrapCache, $Shallow);
-our $VERSION = '1.130';
-$VERSION =~ tr/_//d;
-
require Exporter;
our @ISA = qw( Exporter );
@@ -79,7 +79,16 @@ while (my ($pkg, $name) = splice @constructors, 0, 2)
my $file = "$full_pkg.pm";
$file =~ s#::#/#g;
my $sub = sub {
- require $file;
+ # We might be in the middle of testing one of the globals that require()
+ # overwrites. To simplify test authorship, we'll preserve any existing
+ # value.
+ {
+ local $@;
+ local $!;
+ local $^E;
+ require $file;
+ }
+
return $full_pkg->new(@_);
};
{
@@ -301,9 +310,9 @@ sub deep_diag
if (not defined $diag)
{
- $got = $exp->renderGot($last->{got}) unless defined $got;
- $expected = $exp->renderExp unless defined $expected;
- $message = "Compared $where" unless defined $message;
+ $got //= $exp->renderGot($last->{got});
+ $expected //= $exp->renderExp;
+ $message //= "Compared $where";
$diag = <<EOM
$message
@@ -636,12 +645,18 @@ sub builder
1;
-__END__
+=pod
+
+=encoding UTF-8
=head1 NAME
Test::Deep - Extremely flexible deep comparison
+=head1 VERSION
+
+version 1.204
+
=head1 SYNOPSIS
use Test::More tests => $Num_Tests;
@@ -699,6 +714,16 @@ instead. Test::Deep provides pattern matching for complex data structures
Test::Deep has B<I<a lot>> of exports. See L</EXPORTS> below.
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
=head1 EXAMPLES
How Test::Deep works is much easier to understand by seeing some examples.
@@ -746,7 +771,6 @@ didn't even return a hash? We really need to write
Already this is getting messy, now imagine another entry in the hash, an
array of children's names. This would require
-
if (ref($hash) eq "HASH")
{
like($hash->{Name}, $name_pat, "name ok");
@@ -1827,26 +1851,1324 @@ the Test::Deep plugins will be loaded immediately instead of lazily.
L<Test::More>
-=head1 MAINTAINER
+=head1 THANKS
+
+Thanks to Michael G Schwern for Test::More's is_deeply function which inspired
+this library.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 CONTRIBUTORS
+
+=for stopwords Alexander Karelas Belden Lyman Daniel Böhmer David Steinbrunner Denis Ibaev Ed Adjei Fabrice Gabolde Felipe Gasper Fergal Daly George Hartzell Graham Knop Ivan Bessarabov José Joaquín Atria Karen Etheridge Kent Fredric Lance Wicks Matthew Horsfall Michael Hamlin Mohammad S Anwar Peter Haworth Philip J. Ludlam Ricardo Signes Zoffix Znet
+
+=over 4
+
+=item *
+
+Alexander Karelas <karjala@karjala.org>
+
+=item *
+
+Belden Lyman <blyman@shutterstock.com>
+
+=item *
+
+Daniel Böhmer <dboehmer@cpan.org>
+
+=item *
+
+David Steinbrunner <dsteinbrunner@pobox.com>
+
+=item *
+
+Denis Ibaev <dionys@gmail.com>
- Ricardo Signes <rjbs@cpan.org>
+=item *
-=head1 AUTHOR
+Ed Adjei <edmund@cpan.org>
-Fergal Daly E<lt>fergal@esatclear.ieE<gt>, with thanks to Michael G Schwern
-for Test::More's is_deeply function which inspired this.
+=item *
-B<Please> do not bother Fergal Daly with bug reports. Send them to the
-maintainer (above) or submit them at L<the issue
-tracker|https://github.com/rjbs/Test-Deep/issues>.
+Fabrice Gabolde <fabrice.gabolde@gmail.com>
-=head1 COPYRIGHT
+=item *
-Copyright 2003, 2004 by Fergal Daly E<lt>fergal@esatclear.ieE<gt>.
+Felipe Gasper <felipe@felipegasper.com>
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
+=item *
-See F<http://www.perl.com/perl/misc/Artistic.html>
+Fergal Daly <fergal@esatclear.ie>
+
+=item *
+
+George Hartzell <hartzell@alerce.com>
+
+=item *
+
+Graham Knop <haarg@haarg.org>
+
+=item *
+
+Ivan Bessarabov <ivan@bessarabov.ru>
+
+=item *
+
+José Joaquín Atria <jjatria@cpan.org>
+
+=item *
+
+Karen Etheridge <ether@cpan.org>
+
+=item *
+
+Kent Fredric <kentfredric@gmail.com>
+
+=item *
+
+Lance Wicks <lancew@cpan.org>
+
+=item *
+
+Matthew Horsfall <wolfsage@gmail.com>
+
+=item *
+
+Michael Hamlin <myrrhlin@gmail.com>
+
+=item *
+
+Mohammad S Anwar <mohammad.anwar@yahoo.com>
+
+=item *
+
+Peter Haworth <peter.haworth@headforwards.com>
+
+=item *
+
+Philip J. Ludlam <p.ludlam@cv-library.co.uk>
+
+=item *
+
+Ricardo Signes <rjbs@semiotic.systems>
+
+=item *
+
+Zoffix Znet <cpan@zoffix.com>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
=cut
+
+__END__
+
+#pod =head1 SYNOPSIS
+#pod
+#pod use Test::More tests => $Num_Tests;
+#pod use Test::Deep;
+#pod
+#pod cmp_deeply(
+#pod $actual_horrible_nested_data_structure,
+#pod $expected_horrible_nested_data_structure,
+#pod "got the right horrible nested data structure"
+#pod );
+#pod
+#pod cmp_deeply(
+#pod $object,
+#pod methods(name => "John", phone => "55378008"),
+#pod "object methods ok"
+#pod );
+#pod
+#pod cmp_deeply(
+#pod \@array,
+#pod [$hash1, $hash2, ignore()],
+#pod "first 2 elements are as expected, ignoring 3"
+#pod );
+#pod
+#pod cmp_deeply(
+#pod $object,
+#pod noclass({value => 5}),
+#pod "object looks ok, not checking its class"
+#pod );
+#pod
+#pod cmp_deeply(
+#pod \@result,
+#pod bag('a', 'b', {key => [1, 2]}),
+#pod "array has the 3 things we wanted in some order"
+#pod );
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod If you don't know anything about automated testing in Perl then you should
+#pod probably read about L<Test::Simple> and L<Test::More> before preceding.
+#pod Test::Deep uses the L<Test::Builder> framework.
+#pod
+#pod Test::Deep gives you very flexible ways to check that the result you got is
+#pod the result you were expecting. At its simplest it compares two structures
+#pod by going through each level, ensuring that the values match, that arrays and
+#pod hashes have the same elements and that references are blessed into the
+#pod correct class. It also handles circular data structures without getting
+#pod caught in an infinite loop.
+#pod
+#pod Where it becomes more interesting is in allowing you to do something besides
+#pod simple exact comparisons. With strings, the C<eq> operator checks that 2
+#pod strings are exactly equal but sometimes that's not what you want. When you
+#pod don't know exactly what the string should be but you do know some things
+#pod about how it should look, C<eq> is no good and you must use pattern matching
+#pod instead. Test::Deep provides pattern matching for complex data structures
+#pod
+#pod Test::Deep has B<I<a lot>> of exports. See L</EXPORTS> below.
+#pod
+#pod =head1 EXAMPLES
+#pod
+#pod How Test::Deep works is much easier to understand by seeing some examples.
+#pod
+#pod =head2 Without Test::Deep
+#pod
+#pod Say you want to test a function which returns a string. You know that your
+#pod string should be a 7 digit number beginning with 0, C<eq> is no good in this
+#pod situation, you need a regular expression. So you could use Test::More's
+#pod C<like()> function:
+#pod
+#pod like($string, qr/^0[0-9]{6}$/, "number looks good");
+#pod
+#pod Similarly, to check that a string looks like a name, you could do:
+#pod
+#pod like($string, qr/^(Mr|Mrs|Miss) \w+ \w+$/,
+#pod "got title, first and last name");
+#pod
+#pod Now imagine your function produces a hash with some personal details in it.
+#pod You want to make sure that there are 2 keys, Name and Phone and that the
+#pod name looks like a name and the phone number looks like a phone number. You
+#pod could do:
+#pod
+#pod $hash = make_person();
+#pod like($hash->{Name}, qr/^(Mr|Mrs|Miss) \w+ \w+$/, "name ok");
+#pod like($hash->{Phone}, qr/^0[0-9]{6}$/, "phone ok");
+#pod is(scalar keys %$hash, 2, "correct number of keys");
+#pod
+#pod But that's not quite right, what if make_person has a serious problem and
+#pod didn't even return a hash? We really need to write
+#pod
+#pod if (ref($hash) eq "HASH")
+#pod {
+#pod like($hash->{Name}, qr/^(Mr|Mrs|Miss) \w+ \w+$/, "name ok");
+#pod like($hash->{Phone}, qr/^0[0-9]{6}$/, "phone ok");
+#pod is(scalar keys %$hash, 2, "correct number of keys");
+#pod }
+#pod else
+#pod {
+#pod fail("person not a hash");
+#pod fail("person not a hash");
+#pod fail("person not a hash"); # need 3 to keep the plan correct
+#pod }
+#pod
+#pod Already this is getting messy, now imagine another entry in the hash, an
+#pod array of children's names. This would require
+#pod
+#pod
+#pod if (ref($hash) eq "HASH")
+#pod {
+#pod like($hash->{Name}, $name_pat, "name ok");
+#pod like($hash->{Phone}, '/^0d{6}$/', "phone ok");
+#pod my $cn = $hash->{ChildNames};
+#pod if (ref($cn) eq "ARRAY")
+#pod {
+#pod foreach my $child (@$cn)
+#pod {
+#pod like($child, $name_pat);
+#pod }
+#pod }
+#pod else
+#pod {
+#pod fail("child names not an array")
+#pod }
+#pod }
+#pod else
+#pod {
+#pod fail("person not a hash");
+#pod }
+#pod
+#pod This is a horrible mess and because we don't know in advance how many
+#pod children's names there will be, we can't make a plan for our test anymore
+#pod (actually, we could but it would make things even more complicated).
+#pod
+#pod Test::Deep to the rescue.
+#pod
+#pod =head2 With Test::Deep
+#pod
+#pod my $name_re = re('^(Mr|Mrs|Miss) \w+ \w+$');
+#pod cmp_deeply(
+#pod $person,
+#pod {
+#pod Name => $name_re,
+#pod Phone => re('^0d{6}$'),
+#pod ChildNames => array_each($name_re)
+#pod },
+#pod "person ok"
+#pod );
+#pod
+#pod This will do everything that the messy code above does and it will give a
+#pod sensible message telling you exactly what went wrong if it finds a part of
+#pod $person that doesn't match the pattern. C<re()> and C<array_each()> are
+#pod special function imported from Test::Deep. They create a marker that tells
+#pod Test::Deep that something different is happening here. Instead of just doing
+#pod a simple comparison and checking are two things exactly equal, it should do
+#pod something else.
+#pod
+#pod If a person was asked to check that 2 structures are equal, they could print
+#pod them both out and compare them line by line. The markers above are similar
+#pod to writing a note in red pen on one of the printouts telling the person that
+#pod for this piece of the structure, they should stop doing simple line by line
+#pod comparison and do something else.
+#pod
+#pod C<re($regex)> means that Test::Deep should check that the current piece of
+#pod data matches the regex in C<$regex>. C<array_each($struct)> means that
+#pod Test::Deep should expect the current piece of data to be an array and it
+#pod should check that every element of that array matches C<$struct>.
+#pod In this case, every element of C<< $person->{ChildNames} >> should look like a
+#pod name. If say the 3rd one didn't you would get an error message something
+#pod like
+#pod
+#pod Using Regexp on $data->{ChildNames}[3]
+#pod got : 'Queen John Paul Sartre'
+#pod expect : /^(Mr|Mrs|Miss) \w+ \w+$/
+#pod
+#pod There are lots of other special comparisons available, see
+#pod L<SPECIAL COMPARISONS PROVIDED> below for the full list.
+#pod
+#pod =head2 Reusing structures
+#pod
+#pod Test::Deep is good for reusing test structures so you can do this
+#pod
+#pod my $name_re = re('^(Mr|Mrs|Miss) \w+ \w+$');
+#pod my $person_cmp = {
+#pod Name => $name_re,
+#pod Phone => re('^0d{6}$'),
+#pod ChildNames => array_each($name_re)
+#pod };
+#pod
+#pod cmp_deeply($person1, $person_cmp, "person ok");
+#pod cmp_deeply($person2, $person_cmp, "person ok");
+#pod cmp_deeply($person3, $person_cmp, "person ok");
+#pod
+#pod You can even put $person_cmp in a module and let other people use it when
+#pod they are writing test scripts for modules that use your modules.
+#pod
+#pod To make things a little more difficult, lets change the person data
+#pod structure so that instead of a list of ChildNames, it contains a list of
+#pod hashes, one for each child. So in fact our person structure will contain
+#pod other person structures which may contain other person structures and so on.
+#pod This is easy to handle with Test::Deep because Test::Deep structures can
+#pod include themselves. Simply do
+#pod
+#pod my $name_re = re('^(Mr|Mrs|Miss) \w+ \w+$');
+#pod my $person_cmp = {
+#pod Name => $name_re,
+#pod Phone => re('^0d{6}$'),
+#pod # note no mention of Children here
+#pod };
+#pod
+#pod $person_cmp->{Children} = array_each($person_cmp);
+#pod
+#pod cmp_deeply($person, $person_cmp, "person ok");
+#pod
+#pod This will now check that $person->{Children} is an array and that every
+#pod element of that array also matches C<$person_cmp>, this includes checking
+#pod that its children also match the same pattern and so on.
+#pod
+#pod =head2 Circular data structures
+#pod
+#pod A circular data structure is one which loops back on itself, you can make
+#pod one easily by doing
+#pod
+#pod my @b;
+#pod my @a = (1, 2, 3, \@b);
+#pod push(@b, \@a);
+#pod
+#pod now C<@a> contains a reference to be C<@b> and C<@b> contains a reference to
+#pod C<@a>. This causes problems if you have a program that wants to look inside
+#pod C<@a> and keep looking deeper and deeper at every level, it could get caught
+#pod in an infinite loop looking into C<@a> then C<@b> then C<@a> then C<@b> and
+#pod so on.
+#pod
+#pod Test::Deep avoids this problem so we can extend our example further by
+#pod saying that a person should also list their parents.
+#pod
+#pod my $name_re = re('^(Mr|Mrs|Miss) \w+ \w+$');
+#pod my $person_cmp = {
+#pod Name => $name_re,
+#pod Phone => re('^0d{6}$'),
+#pod # note no mention of Children here
+#pod };
+#pod
+#pod $person_cmp->{Children} = each_array($person_cmp);
+#pod $person_cmp->{Parents} = each_array($person_cmp);
+#pod
+#pod cmp_deeply($person, $person_cmp, "person ok");
+#pod
+#pod So this will check that for each child C<$child> in C<< $person->{Children} >>
+#pod that the C<< $child->{Parents} >> matches C<$person_cmp> however it is smart
+#pod enough not to get caught in an infinite loop where it keeps bouncing between
+#pod the same Parent and Child.
+#pod
+#pod =head1 TERMINOLOGY
+#pod
+#pod C<cmp_deeply($got, $expected, $name)> takes 3 arguments. C<$got> is the
+#pod structure that you are checking, you must not include any special
+#pod comparisons in this structure or you will get a fatal error. C<$expected>
+#pod describes what Test::Deep will be looking for in $got. You can put special
+#pod comparisons in $expected if you want to.
+#pod
+#pod As Test::Deep descends through the 2 structures, it compares them one piece
+#pod at a time, so at any point in the process, Test::Deep is thinking about 2
+#pod things - the current value from C<$got> and the current value from
+#pod C<$expected>. In the documentation, I call them C<$got_v> and C<exp_v>
+#pod respectively.
+#pod
+#pod =head1 COMPARISON FUNCTIONS
+#pod
+#pod =head3 cmp_deeply
+#pod
+#pod my $ok = cmp_deeply($got, $expected, $name)
+#pod
+#pod C<$got> is the result to be checked. C<$expected> is the structure against
+#pod which C<$got> will be check. C<$name> is the test name.
+#pod
+#pod This is the main comparison function, the others are just wrappers around
+#pod this. C<$got> and C<$expected> are compared recursively. Each value in
+#pod C<$expected> defines what's expected at the corresponding location in C<$got>.
+#pod Simple scalars are compared with C<eq>. References to structures like hashes
+#pod and arrays are compared recursively.
+#pod
+#pod Items in C<$expected>, though, can also represent complex tests that check for
+#pod numbers in a given range, hashes with at least a certain set of keys, a string
+#pod matching a regex, or many other things.
+#pod
+#pod See L</WHAT ARE SPECIAL COMPARISONS> for details.
+#pod
+#pod =head3 cmp_bag
+#pod
+#pod my $ok = cmp_bag(\@got, \@bag, $name)
+#pod
+#pod Is shorthand for cmp_deeply(\@got, bag(@bag), $name)
+#pod
+#pod I<n.b.>: Both arguments must be array refs. If they aren't an exception will be
+#pod thrown.
+#pod
+#pod =head3 cmp_set
+#pod
+#pod my $ok = cmp_set(\@got, \@set, $name)
+#pod
+#pod Is shorthand for cmp_deeply(\@got, set(@set), $name)
+#pod
+#pod =head3 cmp_methods
+#pod
+#pod my $ok = cmp_methods(\@got, \@methods, $name)
+#pod
+#pod Is shorthand for cmp_deeply(\@got, methods(@methods), $name)
+#pod
+#pod =head3 eq_deeply
+#pod
+#pod my $ok = eq_deeply($got, $expected)
+#pod
+#pod This is the same as cmp_deeply() except it just returns true or
+#pod false. It does not create diagnostics or talk to L<Test::Builder>, but
+#pod if you want to use it in a non-testing environment then you should
+#pod import it through L<Test::Deep::NoTest>. For example
+#pod
+#pod use Test::Deep::NoTest;
+#pod print "a equals b" unless eq_deeply($a, $b);
+#pod
+#pod otherwise the L<Test::Builder> framework will be loaded and testing messages
+#pod will be output when your program ends.
+#pod
+#pod =head3 cmp_details
+#pod
+#pod ($ok, $stack) = cmp_details($got, $expected)
+#pod
+#pod This behaves much like eq_deeply, but it additionally allows you to
+#pod produce diagnostics in case of failure by passing the value in C<$stack>
+#pod to C<deep_diag>.
+#pod
+#pod Do not make assumptions about the structure or content of C<$stack> and
+#pod do not use it if C<$ok> contains a true value.
+#pod
+#pod See L</USING TEST::DEEP WITH TEST::BUILDER> for example uses.
+#pod
+#pod =head1 SPECIAL COMPARISONS PROVIDED
+#pod
+#pod In the documentation below, C<$got_v> is used to indicate any given value
+#pod within the C<$got> structure.
+#pod
+#pod =head3 ignore
+#pod
+#pod cmp_deeply( $got, ignore() );
+#pod
+#pod This makes Test::Deep skip tests on C<$got_v>. No matter what value C<$got_v>
+#pod has, Test::Deep will think it's correct. This is useful if some part of the
+#pod structure you are testing is very complicated and already tested elsewhere,
+#pod or if it is unpredictable.
+#pod
+#pod cmp_deeply(
+#pod $got,
+#pod {
+#pod name => 'John',
+#pod random => ignore(),
+#pod address => [ '5 A street', 'a town', 'a country' ],
+#pod }
+#pod );
+#pod
+#pod is the equivalent of checking
+#pod
+#pod $got->{name} eq 'John';
+#pod exists $got->{random};
+#pod cmp_deeply($got->{address}, ['5 A street', 'a town', 'a country']);
+#pod
+#pod =head3 methods
+#pod
+#pod cmp_deeply( $got, methods(%hash) );
+#pod
+#pod %hash is a hash of method call => expected value pairs.
+#pod
+#pod This lets you call methods on an object and check the result of each call.
+#pod The methods will be called in the order supplied. If you want to pass
+#pod arguments to the method you should wrap the method name and arguments in an
+#pod array reference.
+#pod
+#pod cmp_deeply(
+#pod $obj,
+#pod methods(name => "John", ["favourite", "food"] => "taco")
+#pod );
+#pod
+#pod is roughly the equivalent of checking that
+#pod
+#pod $obj->name eq "John"
+#pod $obj->favourite("food") eq "taco"
+#pod
+#pod The methods will be called in the order you supply them and will be called
+#pod in scalar context. If you need to test methods called in list context then
+#pod you should use C<listmethods()>.
+#pod
+#pod B<NOTE> Just as in a normal test script, you need to be careful if the
+#pod methods you call have side effects like changing the object or other objects
+#pod in the structure. Although the order of the methods is fixed, the order of
+#pod some other tests is not so if C<$expected> is
+#pod
+#pod {
+#pod manager => methods(@manager_methods),
+#pod coder => methods(@coder_methods)
+#pod }
+#pod
+#pod there is no way to know which if manager and coder will be tested first. If
+#pod the methods you are testing depend on and alter global variables or if
+#pod manager and coder are the same object then you may run into problems.
+#pod
+#pod =head3 listmethods
+#pod
+#pod cmp_deeply( $got, listmethods(%hash) );
+#pod
+#pod C<%hash> is a hash of pairs mapping method names to expected return values.
+#pod
+#pod This is almost identical to methods() except the methods are called in list
+#pod context instead of scalar context. This means that the expected return
+#pod values supplied must be in array references.
+#pod
+#pod cmp_deeply(
+#pod $obj,
+#pod listmethods(
+#pod name => [ "John" ],
+#pod ["favourites", "food"] => ["Mapo tofu", "Gongbao chicken"]
+#pod )
+#pod );
+#pod
+#pod is the equivalent of checking that
+#pod
+#pod cmp_deeply([$obj->name], ["John"]);
+#pod cmp_deeply([$obj->favourites("food")], ["Mapo tofu", "Gongbao chicken"]);
+#pod
+#pod The methods will be called in the order you supply them.
+#pod
+#pod B<NOTE> The same caveats apply as for methods().
+#pod
+#pod =head3 shallow
+#pod
+#pod cmp_deeply( $got, shallow($thing) );
+#pod
+#pod C<$thing> is a ref.
+#pod
+#pod This prevents Test::Deep from looking inside C<$thing>. It allows you to
+#pod check that C<$got_v> and C<$thing> are references to the same variable. So
+#pod
+#pod my @a = @b = (1, 2, 3);
+#pod cmp_deeply(\@a, \@b);
+#pod
+#pod will pass because C<@a> and C<@b> have the same elements however
+#pod
+#pod cmp_deeply(\@a, shallow(\@b))
+#pod
+#pod will fail because although C<\@a> and C<\@b> both contain C<1, 2, 3> they are
+#pod references to different arrays.
+#pod
+#pod =head3 noclass
+#pod
+#pod cmp_deeply( $got, noclass($thing) );
+#pod
+#pod C<$thing> is a structure to be compared against.
+#pod
+#pod This makes Test::Deep ignore the class of objects, so it just looks at the
+#pod data they contain. Class checking will be turned off until Test::Deep is
+#pod finished comparing C<$got_v> against C<$thing>. Once Test::Deep comes out of
+#pod C<$thing> it will go back to its previous setting for checking class.
+#pod
+#pod This can be useful when you want to check that objects have been
+#pod constructed correctly but you don't want to write lots of
+#pod C<bless>es. If C<@people> is an array of Person objects then
+#pod
+#pod cmp_deeply(\@people, [
+#pod bless {name => 'John', phone => '555-5555'}, "Person",
+#pod bless {name => 'Anne', phone => '444-4444'}, "Person",
+#pod ]);
+#pod
+#pod can be replaced with
+#pod
+#pod cmp_deeply(\@people, noclass([
+#pod {name => 'John', phone => '555-5555'},
+#pod {name => 'Anne', phone => '444-4444'}
+#pod ]));
+#pod
+#pod However, this is testing so you should also check that the objects are
+#pod blessed correctly. You could use a map to bless all those hashes or you
+#pod could do a second test like
+#pod
+#pod cmp_deeply(\@people, array_each(isa("Person"));
+#pod
+#pod =head3 useclass
+#pod
+#pod cmp_deeply( $got, useclass($thing) );
+#pod
+#pod This turns back on the class comparison while inside a C<noclass()>.
+#pod
+#pod cmp_deeply(
+#pod $got,
+#pod noclass(
+#pod [
+#pod useclass( $object )
+#pod ]
+#pod )
+#pod )
+#pod
+#pod In this example the class of the array reference in C<$got> is ignored but
+#pod the class of C<$object> is checked, as is the class of everything inside
+#pod C<$object>.
+#pod
+#pod =head3 re
+#pod
+#pod cmp_deeply( $got, re($regexp, $capture_data, $flags) );
+#pod
+#pod C<$regexp> is either a regular expression reference produced with C<qr/.../>
+#pod or a string which will be used to construct a regular expression.
+#pod
+#pod C<$capture_data> is optional and is used to check the strings captured by an
+#pod regex. This should can be an array ref or a Test::Deep comparator that works
+#pod on array refs.
+#pod
+#pod C<$flags> is an optional string which controls whether the regex runs as a
+#pod global match. If C<$flags> is "g" then the regex will run as C<m/$regexp/g>.
+#pod
+#pod Without C<$capture_data>, this simply compares C<$got_v> with the regular
+#pod expression provided. So
+#pod
+#pod cmp_deeply($got, [ re("ferg") ])
+#pod
+#pod is the equivalent of
+#pod
+#pod $got->[0] =~ /ferg/
+#pod
+#pod With C<$capture_data>,
+#pod
+#pod cmp_deeply($got, [re($regex, $capture_data)])
+#pod
+#pod is the equivalent of
+#pod
+#pod my @data = $got->[0] =~ /$regex/;
+#pod cmp_deeply(\@data, $capture_data);
+#pod
+#pod So you can do something simple like
+#pod
+#pod cmp_deeply($got, re(qr/(\d\d)(\w\w)/, [25, "ab" ]))
+#pod
+#pod to check that C<(\d\d)> was 25 and C<(\w\w)> was "ab" but you can also use
+#pod Test::Deep objects to do more complex testing of the captured values
+#pod
+#pod cmp_deeply(
+#pod "cat=2,dog=67,sheep=3,goat=2,dog=5",
+#pod re(
+#pod qr/(\D+)=\d+,?/,
+#pod set(qw( cat sheep dog )),
+#pod "g"
+#pod ),
+#pod );
+#pod
+#pod here, the regex will match the string and will capture the animal names and
+#pod check that they match the specified set, in this case it will fail,
+#pod complaining that "goat" is not in the set.
+#pod
+#pod =head3 all
+#pod
+#pod cmp_deeply( $got, all(@expecteds) );
+#pod
+#pod C<@expecteds> is an array of expected structures.
+#pod
+#pod This allows you to compare data against multiple expected results and make
+#pod sure each of them matches.
+#pod
+#pod cmp_deeply($got, all(isa("Person"), methods(name => 'John')))
+#pod
+#pod is equivalent to
+#pod
+#pod $got->isa("Person")
+#pod $got->name eq 'John'
+#pod
+#pod If either test fails then the whole thing is considered a fail. This is a
+#pod short-circuit test, the testing is stopped after the first failure, although
+#pod in the future it may complete all tests so that diagnostics can be output
+#pod for all failures. When reporting failure, the parts are counted from 1.
+#pod
+#pod Thanks to the magic of overloading, you can write
+#pod
+#pod any( re("^wi"), all(isa("Person"), methods(name => 'John')) )
+#pod
+#pod as
+#pod
+#pod re("^wi") | isa("Person") & methods(name => 'John')
+#pod
+#pod Note B<single> C<|> not double, as C<||> cannot be overloaded. This will
+#pod only work when there is a special comparison involved. If you write
+#pod
+#pod "john" | "anne" | "robert"
+#pod
+#pod Perl will turn this into
+#pod
+#pod "{onort"
+#pod
+#pod which is presumably not what you wanted. This is because perl ors them
+#pod together as strings before Test::Deep gets a chance to do any overload
+#pod tricks.
+#pod
+#pod =head3 any
+#pod
+#pod cmp_deeply( $got, any(@expecteds) );
+#pod
+#pod C<@expecteds> is an array of expected structures.
+#pod
+#pod This can be used to compare data against multiple expected results and make
+#pod sure that at least one of them matches. This is a short-circuit test so if
+#pod a test passes then none of the tests after that will be attempted.
+#pod
+#pod You can also use overloading with C<|> similarly to all().
+#pod
+#pod =head3 Isa
+#pod
+#pod cmp_deeply( $got, Isa($class) );
+#pod
+#pod =head3 isa
+#pod
+#pod cmp_deeply( $got, isa($class) );
+#pod
+#pod C<$class> is a class name.
+#pod
+#pod This uses C<UNIVERSAL::isa()> to check that C<$got_v> is blessed into the
+#pod class C<$class>.
+#pod
+#pod B<NOTE:> C<Isa()> does exactly as documented here, but C<isa()> is slightly
+#pod different. If C<isa()> is called with 1 argument it falls through to
+#pod C<Isa()>. If C<isa()> called with 2 arguments, it falls through to
+#pod C<UNIVERSAL::isa>. This is to prevent breakage when you import C<isa()> into
+#pod a package that is used as a class. Without this, anyone calling
+#pod C<Class-E<gt>isa($other_class)> would get the wrong answer. This is a hack
+#pod to patch over the fact that C<isa> is exported by default.
+#pod
+#pod =head3 obj_isa
+#pod
+#pod cmp_deeply( $got, obj_isa($class) );
+#pod
+#pod This test accepts only objects that are instances of C<$class> or a subclass.
+#pod Unlike the C<Isa> test, this test will never accept class names.
+#pod
+#pod =head3 array_each
+#pod
+#pod cmp_deeply( \@got, array_each($thing) );
+#pod
+#pod C<$thing> is a structure to be compared against.
+#pod
+#pod <$got_v> must be an array reference. Each element of it will be compared to
+#pod C<$thing>. This is useful when you have an array of similar things, for example
+#pod objects of a known type and you don't want to have to repeat the same test
+#pod for each one.
+#pod
+#pod my $common_tests = all(
+#pod isa("MyFile"),
+#pod methods(
+#pod handle => isa("IO::Handle")
+#pod filename => re("^/home/ted/tmp"),
+#pod )
+#pod );
+#pod
+#pod cmp_deeply($got, array_each($common_tests));
+#pod
+#pod is similar to
+#pod
+#pod foreach my $got_v (@$got) {
+#pod cmp_deeply($got_v, $common_tests)
+#pod }
+#pod
+#pod Except it will not explode if C<$got> is not an array reference. It will
+#pod check that each of the objects in C<@$got> is a MyFile and that each one
+#pod gives the correct results for its methods.
+#pod
+#pod You could go further, if for example there were 3 files and you knew the
+#pod size of each one you could do this
+#pod
+#pod cmp_deeply(
+#pod $got,
+#pod all(
+#pod array_each($common_tests),
+#pod [
+#pod methods(size => 1000),
+#pod methods(size => 200),
+#pod methods(size => 20)
+#pod ]
+#pod )
+#pod )
+#pod cmp_deeply($got, array_each($structure));
+#pod
+#pod =head3 hash_each
+#pod
+#pod cmp_deeply( \%got, hash_each($thing) );
+#pod
+#pod This test behaves like C<array_each> (see above) but tests that each hash
+#pod value passes its tests.
+#pod
+#pod =head3 str
+#pod
+#pod cmp_deeply( $got, str($string) );
+#pod
+#pod $string is a string.
+#pod
+#pod This will stringify C<$got_v> and compare it to C<$string> using C<eq>, even
+#pod if C<$got_v> is a ref. It is useful for checking the stringified value of an
+#pod overloaded reference.
+#pod
+#pod =head3 num
+#pod
+#pod cmp_deeply( $got, num($number, $tolerance) );
+#pod
+#pod C<$number> is a number.
+#pod
+#pod C<$tolerance> is an optional number.
+#pod
+#pod This will add 0 to C<$got_v> and check if it's numerically equal to
+#pod C<$number>, even if C<$got_v> is a ref. It is useful for checking the
+#pod numerical value of an overloaded reference. If C<$tolerance> is supplied
+#pod then this will check that C<$got_v> and C<$exp_v> are less than
+#pod C<$tolerance> apart. This is useful when comparing floating point numbers as
+#pod rounding errors can make it hard or impossible for C<$got_v> to be exactly
+#pod equal to C<$exp_v>. When C<$tolerance> is supplied, the test passes if
+#pod C<abs($got_v - $exp_v) <= $tolerance>.
+#pod
+#pod B<Note> in Perl, C<"12blah" == 12> because Perl will be smart and convert
+#pod "12blah" into 12. You may not want this. There was a strict mode but that is
+#pod now gone. A "looks like a number" test will replace it soon. Until then you
+#pod can usually just use the string() comparison to be more strict. This will
+#pod work fine for almost all situations, however it will not work when <$got_v>
+#pod is an overloaded value who's string and numerical values differ.
+#pod
+#pod =head3 bool, true, false
+#pod
+#pod cmp_deeply( $got, bool($value) );
+#pod cmp_deeply( $got, true );
+#pod cmp_deeply( $got, false );
+#pod
+#pod C<$value> is anything you like but it's probably best to use 0 or 1
+#pod
+#pod This will check that C<$got_v> and C<$value> have the same truth value, that
+#pod is they will give the same result when used in boolean context, like in an
+#pod C<if()> statement.
+#pod
+#pod B<Note:> C<true> and C<false> are only imported by special request.
+#pod
+#pod =head3 code
+#pod
+#pod cmp_deeply( $got, code(\&subref) );
+#pod
+#pod C<\&subref> is a reference to a subroutine which will be passed a single
+#pod argument, it then should return a true or false and possibly a string
+#pod
+#pod This will pass C<$got_v> to the subroutine which returns true or false to
+#pod indicate a pass or fail. Fails can be accompanied by a diagnostic string
+#pod which gives an explanation of why it's a fail.
+#pod
+#pod sub check_name
+#pod {
+#pod my $name = shift;
+#pod if ($boss->likes($name))
+#pod {
+#pod return 1;
+#pod }
+#pod else
+#pod {
+#pod return (0, "the boss doesn't like your name");
+#pod }
+#pod }
+#pod
+#pod cmp_deeply("Brian", code(\&check_name));
+#pod
+#pod =head2 SET COMPARISONS
+#pod
+#pod Set comparisons give special semantics to array comparisons:
+#pod
+#pod =over 4
+#pod
+#pod =item * The order of items in a set is irrelevant
+#pod
+#pod =item * The presence of duplicate items in a set is ignored.
+#pod
+#pod =back
+#pod
+#pod As such, in any set comparison, the following arrays are equal:
+#pod
+#pod [ 1, 2 ]
+#pod [ 1, 1, 2 ]
+#pod [ 1, 2, 1 ]
+#pod [ 2, 1, 1 ]
+#pod [ 1, 1, 2 ]
+#pod
+#pod All are interpreted by C<set> semantics as if the set was only specified as:
+#pod
+#pod [ 1, 2 ]
+#pod
+#pod All C<set> functions return an object which can have additional items added to
+#pod it:
+#pod
+#pod my $set = set( 1, 2 );
+#pod $set->add(1, 3, 1 ); # Set is now ( 1, 2, 3 )
+#pod
+#pod Special care must be taken when using special comparisons within sets. See
+#pod L</SPECIAL CARE WITH SPECIAL COMPARISONS IN SETS AND BAGS> for details.
+#pod
+#pod =head3 set
+#pod
+#pod cmp_deeply( \@got, set(@elements) );
+#pod
+#pod This does a set comparison, that is, it compares two arrays but ignores the
+#pod order of the elements and it ignores duplicate elements, but ensures that all
+#pod items in C<@elements> will be in C<$got> and all items in C<$got> will be
+#pod in C<@elements>.
+#pod
+#pod So the following tests will be passes, and will be equivalent:
+#pod
+#pod cmp_deeply([1, 2, 2, 3], set(3, 2, 1, 1));
+#pod cmp_deeply([1, 2, 3], set(3, 2, 1));
+#pod
+#pod =head3 supersetof
+#pod
+#pod cmp_deeply( \@got, supersetof(@elements) );
+#pod
+#pod This function works much like L<< C<set>|/set >>, and performs a set comparison
+#pod of C<$got_v> with the elements of C<@elements>.
+#pod
+#pod C<supersetof> is however slightly relaxed, such that C<$got> may contain things
+#pod not in C<@elements>, but must at least contain all C<@elements>.
+#pod
+#pod These two statements are equivalent, and will be passes:
+#pod
+#pod cmp_deeply([1,2,3,3,4,5], supersetof(2,2,3));
+#pod cmp_deeply([1,2,3,4,5], supersetof(2,3));
+#pod
+#pod But these will be failures:
+#pod
+#pod cmp_deeply([1,2,3,4,5], supersetof(2,3,6)); # 6 not in superset
+#pod cmp_deeply([1], supersetof(1,2)); # 2 not in superset
+#pod
+#pod =head3 subsetof
+#pod
+#pod cmp_deeply( \@got, subsetof(@elements) );
+#pod
+#pod This function works much like L<< C<set>|/set >>, and performs a set comparison
+#pod of C<$got_v> with the elements of C<@elements>.
+#pod
+#pod This is the inverse of C<supersetof>, which expects all unique elements found
+#pod in C<$got_v> must be in C<@elements>.
+#pod
+#pod cmp_deeply([1,2,4,5], subsetof(2,3,3) ) # Fail: 1,4 & 5 extra
+#pod cmp_deeply([2,3,3], subsetof(1,2,4,5) ) # Fail: 3 extra
+#pod cmp_deeply([2,3,3], subsetof(1,2,4,5,3)) # Pass
+#pod
+#pod =head3 none
+#pod
+#pod cmp_deeply( $got, none(@elements) );
+#pod
+#pod @elements is an array of elements, wherein no elements in C<@elements> may
+#pod be equal to C<$got_v>.
+#pod
+#pod =head3 noneof
+#pod
+#pod cmp_deeply( \@got, noneof(@elements) );
+#pod
+#pod @elements is an array of elements, wherein no elements in C<@elements> may be
+#pod found in C<$got_v>.
+#pod
+#pod For example:
+#pod
+#pod # Got has no 1, no 2, and no 3
+#pod cmp_deeply( [1], noneof( 1, 2, 3 ) ); # fail
+#pod cmp_deeply( [5], noneof( 1, 2, 3 ) ); # pass
+#pod
+#pod =head2 BAG COMPARISONS
+#pod
+#pod Bag comparisons give special semantics to array comparisons, that are similar
+#pod to L<< set comparisons|/SET COMPARISONS >>, but slightly different.
+#pod
+#pod =over 4
+#pod
+#pod =item * The order of items in a bag is irrelevant
+#pod
+#pod =item * The presence of duplicate items in a bag is B<PRESERVED>
+#pod
+#pod =back
+#pod
+#pod As such, in any bag comparison, the following arrays are equal:
+#pod
+#pod [ 1, 1, 2 ]
+#pod [ 1, 2, 1 ]
+#pod [ 2, 1, 1 ]
+#pod [ 1, 1, 2 ]
+#pod
+#pod However, they are B<NOT> equal to any of the following:
+#pod
+#pod [ 1, 2 ]
+#pod [ 1, 2, 2 ]
+#pod [ 1, 1, 1, 2 ]
+#pod
+#pod All C<bag> functions return an object which can have additional items added to
+#pod it:
+#pod
+#pod my $bag = bag( 1, 2 );
+#pod $bag->add(1, 3, 1 ); # Bag is now ( 1, 1, 1, 2, 3 )
+#pod
+#pod Special care must be taken when using special comparisons within bags. See
+#pod L</SPECIAL CARE WITH SPECIAL COMPARISONS IN SETS AND BAGS> for details.
+#pod
+#pod =head3 bag
+#pod
+#pod cmp_deeply( \@got, bag(@elements) );
+#pod
+#pod This does an order-insensitive bag comparison between C<$got> and
+#pod C<@elements>, ensuring that:
+#pod
+#pod =over 4
+#pod
+#pod =item each item in C<@elements> is found in C<$got>
+#pod
+#pod =item the number of times a C<$expected_v> is found in C<@elements> is
+#pod reflected in C<$got>
+#pod
+#pod =item no items are found in C<$got> other than those in C<@elements>.
+#pod
+#pod =back
+#pod
+#pod As such, the following are passes, and are equivalent to each other:
+#pod
+#pod cmp_deeply([1, 2, 2], bag(2, 2, 1))
+#pod cmp_deeply([2, 1, 2], bag(2, 2, 1))
+#pod cmp_deeply([2, 2, 1], bag(2, 2, 1))
+#pod
+#pod But the following are failures:
+#pod
+#pod cmp_deeply([1, 2, 2], bag(2, 2, 1, 1)) # Not enough 1's in Got
+#pod cmp_deeply([1, 2, 2, 1], bag(2, 2, 1) ) # Too many 1's in Got
+#pod
+#pod =head3 superbagof
+#pod
+#pod cmp_deeply( \@got, superbagof( @elements ) );
+#pod
+#pod This function works much like L<< C<bag>|/bag >>, and performs a bag comparison
+#pod of C<$got_v> with the elements of C<@elements>.
+#pod
+#pod C<superbagof> is however slightly relaxed, such that C<$got> may contain things
+#pod not in C<@elements>, but must at least contain all C<@elements>.
+#pod
+#pod So:
+#pod
+#pod # pass
+#pod cmp_deeply( [1, 1, 2], superbagof( 1 ) );
+#pod
+#pod # fail: not enough 1's in superbag
+#pod cmp_deeply( [1, 1, 2], superbagof( 1, 1, 1 ));
+#pod
+#pod =head3 subbagof
+#pod
+#pod cmp_deeply( \@got, subbagof(@elements) );
+#pod
+#pod This function works much like L<< C<bag>|/bag >>, and performs a bag comparison
+#pod of C<$got_v> with the elements of C<@elements>.
+#pod
+#pod This is the inverse of C<superbagof>, and expects all elements in C<$got> to
+#pod be in C<@elements>, while allowing items to exist in C<@elements> that are not
+#pod in C<$got>
+#pod
+#pod # pass
+#pod cmp_deeply( [1], subbagof( 1, 1, 2 ) );
+#pod
+#pod # fail: too many 1's in subbag
+#pod cmp_deeply( [1, 1, 1], subbagof( 1, 1, 2 ) );
+#pod
+#pod =head2 HASH COMPARISONS
+#pod
+#pod Typically, if you're doing simple hash comparisons,
+#pod
+#pod cmp_deeply( \%got, \%expected )
+#pod
+#pod is sufficient. C<cmp_deeply> will ensure C<%got> and C<%hash> have identical
+#pod keys, and each key from either has the same corresponding value.
+#pod
+#pod =head3 superhashof
+#pod
+#pod cmp_deeply( \%got, superhashof(\%hash) );
+#pod
+#pod This will check that the hash C<%$got> is a "super-hash" of C<%hash>. That
+#pod is that all the key and value pairs in C<%hash> appear in C<%$got> but
+#pod C<%$got> can have extra ones also.
+#pod
+#pod For example
+#pod
+#pod cmp_deeply({a => 1, b => 2}, superhashof({a => 1}))
+#pod
+#pod will pass but
+#pod
+#pod cmp_deeply({a => 1, b => 2}, superhashof({a => 1, c => 3}))
+#pod
+#pod will fail.
+#pod
+#pod =head3 subhashof
+#pod
+#pod cmp_deeply( \%got, subhashof(\%hash) );
+#pod
+#pod This will check that the hash C<%$got> is a "sub-hash" of C<%hash>. That is
+#pod that all the key and value pairs in C<%$got> also appear in C<%hash>.
+#pod
+#pod For example
+#pod
+#pod cmp_deeply({a => 1}, subhashof({a => 1, b => 2}))
+#pod
+#pod will pass but
+#pod
+#pod cmp_deeply({a => 1, c => 3}, subhashof({a => 1, b => 2}))
+#pod
+#pod will fail.
+#pod
+#pod =head1 DIAGNOSTIC FUNCTIONS
+#pod
+#pod =head3 deep_diag
+#pod
+#pod my $reason = deep_diag($stack);
+#pod
+#pod C<$stack> is a value returned by cmp_details. Do not call this function
+#pod if cmp_details returned a true value for C<$ok>.
+#pod
+#pod C<deep_diag()> returns a human readable string describing how the
+#pod comparison failed.
+#pod
+#pod =head1 ANOTHER EXAMPLE
+#pod
+#pod You've written a module to handle people and their film interests. Say you
+#pod have a function that returns an array of people from a query, each person is
+#pod a hash with 2 keys: Name and Age and the array is sorted by Name. You can do
+#pod
+#pod cmp_deeply(
+#pod $result,
+#pod [
+#pod {Name => 'Anne', Age => 26},
+#pod {Name => "Bill", Age => 47}
+#pod {Name => 'John', Age => 25},
+#pod ]
+#pod );
+#pod
+#pod Soon after, your query function changes and all the results now have an ID
+#pod field. Now your test is failing again because you left out ID from each of
+#pod the hashes. The problem is that the IDs are generated by the database and
+#pod you have no way of knowing what each person's ID is. With Test::Deep you can
+#pod change your query to
+#pod
+#pod cmp_deeply(
+#pod $result,
+#pod [
+#pod {Name => 'John', Age => 25, ID => ignore()},
+#pod {Name => 'Anne', Age => 26, ID => ignore()},
+#pod {Name => "Bill", Age => 47, ID => ignore()}
+#pod ]
+#pod );
+#pod
+#pod But your test still fails. Now, because you're using a database, you no
+#pod longer know what order the people will appear in. You could add a sort into
+#pod the database query but that could slow down your application. Instead you
+#pod can get Test::Deep to ignore the order of the array by doing a bag
+#pod comparison instead.
+#pod
+#pod cmp_deeply(
+#pod $result,
+#pod bag(
+#pod {Name => 'John', Age => 25, ID => ignore()},
+#pod {Name => 'Anne', Age => 26, ID => ignore()},
+#pod {Name => "Bill", Age => 47, ID => ignore()}
+#pod )
+#pod );
+#pod
+#pod Finally person gets even more complicated and includes a new field called
+#pod Movies, this is a list of movies that the person has seen recently, again
+#pod these movies could also come back in any order so we need a bag inside our
+#pod other bag comparison, giving us something like
+#pod
+#pod cmp_deeply(
+#pod $result,
+#pod bag(
+#pod {Name => 'John', Age => 25, ID => ignore(), Movies => bag(...)},
+#pod {Name => 'Anne', Age => 26, ID => ignore(), Movies => bag(...)},
+#pod {Name => "Bill", Age => 47, ID => ignore(), Movies => bag(...)}
+#pod )
+#pod );
+#pod
+#pod =head1 USING TEST::DEEP WITH TEST::BUILDER
+#pod
+#pod Combining C<cmp_details> and C<deep_diag> makes it possible to use
+#pod Test::Deep in your own test classes.
+#pod
+#pod In a L<Test::Builder> subclass, create a test method in the following
+#pod form:
+#pod
+#pod sub behaves_ok {
+#pod my $self = shift;
+#pod my $expected = shift;
+#pod my $test_name = shift;
+#pod
+#pod my $got = do_the_important_work_here();
+#pod
+#pod my ($ok, $stack) = cmp_details($got, $expected);
+#pod unless ($Test->ok($ok, $test_name)) {
+#pod my $diag = deep_diag($stack);
+#pod $Test->diag($diag);
+#pod }
+#pod }
+#pod
+#pod As the subclass defines a test class, not tests themselves, make sure it
+#pod uses L<Test::Deep::NoTest>, not C<Test::Deep> itself.
+#pod
+#pod =head1 LIMITATIONS
+#pod
+#pod Currently any CODE, GLOB or IO refs will be compared using shallow(), which
+#pod means only their memory addresses are compared.
+#pod
+#pod =head1 BUGS
+#pod
+#pod There is a bug in set and bag compare to do with competing SCs. It only
+#pod occurs when you put certain special comparisons inside bag or set
+#pod comparisons you don't need to worry about it. The full details are in the
+#pod C<bag()> docs. It will be fixed in an upcoming version.
+#pod
+#pod =head1 CAVEATS
+#pod
+#pod =head2 SPECIAL CARE WITH SPECIAL COMPARISONS IN SETS AND BAGS
+#pod
+#pod If you use certain special comparisons within a bag or set comparison there is
+#pod a danger that a test will fail when it should have passed. It can only happen
+#pod if two or more special comparisons in the bag are competing to match elements.
+#pod Consider this comparison
+#pod
+#pod cmp_deeply(['furry', 'furball'], bag(re("^fur"), re("furb")))
+#pod
+#pod There are two things that could happen, hopefully C<re("^fur")> is paired with
+#pod "furry" and C<re("^furb")> is paired with "furb" and everything is fine but it
+#pod could happen that C<re("^fur")> is paired with "furball" and then C<re("^furb")>
+#pod cannot find a match and so the test fails. Examples of other competing
+#pod comparisons are C<bag(1, 2, 2)> vs C<set(1, 2)> and
+#pod C<< methods(m1 => "v1", m2 => "v2") >> vs C<< methods(m1 => "v1") >>
+#pod
+#pod This problem is could be solved by using a slower and more complicated
+#pod algorithm for set and bag matching. Something for the future...
+#pod
+#pod =head1 WHAT ARE SPECIAL COMPARISONS?
+#pod
+#pod A special comparison (SC) is simply an object that inherits from
+#pod Test::Deep::Cmp. Whenever C<$expected_v> is an SC then instead of checking
+#pod C<$got_v eq $expected_v>, we pass control over to the SC and let it do its
+#pod thing.
+#pod
+#pod Test::Deep exports lots of SC constructors, to make it easy for you to use
+#pod them in your test scripts. For example is C<re("hello")> is just a handy way
+#pod of creating a Test::Deep::Regexp object that will match any string containing
+#pod "hello". So
+#pod
+#pod cmp_deeply([ 'a', 'b', 'hello world'], ['a', 'b', re("^hello")]);
+#pod
+#pod will check C<'a' eq 'a'>, C<'b' eq 'b'> but when it comes to comparing
+#pod C<'hello world'> and C<re("^hello")> it will see that
+#pod $expected_v is an SC and so will pass control to the Test::Deep::Regexp class
+#pod by do something like C<< $expected_v->descend($got_v) >>. The C<descend()>
+#pod method should just return true or false.
+#pod
+#pod This gives you enough to write your own SCs but I haven't documented how
+#pod diagnostics works because it's about to get an overhaul (theoretically).
+#pod
+#pod =head1 EXPORTS
+#pod
+#pod By default, Test::Deep will export everything in its C<v0> tag, as if you had
+#pod written:
+#pod
+#pod use Test::Deep ':v0';
+#pod
+#pod Those things are:
+#pod
+#pod all any array array_each arrayelementsonly arraylength arraylengthonly bag
+#pod blessed bool cmp_bag cmp_deeply cmp_methods cmp_set code eq_deeply hash
+#pod hash_each hashkeys hashkeysonly ignore Isa isa listmethods methods noclass
+#pod none noneof num obj_isa re reftype regexpmatches regexponly regexpref
+#pod regexprefonly scalarrefonly scalref set shallow str subbagof subhashof
+#pod subsetof superbagof superhashof supersetof useclass
+#pod
+#pod A slightly better set of exports is the C<v1> set. It's all the same things,
+#pod with the exception of C<Isa> and C<blessed>. If you want to import
+#pod "everything", you probably want to C<< use Test::Deep ':V1'; >>.
+#pod
+#pod There's another magic export group: C<:preload>. If that is specified, all of
+#pod the Test::Deep plugins will be loaded immediately instead of lazily.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod L<Test::More>
+#pod
+#pod =head1 THANKS
+#pod
+#pod Thanks to Michael G Schwern for Test::More's is_deeply function which inspired
+#pod this library.
+#pod
+#pod =cut
diff --git a/lib/Test/Deep/All.pm b/lib/Test/Deep/All.pm
index f982c11..84c3a56 100644
--- a/lib/Test/Deep/All.pm
+++ b/lib/Test/Deep/All.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::All;
+package Test::Deep::All 1.204;
use Scalar::Util ();
use Test::Deep::Cmp;
@@ -52,3 +52,50 @@ sub render_stack
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::All
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Any.pm b/lib/Test/Deep/Any.pm
index 2f0eb8f..aab6a2e 100644
--- a/lib/Test/Deep/Any.pm
+++ b/lib/Test/Deep/Any.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Any;
+package Test::Deep::Any 1.204;
use Scalar::Util ();
use Test::Deep::Cmp;
@@ -61,3 +61,50 @@ EOM
}
4;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Any
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Array.pm b/lib/Test/Deep/Array.pm
index 8530fbd..17747f7 100644
--- a/lib/Test/Deep/Array.pm
+++ b/lib/Test/Deep/Array.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Array;
+package Test::Deep::Array 1.204;
use Test::Deep::Ref;
@@ -34,3 +34,50 @@ sub reset_arrow
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Array
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/ArrayEach.pm b/lib/Test/Deep/ArrayEach.pm
index cba68ac..2912d67 100644
--- a/lib/Test/Deep/ArrayEach.pm
+++ b/lib/Test/Deep/ArrayEach.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::ArrayEach;
+package Test::Deep::ArrayEach 1.204;
use Test::Deep::Cmp;
use Scalar::Util ();
@@ -35,3 +35,50 @@ sub renderExp
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::ArrayEach
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/ArrayElementsOnly.pm b/lib/Test/Deep/ArrayElementsOnly.pm
index 4b8aa44..1be5ae7 100644
--- a/lib/Test/Deep/ArrayElementsOnly.pm
+++ b/lib/Test/Deep/ArrayElementsOnly.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::ArrayElementsOnly;
+package Test::Deep::ArrayElementsOnly 1.204;
use Test::Deep::Ref;
@@ -52,3 +52,50 @@ sub reset_arrow
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::ArrayElementsOnly
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/ArrayLength.pm b/lib/Test/Deep/ArrayLength.pm
index 8a8aab4..8576aef 100644
--- a/lib/Test/Deep/ArrayLength.pm
+++ b/lib/Test/Deep/ArrayLength.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::ArrayLength;
+package Test::Deep::ArrayLength 1.204;
use Test::Deep::Ref;
@@ -27,3 +27,50 @@ sub descend
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::ArrayLength
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/ArrayLengthOnly.pm b/lib/Test/Deep/ArrayLengthOnly.pm
index ecdb6ef..db825f6 100644
--- a/lib/Test/Deep/ArrayLengthOnly.pm
+++ b/lib/Test/Deep/ArrayLengthOnly.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::ArrayLengthOnly;
+package Test::Deep::ArrayLengthOnly 1.204;
use Test::Deep::Ref;
@@ -58,3 +58,50 @@ sub renderExp
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::ArrayLengthOnly
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Blessed.pm b/lib/Test/Deep/Blessed.pm
index 88553c9..9c50620 100644
--- a/lib/Test/Deep/Blessed.pm
+++ b/lib/Test/Deep/Blessed.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Blessed;
+package Test::Deep::Blessed 1.204;
use Test::Deep::Cmp;
@@ -45,3 +45,50 @@ sub renderGot
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Blessed
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Boolean.pm b/lib/Test/Deep/Boolean.pm
index 4860fe9..3577422 100644
--- a/lib/Test/Deep/Boolean.pm
+++ b/lib/Test/Deep/Boolean.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Boolean;
+package Test::Deep::Boolean 1.204;
use Test::Deep::Cmp;
@@ -44,3 +44,50 @@ sub renderGot
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Boolean
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Cache.pm b/lib/Test/Deep/Cache.pm
index 8cda6f8..74e3b7a 100644
--- a/lib/Test/Deep/Cache.pm
+++ b/lib/Test/Deep/Cache.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Cache;
+package Test::Deep::Cache 1.204;
use Test::Deep::Cache::Simple;
@@ -76,3 +76,50 @@ sub type
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Cache
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Cache/Simple.pm b/lib/Test/Deep/Cache/Simple.pm
index 1d8aeb3..315e456 100644
--- a/lib/Test/Deep/Cache/Simple.pm
+++ b/lib/Test/Deep/Cache/Simple.pm
@@ -1,7 +1,8 @@
use strict;
use warnings;
-package Test::Deep::Cache::Simple;
+package Test::Deep::Cache::Simple 1.204;
+
use Carp qw( confess );
use Scalar::Util qw( refaddr );
@@ -81,3 +82,50 @@ sub fn_get_key
return join(",", sort (map {refaddr($_)} @_));
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Cache::Simple
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Class.pm b/lib/Test/Deep/Class.pm
index 7fefda2..96ee175 100644
--- a/lib/Test/Deep/Class.pm
+++ b/lib/Test/Deep/Class.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Class;
+package Test::Deep::Class 1.204;
use Test::Deep::Cmp;
@@ -27,3 +27,50 @@ sub descend
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Class
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Cmp.pm b/lib/Test/Deep/Cmp.pm
index c663507..595021d 100644
--- a/lib/Test/Deep/Cmp.pm
+++ b/lib/Test/Deep/Cmp.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Cmp;
+package Test::Deep::Cmp 1.204;
use overload
'&' => \&make_all,
@@ -104,3 +104,50 @@ sub data
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Cmp
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Code.pm b/lib/Test/Deep/Code.pm
index ed9eaec..2c06bd2 100644
--- a/lib/Test/Deep/Code.pm
+++ b/lib/Test/Deep/Code.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Code;
+package Test::Deep::Code 1.204;
use Test::Deep::Cmp;
@@ -56,3 +56,50 @@ EOM
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Code
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Hash.pm b/lib/Test/Deep/Hash.pm
index c744567..d474d35 100644
--- a/lib/Test/Deep/Hash.pm
+++ b/lib/Test/Deep/Hash.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Hash;
+package Test::Deep::Hash 1.204;
use Test::Deep::Ref;
@@ -55,7 +55,7 @@ sub reset_arrow
return 0;
}
-package Test::Deep::SuperHash;
+package Test::Deep::SuperHash 1.204;
use base 'Test::Deep::Hash';
@@ -78,7 +78,7 @@ sub hash_keys
return Test::Deep::SuperHashKeys->new(keys %$exp);
}
-package Test::Deep::SubHash;
+package Test::Deep::SubHash 1.204;
use base 'Test::Deep::Hash';
@@ -102,3 +102,50 @@ sub hash_keys
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Hash
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/HashEach.pm b/lib/Test/Deep/HashEach.pm
index 3a3acf6..de09a3b 100644
--- a/lib/Test/Deep/HashEach.pm
+++ b/lib/Test/Deep/HashEach.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::HashEach;
+package Test::Deep::HashEach 1.204;
use Test::Deep::Cmp;
@@ -27,3 +27,50 @@ sub descend
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::HashEach
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/HashElements.pm b/lib/Test/Deep/HashElements.pm
index ba33ac1..bd1f3a5 100644
--- a/lib/Test/Deep/HashElements.pm
+++ b/lib/Test/Deep/HashElements.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::HashElements;
+package Test::Deep::HashElements 1.204;
use Test::Deep::Ref;
@@ -26,7 +26,7 @@ sub descend
my $master = $self->getMaster($got, $exp);
- foreach my $key (keys %$master)
+ foreach my $key (sort keys %$master)
{
$data->{index} = $key;
@@ -65,7 +65,7 @@ sub reset_arrow
return 0;
}
-package Test::Deep::SuperHashElements;
+package Test::Deep::SuperHashElements 1.204;
use base 'Test::Deep::HashElements';
@@ -78,7 +78,7 @@ sub getMaster
return $exp;
}
-package Test::Deep::SubHashElements;
+package Test::Deep::SubHashElements 1.204;
use base 'Test::Deep::HashElements';
@@ -92,3 +92,50 @@ sub getMaster
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::HashElements
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/HashKeys.pm b/lib/Test/Deep/HashKeys.pm
index 46bf9cb..631f71c 100644
--- a/lib/Test/Deep/HashKeys.pm
+++ b/lib/Test/Deep/HashKeys.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::HashKeys;
+package Test::Deep::HashKeys 1.204;
use Test::Deep::Ref;
@@ -37,7 +37,7 @@ sub hashkeysonly
return Test::Deep::HashKeysOnly->new(keys %$exp)
}
-package Test::Deep::SuperHashKeys;
+package Test::Deep::SuperHashKeys 1.204;
use base 'Test::Deep::HashKeys';
@@ -51,7 +51,7 @@ sub hashkeysonly
return Test::Deep::SuperHashKeysOnly->new(keys %$exp)
}
-package Test::Deep::SubHashKeys;
+package Test::Deep::SubHashKeys 1.204;
use base 'Test::Deep::HashKeys';
@@ -66,3 +66,50 @@ sub hashkeysonly
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::HashKeys
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/HashKeysOnly.pm b/lib/Test/Deep/HashKeysOnly.pm
index c3fb59a..cb7b15c 100644
--- a/lib/Test/Deep/HashKeysOnly.pm
+++ b/lib/Test/Deep/HashKeysOnly.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::HashKeysOnly;
+package Test::Deep::HashKeysOnly 1.204;
use Test::Deep::Ref;
@@ -95,7 +95,7 @@ sub ignoreExtra
return 0;
}
-package Test::Deep::SuperHashKeysOnly;
+package Test::Deep::SuperHashKeysOnly 1.204;
use base 'Test::Deep::HashKeysOnly';
@@ -109,7 +109,7 @@ sub ignoreExtra
return 1;
}
-package Test::Deep::SubHashKeysOnly;
+package Test::Deep::SubHashKeysOnly 1.204;
use base 'Test::Deep::HashKeysOnly';
@@ -124,3 +124,50 @@ sub ignoreExtra
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::HashKeysOnly
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Ignore.pm b/lib/Test/Deep/Ignore.pm
index 34d9c25..72ed132 100644
--- a/lib/Test/Deep/Ignore.pm
+++ b/lib/Test/Deep/Ignore.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Ignore;
+package Test::Deep::Ignore 1.204;
use Test::Deep::Cmp;
@@ -18,3 +18,50 @@ sub descend
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Ignore
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Isa.pm b/lib/Test/Deep/Isa.pm
index 3d1ef97..3668502 100644
--- a/lib/Test/Deep/Isa.pm
+++ b/lib/Test/Deep/Isa.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Isa;
+package Test::Deep::Isa 1.204;
use Test::Deep::Cmp;
use Scalar::Util;
@@ -41,3 +41,50 @@ sub renderExp
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Isa
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/ListMethods.pm b/lib/Test/Deep/ListMethods.pm
index a7eff2b..dd33280 100644
--- a/lib/Test/Deep/ListMethods.pm
+++ b/lib/Test/Deep/ListMethods.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::ListMethods;
+package Test::Deep::ListMethods 1.204;
use base 'Test::Deep::Methods';
@@ -22,3 +22,50 @@ sub render_stack
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::ListMethods
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/MM.pm b/lib/Test/Deep/MM.pm
index 49fdc28..4d0e928 100644
--- a/lib/Test/Deep/MM.pm
+++ b/lib/Test/Deep/MM.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::MM;
+package Test::Deep::MM 1.204;
sub import
{
@@ -62,3 +62,50 @@ sub init
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::MM
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Methods.pm b/lib/Test/Deep/Methods.pm
index ca5e6d6..0cde1c8 100644
--- a/lib/Test/Deep/Methods.pm
+++ b/lib/Test/Deep/Methods.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Methods;
+package Test::Deep::Methods 1.204;
use Test::Deep::Cmp;
use Scalar::Util;
@@ -81,3 +81,50 @@ sub render_stack
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Methods
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/NoTest.pm b/lib/Test/Deep/NoTest.pm
index 1cd48e4..f1b59f1 100644
--- a/lib/Test/Deep/NoTest.pm
+++ b/lib/Test/Deep/NoTest.pm
@@ -4,7 +4,8 @@ use warnings;
# this is for people who don't want Test::Builder to be loaded but want to
# use eq_deeply. It's a bit hacky...
-package Test::Deep::NoTest;
+package Test::Deep::NoTest 1.204;
+# ABSTRACT: Use Test::Deep outside of the testing framework
our $NoTest;
@@ -24,10 +25,33 @@ sub import {
1;
+#pod =head1 SYNOPSIS
+#pod
+#pod use Test::Deep::NoTest;
+#pod
+#pod if (eq_deeply($a, $b)) {
+#pod print "they were deeply equal\n";
+#pod }
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This exports all the same things as Test::Deep but it does not load
+#pod Test::Builder so it can be used in ordinary non-test situations.
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
=head1 NAME
Test::Deep::NoTest - Use Test::Deep outside of the testing framework
+=head1 VERSION
+
+version 1.204
+
=head1 SYNOPSIS
use Test::Deep::NoTest;
@@ -40,3 +64,36 @@ Test::Deep::NoTest - Use Test::Deep outside of the testing framework
This exports all the same things as Test::Deep but it does not load
Test::Builder so it can be used in ordinary non-test situations.
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/None.pm b/lib/Test/Deep/None.pm
index cfeb31e..61040df 100644
--- a/lib/Test/Deep/None.pm
+++ b/lib/Test/Deep/None.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::None;
+package Test::Deep::None 1.204;
use Test::Deep::Cmp;
@@ -60,3 +60,50 @@ EOM
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::None
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Number.pm b/lib/Test/Deep/Number.pm
index e845220..61ac31f 100644
--- a/lib/Test/Deep/Number.pm
+++ b/lib/Test/Deep/Number.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Number;
+package Test::Deep::Number 1.204;
use Test::Deep::Cmp;
@@ -78,3 +78,50 @@ sub renderExp
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Number
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Obj.pm b/lib/Test/Deep/Obj.pm
index f0e60ed..c7da63b 100644
--- a/lib/Test/Deep/Obj.pm
+++ b/lib/Test/Deep/Obj.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Obj;
+package Test::Deep::Obj 1.204;
use Test::Deep::Cmp;
use Scalar::Util;
@@ -40,3 +40,50 @@ sub renderExp
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Obj
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Ref.pm b/lib/Test/Deep/Ref.pm
index 30fc4a6..90e85e5 100644
--- a/lib/Test/Deep/Ref.pm
+++ b/lib/Test/Deep/Ref.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Ref;
+package Test::Deep::Ref 1.204;
use Test::Deep::Cmp;
@@ -34,3 +34,50 @@ sub test_reftype
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Ref
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/RefType.pm b/lib/Test/Deep/RefType.pm
index 1c55f5d..d52a057 100644
--- a/lib/Test/Deep/RefType.pm
+++ b/lib/Test/Deep/RefType.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::RefType;
+package Test::Deep::RefType 1.204;
use Test::Deep::Cmp;
@@ -44,3 +44,50 @@ sub renderGot
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::RefType
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Regexp.pm b/lib/Test/Deep/Regexp.pm
index da77cd4..01c31b3 100644
--- a/lib/Test/Deep/Regexp.pm
+++ b/lib/Test/Deep/Regexp.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Regexp;
+package Test::Deep::Regexp 1.204;
use Test::Deep::Cmp;
use Test::Deep::RegexpMatches;
@@ -100,3 +100,50 @@ sub renderGot
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Regexp
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/RegexpMatches.pm b/lib/Test/Deep/RegexpMatches.pm
index 3245865..62bc6d3 100644
--- a/lib/Test/Deep/RegexpMatches.pm
+++ b/lib/Test/Deep/RegexpMatches.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::RegexpMatches;
+package Test::Deep::RegexpMatches 1.204;
use Test::Deep::Array;
@@ -49,3 +49,50 @@ sub reset_arrow
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::RegexpMatches
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/RegexpOnly.pm b/lib/Test/Deep/RegexpOnly.pm
index e85e4e8..02a5b43 100644
--- a/lib/Test/Deep/RegexpOnly.pm
+++ b/lib/Test/Deep/RegexpOnly.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::RegexpOnly;
+package Test::Deep::RegexpOnly 1.204;
use Test::Deep::Cmp;
@@ -45,3 +45,50 @@ sub renderExp
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::RegexpOnly
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/RegexpRef.pm b/lib/Test/Deep/RegexpRef.pm
index c9656ff..feeb8c4 100644
--- a/lib/Test/Deep/RegexpRef.pm
+++ b/lib/Test/Deep/RegexpRef.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::RegexpRef;
+package Test::Deep::RegexpRef 1.204;
use Test::Deep::Ref;
use Test::Deep::RegexpVersion;
@@ -41,3 +41,50 @@ sub renderGot
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::RegexpRef
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/RegexpRefOnly.pm b/lib/Test/Deep/RegexpRefOnly.pm
index 6979748..d4d4596 100644
--- a/lib/Test/Deep/RegexpRefOnly.pm
+++ b/lib/Test/Deep/RegexpRefOnly.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::RegexpRefOnly;
+package Test::Deep::RegexpRefOnly 1.204;
use Test::Deep::Ref;
@@ -41,3 +41,50 @@ sub renderGot
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::RegexpRefOnly
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/RegexpVersion.pm b/lib/Test/Deep/RegexpVersion.pm
index 458564b..4113037 100644
--- a/lib/Test/Deep/RegexpVersion.pm
+++ b/lib/Test/Deep/RegexpVersion.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::RegexpVersion;
+package Test::Deep::RegexpVersion 1.204;
# Older versions of Perl treated Regexp refs as opaque scalars blessed
# into the "Regexp" class. Several bits of code need this so we
@@ -9,3 +9,50 @@ package Test::Deep::RegexpVersion;
our $OldStyle = ($] < 5.011);
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::RegexpVersion
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/ScalarRef.pm b/lib/Test/Deep/ScalarRef.pm
index 4f92f6d..a731b18 100644
--- a/lib/Test/Deep/ScalarRef.pm
+++ b/lib/Test/Deep/ScalarRef.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::ScalarRef;
+package Test::Deep::ScalarRef 1.204;
use Test::Deep::Ref;
@@ -27,3 +27,50 @@ sub descend
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::ScalarRef
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/ScalarRefOnly.pm b/lib/Test/Deep/ScalarRefOnly.pm
index 60c8a54..90c36f5 100644
--- a/lib/Test/Deep/ScalarRefOnly.pm
+++ b/lib/Test/Deep/ScalarRefOnly.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::ScalarRefOnly;
+package Test::Deep::ScalarRefOnly 1.204;
use Test::Deep::Cmp;
@@ -34,3 +34,50 @@ sub render_stack
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::ScalarRefOnly
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Set.pm b/lib/Test/Deep/Set.pm
index 28294f9..a78b8b5 100644
--- a/lib/Test/Deep/Set.pm
+++ b/lib/Test/Deep/Set.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Set;
+package Test::Deep::Set 1.204;
use Test::Deep::Cmp;
@@ -191,3 +191,50 @@ sub compare
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Set
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Shallow.pm b/lib/Test/Deep/Shallow.pm
index 799d293..e128c04 100644
--- a/lib/Test/Deep/Shallow.pm
+++ b/lib/Test/Deep/Shallow.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Shallow;
+package Test::Deep::Shallow 1.204;
use Test::Deep::Cmp;
@@ -49,3 +49,50 @@ sub descend
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Shallow
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/Stack.pm b/lib/Test/Deep/Stack.pm
index 9719bc4..6e87605 100644
--- a/lib/Test/Deep/Stack.pm
+++ b/lib/Test/Deep/Stack.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::Stack;
+package Test::Deep::Stack 1.204;
use Carp qw( confess );
use Scalar::Util;
@@ -83,3 +83,50 @@ sub length
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::Stack
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/lib/Test/Deep/String.pm b/lib/Test/Deep/String.pm
index 5ddb0b1..f045dd5 100644
--- a/lib/Test/Deep/String.pm
+++ b/lib/Test/Deep/String.pm
@@ -1,7 +1,7 @@
use strict;
use warnings;
-package Test::Deep::String;
+package Test::Deep::String 1.204;
use Test::Deep::Cmp;
@@ -32,3 +32,50 @@ sub diag_message
}
1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Test::Deep::String
+
+=head1 VERSION
+
+version 1.204
+
+=head1 PERL VERSION
+
+This library should run on perls released even a long time ago. It should work
+on any version of perl released in the last five years.
+
+Although it may work on older versions of perl, no guarantee is made that the
+minimum required version will not be increased. The version may be increased
+for any reason, and there is no promise that patches will be accepted to lower
+the minimum required perl.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Fergal Daly
+
+=item *
+
+Ricardo SIGNES <cpan@semiotic.systems>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2003 by Fergal Daly.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/t/00-report-prereqs.dd b/t/00-report-prereqs.dd
new file mode 100644
index 0000000..c7dd7c1
--- /dev/null
+++ b/t/00-report-prereqs.dd
@@ -0,0 +1,34 @@
+do { my $x = {
+ 'configure' => {
+ 'requires' => {
+ 'ExtUtils::MakeMaker' => '6.78'
+ }
+ },
+ 'develop' => {
+ 'requires' => {
+ 'Test::Pod' => '1.41'
+ }
+ },
+ 'runtime' => {
+ 'requires' => {
+ 'List::Util' => '1.09',
+ 'Scalar::Util' => '1.09',
+ 'Test::Builder' => '0',
+ 'Test::More' => '0.96',
+ 'perl' => '5.012'
+ }
+ },
+ 'test' => {
+ 'recommends' => {
+ 'CPAN::Meta' => '2.120900'
+ },
+ 'requires' => {
+ 'ExtUtils::MakeMaker' => '0',
+ 'File::Spec' => '0',
+ 'Test::More' => '0.96',
+ 'Test::Tester' => '0.107'
+ }
+ }
+ };
+ $x;
+ } \ No newline at end of file
diff --git a/t/00-report-prereqs.t b/t/00-report-prereqs.t
new file mode 100644
index 0000000..c3a94ca
--- /dev/null
+++ b/t/00-report-prereqs.t
@@ -0,0 +1,193 @@
+#!perl
+
+use strict;
+use warnings;
+
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.028
+
+use Test::More tests => 1;
+
+use ExtUtils::MakeMaker;
+use File::Spec;
+
+# from $version::LAX
+my $lax_version_re =
+ qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
+ |
+ (?:\.[0-9]+) (?:_[0-9]+)?
+ ) | (?:
+ v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
+ |
+ (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
+ )
+ )/x;
+
+# hide optional CPAN::Meta modules from prereq scanner
+# and check if they are available
+my $cpan_meta = "CPAN::Meta";
+my $cpan_meta_pre = "CPAN::Meta::Prereqs";
+my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic
+
+# Verify requirements?
+my $DO_VERIFY_PREREQS = 1;
+
+sub _max {
+ my $max = shift;
+ $max = ( $_ > $max ) ? $_ : $max for @_;
+ return $max;
+}
+
+sub _merge_prereqs {
+ my ($collector, $prereqs) = @_;
+
+ # CPAN::Meta::Prereqs object
+ if (ref $collector eq $cpan_meta_pre) {
+ return $collector->with_merged_prereqs(
+ CPAN::Meta::Prereqs->new( $prereqs )
+ );
+ }
+
+ # Raw hashrefs
+ for my $phase ( keys %$prereqs ) {
+ for my $type ( keys %{ $prereqs->{$phase} } ) {
+ for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
+ $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module};
+ }
+ }
+ }
+
+ return $collector;
+}
+
+my @include = qw(
+
+);
+
+my @exclude = qw(
+
+);
+
+# Add static prereqs to the included modules list
+my $static_prereqs = do './t/00-report-prereqs.dd';
+
+# Merge all prereqs (either with ::Prereqs or a hashref)
+my $full_prereqs = _merge_prereqs(
+ ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
+ $static_prereqs
+);
+
+# Add dynamic prereqs to the included modules list (if we can)
+my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+my $cpan_meta_error;
+if ( $source && $HAS_CPAN_META
+ && (my $meta = eval { CPAN::Meta->load_file($source) } )
+) {
+ $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
+}
+else {
+ $cpan_meta_error = $@; # capture error from CPAN::Meta->load_file($source)
+ $source = 'static metadata';
+}
+
+my @full_reports;
+my @dep_errors;
+my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
+
+# Add static includes into a fake section
+for my $mod (@include) {
+ $req_hash->{other}{modules}{$mod} = 0;
+}
+
+for my $phase ( qw(configure build test runtime develop other) ) {
+ next unless $req_hash->{$phase};
+ next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
+
+ for my $type ( qw(requires recommends suggests conflicts modules) ) {
+ next unless $req_hash->{$phase}{$type};
+
+ my $title = ucfirst($phase).' '.ucfirst($type);
+ my @reports = [qw/Module Want Have/];
+
+ for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
+ next if $mod eq 'perl';
+ next if grep { $_ eq $mod } @exclude;
+
+ my $file = $mod;
+ $file =~ s{::}{/}g;
+ $file .= ".pm";
+ my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
+
+ my $want = $req_hash->{$phase}{$type}{$mod};
+ $want = "undef" unless defined $want;
+ $want = "any" if !$want && $want == 0;
+
+ my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required";
+
+ if ($prefix) {
+ my $have = MM->parse_version( File::Spec->catfile($prefix, $file) );
+ $have = "undef" unless defined $have;
+ push @reports, [$mod, $want, $have];
+
+ if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) {
+ if ( $have !~ /\A$lax_version_re\z/ ) {
+ push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)";
+ }
+ elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) {
+ push @dep_errors, "$mod version '$have' is not in required range '$want'";
+ }
+ }
+ }
+ else {
+ push @reports, [$mod, $want, "missing"];
+
+ if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+ push @dep_errors, "$mod is not installed ($req_string)";
+ }
+ }
+ }
+
+ if ( @reports ) {
+ push @full_reports, "=== $title ===\n\n";
+
+ my $ml = _max( map { length $_->[0] } @reports );
+ my $wl = _max( map { length $_->[1] } @reports );
+ my $hl = _max( map { length $_->[2] } @reports );
+
+ if ($type eq 'modules') {
+ splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl];
+ push @full_reports, map { sprintf(" %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports;
+ }
+ else {
+ splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
+ push @full_reports, map { sprintf(" %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
+ }
+
+ push @full_reports, "\n";
+ }
+ }
+}
+
+if ( @full_reports ) {
+ diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports;
+}
+
+if ( $cpan_meta_error || @dep_errors ) {
+ diag "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n";
+}
+
+if ( $cpan_meta_error ) {
+ my ($orig_source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+ diag "\nCPAN::Meta->load_file('$orig_source') failed with: $cpan_meta_error\n";
+}
+
+if ( @dep_errors ) {
+ diag join("\n",
+ "\nThe following REQUIRED prerequisites were not satisfied:\n",
+ @dep_errors,
+ "\n"
+ );
+}
+
+pass('Reported prereqs');
+
+# vim: ts=4 sts=4 sw=4 et:
diff --git a/t/no-clobber-globals.t b/t/no-clobber-globals.t
new file mode 100644
index 0000000..905cc0e
--- /dev/null
+++ b/t/no-clobber-globals.t
@@ -0,0 +1,35 @@
+use strict;
+use warnings;
+use lib 't/lib';
+
+use Test::Deep;
+use Test::More 0.88;
+
+{
+ $@ = 'hello';
+ any(123);
+ is($@, 'hello', q{dynamically loaded test doesn't overwrite $@} );
+}
+
+{
+ $! = 11;
+ all(123);
+ is( 0 + $!, 11, q{dynamically loaded test doesn't overwrite $!} );
+}
+
+{
+ $^E = 11;
+ re(qr{a});
+ is( 0 + $^E, 11, q{dynamically loaded test doesn't overwrite $^E} );
+}
+
+{
+ $@ = 'hello';
+ cmp_deeply(
+ 'hello',
+ str($@),
+ 'when passing $@ to str() it is not localized away from new'
+ );
+}
+
+done_testing;
diff --git a/t/notest_withtest.t b/t/notest_withtest.t
new file mode 100644
index 0000000..d74b057
--- /dev/null
+++ b/t/notest_withtest.t
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+
+{
+ package Foo;
+ use Test::Deep::NoTest;
+
+ sub check_this {
+ return eq_deeply($_[1], []);
+ }
+}
+
+use Test::More 0.88;
+use if $ENV{AUTHOR_TESTING}, 'Test::Warnings';
+
+use Test::Deep;
+
+ok(Foo->check_this([]), 'notest 1');
+ok(! Foo->check_this({}), 'notest 2');
+cmp_deeply([], [], 'got cmp_deeply');
+
+done_testing;
diff --git a/xt/author/pod-syntax.t b/xt/author/pod-syntax.t
new file mode 100644
index 0000000..e563e5d
--- /dev/null
+++ b/xt/author/pod-syntax.t
@@ -0,0 +1,7 @@
+#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
+use strict; use warnings;
+use Test::More;
+use Test::Pod 1.41;
+
+all_pod_files_ok();
diff --git a/xt/release/changes_has_content.t b/xt/release/changes_has_content.t
new file mode 100644
index 0000000..f75851e
--- /dev/null
+++ b/xt/release/changes_has_content.t
@@ -0,0 +1,42 @@
+use Test::More tests => 2;
+
+note 'Checking Changes';
+my $changes_file = 'Changes';
+my $newver = '1.204';
+my $trial_token = '-TRIAL';
+my $encoding = 'UTF-8';
+
+SKIP: {
+ ok(-e $changes_file, "$changes_file file exists")
+ or skip 'Changes is missing', 1;
+
+ ok(_get_changes($newver), "$changes_file has content for $newver");
+}
+
+done_testing;
+
+sub _get_changes
+{
+ my $newver = shift;
+
+ # parse changelog to find commit message
+ open(my $fh, '<', $changes_file) or die "cannot open $changes_file: $!";
+ my $changelog = join('', <$fh>);
+ if ($encoding) {
+ require Encode;
+ $changelog = Encode::decode($encoding, $changelog, Encode::FB_CROAK());
+ }
+ close $fh;
+
+ my @content =
+ grep { /^$newver(?:$trial_token)?(?:\s+|$)/ ... /^\S/ } # from newver to un-indented
+ split /\n/, $changelog;
+ shift @content; # drop the version line
+
+ # drop unindented last line and trailing blank lines
+ pop @content while ( @content && $content[-1] =~ /^(?:\S|\s*$)/ );
+
+ # return number of non-blank lines
+ return scalar @content;
+}
+