new
Uri Guttman [Sat, 16 Apr 2011 07:27:17 +0000 (03:27 -0400)]
t/file_object.t [new file with mode: 0644]
t/prepend_file [new file with mode: 0644]
t/stringify.t [new file with mode: 0644]
t/tainted.t [new file with mode: 0644]

diff --git a/t/file_object.t b/t/file_object.t
new file mode 100644 (file)
index 0000000..1a6f242
--- /dev/null
@@ -0,0 +1,75 @@
+#!perl
+use strict;
+use Test::More;
+use File::Slurp;
+
+use IO::Handle ;
+
+use UNIVERSAL ;
+
+plan tests => 4;
+
+my $path = "data.txt";
+my $data = "random junk\n";
+
+# create an object
+my $obj = FileObject->new($path);
+isa_ok( $obj, 'FileObject' );
+is( "$obj", $path, "check that the object correctly stringifies" );
+
+my $is_glob = eval{ $obj->isa( 'GLOB' ) } ;
+#print "GLOB $is_glob\n" ;
+
+my $is_io = eval{ $obj->isa( 'IO' ) } ;
+#print "IO $is_io\n" ;
+
+my $io = IO::Handle->new() ;
+#print "IO2: $io\n" ;
+
+my $is_io2 = eval{ $io->isa( 'GLOB' ) } ;
+#print "IO2 $is_io2\n" ;
+
+open( FH, "<$0" ) or die "can't open $0: $!" ;
+
+my $io3 = *FH{IO} ;
+#print "IO3: $io3\n" ;
+
+my $is_io3 = eval{ $io3->isa( 'IO' ) } ;
+#print "IO3 $is_io3\n" ;
+
+my $io4 = *FH{GLOB} ;
+#print "IO4: $io4\n" ;
+
+my $is_io4 = eval{ $io4->isa( 'GLOB' ) } ;
+#print "IO4 $is_io4\n" ;
+
+
+SKIP: {
+    # write something to that file
+    open(FILE, ">$obj") or skip 4, "can't write to '$path': $!";
+    print FILE $data;
+    close(FILE);
+
+    # pass it to read_file()
+    my $content = eval { read_file($obj) };
+    is( $@, '', "passing an object to read_file()" );
+    is( $content, $data, "checking that the content matches the data" );
+}
+
+unlink $path;
+
+
+# the following mimics the parts from Path::Class causing 
+# problems with File::Slurp
+package FileObject;
+use overload
+    q[""] => \&stringify, fallback => 1;
+
+sub new {
+    return bless { path => $_[1] }, $_[0]
+}
+
+sub stringify {
+    return $_[0]->{path}
+}
+
diff --git a/t/prepend_file b/t/prepend_file
new file mode 100644 (file)
index 0000000..0f9b615
--- /dev/null
@@ -0,0 +1,3 @@
+partial lineline 1
+line 2
+more
diff --git a/t/stringify.t b/t/stringify.t
new file mode 100644 (file)
index 0000000..c3809cb
--- /dev/null
@@ -0,0 +1,45 @@
+#!perl -T
+
+use strict;
+
+use Test::More;
+use File::Slurp;
+use IO::Handle ;
+use UNIVERSAL ;
+
+plan tests => 3 ;
+
+my $path = "data.txt";
+my $data = "random junk\n";
+
+# create an object with an overloaded path
+
+my $obj = FileObject->new( $path ) ;
+
+isa_ok( $obj, 'FileObject' ) ;
+is( "$obj", $path, "object stringifies to path" );
+
+write_file( $obj, $data ) ;
+
+my $read_text = read_file( $obj ) ;
+is( $data, $read_text, 'read_file of stringified object' ) ;
+
+unlink $path ;
+
+exit ;
+
+# this code creates the object which has a stringified path
+
+package FileObject;
+
+use overload
+       q[""]   => \&stringify,
+       fallback => 1 ;
+
+sub new {
+       return bless { path => $_[1] }, $_[0]
+}
+
+sub stringify {
+       return $_[0]->{path}
+}
diff --git a/t/tainted.t b/t/tainted.t
new file mode 100644 (file)
index 0000000..6805d48
--- /dev/null
@@ -0,0 +1,69 @@
+#!perl -T
+
+use strict;
+use Test::More;
+use File::Slurp;
+
+plan 'skip_all', "Scalar::Util not available" unless
+       eval 'use Scalar::Util qw(tainted) ; tainted($0) ; 1';
+
+plan 'tests', 5;
+
+my $path = "data.txt";
+my $data = "random junk\nline2";
+
+SKIP: {
+    # write something to that file
+    open(FILE, ">$path") or skip 4, "can't write to '$path': $!";
+    print FILE $data;
+    close(FILE);
+
+    # read the file using File::Slurp in scalar context
+    my $content = eval { read_file($path) };
+    is( $@, '', "read_file() in scalar context" );
+    ok( tainted($content), "  => returned content should be tainted" );
+
+
+#         # reconstruct the full lines by merging items by pairs
+#         for my $k (0..int($#lines/2)) {
+#             my $i = $k * 2;
+#             $lines[$k] = (defined $lines[$i]   ? $lines[$i]   : '') 
+#                        . (defined $lines[$i+1] ? $lines[$i+1] : '');
+#         }
+
+#         # remove the rest of the items
+#         splice(@lines, int($#lines/2)+1);
+#         pop @lines unless $lines[-1];
+
+#      $_ .= $/ for @lines ;
+
+#         my @lines = split m{$/}, $content, -1;
+#      my @parts = split m{($/)}, $content, -1;
+
+# #         my @parts = $content =~ m{.+?(?:$/)?}g ;
+
+# my @lines ;
+#      while( @parts > 2 ) {
+
+#              my( $line, $sep ) = splice( @parts, 0, 2 ) ;
+#              push @lines, "$line$sep" ;
+#      }
+
+#      push @lines, shift @parts if @parts ;
+
+# #    ok( tainted($lines[0]), "  text => returned content should be tainted" );
+
+    # read the file using File::Slurp in list context
+   my @content = eval { read_file($path) };
+   is( $@, '', "read_file() in list context" );
+   ok( tainted($content[0]), "  => returned content should be tainted" );
+
+       my $text = join( '', @content ) ;
+
+       is( $text, $content, "list eq scalar" );
+
+
+#    ok( tainted($lines[0]), "  => returned content should be tainted" );
+}
+
+unlink $path;