[LON-CAPA-cvs] cvs: loncom /cfgedittests write.t
foxr
lon-capa-cvs@mail.lon-capa.org
Tue, 02 Dec 2003 12:11:43 -0000
foxr Tue Dec 2 07:11:43 2003 EDT
Added files:
/loncom/cfgedittests write.t
Log:
Added test for write functionality
Index: loncom/cfgedittests/write.t
+++ loncom/cfgedittests/write.t
#
# $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;