[libdata-walk-perl] 01/08: Imported Upstream version 2.01
Nick Morrott
nickm-guest at moszumanska.debian.org
Tue Aug 2 02:56:11 UTC 2016
This is an automated email from the git hooks/post-receive script.
nickm-guest pushed a commit to branch master
in repository libdata-walk-perl.
commit 5f3a731381b1ee7d43f2ce77085c18e658eceb48
Author: Nick Morrott <knowledgejunkie at gmail.com>
Date: Tue Aug 2 02:15:52 2016 +0100
Imported Upstream version 2.01
---
Build.PL | 17 +-
ChangeLog | 78 ++++----
Credits | 1 +
MANIFEST | 25 ++-
META.json | 41 ++++
META.yml | 32 +--
Makefile.PL | 33 +---
NEWS | 12 ++
README | 8 +-
ReleaseNotes | 12 ++
THANKS | 1 +
lib/Data/Walk.pm | 239 +++++++++++------------
t/00basic.t | 140 +++++++++++++
t/{TS_Basic.pm => 01by_depth.t} | 69 ++++---
t/01follow.t | 77 ++++++++
t/{TS_Options.pm => 01index.t} | 60 +++---
t/{TS_Basic.pm => 01post_process.t} | 55 +++---
t/01pre_process.t | 112 +++++++++++
t/{TS_Basic.pm => 03bugs-1.t} | 66 ++++---
t/{TS_All.pm => 04bug-container-type-by-depth.t} | 49 ++---
t/TC_Basic.pm | 214 --------------------
t/TC_Bugs.pm | 80 --------
t/TC_ByDepth.pm | 89 ---------
t/TC_Copy.pm | 88 ---------
t/TC_Examples.pm | 112 -----------
t/TC_Follow.pm | 117 -----------
t/TC_PostProcess.pm | 67 -------
t/TC_PreProcess.pm | 147 --------------
t/testrunner.t | 53 -----
29 files changed, 743 insertions(+), 1351 deletions(-)
diff --git a/Build.PL b/Build.PL
index 85a189b..3909b24 100644
--- a/Build.PL
+++ b/Build.PL
@@ -1,9 +1,7 @@
#! /usr/local/bin/perl -w
-# $Id: Build.PL,v 1.3 2006/05/11 13:56:28 guido Exp $
-
# Experimental build builder script for Data-Walk.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -34,16 +32,3 @@ my $build = Module::Build->new
);
$build->create_build_script;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/ChangeLog b/ChangeLog
index b0b8f33..1dd4abb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,20 +1,20 @@
-2006-05-11 17:11 Guido Flohr <guido at imperia.net>
+2006-05-11 17:11 Guido Flohr <guido.flohr at cantanea.com>
* x-changelog.sh: search cvs2cl in $PATH
-2006-05-11 17:10 Guido Flohr <guido at imperia.net>
+2006-05-11 17:10 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm: bumped version number to 1.00
-2006-05-11 17:10 Guido Flohr <guido at imperia.net>
+2006-05-11 17:10 Guido Flohr <guido.flohr at cantanea.com>
* NEWS, ReleaseNotes, ChangeLog: updated
-2006-05-11 17:10 Guido Flohr <guido at imperia.net>
+2006-05-11 17:10 Guido Flohr <guido.flohr at cantanea.com>
* MANIFEST: fixed typo
-2006-05-11 16:56 Guido Flohr <guido at imperia.net>
+2006-05-11 16:56 Guido Flohr <guido.flohr at cantanea.com>
* Build.PL, Makefile.PL, lib/Data/Walk.pm, t/TC_Basic.pm,
t/TC_Bugs.pm, t/TC_ByDepth.pm, t/TC_Copy.pm, t/TC_Follow.pm,
@@ -22,43 +22,43 @@
t/TS_Basic.pm, t/TS_Options.pm, t/testrunner.t: changed copyright
year
-2006-05-11 16:50 Guido Flohr <guido at imperia.net>
+2006-05-11 16:50 Guido Flohr <guido.flohr at cantanea.com>
* t/: TC_Basic.pm, TC_ByDepth.pm: test for new variable
$Data::Walk::depth
-2006-05-11 16:50 Guido Flohr <guido at imperia.net>
+2006-05-11 16:50 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm: added example code to pod
-2006-05-11 16:49 Guido Flohr <guido at imperia.net>
+2006-05-11 16:49 Guido Flohr <guido.flohr at cantanea.com>
* MANIFEST, t/TC_Examples.pm, t/TS_All.pm: tests for example code
added
-2006-05-11 12:42 Guido Flohr <guido at imperia.net>
+2006-05-11 12:42 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm: Use UNIVERSAL::isa for determining the base
data type of references.
-2005-12-06 18:42 Guido Flohr <guido at imperia.net>
+2005-12-06 18:42 Guido Flohr <guido.flohr at cantanea.com>
* ChangeLog: re-generated
-2005-12-06 18:42 Guido Flohr <guido at imperia.net>
+2005-12-06 18:42 Guido Flohr <guido.flohr at cantanea.com>
* NEWS, ReleaseNotes, lib/Data/Walk.pm: bumped version number to
0.02
-2005-12-06 18:41 Guido Flohr <guido at imperia.net>
+2005-12-06 18:41 Guido Flohr <guido.flohr at cantanea.com>
* README: concise README
-2005-12-06 18:41 Guido Flohr <guido at imperia.net>
+2005-12-06 18:41 Guido Flohr <guido.flohr at cantanea.com>
* Makefile.PL: README is no longer generated
-2005-11-15 13:19 Guido Flohr <guido at imperia.net>
+2005-11-15 13:19 Guido Flohr <guido.flohr at cantanea.com>
* Build.PL, MANIFEST, MANIFEST.SKIP, META.yml, Makefile.PL, README,
lib/Data/Walk.pm, t/TC_Basic.pm, t/TC_Bugs.pm, t/TC_ByDepth.pm,
@@ -66,114 +66,114 @@
t/TC_PreProcess.pm, t/TS_All.pm, t/TS_Basic.pm, t/TS_Options.pm:
renamed from Data::Traverse to Data::Walk
-2005-11-15 01:58 Guido Flohr <guido at imperia.net>
+2005-11-15 01:58 Guido Flohr <guido.flohr at cantanea.com>
* ChangeLog: re-generated
-2005-11-15 01:58 Guido Flohr <guido at imperia.net>
+2005-11-15 01:58 Guido Flohr <guido.flohr at cantanea.com>
* META.yml: author
-2005-11-15 01:56 Guido Flohr <guido at imperia.net>
+2005-11-15 01:56 Guido Flohr <guido.flohr at cantanea.com>
* MANIFEST, META.yml: added META.yml
-2005-11-15 01:53 Guido Flohr <guido at imperia.net>
+2005-11-15 01:53 Guido Flohr <guido.flohr at cantanea.com>
* ChangeLog: re-generated
-2005-11-15 01:52 Guido Flohr <guido at imperia.net>
+2005-11-15 01:52 Guido Flohr <guido.flohr at cantanea.com>
* NEWS, ReleaseNotes: first release
-2005-11-15 01:39 Guido Flohr <guido at imperia.net>
+2005-11-15 01:39 Guido Flohr <guido.flohr at cantanea.com>
* README: re-generated
-2005-11-15 01:38 Guido Flohr <guido at imperia.net>
+2005-11-15 01:38 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm:
- handle blessed structures
- code cleaned up
- pod corrected
-2005-11-15 01:33 Guido Flohr <guido at imperia.net>
+2005-11-15 01:33 Guido Flohr <guido.flohr at cantanea.com>
* MANIFEST.SKIP: renamed Data-Find to Data-Traverse
-2005-11-15 01:32 Guido Flohr <guido at imperia.net>
+2005-11-15 01:32 Guido Flohr <guido.flohr at cantanea.com>
* t/TC_Basic.pm: test blessed structures
-2005-11-15 01:31 Guido Flohr <guido at imperia.net>
+2005-11-15 01:31 Guido Flohr <guido.flohr at cantanea.com>
* MANIFEST: restructured test suites
-2005-11-15 01:29 Guido Flohr <guido at imperia.net>
+2005-11-15 01:29 Guido Flohr <guido.flohr at cantanea.com>
* Makefile.PL: added license information
-2005-11-15 00:31 Guido Flohr <guido at imperia.net>
+2005-11-15 00:31 Guido Flohr <guido.flohr at cantanea.com>
* t/: TC_Bugs.pm, TS_All.pm, TS_Basic.pm, TS_Options.pm:
restructured test suite
-2005-11-15 00:18 Guido Flohr <guido at imperia.net>
+2005-11-15 00:18 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm, t/TC_Bugs.pm, t/TS_All.pm: do not bless
unblessed references
-2005-11-14 19:23 Guido Flohr <guido at imperia.net>
+2005-11-14 19:23 Guido Flohr <guido.flohr at cantanea.com>
* README, lib/Data/Walk.pm, t/TC_Copy.pm, t/TS_All.pm: implemented
call-by-reference for preprocessing callbacks
-2005-11-14 18:35 Guido Flohr <guido at imperia.net>
+2005-11-14 18:35 Guido Flohr <guido.flohr at cantanea.com>
* README, lib/Data/Walk.pm, t/TC_Follow.pm, t/TS_All.pm: handle
cyclic references correctly
-2005-11-11 13:07 Guido Flohr <guido at imperia.net>
+2005-11-11 13:07 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm: comment about untainting
-2005-11-11 12:50 Guido Flohr <guido at imperia.net>
+2005-11-11 12:50 Guido Flohr <guido.flohr at cantanea.com>
* t/TC_PostProcess.pm, lib/Data/Walk.pm, t/TS_All.pm: implemented
postprocessing
-2005-11-11 12:50 Guido Flohr <guido at imperia.net>
+2005-11-11 12:50 Guido Flohr <guido.flohr at cantanea.com>
* README: fixed typo
-2005-11-10 23:29 Guido Flohr <guido at imperia.net>
+2005-11-10 23:29 Guido Flohr <guido.flohr at cantanea.com>
* t/TC_PreProcess.pm: avoid warning
-2005-11-10 23:10 Guido Flohr <guido at imperia.net>
+2005-11-10 23:10 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm, t/TC_PreProcess.pm, t/TS_All.pm: implemented
preprocessing
-2005-11-10 23:06 Guido Flohr <guido at imperia.net>
+2005-11-10 23:06 Guido Flohr <guido.flohr at cantanea.com>
* t/TC_ByDepth.pm: removed debugging noise
-2005-11-10 22:06 Guido Flohr <guido at imperia.net>
+2005-11-10 22:06 Guido Flohr <guido.flohr at cantanea.com>
* Build.PL, ChangeLog, MANIFEST, Makefile.PL, NEWS, README,
ReleaseNotes, USERS, x-changelog.sh: cpanification
-2005-11-10 21:26 Guido Flohr <guido at imperia.net>
+2005-11-10 21:26 Guido Flohr <guido.flohr at cantanea.com>
* lib/Data/Walk.pm, t/TC_Basic.pm, t/TC_ByDepth.pm, t/TS_All.pm:
traverse and traversedepth basically work
-2005-11-10 21:24 Guido Flohr <guido at imperia.net>
+2005-11-10 21:24 Guido Flohr <guido.flohr at cantanea.com>
* t/testrunner.t: fixed intentional syntax error
-2005-11-10 13:01 Guido Flohr <guido at imperia.net>
+2005-11-10 13:01 Guido Flohr <guido.flohr at cantanea.com>
* COPYING.LESSER, MANIFEST, MANIFEST.SKIP, Makefile.PL,
lib/Data/Walk.pm, t/TC_Basic.pm, t/TS_All.pm, t/testrunner.t:
diff --git a/Credits b/Credits
new file mode 100644
index 0000000..903ee65
--- /dev/null
+++ b/Credits
@@ -0,0 +1 @@
+Thanks to Slaven Rezic for a lot of constructive feedback!
diff --git a/MANIFEST b/MANIFEST
index 1aa9238..0fa68e7 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,6 +1,7 @@
Build.PL Experimental build script
ChangeLog CVS log
COPYING.LESSER GNU Library General Public License
+Credits Credits
lib/Data/Walk.pm Walk Perl data structures
Makefile.PL Makefile generator
MANIFEST This file
@@ -8,16 +9,14 @@ META.yml META.yml
NEWS Release notes
README ASCII manpage
ReleaseNotes Release notes
-t/TC_Basic.pm Basic test case
-t/TC_Bugs.pm Test for previous bugs
-t/TC_ByDepth.pm Option 'bydepth'
-t/TC_Copy.pm Option 'copy'
-t/TC_Examples.pm Test cases for example code
-t/TC_Follow.pm Option 'follow'
-t/TC_PostProcess.pm Options 'postprocess' and 'postprocess_hash'
-t/TC_PreProcess.pm Option 'preprocess'
-t/testrunner.t Test::Harness style unit tester
-t/TS_All.pm Test suite
-t/TS_Basic.pm Test basic functionality
-t/TS_Options.pm Test various options
-SIGNATURE Public-key signature (added by MakeMaker)
+SIGNATURE Public-key signature (added by MakeMaker)
+THANKS Credits
+t/00basic.t Basic test case
+t/01by_depth.t Option 'bydepth'
+t/01follow.t Option 'follow'
+t/01post_process.t Options 'postprocess' and 'postprocess_hash'
+t/01pre_process.t Option 'preprocess'
+t/01index.t Test $Data::Walk::index
+t/03bugs-1.t Test for old bugs
+t/04bug-container-type-by-depth.t Test that type and container are always set
+META.json Module JSON meta-data (added by MakeMaker)
diff --git a/META.json b/META.json
new file mode 100644
index 0000000..d0a5abf
--- /dev/null
+++ b/META.json
@@ -0,0 +1,41 @@
+{
+ "abstract" : "Traverse Perl data structures.",
+ "author" : [
+ "Guido Flohr <guido.flohr at cantanea.com>"
+ ],
+ "dynamic_config" : 1,
+ "generated_by" : "ExtUtils::MakeMaker version 7.0401, CPAN::Meta::Converter version 2.150001",
+ "license" : [
+ "open_source"
+ ],
+ "meta-spec" : {
+ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+ "version" : "2"
+ },
+ "name" : "Data-Walk",
+ "no_index" : {
+ "directory" : [
+ "t",
+ "inc"
+ ]
+ },
+ "prereqs" : {
+ "build" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0"
+ }
+ },
+ "configure" : {
+ "requires" : {
+ "ExtUtils::MakeMaker" : "0"
+ }
+ },
+ "runtime" : {
+ "requires" : {
+ "Scalar::Util" : "1.38"
+ }
+ }
+ },
+ "release_status" : "stable",
+ "version" : "2.01"
+}
diff --git a/META.yml b/META.yml
index 9450de9..73d3ba9 100644
--- a/META.yml
+++ b/META.yml
@@ -1,12 +1,22 @@
---- #YAML:1.0
-name: Data-Walk
-version: 1.00
-abstract: Traverse Perl data structures.
-license: lgpl
-generated_by: ExtUtils::MakeMaker version 6.30_01
-author: Guido Flohr <guido at imperia.net>
-distribution_type: module
-requires:
+---
+abstract: 'Traverse Perl data structures.'
+author:
+ - 'Guido Flohr <guido.flohr at cantanea.com>'
+build_requires:
+ ExtUtils::MakeMaker: '0'
+configure_requires:
+ ExtUtils::MakeMaker: '0'
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 7.0401, CPAN::Meta::Converter version 2.150001'
+license: open_source
meta-spec:
- url: <http://module-build.sourceforge.net/META-spec-new.html>;
- version: 1.1
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: '1.4'
+name: Data-Walk
+no_index:
+ directory:
+ - t
+ - inc
+requires:
+ Scalar::Util: '1.38'
+version: '2.01'
diff --git a/Makefile.PL b/Makefile.PL
index b3f456e..62fb92c 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -1,9 +1,7 @@
-#! /usr/local/bin/perl -w # -*- perl -*-
-
-# $Id: Makefile.PL,v 1.6 2006/05/11 13:56:28 guido Exp $
+#! /usr/bin/env perl # -*- perl -*-
# Makefile generator for Data-Find.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -29,37 +27,26 @@ WriteMakefile (
VERSION_FROM => 'lib/Data/Walk.pm',
($] >= 5.005 ?
(ABSTRACT => 'Traverse Perl data structures.',
- AUTHOR => 'Guido Flohr <guido at imperia.net>',
+ AUTHOR => 'Guido Flohr <guido.flohr at cantanea.com>',
) : (),
),
- PREREQ_PM => {},
+ PREREQ_PM => {
+ 'Scalar::Util' => 1.38,
+ },
PL_FILES => {},
- (MM->can ('signature_target') ? (SIGN => 1) : ()),
LICENSE => 'lgpl',
);
sub MY::postamble {
q (
-all :: ReleaseNotes
+all :: Credits ReleaseNotes
# Make search.cpan.org happy but still follow GNU standards:
# (Thanks to Graham Barr for the hint)
ReleaseNotes: NEWS
cat NEWS >$@
+
+Credits: THANKS
+ cat THANKS >$@
);
}
-
-__END__
-
-Local Variables:
-mode: perl
-perl-indent-level: 4
-perl-continued-statement-offset: 4
-perl-continued-brace-offset: 0
-perl-brace-offset: -4
-perl-brace-imaginary-offset: 0
-perl-label-offset: -4
-cperl-indent-level: 4
-cperl-continued-statement-offset: 2
-tab-width: 8
-End:
diff --git a/NEWS b/NEWS
index 65cec99..41e097e 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,15 @@
+Version 2.01 - 16 May 2016
+
+* Fixed copyright date.
+* Fixed contact information.
+
+Version 2.00 - 13 Apr 2016
+
+* All bugs from rt.cpan.org fixed.
+* Removed option 'copy' because it was mostly useless.
+* Bumped version number to 2.x because of incompatible changes.
+* New variables $Data::Walk::index and $Data::Walk::key.
+
Version 1.00 - 11 May 2006
* The API is now considered stable.
diff --git a/README b/README
index ec3f359..0802c4e 100644
--- a/README
+++ b/README
@@ -1,5 +1,3 @@
-$Id: README,v 1.7 2005/12/06 16:41:28 guido Exp $
-
Data::Walk is for data, what File::Find is for file systems. You can
use it for traversing arbitrarily complex Perl data structures.
@@ -12,4 +10,8 @@ Data::Dumper also offers some callbacks when traversing the structures,
but not the ones that I needed. That was motivation enough for writing
Data::Walk.
-Guido Flohr
\ No newline at end of file
+You can checkout the latest version from git:
+
+ git clone git://git.guido-flohr.net/perl/Data-Walk.git
+
+Guido Flohr
diff --git a/ReleaseNotes b/ReleaseNotes
index 65cec99..41e097e 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -1,3 +1,15 @@
+Version 2.01 - 16 May 2016
+
+* Fixed copyright date.
+* Fixed contact information.
+
+Version 2.00 - 13 Apr 2016
+
+* All bugs from rt.cpan.org fixed.
+* Removed option 'copy' because it was mostly useless.
+* Bumped version number to 2.x because of incompatible changes.
+* New variables $Data::Walk::index and $Data::Walk::key.
+
Version 1.00 - 11 May 2006
* The API is now considered stable.
diff --git a/THANKS b/THANKS
new file mode 100644
index 0000000..903ee65
--- /dev/null
+++ b/THANKS
@@ -0,0 +1 @@
+Thanks to Slaven Rezic for a lot of constructive feedback!
diff --git a/lib/Data/Walk.pm b/lib/Data/Walk.pm
index ea22221..6b0a4af 100755
--- a/lib/Data/Walk.pm
+++ b/lib/Data/Walk.pm
@@ -1,9 +1,7 @@
#! /bin/false
-# $Id: Walk.pm,v 1.15 2006/05/11 14:10:54 guido Exp $
-
# Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -26,15 +24,17 @@ package Data::Walk;
use strict;
use 5.004;
+use Scalar::Util;
+
require Exporter;
use vars qw ($VERSION @ISA @EXPORT);
-$VERSION = '1.00';
+$VERSION = '2.01';
@ISA = qw (Exporter);
@EXPORT = qw (walk walkdepth);
-use vars qw ($container $type $seen $address $depth);
+use vars qw ($container $type $seen $address $depth $index $key);
# Forward declarations.
sub walk;
@@ -45,8 +45,8 @@ sub __recurse;
sub walk {
my ($options, @args) = @_;
- unless ('HASH' eq ref $options) {
- $options = { wanted => $options };
+ unless (UNIVERSAL::isa($options, 'HASH')) {
+ $options = { wanted => $options };
}
__walk ($options, @args);
@@ -55,8 +55,8 @@ sub walk {
sub walkdepth {
my ($options, @args) = @_;
- unless ('HASH' eq ref $options) {
- $options = { wanted => $options };
+ unless (UNIVERSAL::isa($options, 'HASH')) {
+ $options = { wanted => $options };
}
$options->{bydepth} = 1;
@@ -68,12 +68,28 @@ sub __walk {
my ($options, @args) = @_;
$options->{seen} = {};
- $options->{copy} = 1 unless exists $options->{copy};
+ local $index = 0;
foreach my $item (@args) {
- local $depth;
- $depth = 0;
- __recurse $options, $item;
+ local ($container, $type, $depth);
+ if (ref $item) {
+ if (UNIVERSAL::isa ($item, 'HASH')) {
+ $container = $item;
+ $type = 'HASH';
+ } elsif (UNIVERSAL::isa ($item, 'ARRAY')) {
+ $container = $item;
+ $type = 'ARRAY';
+ } else {
+ $container = \@args;
+ $type = 'ARRAY';
+ }
+ } else {
+ $container = \@args;
+ $type = 'ARRAY';
+ }
+ $depth = 0;
+ __recurse $options, $item;
+ ++$index;
}
return 1;
@@ -85,81 +101,88 @@ sub __recurse {
++$depth;
my @children;
- my $data_type;
+ my $data_type = '';
- local ($address, $seen);
- undef $address;
- $seen = 0;
+ local ($container, $type, $address, $seen) = ($container, $type, undef, 0);
my $ref = ref $item;
if ($ref) {
- my $blessed = -1 != index $ref, '=';
-
- # Avoid fancy overloading stuff.
- bless $item if $blessed;
- $address = int $item;
-
- $seen = $options->{seen}->{$address}++;
-
- if (UNIVERSAL::isa ($item, 'HASH')) {
- $data_type = 'HASH';
- } elsif (UNIVERSAL::isa ($item, 'ARRAY')) {
- $data_type = 'ARRAY';
- } else {
- $data_type = '';
- }
-
- if ($data_type eq 'HASH' || $data_type eq 'ARRAY') {
- if (('ARRAY' eq $data_type || 'HASH' eq $data_type)) {
- if ('ARRAY' eq $data_type) {
- @children = @{$item};
- } else {
- @children = %{$item};
- }
-
- if ($options->{copy}) {
- if ('ARRAY' eq $data_type) {
- @children = $options->{preprocess} (@{$item})
- if $options->{preprocess};
- } else {
- @children = %{$item};
- @children = $options->{preprocess} (@children)
- if $options->{preprocess};
- @children = $options->{preprocess_hash} (@children)
- if $options->{preprocess_hash};
- }
- } else {
- $item = $options->{preprocess} ($item)
- if $options->{preprocess};
- $item = $options->{preprocess_hash} ($item)
- if 'HASH' eq $data_type && $options->{preprocess_hash};
- @children = 'HASH' eq $data_type ? %{$item} : @{$item};
- }
- }
- }
+ my $blessed = Scalar::Util::blessed($item);
+
+ # Avoid fancy overloading stuff.
+ bless $item if $blessed;
+ $address = Scalar::Util::refaddr($item);
+
+ $seen = $options->{seen}->{$address}++;
+
+ if (UNIVERSAL::isa ($item, 'HASH')) {
+ $data_type = 'HASH';
+ } elsif (UNIVERSAL::isa ($item, 'ARRAY')) {
+ $data_type = 'ARRAY';
+ } else {
+ $data_type = '';
+ }
+
+ if ('ARRAY' eq $data_type || 'HASH' eq $data_type) {
+ local $index = -1;
+ local $type = $data_type;
+ local $container = $item;
+
+ if ('ARRAY' eq $data_type) {
+ @children = @{$item};
+ } else {
+ @children = %{$item};
+ }
+
+ if ('ARRAY' eq $data_type) {
+ @children = $options->{preprocess} (@{$item})
+ if $options->{preprocess};
+ } else {
+ local $container = \@children;
+ @children = $options->{preprocess} (@children)
+ if $options->{preprocess};
+ @children = $options->{preprocess_hash} (@children)
+ if $options->{preprocess_hash};
+ }
+ } else {
+ $data_type = '';
+ }
+
+ # Recover original object state.
+ bless $item, $ref if $blessed;
}
unless ($options->{bydepth}) {
- $_ = $item;
- $options->{wanted}->($item);
+ local $_ = $item;
+ $options->{wanted}->($item);
}
- local ($container, $type);
- $type = $data_type;
- $container = $item;
-
- if ($options->{follow} || !$seen) {
- foreach my $child (@children) {
- __recurse $options, $child;
- }
+ if (@children && ($options->{follow} || !$seen)) {
+ local ($container, $type, $index);
+ $type = $data_type;
+ $container = $item;
+ $index = 0;
+
+ foreach my $child (@children) {
+ if ($type eq 'HASH' && $index & 1) {
+ $key = $children[$index - 1];
+ } else {
+ undef $key;
+ }
+ __recurse $options, $child;
+ ++$index;
+ }
}
if ($options->{bydepth}) {
- $_ = $item;
- $options->{wanted}->($item);
+ local $_ = $item;
+ $options->{wanted}->($item);
}
- $options->{postprocess}->() if $options->{postprocess};
+ if ($data_type) {
+ local ($container, $type, $index) = ($item, $data_type, -1);
+ $options->{postprocess}->() if $options->{postprocess};
+ }
--$depth;
# void
@@ -254,10 +277,9 @@ preprocessing function is called before the loop that calls the
C<wanted()> function. It is called with a list of member nodes
and is expected to return such a list. The list will contain
all sub-nodes, regardless of the value of the option I<follow>!
-The list is normally a shallow copy of the data contained in the original
+The list is a shallow copy of the data contained in the original
structure. You can therefore safely delete items in it, without
-affecting the original data. You can use the option I<copy>,
-if you want to change that behavior.
+affecting the original data.
The behavior is identical for regular arrays and hashes, so you
probably want to coerce the list passed as an argument into a hash
@@ -297,29 +319,6 @@ Please note that the &wanted function is also called for nodes
that have already been visited! The effect of I<follow> is to
suppress descending into subnodes.
-=item B<copy>
-
-Normally, the &preprocess function is called with a shallow copy
-of the data. If you set the option I<copy> to a false value,
-the &preprocess function is called with one single argument,
-a reference to the original data structure. In that case, you
-also have to return a suitable reference.
-
-Using this option will result in a slight performance win, and
-can make it sometimes easier to manipulate the original data.
-
-What is a shallow copy? Think of a list containing references
-to hashes:
-
- my @list = ({ foo => 'bar' }, { foo => 'baz' });
- my @shallow = @list;
-
-After this, @shallow will contain a new list, but the items
-stored in it are exactly identical to the ones stored in the
-original. In other words, @shallow occupies new memory, whereas
-both lists contain references to the same memory for the list
-members.
-
=back
All other options are silently ignored.
@@ -349,7 +348,8 @@ a hash or an array. Think "directory" in terms of File::Find(3pm)!
=item B<$Data::Walk::type>
The base type of the object that $Data::Walk::container
-references. This is either "ARRAY" or "HASH".
+references. This is either "ARRAY" or "HASH" or the empty string for
+everything else.
=item B<$Data::Walk::seen>
@@ -368,6 +368,18 @@ references, the value is undefined.
The depth of the current recursion.
+=item B<$Data::Walk::index>
+
+Holds the index of the current item in the container. Note that hashes
+and arrays are treated the same. Therefore, if the current container is
+a hash and B<$Data::Walk::index> is even then B<$_> is a hash key. If
+it is odd, then B<$_> is a hash value.
+
+Note that the root container is the array of items to search that you
+passed to the wanted function!
+
+This variable has been added in Data::Walk version 1.01.
+
=back
These variables should not be modified.
@@ -418,25 +430,10 @@ I<follow_skip>, I<no_chdir>, I<untaint>, I<untaint_pattern>, and
I<untaint_skip>. To give truth the honor, all unrecognized options
are skipped.
-You may argue, that the options I<untaint> and friends would be
-useful, too, allowing you to recursively untaint data structures.
-But, hey, that is what Data::Walk(3pm) is all about. It makes
-it very easy for you to write that yourself.
-
=head1 EXAMPLES
Following are some recipies for common tasks.
-=head2 Recursive Untainting
-
- sub untaint {
- s/(.*)/$1/s unless ref $_;
- };
- walk \&untaint, $data;
-
-See perlsec(1), if you don't understand why the untaint() function
-untaints your data here.
-
=head2 Recurse To Maximum Depth
If you want to stop the recursion at a certain level, do it as follows:
@@ -444,13 +441,13 @@ If you want to stop the recursion at a certain level, do it as follows:
my $max_depth = 20;
sub not_too_deep {
if ($Data::Walk::depth > $max_depth) {
- return ();
+ return ();
} else {
- return @_;
+ return @_;
}
}
sub do_something1 {
- # Your code goes here.
+ # Your code goes here.
}
walk { wanted => \&do_something, preprocess => \¬_too_deep };
@@ -461,8 +458,8 @@ bug tracking system at http://rt.cpan.org/NoAuth/Bugs.html?Dist=Data-Walk.
=head1 COPYING
-Copyright (C) 2005-2006, Guido Flohr E<lt>guido at imperia.netE<gt>, all
-rights reserved.
+Copyright (C) 2005-2016 L<Guido Flohr|http://www.guido-flohr.net/>,
+L<mailto:guido.flohr at cantanea.com>, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published
diff --git a/t/00basic.t b/t/00basic.t
new file mode 100755
index 0000000..3029990
--- /dev/null
+++ b/t/00basic.t
@@ -0,0 +1,140 @@
+# Data::Walk - Traverse Perl data structures.
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
+# all rights reserved.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, 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
+# Library General Public License for more details.
+
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+use strict;
+
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 52;
+}
+
+my ($data, $item, $count, $wanted, @hashdata);
+
+$data = "foobar";
+$item;
+$count = 0;
+$wanted = sub {
+ ++$count;
+ $item = $_;
+};
+walk $wanted, $data;
+ok $count, 1;
+ok $item, $data;
+
+$data = [ (0 .. 4) ];
+$count = 0;
+$wanted = sub {
+ ok($Data::Walk::type, 'ARRAY') unless ref $_;
+ ++$count;
+};
+walk $wanted, $data;
+ok $count, 1 + @{$data};
+
+ at hashdata = qw (a b c d e);
+$data = { map { $_ => $_ } @hashdata };
+$count = 0;
+$wanted = sub {
+ ok($Data::Walk::type, 'HASH')unless ref $_;
+ ++$count;
+};
+walk $wanted, $data;
+ok $count, 1 + 2 * @hashdata;
+
+ at hashdata = qw (a b c d e);
+$data = { map { $_ => $_ } @hashdata };
+my @list = (0 .. 4);
+$data->{list} = [ @list ];
+$count = 0;
+$wanted = sub {
+ ++$count;
+};
+walk $wanted, $data;
+ok $count, 1 + 2 * @hashdata + 2 + @list;
+
+$data = [ (0 .. 4) ];
+bless $data;
+$count = 0;
+$wanted = sub {
+ $DB::single = 1;
+ ok($Data::Walk::type, 'ARRAY') unless ref $_;
+ ++$count;
+};
+walk $wanted, $data;
+ok $count, 1 + @{$data};
+
+ at hashdata = qw (a b c d e);
+$data = { map { $_ => $_ } @hashdata };
+bless $data;
+
+$count = 0;
+$wanted = sub {
+ ok($Data::Walk::type, 'HASH') unless ref $_;
+ ++$count;
+};
+walk $wanted, $data;
+ok $count, 1 + 2 * @hashdata;
+
+ at hashdata = qw (a b c d e);
+$data = { map { $_ => $_ } @hashdata };
+ at list = (0 .. 4);
+$data->{list} = [ @list ];
+bless $data;
+bless $data->{list};
+
+$count = 0;
+$wanted = sub {
+ ++$count;
+};
+walk $wanted, $data;
+ok $count, 1 + 2 * @hashdata + 2 + @list;
+
+$data = [[[[[ 1 ], 11], 111], 1111], 11111];
+my $wasref = 1;
+my $last = '';
+$wanted = sub {
+ my $isref = ref $_;
+
+ ok ($wasref || (!$wasref && !$isref));
+
+ $last = $_;
+ $wasref = $isref;
+};
+walk $wanted, $data;
+ok !$wasref;
+
+# The test data is constructed so that each node that is an
+# array reference has a number of elements equal to its depth.
+# Scalars are also equal to their depth.
+$data = [
+ [
+ 3, [ 4, 4, 4, ],
+ ],
+ ];
+
+$wanted = sub {
+ if (ref $_) {
+ my $num = @$_;
+ ok $Data::Walk::depth, $num;
+ } else {
+ $Data::Walk::depth, $_;
+ }
+};
+walk $wanted, $data;
diff --git a/t/TS_Basic.pm b/t/01by_depth.t
similarity index 51%
copy from t/TS_Basic.pm
copy to t/01by_depth.t
index e7de3b6..003fe22 100755
--- a/t/TS_Basic.pm
+++ b/t/01by_depth.t
@@ -1,9 +1,5 @@
-#! /bin/false
-
-# $Id: TS_Basic.pm,v 1.3 2006/05/11 13:56:28 guido Exp $
-
# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -21,31 +17,44 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
-package TS_Basic;
-
use strict;
-use base qw (Test::Unit::TestSuite);
-
-sub name { "Testsuite for basic functionality Data::Walk" }
-sub include_tests {
- qw (
- TC_Basic
- TC_ByDepth
- );
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 13;
+}
+
+my ($data, $wanted);
+
+my $data = [[[[[ 1 ], 11], 111], 1111], 11111];
+
+my $wasref = 1;
+my $last = 'undef';
+$wanted = sub {
+ my $isref = ref $_;
+ ok ($wasref xor $isref);
+ $last = $_;
+ $wasref = $isref;
+};
+walkdepth $wanted, $data;
+
+# The test data is constructed so that each node that is an
+# array reference has a number of elements equal to its depth.
+# Scalars are also equal to their depth.
+$data = [
+ [
+ 3, [ 4, 4, 4, ],
+ ],
+];
+
+$wanted = sub {
+ if (ref $_) {
+ my $num = @$_;
+ ok $Data::Walk::depth, $num;
+ } else {
+ $Data::Walk::depth, $_;
}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
+};
+walkdepth $wanted, $data;
diff --git a/t/01follow.t b/t/01follow.t
new file mode 100755
index 0000000..9a78acc
--- /dev/null
+++ b/t/01follow.t
@@ -0,0 +1,77 @@
+# Data::Walk - Traverse Perl data structures.
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
+# all rights reserved.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, 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
+# Library General Public License for more details.
+
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+use strict;
+
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 11;
+}
+
+my ($data, $wanted, $count, $preprocess);
+
+$data = { foo => 'bar' };
+$data->{baz} = $data;
+
+$count = 0;
+$wanted = sub {
+ ++$count;
+ ok ($count <= 5);
+};
+walk { wanted => $wanted }, $data;
+
+ok $count, 5;
+
+$preprocess = sub {
+ my @args = @_;
+
+ return () if $count > 10;
+
+ return @args;
+};
+
+$wanted = sub {
+ ++$count;
+};
+walk { wanted => $wanted,
+ follow => 1,
+ preprocess => $preprocess,
+ }, $data;
+ok $count > 5;
+
+$data = {};
+bless $data, 'Data::Walk::Fake';
+
+$wanted = sub {
+ ok $Data::Walk::address, int $_;
+};
+walk { wanted => $wanted }, $data;
+
+my $scalar = 'foobar';
+$data = [ \$scalar, \$scalar, \$scalar ];
+$count = 0;
+$wanted = sub {
+ unless ('ARRAY' eq ref $_) {
+ ok $Data::Walk::seen, $count++;
+ }
+};
+walk { wanted => $wanted }, $data;
+$count, scalar @{$data};
diff --git a/t/TS_Options.pm b/t/01index.t
similarity index 56%
rename from t/TS_Options.pm
rename to t/01index.t
index ebdca5f..b8328be 100755
--- a/t/TS_Options.pm
+++ b/t/01index.t
@@ -1,9 +1,5 @@
-#! /bin/false
-
-# $Id: TS_Options.pm,v 1.3 2006/05/11 13:56:28 guido Exp $
-
# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -21,33 +17,31 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
-package TS_Options;
-
use strict;
-use base qw (Test::Unit::TestSuite);
-
-sub name { "Test various options of Data::Walk" }
-sub include_tests {
- qw (
- TC_PreProcess
- TC_PostProcess
- TC_Follow
- TC_Copy
- );
- }
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 12;
+}
+
+my ($data, $wanted, $count, @expect);
+
+$data = { hash => [0 .. 2]};
+$data => {foo => 27, bar => 42, baz => 33};
+ at expect = (0, 0, 1, 0, 1, 2);
+$count = 0;
+$wanted = sub {
+ ok $Data::Walk::index, shift @expect, "Index wrong at position $count";
+ ++$count;
+};
+walk { wanted => $wanted }, $data;
+
+ at expect = (0, 0, 1, 2, 1, 0);
+$count = 0;
+$wanted = sub {
+ ok $Data::Walk::index, shift @expect, "Index wrong at position $count";
+ ++$count;
+};
+walkdepth { wanted => $wanted }, $data;
diff --git a/t/TS_Basic.pm b/t/01post_process.t
similarity index 57%
copy from t/TS_Basic.pm
copy to t/01post_process.t
index e7de3b6..bdfae8b 100755
--- a/t/TS_Basic.pm
+++ b/t/01post_process.t
@@ -1,9 +1,5 @@
-#! /bin/false
-
-# $Id: TS_Basic.pm,v 1.3 2006/05/11 13:56:28 guido Exp $
-
# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -21,31 +17,28 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
-package TS_Basic;
-
use strict;
-use base qw (Test::Unit::TestSuite);
-
-sub name { "Testsuite for basic functionality Data::Walk" }
-sub include_tests {
- qw (
- TC_Basic
- TC_ByDepth
- );
- }
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 2;
+}
+
+my (%data, $wanted, $count, $postprocess);
+
+%data = ('A' .. 'Z', 'a' .. 'z');
+
+my $postprocessor_calls = 0;
+my $container;
+
+$postprocess = sub {
+ ++$postprocessor_calls;
+ $container = $Data::Walk::container;
+};
+
+$wanted = sub {};
+walk { wanted => $wanted, postprocess => $postprocess}, \%data;
+ok $postprocessor_calls;
+ok \%data, $container;
diff --git a/t/01pre_process.t b/t/01pre_process.t
new file mode 100755
index 0000000..ece0ee2
--- /dev/null
+++ b/t/01pre_process.t
@@ -0,0 +1,112 @@
+# Data::Walk - Traverse Perl data structures.
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
+# all rights reserved.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, 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
+# Library General Public License for more details.
+
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+use strict;
+
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 160;
+}
+
+my ($wanted, $count, $preprocess, $preprocessor_calls, $last);
+
+my %data = ('A' .. 'Z', 'a' .. 'z');
+
+$preprocessor_calls = 0;
+$preprocess = sub {
+ my %container = @_;
+ my @sorted;
+
+ foreach my $key (sort keys %container) {
+ push @sorted, $key, $container{$key};
+ }
+
+ ++$preprocessor_calls;
+ return @sorted;
+};
+
+$last = '';
+$wanted = sub {
+ unless (ref $_) {
+ ok($_ gt $last);
+ $last = $_;
+ }
+};
+walk { wanted => $wanted, preprocess => $preprocess}, \%data;
+
+ok $preprocessor_calls;
+
+my @data = ('A' .. 'Z', 'a' .. 'z');
+
+$preprocessor_calls = 0;
+$preprocess = sub {
+ ++$preprocessor_calls;
+ return reverse sort @_;
+};
+
+$last = chr (1 + ord $data[-1]);
+$wanted = sub {
+ unless (ref $_) {
+ ok($_ lt $last);
+ $last = $_;
+ }
+};
+walk { wanted => $wanted, preprocess => $preprocess}, \@data;
+
+ok $preprocessor_calls;
+
+%data = ('A' .. 'Z', 'a' .. 'z');
+
+$preprocessor_calls = 0;
+$preprocess = sub {
+ my %container = @_;
+ my @sorted;
+
+ foreach my $key (sort keys %container) {
+ push @sorted, $key, $container{$key};
+ }
+
+ ++$preprocessor_calls;
+ return @sorted;
+};
+
+$last = '';
+$wanted = sub {
+ unless (ref $_) {
+ ok($_ gt $last);
+ $last = $_;
+ }
+};
+walk { wanted => $wanted, preprocess_hash => $preprocess}, \%data;
+
+ok $preprocessor_calls;
+
+ at data = ('A' .. 'Z', 'a' .. 'z');
+
+$preprocessor_calls = 0;
+$preprocess = sub {
+ ++$preprocessor_calls;
+};
+
+$wanted = sub {};
+walk { wanted => $wanted, preprocess_hash => $preprocess}, \@data;
+
+ok(!$preprocessor_calls);
diff --git a/t/TS_Basic.pm b/t/03bugs-1.t
similarity index 56%
rename from t/TS_Basic.pm
rename to t/03bugs-1.t
index e7de3b6..713393f 100755
--- a/t/TS_Basic.pm
+++ b/t/03bugs-1.t
@@ -1,9 +1,5 @@
-#! /bin/false
-
-# $Id: TS_Basic.pm,v 1.3 2006/05/11 13:56:28 guido Exp $
-
# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -21,31 +17,39 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
-package TS_Basic;
-
use strict;
-use base qw (Test::Unit::TestSuite);
-
-sub name { "Testsuite for basic functionality Data::Walk" }
-sub include_tests {
- qw (
- TC_Basic
- TC_ByDepth
- );
- }
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 6;
+}
+
+my ($data);
+
+$data = {
+ foo => 'bar',
+ baz => 'bazoo',
+};
+bless $data;
+walk { wanted => sub {} }, $data;
+ok ref $data, __PACKAGE__;
+
+$data = [ 0, 1, 2, 3 ];
+bless $data;
+walk { wanted => sub {} }, $data;
+ok ref $data, __PACKAGE__;
+
+$data = {
+ foo => 'bar',
+ baz => 'bazoo',
+};
+walk { wanted => sub {} }, $data;
+ok ref $data, 'HASH';
+ok $data =~ /^HASH\(0x[0-9a-f]+\)$/;
+
+$data = [ 0, 1, 2, 3];
+walk { wanted => sub {} }, $data;
+ok ref $data, 'ARRAY';
+ok $data =~ /^ARRAY\(0x[0-9a-f]+\)$/;
diff --git a/t/TS_All.pm b/t/04bug-container-type-by-depth.t
similarity index 57%
rename from t/TS_All.pm
rename to t/04bug-container-type-by-depth.t
index 80fc18d..6bed43c 100755
--- a/t/TS_All.pm
+++ b/t/04bug-container-type-by-depth.t
@@ -1,9 +1,5 @@
-#! /bin/false
-
-# $Id: TS_All.pm,v 1.11 2006/05/11 13:56:28 guido Exp $
-
# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
+# Copyright (C) 2005-2016 Guido Flohr <guido.flohr at cantanea.com>,
# all rights reserved.
# This program is free software; you can redistribute it and/or modify it
@@ -21,33 +17,20 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
# USA.
-package TS_All;
-
use strict;
-use base qw (Test::Unit::TestSuite);
-
-sub name { "Top level testsuite for Data::Walk" }
-sub include_tests {
- qw (
- TS_Basic
- TS_Options
- TC_Examples
- TC_Bugs
- );
- }
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
+use Test;
+use Data::Walk;
+
+BEGIN {
+ plan tests => 10;
+}
+
+my $data = {
+ foo => 'bar',
+ baz => 'bazoo',
+};
+walk sub {
+ ok $Data::Walk::type, 'HASH';
+ ok $Data::Walk::container, $data;
+}, $data;
diff --git a/t/TC_Basic.pm b/t/TC_Basic.pm
deleted file mode 100755
index 31b9962..0000000
--- a/t/TC_Basic.pm
+++ /dev/null
@@ -1,214 +0,0 @@
-#! /bin/false
-
-# $Id: TC_Basic.pm,v 1.6 2006/05/11 13:56:28 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_Basic;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-sub testScalar {
- my $self = shift,
-
- my $data = "foobar";
-
- my $item;
- my $count = 0;
- my $wanted = sub {
- ++$count;
- $item = $_;
- };
- walk $wanted, $data;
-
- $self->assert_equals (1, $count);
- $self->assert_str_equals ($data, $item);
-}
-
-sub testArray {
- my $self = shift;
-
- my $data = [ (0 .. 4) ];
-
- my $count;
- my $wanted = sub {
- $self->assert_str_equals ('ARRAY', $Data::Walk::type)
- unless ref $_;
- ++$count;
- };
- walk $wanted, $data;
-
- $self->assert_equals (1 + @{$data}, $count);
-}
-
-sub testHash {
- my $self = shift;
-
- my @hashdata = qw (a b c d e);
- my $data = { map { $_ => $_ } @hashdata };
-
- my $count;
- my $wanted = sub {
- $self->assert_str_equals ('HASH', $Data::Walk::type)
- unless ref $_;
- ++$count;
- };
- walk $wanted, $data;
-
- $self->assert_equals (1 + 2 * @hashdata, $count);
-}
-
-sub testMixed {
- my $self = shift;
-
- my @hashdata = qw (a b c d e);
- my $data = { map { $_ => $_ } @hashdata };
- my @list = (0 .. 4);
- $data->{list} = [ @list ];
-
- my $count;
- my $wanted = sub {
- ++$count;
- };
- walk $wanted, $data;
-
- $self->assert_equals (1 + 2 * @hashdata + 2 + @list, $count);
-}
-
-sub testBlessedArray {
- my $self = shift;
-
- my $data = [ (0 .. 4) ];
- bless $data;
-
- my $count;
- my $wanted = sub {
- $self->assert_str_equals ('ARRAY', $Data::Walk::type)
- unless ref $_;
- ++$count;
- };
- walk $wanted, $data;
-
- $self->assert_equals (1 + @{$data}, $count);
-}
-
-sub testBlessedHash {
- my $self = shift;
-
- my @hashdata = qw (a b c d e);
- my $data = { map { $_ => $_ } @hashdata };
- bless $data;
-
- my $count;
- my $wanted = sub {
- $self->assert_str_equals ('HASH', $Data::Walk::type)
- unless ref $_;
- ++$count;
- };
- walk $wanted, $data;
-
- $self->assert_equals (1 + 2 * @hashdata, $count);
-}
-
-sub testBlessedMixed {
- my $self = shift;
-
- my @hashdata = qw (a b c d e);
- my $data = { map { $_ => $_ } @hashdata };
- my @list = (0 .. 4);
- $data->{list} = [ @list ];
- bless $data;
- bless $data->{list};
-
- my $count;
- my $wanted = sub {
- ++$count;
- };
- walk $wanted, $data;
-
- $self->assert_equals (1 + 2 * @hashdata + 2 + @list, $count);
-}
-
-sub testTraverse {
- my $self = shift;
-
- my $data = [[[[[ 1 ], 11], 111], 1111], 11111];
-
- my $wasref = 1;
- my $last = '';
- my $wanted = sub {
- my $isref = ref $_;
-
- $self->assert ($wasref || (!$wasref && !$isref),
- "References and non-references should "
- . "alternate only once. "
- . "Last: $last ($wasref), current: $_ ($isref).");
-
- $last = $_;
- $wasref = $isref;
- };
- walk $wanted, $data;
-
- $self->assert (!$wasref,
- "The last visited node should not be "
- . "a reference.");
-}
-
-sub testDepth {
- my $self = shift;
-
- # The test data is constructed so that each node that is an
- # array reference has a number of elements equal to its depth.
- # Scalars are also equal to their depth.
- my $data = [
- [
- 3, [ 4, 4, 4, ],
- ],
- ];
-
- my $wanted = sub {
- if (ref $_) {
- my $num = @$_;
- $self->assert_num_equals ($num, $Data::Walk::depth);
- } else {
- $self->assert_num_equals ($_, $Data::Walk::depth);
- }
- };
- walk $wanted, $data;
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/TC_Bugs.pm b/t/TC_Bugs.pm
deleted file mode 100755
index 101e026..0000000
--- a/t/TC_Bugs.pm
+++ /dev/null
@@ -1,80 +0,0 @@
-#! /bin/false
-
-# $Id: TC_Bugs.pm,v 1.4 2006/05/11 13:56:28 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_Bugs;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-sub testKeepBlessing {
- my ($self) = @_;
-
- my $data;
-
- $data = {
- foo => 'bar',
- baz => 'bazoo',
- };
- bless $data;
- walk { wanted => sub {} }, $data;
- $self->assert_str_equals (__PACKAGE__, ref $data);
-
- $data = [ 0, 1, 2, 3 ];
- bless $data;
- walk { wanted => sub {} }, $data;
- $self->assert_str_equals (__PACKAGE__, ref $data);
-
- $data = {
- foo => 'bar',
- baz => 'bazoo',
- };
- walk { wanted => sub {} }, $data;
- $self->assert_str_equals ('HASH', ref $data);
- my $success = $data =~ /^HASH\(0x[0-9a-f]+\)$/;
- $self->assert ($success, "Simple hash has been blessed: $data.");
-
-
- $data = [ 0, 1, 2, 3];
- walk { wanted => sub {} }, $data;
- $self->assert_str_equals ('ARRAY', ref $data);
- $success = $data =~ /^ARRAY\(0x[0-9a-f]+\)$/;
- $self->assert ($success, "Simple array has been blessed: $data.");
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/TC_ByDepth.pm b/t/TC_ByDepth.pm
deleted file mode 100755
index 590eeba..0000000
--- a/t/TC_ByDepth.pm
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /bin/false
-
-# $Id: TC_ByDepth.pm,v 1.5 2006/05/11 13:56:28 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_ByDepth;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-sub testTraverseDepth {
- my $self = shift;
-
- my $data = [[[[[ 1 ], 11], 111], 1111], 11111];
-
- my $wasref = 1;
- my $last = 'undef';
- my $wanted = sub {
- my $isref = ref $_;
-
- $self->assert (($wasref xor $isref),
- "References and non-references should "
- . "alternate. Last: $last, current: $_.");
- $last = $_;
- $wasref = $isref;
- };
-
- walkdepth $wanted, $data;
-}
-
-sub testDepth {
- my $self = shift;
-
- # The test data is constructed so that each node that is an
- # array reference has a number of elements equal to its depth.
- # Scalars are also equal to their depth.
- my $data = [
- [
- 3, [ 4, 4, 4, ],
- ],
- ];
-
- my $wanted = sub {
- if (ref $_) {
- my $num = @$_;
- $self->assert_num_equals ($num, $Data::Walk::depth);
- } else {
- $self->assert_num_equals ($_, $Data::Walk::depth);
- }
- };
-
- walkdepth $wanted, $data;
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/TC_Copy.pm b/t/TC_Copy.pm
deleted file mode 100755
index 33d365b..0000000
--- a/t/TC_Copy.pm
+++ /dev/null
@@ -1,88 +0,0 @@
-#! /bin/false
-
-# $Id: TC_Copy.pm,v 1.3 2006/05/11 13:56:28 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_Copy;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-sub testHashCopy {
- my ($self) = @_;
-
- my $data = {
- foo => 'bar',
- baz => 'bazoo',
- };
-
- my $count = 0;
- my $preprocess = sub {
- my %args= @_;
- delete $args{baz};
- return %args;
- };
- walk { wanted => sub { ++$count }, preprocess => $preprocess }, $data;
-
- $self->assert_str_equals ($data->{foo}, 'bar');
- $self->assert_str_equals ($data->{baz}, 'bazoo');
- $self->assert_num_equals (3, $count);
-}
-
-sub testHashNoCopy {
- my ($self) = @_;
-
- my $data = {
- foo => 'bar',
- baz => 'bazoo',
- };
-
- my $count = 0;
- my $preprocess = sub {
- my $args = shift;
- delete $args->{baz};
- return $args;
- };
- walk { wanted => sub { ++$count }, preprocess => $preprocess,
- copy => 0 }, $data;
-
- $self->assert_str_equals ($data->{foo}, 'bar');
- $self->assert (!exists $data->{baz});
- $self->assert_num_equals (3, $count);
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/TC_Examples.pm b/t/TC_Examples.pm
deleted file mode 100755
index a407cbd..0000000
--- a/t/TC_Examples.pm
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /bin/false
-
-# $Id: TC_Examples.pm,v 1.1 2006/05/11 13:49:09 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_Examples;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-sub testRecursiveUntainting {
- my ($self) = @_;
-
- # We don't really untaint here, because we don't want to rely
- # on external modules or on running with -T.
- my $data = {
- foo => [
- 'bar', [ 'baz', "bazoo\nbazaar" ],
- ],
- };
-
- my $concat = '';
- my $expect = "foobarbazbazoo\nbazaar";
- my $wanted = sub {
- s/(.*)/$1/s unless ref $_;
- $concat .= $1 unless ref $_;
- };
- walk $wanted, $data;
- $self->assert_str_equals ($expect, $concat);
-}
-
-sub testMaxDepth {
- my ($self) = @_;
-
- my $data =[
- f => [
- fo => [
- foo => [
- 'Ouch!',
- ],
- ],
- ],
- b => [
- ba => [
- bar => [
- 'Ouch!',
- ],
- ],
- ],
- b => [
- ba => [
- baz => [
- 'Ouch!',
- ],
- ],
- ],
- ];
-
- my $pre_process = sub {
- if ($Data::Walk::depth > 3) {
- return ();
- } else {
- return @_;
- }
- };
-
- my $concat = '';
- my $wanted = sub {
- $self->assert_str_not_equals ('Ouch!', $_) unless ref $_;
- $concat .= $_ unless ref $_;
- };
-
- walk { wanted => $wanted, preprocess => $pre_process }, $data;
- my $expect = "ffofoobbabarbbabaz";
- $self->assert_str_equals ($expect, $concat);
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/TC_Follow.pm b/t/TC_Follow.pm
deleted file mode 100755
index a97c652..0000000
--- a/t/TC_Follow.pm
+++ /dev/null
@@ -1,117 +0,0 @@
-#! /bin/false
-
-# $Id: TC_Follow.pm,v 1.3 2006/05/11 13:56:28 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_Follow;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-my $data = { foo => 'bar' };
-$data->{baz} = $data;
-
-sub testDoNotFollow {
- my ($self) = @_;
-
- my $count = 0;
- my $wanted = sub {
- ++$count;
- $self->assert ($count <= 5,
- "Cyclic references were followed although the"
- . " option 'follow' was not given.");
- };
- walk { wanted => $wanted }, $data;
-
- $self->assert_equals (5, $count);
-}
-
-sub testDoFollow {
- my ($self) = @_;
-
- my $count = 0;
-
- my $preprocess = sub {
- my @args = @_;
-
- return () if $count > 10;
-
- return @args;
- };
-
- my $wanted = sub {
- ++$count;
- };
- walk { wanted => $wanted,
- follow => 1,
- preprocess => $preprocess,
- }, $data;
-
- $self->assert ($count > 5, "Cyclic references were not followed.");
-}
-
-sub testAddress {
- my ($self) = @_;
-
- my $data = {};
- bless $data, 'Data::Walk::Fake';
-
- my $wanted = sub {
- my $address = int $_;
- $self->assert_equals ($address, $Data::Walk::address);
- };
- walk { wanted => $wanted }, $data;
-}
-
-sub testSeen {
- my ($self) = @_;
-
- my $scalar = 'foobar';
-
- my $data = [ \$scalar, \$scalar, \$scalar ];
- my $count = 0;
-
- my $wanted = sub {
- unless ('ARRAY' eq ref $_) {
- $self->assert_equals ($count++, $Data::Walk::seen);
- }
- };
- walk { wanted => $wanted }, $data;
- $self->assert_equals (@{$data}, $count);
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/TC_PostProcess.pm b/t/TC_PostProcess.pm
deleted file mode 100755
index 9ccfb45..0000000
--- a/t/TC_PostProcess.pm
+++ /dev/null
@@ -1,67 +0,0 @@
-#! /bin/false
-
-# $Id: TC_PostProcess.pm,v 1.3 2006/05/11 13:56:28 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_PostProcess;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-sub testCalling {
- my ($self) = @_;
-
- my %data = ('A' .. 'Z', 'a' .. 'z');
-
- my $postprocessor_calls = 0;
- my $container;
-
- my $postprocess = sub {
- ++$postprocessor_calls;
- $container = $Data::Walk::container;
- };
-
- my $wanted = sub {};
- walk { wanted => $wanted, postprocess => $postprocess}, \%data;
-
- $self->assert ($postprocessor_calls,
- "Postprocessing function never called.");
-
- $self->assert_equals (\%data, $container);
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/TC_PreProcess.pm b/t/TC_PreProcess.pm
deleted file mode 100755
index e8e15b3..0000000
--- a/t/TC_PreProcess.pm
+++ /dev/null
@@ -1,147 +0,0 @@
-#! /bin/false
-
-# $Id: TC_PreProcess.pm,v 1.4 2006/05/11 13:56:28 guido Exp $
-
-# Data::Walk - Traverse Perl data structures.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-package TC_PreProcess;
-
-use strict;
-
-use base qw (Test::Unit::TestCase);
-
-use Data::Walk;
-
-sub testHash {
- my ($self) = @_;
-
- my %data = ('A' .. 'Z', 'a' .. 'z');
-
- my $preprocessor_calls = 0;
- my $preprocess = sub {
- my %container = @_;
- my @sorted;
-
- foreach my $key (sort keys %container) {
- push @sorted, $key, $container{$key};
- }
-
- ++$preprocessor_calls;
- return @sorted;
- };
-
- my $last = '';
- my $wanted = sub {
- unless (ref $_) {
- $self->assert ($_ gt $last,
- "Hash is not traversed in preprocess order.");
- $last = $_;
- }
- };
- walk { wanted => $wanted, preprocess => $preprocess}, \%data;
-
- $self->assert ($preprocessor_calls,
- "Preprocessing function never called.");
-}
-
-sub testArray {
- my ($self) = @_;
-
- my @data = ('A' .. 'Z', 'a' .. 'z');
-
- my $preprocessor_calls = 0;
- my $preprocess = sub {
- ++$preprocessor_calls;
- return reverse sort @_;
- };
-
- my $last = chr (1 + ord $data[-1]);
- my $wanted = sub {
- unless (ref $_) {
- $self->assert ($_ lt $last,
- "Array is not traversed in preprocess order.");
- $last = $_;
- }
- };
- walk { wanted => $wanted, preprocess => $preprocess}, \@data;
-
- $self->assert ($preprocessor_calls,
- "Preprocessing function never called.");
-}
-
-sub testPreprocessHash {
- my ($self) = @_;
-
- my %data = ('A' .. 'Z', 'a' .. 'z');
-
- my $preprocessor_calls = 0;
- my $preprocess = sub {
- my %container = @_;
- my @sorted;
-
- foreach my $key (sort keys %container) {
- push @sorted, $key, $container{$key};
- }
-
- ++$preprocessor_calls;
- return @sorted;
- };
-
- my $last = '';
- my $wanted = sub {
- unless (ref $_) {
- $self->assert ($_ gt $last,
- "Hash is not traversed in preprocess order.");
- $last = $_;
- }
- };
- walk { wanted => $wanted, preprocess_hash => $preprocess}, \%data;
-
- $self->assert ($preprocessor_calls,
- "Preprocessing function never called.");
-
- my @data = ('A' .. 'Z', 'a' .. 'z');
-
- $preprocessor_calls = 0;
- $preprocess = sub {
- ++$preprocessor_calls;
- };
-
- $wanted = sub {};
- walk { wanted => $wanted, preprocess_hash => $preprocess}, \@data;
-
- $self->assert (!$preprocessor_calls,
- "Preprocessing function has been called for array.");
-}
-
-1;
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
diff --git a/t/testrunner.t b/t/testrunner.t
deleted file mode 100755
index 4e21c87..0000000
--- a/t/testrunner.t
+++ /dev/null
@@ -1,53 +0,0 @@
-#! /usr/local/bin/perl
-
-# $Id: testrunner.t,v 1.3 2006/05/11 13:56:28 guido Exp $
-
-# Unit test runner.
-# Copyright (C) 2005-2006 Guido Flohr <guido at imperia.net>,
-# all rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Library General Public License as published
-# by the Free Software Foundation; either version 2, 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
-# Library General Public License for more details.
-
-# You should have received a copy of the GNU Library General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
-
-use strict;
-
-eval { require Test::Unit::HarnessUnit; };
-if($@) {
- my $message = "1..1\nok 1 \# skip ";
- $message .= "You must install Test::Unit in order to run the test ";
- $message .= "suite for this Perl extension. Test::Unit is available ";
- $message .= "from CPAN.";
- print $message;
- exit 0;
-}
-
-use lib 't';
-
-Test::Unit::HarnessUnit->new->start (qw (TS_All));
-
-#Local Variables:
-#mode: perl
-#perl-indent-level: 4
-#perl-continued-statement-offset: 4
-#perl-continued-brace-offset: 0
-#perl-brace-offset: -4
-#perl-brace-imaginary-offset: 0
-#perl-label-offset: -4
-#cperl-indent-level: 4
-#cperl-continued-statement-offset: 2
-#tab-width: 8
-#End:
-
-__DATA__
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libdata-walk-perl.git
More information about the Pkg-perl-cvs-commits
mailing list