Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

tests for IO filehandle stat times (changed/modified/accessed) #18

Merged
merged 1 commit into from

2 participants

@gam
Collaborator

Added new file filestat.t with tests for .changed, .modified and .accessed on IO.pm.

@moritz moritz merged commit 04cb7bc into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
Showing with 93 additions and 0 deletions.
  1. +93 −0 S16-filehandles/filestat.t
View
93 S16-filehandles/filestat.t
@@ -0,0 +1,93 @@
+use v6;
+
+use Test;
+
+=begin pod
+
+=head1 DESCRIPTION
+
+This test tests various file stat methods.
+
+=end pod
+
+plan 13;
+
+if $*OS eq "browser" {
+ skip_rest "Programs running in browsers don't have access to regular IO.";
+ exit;
+}
+
+# time stat tests (modify/change/access)
+{
+ my $before_creation = time - 1;
+
+ my $tmpfile1 = create_temporary_file(1);
+ my $original1_modified = $tmpfile1.IO.modified;
+ my $original1_changed = $tmpfile1.IO.changed;
+ my $original1_accessed = $tmpfile1.IO.accessed;
+
+ my $tmpfile2 = create_temporary_file(2);
+ my $original2_modified = $tmpfile2.IO.modified;
+ my $original2_changed = $tmpfile2.IO.changed;
+ my $original2_accessed = $tmpfile2.IO.accessed;
+
+ ok ($before_creation < $original1_modified), 'IO.modified should be greater than pre-creation timestamp';
+ ok ($before_creation < $original1_changed), 'IO.changed should be greater than pre-creation timestamp';
+ ok ($before_creation < $original1_accessed), 'IO.accessed should be greater than pre-creation timestamp';
+
+ sleep 2; # tick for time comparisons
+
+
+ # altering content
+ my $fh1 = open $tmpfile1, :w orelse die "Could not open $tmpfile1 for writing";
+ $fh1.print("example content");
+ $fh1.close;
+
+ ok ($original1_modified < $tmpfile1.IO.modified), 'IO.modified should be updated when file content changes';
+ ok ($original1_changed < $tmpfile1.IO.changed), 'IO.changed should be updated when file content changes';
+ ok ($original1_accessed == $tmpfile1.IO.accessed), 'IO.accessed should NOT be updated when file is opened for writing';
+
+ # opening for read
+ $fh1 = open $tmpfile1, :r orelse die "Could not open $tmpfile1 for reading";
+ $fh1.close;
+
+ ok ($original1_accessed == $tmpfile1.IO.accessed), 'IO.accessed should NOT be updated when file is opened for reading';
+
+ # reading contents of file
+ slurp $tmpfile1;
+ ok ($original1_accessed < $tmpfile1.IO.accessed), 'IO.accessed should be updated when contents of file is read';
+
+
+ # changing file permissions
+
+ $tmpfile2.IO.chmod(0o000);
+ my $post_chmod_modified = $tmpfile2.IO.modified;
+ my $post_chmod_changed = $tmpfile2.IO.changed;
+
+ ok ($original2_changed == $post_chmod_modified), 'IO.modified should NOT be updated when file mode is altered';
+ ok ($original2_changed < $post_chmod_changed), 'IO.changed should be updated when file mode is altered';
+ ok ($post_chmod_modified != $post_chmod_changed), 'IO.changed and IO.modified should differ after file mode change';
+
+
+ # accessing file
+
+ remove_file $tmpfile1;
+ remove_file $tmpfile2;
+}
+
+
+sub create_temporary_file($id) {
+ my $time = time;
+ my $file = "temp-16-filehandles-filestat-" ~ $*PID ~ "-" ~ $id ~ ".temp";
+ my $fh = open $file, :w orelse die "Could not create $file"; #OK not used
+ $fh.print($time); # store pre-creation timestamp
+ diag "Using file $file";
+ return $file;
+}
+
+sub remove_file ($file) {
+ unlink $file;
+ ok($file.IO ~~ :!e, "Test file $file was successfully removed");
+}
+
+# vim: ft=perl6
Something went wrong with that request. Please try again.