Revision history for Test-Deep

0.119     2015-09-29
        - remove use of Test::NoWarnings for user-facing tests

0.118     2015-07-27 TRIAL RELEASE
        - overloading of & and | no longer can change All or Any objects
          found as arguments
        - an All as an argument to an All constructed is flattened out into its
          All-ed values; the same goes for Any

0.117     2015-06-21
        - do not lose argument(s) to import
          (fixes )

0.116     2015-06-20
        - on its own, :preload options uses default group of exports

0.115     2015-01-09
        - worked around a bug in chained goto on 5.8.5

0.114     2014-12-11
        - improve prereqs metadata (thanks, Karen Etheridge)
        - add a noneof() set test (thanks, Peter Haworth)
        - regexponly hasn't worked... ever. now it does
        - passing :preload to import loads all plugins up front
        - a few more tests have been documented
        - the many exports of Test::Deep are now documented!

0.113     2014-08-22
        - fix a compile error (!!) in RegexpOnly
        - fix some documentation typos (thanks, ZOFFIX)
        - add license to META file

0.112     2013-11-30
        - rebuild MANIFEST, adding two forgotten files

0.111     2013-11-30

        - When printing diagnostics, differentiate the type of a blessed object
          from the name of the class itself (RT#78288, caused by changes to how
          blessed objects are treated in 0.109) (thanks, Karen Etheridge)

        - Typo fixes (thanks, David Steinbrunner)

        - Fixes to clarity and accuracy of documentation (thanks, Michael Hamlin)

        - Add metadata links to repo and issue tracker

        - Added obj_isa for testing ->isa without falling back to ref($x)

        - Added the *experimental* ":v1" export group to skip importing
          Isa, isa, and blessed

