// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.wiki;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import fitnesse.responders.versions.VersionSelectionResponder;
import junit.framework.TestCase;
public class VersionInfoTest extends TestCase {
public void testRegex() throws Exception {
Matcher match = VersionInfo.COMPEX_NAME_PATTERN.matcher("01234567890123");
assertTrue(match.find());
assertEquals("01234567890123", match.group(2));
match = VersionInfo.COMPEX_NAME_PATTERN.matcher("Joe-01234567890123");
assertTrue(match.find());
assertEquals("Joe", match.group(1));
assertEquals("01234567890123", match.group(2));
}
public void testGetVersionNumber() throws Exception {
assertEquals("01234567890123", VersionInfo.getVersionNumber("01234567890123"));
assertEquals("01234567890123", VersionInfo.getVersionNumber("Joe-01234567890123"));
assertEquals("09876543210987", VersionInfo.getVersionNumber("Joe-09876543210987"));
}
public void testSortVersions() throws Exception {
List<VersionInfo> list = new LinkedList<VersionInfo>();
VersionInfo toms = new VersionInfo("Tom-45678901234567");
VersionInfo anons = new VersionInfo("56789012345678");
VersionInfo jerrys = new VersionInfo("Jerry-01234567890123");
VersionInfo joes = new VersionInfo("Joe-43210987654321");
list.add(toms);
list.add(anons);
list.add(jerrys);
list.add(joes);
Collections.sort(list);
assertEquals(jerrys, list.get(0));
assertEquals(joes, list.get(1));
assertEquals(toms, list.get(2));
assertEquals(anons, list.get(3));
}
public void testParts() throws Exception {
VersionInfo version = new VersionInfo("joe-20030101010101");
assertEquals("joe", version.getAuthor());
assertEquals("joe-20030101010101", version.getName());
}
public void testGetCreationTime() throws Exception {
VersionInfo version = new VersionInfo("joe-20030101010101");
Date date = version.getCreationTime();
assertEquals("20030101010101", VersionInfo.makeVersionTimeFormat().format(date));
}
public void testGetAuthor() throws Exception {
checkAuthor("01234567890123", "");
checkAuthor("123-01234567890123", "");
checkAuthor("-123-01234567890123", "");
checkAuthor("user-01234567890123", "user");
checkAuthor("user-123-01234567890123", "user");
checkAuthor("abc123-123-01234567890123", "abc123");
checkAuthor("abc123efg-123-01234567890123", "abc123efg");
checkAuthor("joe <joe@blo.com>-123-01234567890123", "joe <joe@blo.com>");
}
private void checkAuthor(String versionName, String author) throws Exception {
VersionInfo version = new VersionInfo(versionName);
assertEquals(author, version.getAuthor());
}
public void testConvertVersionNameToAge() throws Exception {
Date now = new GregorianCalendar(2003, 0, 1, 00, 00, 01).getTime();
Date tenSeconds = new GregorianCalendar(2003, 0, 1, 00, 00, 11).getTime();
Date twoMinutes = new GregorianCalendar(2003, 0, 1, 00, 02, 01).getTime();
Date fiftyNineSecs = new GregorianCalendar(2003, 0, 1, 00, 01, 00).getTime();
Date oneHour = new GregorianCalendar(2003, 0, 1, 01, 00, 01).getTime();
Date fiveDays = new GregorianCalendar(2003, 0, 6, 00, 00, 01).getTime();
Date years = new GregorianCalendar(2024, 0, 1, 00, 00, 01).getTime();
assertEquals("10 seconds", VersionInfo.howLongAgoString(now, tenSeconds));
assertEquals("2 minutes", VersionInfo.howLongAgoString(now, twoMinutes));
assertEquals("59 seconds", VersionInfo.howLongAgoString(now, fiftyNineSecs));
assertEquals("1 hour", VersionInfo.howLongAgoString(now, oneHour));
assertEquals("5 days", VersionInfo.howLongAgoString(now, fiveDays));
assertEquals("21 years", VersionInfo.howLongAgoString(now, years));
}
}