/*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2003 The Apache Software Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.jrcs.rcs;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.commons.jrcs.diff.Diff;
public class ChangeDeltaTest extends TestCase
{
private Archive archive = null;
String[] v1 = new String[]
{
"1",
"2",
"3",
"4",
};
Object[] v2 = new String[]
{
"a0",
"1",
// deleted two lines
// added three lines
"a1",
"a2",
"a3",
"4"
};
public ChangeDeltaTest(String name)
{
super (name);
}
protected void setUp()
throws Exception
{
archive = new Archive(v1, "original");
super.setUp();
}
protected void tearDown()
throws Exception
{
archive = null;
super.tearDown();
}
public static Test suite()
{
return new TestSuite(ArchiveTest.class);
}
public void testChangeDelta()
throws Exception
{
archive.addRevision(v2, "applied change delta");
archive.addRevision(v1, "back to original");
String[] rcsFile = (String[]) Diff.stringToArray(archive.toString());
for(int i = 0; i < rcsFile.length && i < expectedFile.length; i++)
{
if (! rcsFile[i].startsWith("date"))
assertEquals("line " + i, expectedFile[i], rcsFile[i]);
}
assertEquals("file size", expectedFile.length, rcsFile.length);
}
public void testFileSave()
throws Exception
{
this.testChangeDelta();
String filePath =System.getProperty("user.home") + java.io.File.separator + "jrcs_test.rcs";
archive.save(filePath);
Archive newArc = new Archive(filePath);
new java.io.File(filePath).delete();
String[] rcsFile = (String[]) Diff.stringToArray(newArc.toString());
for(int i = 0; i < rcsFile.length && i < expectedFile.length; i++)
{
if (! rcsFile[i].startsWith("date"))
assertEquals("line " + i, expectedFile[i], rcsFile[i]);
}
assertEquals("file size", expectedFile.length, rcsFile.length);
assertEquals(archive.toString(), newArc.toString());
}
String[] expectedFile = {
"head\t1.3;", // 0
"access;", // 1
"symbols;", // 2
"locks; strict;", // 3
"comment\t@# @;", // 4
"", // 5
"", // 6
"1.3", // 7
"date\t2002.09.28.12.55.36;\tauthor juanca;\tstate Exp;",
"branches;", // 9
"next\t1.2;", //10
"", //11
"1.2", //12
"date\t2002.09.28.12.53.53;\tauthor juanca;\tstate Exp;",
"branches;", //14
"next\t1.1;", //15
"", //16
"1.1", //17
"date\t2002.09.28.12.52.55;\tauthor juanca;\tstate Exp;",
"branches;", //19
"next\t;", //20
"", //21
"", //22
"desc", //23
"@@", //24
"", //25
"", //26
"1.3", //27
"log", //28
"@back to original", //29
"@", //30
"text", //31
"@1", //32
"2", //33
"3", //34
"4", //35
"@", //36
"", //37
"", //38
"1.2", //39
"log", //40
"@applied change delta", //41
"@", //42
"text", //43
"@a0 1", //44
"a0", //45
"d2 2", //46
"a3 3", //47
"a1", //48
"a2", //49
"a3", //50
"@", //51
"", //52
"", //53
"1.1", //54
"log", //55
"@original", //56
"@", //57
"text",
"@d1 1",
"d3 3",
"a5 2",
"2",
"3",
"@"
};
}