# # $Id: write.t,v 1.1 2003/12/02 12:11:43 foxr Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA 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 2 of the License, or # (at your option) any later version. # # LON-CAPA 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 LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # use strict; use Test; use ConfigFileEdit; use IO::File; # # Test ConfigFileEdtitor's ability to write back files. # # Tests we plan: # 1. Check write unmodified # 2. Check write modified # BEGIN {plan tests => 8} # # Test write unmodified: # - Read test2config.cfg # - Write it to test3config.cfg # - Read test3config.cfg # - Ensure that the number of lines is the same. # - Ensure that the number of keys is the same. # - Ensure that all key values point to identical lines. # - Delete test3config.cfg sub TestWriteUnmodified { # Read in original and write it back out... then read supposed copy. my $original = ConfigFileEdit->new("test2config.cfg",0); my $fh = new IO::File "> test3config.cfg"; if(!$fh) { die "Can't create test3config.cfg"; } $original->Write($fh); $fh->close; undef $fh; my $copy = ConfigFileEdit->new("test3config.cfg",0); # Check that the two files have the same no. lines: my $origcount = $original->LineCount(); my $copycount = $copy->LineCount(); ok($copycount, $origcount); # Check that the number of keys is the same my $origkeys = $original->{KeyToLines}; my $copykeys = $original->{KeyToLines}; my @origkeyarray = keys %$origkeys; my @copykeyarray = keys %$origkeys; my $origkeycount = @origkeyarray; my $copykeycount = @copykeyarray; ok($copykeycount, $origkeycount); # check that all keys in the original point to the same lines in copy my $isok = 1; foreach my $item (keys %$origkeys) { my $origline = $original->Find($item); my $copyline = $copy->Find($item); # Must exist in copy.: if(!defined($copyline)) { $isok = 0; } if($copyline ne $origline) { $isok = 0; } } ok($isok); # check that all keys in the copy point to the same lines in the original $isok = 1; foreach my $item (keys %$copykeys) { my $origline = $original->Find($item); my $copyline = $copy->Find($item); # Must exist in copy: if(!defined($origline)) { $isok = 0; } if($copyline ne $origline) { $isok = 0;; } } ok($isok); # Delete the test3config.cfg temp file: unlink("test3config.cfg"); } # # Test ability to correctly write a modified file. # Read test2config.cfg # Delete the line keyed line2. # Write the resulting config -> test3config.cfg # Re-read the two files. # 5. Ensure that test3config.cfg has one fewer line than test2config.cfg # 6. Ensure that test3config.cfg has one fewer keys than test3config.cfg. # 7. Ensure that line2 key is not in test3config.cfg # 8. Ensure that all keys in test3config.cfg produce matching lines in # test2config.cfg sub TestWriteModified { # Create the modified file. my $original = ConfigFileEdit->new("test2config.cfg", 0); $original->DeleteLine("line2"); my $fh = new IO::File "> test3config.cfg"; if(!$fh) { die "Can't create test3cofig.cfg"; } $original->Write($fh); $fh->close; undef $fh; undef $original; # Reread the original and read the modified file: $original = ConfigFileEdit->new("test2config.cfg",0); # Reread. my $modified = ConfigFileEdit->new("test3config.cfg",0); # Test 5: Modified should have one fewer lines than original: ok($modified->LineCount(), $original->LineCount() - 1); # Test 6 Modified should have one fewer key elements than original: my $origkeys = $original->{KeyToLines}; my $modkeys = $modified->{KeyToLines}; my @origkeyarray = keys %$origkeys; my @modkeyarray = keys %$modkeys; my $origkeycount = @origkeyarray; my $modkeycount = @modkeyarray; ok($modkeycount, $origkeycount - 1); # Test 7 Ensure that "line2" does not return a lookup for modified: my $sbundef = $modified->Find("line2"); if(!defined($sbundef)) { ok(1); } else { ok(0); } # Test 8 All keys in test3config should lookup identical lines in test2config. my $isok = 1; foreach my $item (keys %$modkeys) { my $origline = $original->Find($item); my $modline = $modified->Find($item); # Origline must be defined: if(!defined($origline)) { $isok = 0; } # Origline eq $modline if($origline ne $modline) { $isok = 0; } } ok($isok); unlink("test3config.cfg"); # Get rid of temp test3config.cfg } TestWriteUnmodified; TestWriteModified;