/********************************************************************************
* CruiseControl, a Continuous Integration Toolkit
* Copyright (c) 2001, ThoughtWorks, Inc.
* 200 E. Randolph, 25th Floor
* Chicago, IL 60601 USA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* + Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* + 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.
*
* + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
* names of its contributors may be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS 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 REGENTS OR
* 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.
********************************************************************************/
package net.sourceforge.cruisecontrol.sourcecontrols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import junit.framework.TestCase;
import net.sourceforge.cruisecontrol.CruiseControlException;
import net.sourceforge.cruisecontrol.Modification;
/**
* @author Eli Tucker
* @author Simon Brandhof
*/
public class VssJournalTest extends TestCase {
private static final String SS_DIR = "/";
private static final String PROPERTY_ON_DELETE = "deletedfiles";
private VssJournal element;
public VssJournalTest(String name) {
super(name);
}
protected void setUp() {
// Set up so that this element will match all tests.
element = new VssJournal();
element.setSsDir(SS_DIR);
element.setLastBuildDate(new Date(0));
element.setPropertyOnDelete(PROPERTY_ON_DELETE);
}
public void testValidate() {
VssJournal vj = new VssJournal();
try {
vj.validate();
fail("VssJournal should throw exceptions when required attributes are not set.");
} catch (CruiseControlException e) {
assertTrue(true);
}
vj.setJournalFile("journalfile");
vj.setSsDir("ssdir");
try {
vj.validate();
assertTrue(true);
} catch (CruiseControlException e) {
fail("VssJournal should not throw exceptions when required attributes are set.");
}
}
public void testSubstringToLastSlash() {
assertTrue("$/Eclipse/src/main/com/itxc".equals(
element.substringToLastSlash("$/Eclipse/src/main/com/itxc/eclipse")));
}
public void testSubstringFromLastSlash() {
assertTrue("eclipse".equals(
element.substringFromLastSlash("$/Eclipse/src/main/com/itxc/eclipse")));
}
public void testIsInSsDir() {
VssJournal element1 = new VssJournal();
element1.setSsDir("/somedir");
assertTrue(element1.isInSsDir("$/somedir"));
assertTrue(element1.isInSsDir("$/somedir/Hello/There"));
assertFalse(element1.isInSsDir("$/somedir2/Another/Directory/page.htm"));
// Should be case insensitive
assertTrue(element1.isInSsDir("$/SomeDir/Another/Directory/page.htm"));
element1.setSsDir("/somedir/");
assertTrue(element1.isInSsDir("$/somedir"));
assertTrue(element1.isInSsDir("$/somedir/Hello/There"));
assertFalse(element1.isInSsDir("$/somedir2/Another/Directory/page.htm"));
element1.setSsDir("/");
assertTrue(element1.isInSsDir("$/anythingCouldBeHere/Blah/blah"));
assertTrue(element1.isInSsDir("$/"));
element1.setSsDir("$/");
assertTrue(element1.isInSsDir("$/anythingCouldBeHere/Blah/blah"));
assertTrue(element1.isInSsDir("$/"));
element1.setSsDir("$/somedir/");
assertTrue(element1.isInSsDir("$/somedir"));
assertTrue(element1.isInSsDir("$/somedir/Hello/There"));
assertFalse(element1.isInSsDir("$/somedir2/Another/Directory/page.htm"));
}
public void testIsBeforeLastBuild() {
VssJournal element1 = new VssJournal();
long beforeTime = System.currentTimeMillis();
long afterTime = beforeTime + 50000;
element1.setLastBuildDate(new Date(beforeTime));
assertTrue(!element1.isBeforeLastBuild(new Date(afterTime)));
}
public void testHandleEntryCheckin() {
final List<String> entry = new ArrayList<String>();
entry.add("$/AutoBuild/conf/cruisecontrol.properties");
entry.add("Version: 5");
entry.add("User: Etucker Date: 7/06/01 Time: 2:11p");
entry.add("Checked in");
entry.add("Comment: Making cc email users when build failed");
Modification mod = element.handleEntry(entry);
assertEquals(mod.getFileName(), "cruisecontrol.properties");
assertEquals(mod.getFolderName(), "$/AutoBuild/conf");
assertEquals(mod.comment, "Comment: Making cc email users when build failed");
assertEquals(mod.userName, "Etucker");
assertEquals(mod.type, "vss");
Modification.ModifiedFile modfile = mod.files.get(0);
assertEquals(modfile.action, "checkin");
assertNull(element.getProperties().get(PROPERTY_ON_DELETE));
}
public void testHandleEntryRename() {
final List<String> entry = new ArrayList<String>();
entry.add("$/WILD/Client/English");
entry.add("Version: 15");
entry.add("User: Ddavis Date: 7/10/01 Time: 10:41a");
entry.add("body3.htm renamed to step3.htm ");
Modification mod = element.handleEntry(entry);
assertEquals(mod.getFileName(), "body3.htm");
assertEquals(mod.getFolderName(), "$/WILD/Client/English");
assertEquals(mod.comment, "");
assertEquals(mod.userName, "Ddavis");
assertEquals(mod.type, "vss");
Modification.ModifiedFile modfile = mod.files.get(0);
assertEquals(modfile.action, "delete");
assertNotNull(element.getProperties().get(PROPERTY_ON_DELETE));
}
public void testHandleEntryLabel() {
final List<String> entry = new ArrayList<String>();
entry.add("$/ThirdPartyComponents/jakarta-ant-1.3/lib");
entry.add("Version: 7");
entry.add("User: Etucker Date: 7/06/01 Time: 10:28a");
entry.add("Labeled test_label");
entry.add("Comment: Just testing to see what all gets put in the log file");
Modification mod = element.handleEntry(entry);
assertEquals("Label entry added. Labels shouldn't be added.",
null, mod);
assertNull(element.getProperties().get(PROPERTY_ON_DELETE));
}
public void testParseDate() throws ParseException {
Date date = element.parseDate("User: Etucker Date: 7/25/01 Time: 2:11p");
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mm", Locale.US);
assertEquals(sdf.parse("07/25/01 14:11"), date);
element.setDateFormat("d.MM.yy");
element.setTimeFormat("hh:mm");
date = element.parseDate("User: Brandhof Date: 15.11.05 Time: 16:54");
assertEquals(sdf.parse("11/15/05 16:54"), date);
}
}