0.110     2012-06-16

          Allow methods() and listmethods() to work again on class methods
          (RT#77804) (thanks, Ricardo Signes!)

0.109     2012-02-16

          UNIVERSAL::isa and UNIVERAL::can are no longer called as functions:
          this was deprecated in UNIVERSAL 1.03. (RT#74760, Karen Etheridge)

          the code that builds the exporter configuration is cleaned up; more
          documentation of how it may change (for the better, without breaking
          stuff) should appear in the near future

0.108     2010-10-15

          simple (stringwise) comparison should now be much faster (thanks,

0.107     2009-10-28

          New maintainer:  Ricardo Signes (rjbs)

          On 5.10.0 and newer perl, install to the "site" directory, not the
          core perl directory in @INC.  (Prior to 5.10.0, @INC ordering was
          unfortunate, and fixing the install target would make upgrading

          cope with new stringification of qr{} objects in 5.13.x+ (thanks,

          fix Pod escaping errors (thanks, FWIE)


          Release after dev.


          Fix for perl 5.010.1 - the code to check the version and act
          correctly on regexp refs treated .1 as behaving like 5.011.


          Document behaviour of cmp_bag when a non ARRAY-ref argument is passed
          to it. Explicity test for this a die with a useful message.

          Document and export cmp_details and deep_diag, thanks to Tom Hukins
          for the patch.


          Detect whether isa() is being called with 1 or 2 arguments and
          dispatch to the correct function. This is hacky but fixes the problem
          of clashing with UNIVERSAL::isa().


          Behave well when a code comparator doesn't give diagnostics. Thanks
          to Alex Kapranoff.


          Fix an overloading problem with All and Any. Thanks to Kostas
          Chatzikokolakis for reporting the bug and especially for explaining
          how to fix it :)

          Added a nasty hack to smooth over a problem in Test::Tester.


          Apply patch from Andreas Koenig (ANDK) to cope with Perl 5.11's new
          REGEXP objects.


          Don't explode on perl's that don't have weakrefs. If they're not
          available, just don't weaken the refs. It means refs can be cached
          for longer than desirable but it's better than explodiing.

          This doesn't fix all of te problems with perl 5.005 but I'm pushing
          it out because the previous version number upsets


          Cleaned up Test::Deep::NoTest by making it call Test::Deep's import,
          that way it will always be in sync for exports. Also added some POD

          Added notest_extra.t to check that things are correctly exported and

          Add cmp_details but left it undocumented. It manages localising the
          stack etc. Factored eq_deeply and cmp_deeply through that. This meant
          adding an icky hack into deep_diag. I should clean that whole thing

          Remove $name from params of eq_deeply, in code and docs, it was


          Fixed doc typo for re().

          Fix diagnostics for code(), it was always printing undef instead of
          the got value.


          %WrapCache was keeping references to external data. It's now
          local()ised at the start of a comparison just like the other caches
          (why I didn't do that when I added it, I don't know). Thanks to
          Matthijs Bomhoff for reporting the problem.


          Docs and code didn't match, useclass was actually requireclass,
          available as both now


          Changed Set and Bag to no longer issue warnings when undefs are
          present. Needed to make the sort and the diagnotics
          undef-aware. Thanks to Colin Kuskie for pointing this out.

          Added tests for this.


          Fixed inifinte recursion when adding comparators into bags. That
          whole area is unpleasant - conceptually as well as
          implementation-wise. Comparators no longer inherit a compare method,
          so we only call the specialised compare if it exists, otherwise we
          just do normal deep comparison.

          Removed a debugging print.


          Got the if backwards for loading Test::Builder (again for NoTest -
          simples changes...). No ill effects for most people as they load it
          via something else any but ApacheSession for example doesn't.

          Now tetsing for lack of testing framework.


          Forgot to export lots of stuff via NoTest


          Added Test::Builder::NoTest so that eq_deeply can be use entirely
          without Test::Builder.


          Wasn't corrrectly setting $Test::Builder::Level in cmp_bag, cmp_set
          and cmp_methods, this caused test error messages to include the wrong

          Whitespace changes.


          Slight twiddle to silence warnings from the new Test::Tester thanks to


          cmp_methods, cmp_bag and cmp_set weren't passing on the test name.
          Thanks to Alex Kapranoff for the patch.


          Add $tolerance to Number so now you can check that 2 numbers are
          equal, give or take a little bit.

          Autogenerating most of the convenience constructor routines, deleted
          nearly 200 lines of boilerplate. Why didn't I think of that before?

          Almost every test script had the same lines at the beginning. These
          are now in t/, another 200 lines of code (well 50% whitespace)
          gone. Happy.

          Added use warnings to the test scripts, didn't make a difference.

          Added inspection of strings captured from a regex and fixed up some
          re() doc errors.


          When a hash or array value or amethod does not exist and the expected
          value was a reference, the diagnostics were wrong because it headed
          into Reftype tests. Now Test::Deep::descend catches "Does not exist"
          early on.

          Added listmethods()


          Added subhashof and superhashof, restructured various Hash modules to
          handle sub and super.

          Got rid of unexported hash_elements from Test::Deep.

          Fixed a problem with circular set comparisons.


          The cache is more efficient, using a single layer and weak refs, also
          previously it could be fooled by reused addresses for objects (this
          is not just theoretical).

          Now Test::Deep::descend is responsible for pushing onto the stack as
          well as pulling, this means most tests don't need to think about the
          stack at all

          For the stack stuff, had to create lots of "only" modules these are
          tests that should never be called on their own as they make
          assumptions about the validity of the data, they are used as subtests
          inside others

          cleaned up lots of copy and paste Data::Dumper and confess and
          various other bits and pieces

          Test::Deep::Cmp (and it's descendants) autopush themselves onto the
          stack of any Test::Deep::* that uses them. Cuts even more cruft.

          Now everything uses the compare in Test::Deep::Cmp which just does a
          deep comparison. This is not perfect for All and Set but it's as good
          as what was happeneing before now.

          Wrapping unknown reftypes as shallow


          Got rid of silly use lib in the tests, shouldn't have been in public

          Added dependency on Test::More

          Moved from type =>, vals => to exp =>, got => in stack entries

          Individual descend()s no longer pop their data from the stack, that's
          taken care of by Test::Deep::descend. This made things simpler in all
          the comparisons.

          Added support for sub/super se/bag comparisons, thanks to Boris
          Sukholitko <>

          Added scalarref.t


          Got rid of struct mode for num()

          Large internal changes, now using a stack object rather than just an
          array.  This handles rendering the stack.

          The comparisons handle rendering the got and expected values now.

          num() and str() numify/stringify before comparing, this makes
          overload of == or eq irrelevant. This also prevents problems with the
          diag when something stringifies differently to it's numificiation or
          differently each time you look.

          fixed diag of overloaded refs to display the ref value, not the
          overloaded value

          nicer diags for booleans


          Slight doc fix

          Added coderef calling as a test


          Fixed number.t to skip strict test when if Scalar::Util is not right

          Major improvement of docs. No longer reads like it was written by a
          drunken badger.


          Overhaul of Test::Deep::descend, native types are now wrapped up in a
          Test::Deep:Cmp object, moves lots of logic out of descend

          Added ArrayLength, HashKeys, RefType, and Blessed comparisons

          All tests now use Test::NoWarnings

          Broke out descend tests into hash.t, array, regexpref.t, probably
          should break out more

          Updated version of Scalar::Util dependency, thanks to Steve Purkis


          No longer using overload::StrVal() for looking behind overloads as
          it's broken for Regexp refs in some versions of Perl.


          Documented bool and included the files!!


          cmp_deeply(undef, \"") calls overload::StrVal(undef)

          added bool test

          using Scalar::Util to get reftype and blessed class


          Added prereq to Makefile.PL


          First release