File:  [LON-CAPA] / loncom / cfgedittests / write.t
Revision 1.1: download - view: text, annotated - select for diffs
Tue Dec 2 12:11:43 2003 UTC (21 years ago) by foxr
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_12_X, version_2_11_X, version_2_11_5_msu, version_2_11_5, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_X, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, version_1_1_3, version_1_1_2, version_1_1_1, version_1_1_0, version_1_0_99_3, version_1_0_99_2, version_1_0_99_1, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, bz6209-base, bz6209, bz5969, bz2851, PRINT_INCOMPLETE_base, PRINT_INCOMPLETE, HEAD, GCI_3, GCI_2, GCI_1, BZ5971-printing-apage, BZ5434-fox, BZ4492-merge, BZ4492-feature_horizontal_radioresponse, BZ4492-feature_Support_horizontal_radioresponse, BZ4492-Support_horizontal_radioresponse
Added test for write functionality

#
# $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;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>