summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2011-05-28 17:05:34 -0400
committerJames Moger <james.moger@gitblit.com>2011-05-28 17:05:34 -0400
commit28d6b2a860740557bf93dd0f9a48d059379ed696 (patch)
tree1a32491a9d2d42e08c40dc6707ff4cf6112a1771
parent1f9daef870a8c7a984955166a542628d69012ed5 (diff)
downloadgitblit-28d6b2a860740557bf93dd0f9a48d059379ed696.tar.gz
gitblit-28d6b2a860740557bf93dd0f9a48d059379ed696.zip
Unit testing. Removal of some unused code paths.
-rw-r--r--src/com/gitblit/FileSettings.java17
-rw-r--r--src/com/gitblit/GitBlitServer.java2
-rw-r--r--src/com/gitblit/GitBlitServlet.java2
-rw-r--r--src/com/gitblit/MakeCertificate.java2
-rw-r--r--src/com/gitblit/models/PathModel.java10
-rw-r--r--src/com/gitblit/models/RepositoryModel.java6
-rw-r--r--src/com/gitblit/models/TicketModel.java5
-rw-r--r--src/com/gitblit/models/UserModel.java7
-rw-r--r--src/com/gitblit/utils/TimeUtils.java28
-rw-r--r--src/com/gitblit/wicket/pages/EditUserPage.java5
-rw-r--r--src/com/gitblit/wicket/pages/TreePage.java9
-rw-r--r--tests/com/gitblit/tests/GitBlitSuite.java11
-rw-r--r--tests/com/gitblit/tests/GitBlitTest.java36
-rw-r--r--tests/com/gitblit/tests/JGitUtilsTest.java66
-rw-r--r--tests/com/gitblit/tests/TimeUtilsTest.java60
15 files changed, 208 insertions, 58 deletions
diff --git a/src/com/gitblit/FileSettings.java b/src/com/gitblit/FileSettings.java
index e6fb9398..393e76c0 100644
--- a/src/com/gitblit/FileSettings.java
+++ b/src/com/gitblit/FileSettings.java
@@ -34,10 +34,16 @@ public class FileSettings implements IStoredSettings {
private final Logger logger = LoggerFactory.getLogger(FileSettings.class);
+ private final File propertiesFile;
+
private Properties properties = new Properties();
private long lastread;
+ public FileSettings(String file) {
+ this.propertiesFile = new File(file);
+ }
+
@Override
public List<String> getAllKeys(String startingWith) {
startingWith = startingWith.toLowerCase();
@@ -138,15 +144,14 @@ public class FileSettings implements IStoredSettings {
return strings;
}
- private synchronized Properties read() {
- File file = new File(Constants.PROPERTIES_FILE);
- if (file.exists() && (file.lastModified() > lastread)) {
+ private synchronized Properties read() {
+ if (propertiesFile.exists() && (propertiesFile.lastModified() > lastread)) {
FileInputStream is = null;
try {
properties = new Properties();
- is = new FileInputStream(Constants.PROPERTIES_FILE);
+ is = new FileInputStream(propertiesFile);
properties.load(is);
- lastread = file.lastModified();
+ lastread = propertiesFile.lastModified();
} catch (FileNotFoundException f) {
// IGNORE - won't happen because file.exists() check above
} catch (Throwable t) {
@@ -166,6 +171,6 @@ public class FileSettings implements IStoredSettings {
@Override
public String toString() {
- return new File(Constants.PROPERTIES_FILE).getAbsolutePath();
+ return propertiesFile.getAbsolutePath();
}
}
diff --git a/src/com/gitblit/GitBlitServer.java b/src/com/gitblit/GitBlitServer.java
index 416c47ad..28b16279 100644
--- a/src/com/gitblit/GitBlitServer.java
+++ b/src/com/gitblit/GitBlitServer.java
@@ -425,7 +425,7 @@ public class GitBlitServer {
@Parameters(separators = " ")
private static class Params {
- private static final FileSettings FILESETTINGS = new FileSettings();
+ private static final FileSettings FILESETTINGS = new FileSettings(Constants.PROPERTIES_FILE);
/*
* Server parameters
diff --git a/src/com/gitblit/GitBlitServlet.java b/src/com/gitblit/GitBlitServlet.java
index 46868846..a71012b4 100644
--- a/src/com/gitblit/GitBlitServlet.java
+++ b/src/com/gitblit/GitBlitServlet.java
@@ -56,7 +56,7 @@ public class GitBlitServlet extends GitServlet {
}
int forwardSlash = url.indexOf('/');
if (forwardSlash > -1) {
- String repository = url.substring(0, forwardSlash);
+ String repository = url.substring(0, forwardSlash).toLowerCase();
String function = url.substring(forwardSlash + 1);
String query = req.getQueryString() == null ? "" : req.getQueryString();
RepositoryModel model = GitBlit.self().getRepositoryModel(repository);
diff --git a/src/com/gitblit/MakeCertificate.java b/src/com/gitblit/MakeCertificate.java
index 67b2fd90..cd01643e 100644
--- a/src/com/gitblit/MakeCertificate.java
+++ b/src/com/gitblit/MakeCertificate.java
@@ -156,7 +156,7 @@ public class MakeCertificate {
@Parameters(separators = " ")
private static class Params {
- private static final FileSettings FILESETTINGS = new FileSettings();
+ private static final FileSettings FILESETTINGS = new FileSettings(Constants.PROPERTIES_FILE);
@Parameter(names = { "--alias" }, description = "Server alias", required = true)
public String alias;
diff --git a/src/com/gitblit/models/PathModel.java b/src/com/gitblit/models/PathModel.java
index 17a7971e..08415317 100644
--- a/src/com/gitblit/models/PathModel.java
+++ b/src/com/gitblit/models/PathModel.java
@@ -43,16 +43,6 @@ public class PathModel implements Serializable, Comparable<PathModel> {
return FileMode.TREE.equals(mode);
}
- public static PathModel getParentPath(String basePath, String commitId) {
- String parentPath = null;
- if (basePath.lastIndexOf('/') > -1) {
- parentPath = basePath.substring(0, basePath.lastIndexOf('/'));
- }
- PathModel model = new PathModel("..", parentPath, 0, 40000, commitId);
- model.isParentPath = true;
- return model;
- }
-
@Override
public int hashCode() {
return commitId.hashCode() + path.hashCode();
diff --git a/src/com/gitblit/models/RepositoryModel.java b/src/com/gitblit/models/RepositoryModel.java
index 7241d76b..afe1b5a2 100644
--- a/src/com/gitblit/models/RepositoryModel.java
+++ b/src/com/gitblit/models/RepositoryModel.java
@@ -37,11 +37,7 @@ public class RepositoryModel implements Serializable {
public boolean isFrozen;
public RepositoryModel() {
- this.name = "";
- this.description = "";
- this.owner = "";
- this.lastChange = new Date(0);
- this.accessRestriction = AccessRestrictionType.NONE;
+ this("", "", "", new Date(0));
}
public RepositoryModel(String name, String description, String owner, Date lastchange) {
diff --git a/src/com/gitblit/models/TicketModel.java b/src/com/gitblit/models/TicketModel.java
index b284340a..d86a073d 100644
--- a/src/com/gitblit/models/TicketModel.java
+++ b/src/com/gitblit/models/TicketModel.java
@@ -58,11 +58,6 @@ public class TicketModel implements Serializable, Comparable<TicketModel> {
public String author;
public Date date;
- public Comment(String text, Date date) {
- this.text = text;
- this.date = date;
- }
-
public Comment(String filename, String content) throws ParseException {
String[] chunks = filename.split("_", -1);
this.date = new Date(Long.parseLong(chunks[1]) * 1000L);
diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java
index 797c14e2..f23fd291 100644
--- a/src/com/gitblit/models/UserModel.java
+++ b/src/com/gitblit/models/UserModel.java
@@ -34,12 +34,7 @@ public class UserModel implements Serializable {
}
public boolean canAccessRepository(String repositoryName) {
- return canAdmin || repositories.contains(repositoryName);
- }
-
- public void setRepositories(List<String> repositories) {
- this.repositories.clear();
- this.repositories.addAll(repositories);
+ return canAdmin || repositories.contains(repositoryName.toLowerCase());
}
public void addRepository(String name) {
diff --git a/src/com/gitblit/utils/TimeUtils.java b/src/com/gitblit/utils/TimeUtils.java
index 16aea77c..ac8e2098 100644
--- a/src/com/gitblit/utils/TimeUtils.java
+++ b/src/com/gitblit/utils/TimeUtils.java
@@ -45,9 +45,9 @@ public class TimeUtils {
public static String duration(int days) {
if (days <= 60) {
return days + (days > 1 ? " days" : " day");
- } else if (days <= 365) {
+ } else if (days < 365) {
int rem = days % 30;
- return (days / 30) + " months, " + rem + (rem > 1 ? " days" : " day");
+ return (days / 30) + (rem >= 15 ? 1 : 0) + " months";
} else {
int years = days / 365;
int rem = days % 365;
@@ -56,23 +56,17 @@ public class TimeUtils {
if (rem == 0) {
return yearsString;
} else {
- return yearsString + ", " + rem + (rem > 1 ? " days" : " day");
+ return yearsString + (rem >= 15 ? ", 1 month" : "");
}
} else {
int months = rem / 30;
int remDays = rem % 30;
- String monthsString;
- if (months == 0) {
- monthsString = yearsString;
- } else {
- monthsString = yearsString + ", " + months
- + (months > 1 ? " months" : " month");
- }
- if (remDays == 0) {
- return monthsString;
- } else {
- return monthsString + ", " + remDays + (remDays > 1 ? " days" : " day");
+ if (remDays >= 15) {
+ months++;
}
+ String monthsString = yearsString + ", " + months
+ + (months > 1 ? " months" : " month");
+ return monthsString;
}
}
}
@@ -120,7 +114,7 @@ public class TimeUtils {
String ago = null;
if (isToday(date) || isYesterday(date)) {
int mins = minutesAgo(date, true);
- if (mins > 120) {
+ if (mins >= 120) {
if (css) {
return "age1";
}
@@ -128,7 +122,7 @@ public class TimeUtils {
if (hours > 23) {
ago = "yesterday";
} else {
- ago = hours + " hour" + (hours > 1 ? "s" : "") + " ago";
+ ago = hours + " hours ago";
}
} else {
if (css) {
@@ -158,8 +152,6 @@ public class TimeUtils {
months++;
}
ago = months + " month" + (months > 1 ? "s" : "") + " ago";
- } else {
- ago = days + " day" + (days > 1 ? "s" : "") + " ago";
}
} else if (days == 365) {
ago = "1 year ago";
diff --git a/src/com/gitblit/wicket/pages/EditUserPage.java b/src/com/gitblit/wicket/pages/EditUserPage.java
index fb647f78..fe40a3df 100644
--- a/src/com/gitblit/wicket/pages/EditUserPage.java
+++ b/src/com/gitblit/wicket/pages/EditUserPage.java
@@ -140,9 +140,10 @@ public class EditUserPage extends BasePage {
Iterator<String> selectedRepositories = repositories.getSelectedChoices();
List<String> repos = new ArrayList<String>();
while (selectedRepositories.hasNext()) {
- repos.add(selectedRepositories.next());
+ repos.add(selectedRepositories.next().toLowerCase());
}
- userModel.setRepositories(repos);
+ userModel.repositories.clear();
+ userModel.repositories.addAll(repos);
try {
GitBlit.self().editUserModel(oldName, userModel, isCreate);
} catch (GitBlitException e) {
diff --git a/src/com/gitblit/wicket/pages/TreePage.java b/src/com/gitblit/wicket/pages/TreePage.java
index 4fc7119a..ac84e73a 100644
--- a/src/com/gitblit/wicket/pages/TreePage.java
+++ b/src/com/gitblit/wicket/pages/TreePage.java
@@ -65,7 +65,14 @@ public class TreePage extends RepositoryPage {
// breadcrumbs
add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId));
if (path != null && path.trim().length() > 0) {
- paths.add(0, PathModel.getParentPath(path, objectId));
+ // add .. parent path entry
+ String parentPath = null;
+ if (path.lastIndexOf('/') > -1) {
+ parentPath = path.substring(0, path.lastIndexOf('/'));
+ }
+ PathModel model = new PathModel("..", parentPath, 0, 40000, objectId);
+ model.isParentPath = true;
+ paths.add(0, model);
}
final ByteFormat byteFormat = new ByteFormat();
diff --git a/tests/com/gitblit/tests/GitBlitSuite.java b/tests/com/gitblit/tests/GitBlitSuite.java
index a31b0131..63c26464 100644
--- a/tests/com/gitblit/tests/GitBlitSuite.java
+++ b/tests/com/gitblit/tests/GitBlitSuite.java
@@ -11,6 +11,10 @@ import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepository;
+import com.gitblit.FileSettings;
+import com.gitblit.GitBlit;
+import com.gitblit.JettyLoginService;
+
public class GitBlitSuite extends TestSetup {
public static final File REPOSITORIES = new File("git");
@@ -20,7 +24,9 @@ public class GitBlitSuite extends TestSetup {
public static Test suite() {
TestSuite suite = new TestSuite();
+ suite.addTestSuite(TimeUtilsTest.class);
suite.addTestSuite(JGitUtilsTest.class);
+ suite.addTestSuite(GitBlitTest.class);
return new GitBlitSuite(suite);
}
@@ -39,6 +45,11 @@ public class GitBlitSuite extends TestSetup {
cloneOrFetch("nested/helloworld.git", "https://github.com/git/hello-world.git", true);
cloneOrFetch("ticgit.git", "https://github.com/jeffWelling/ticgit.git", true);
}
+ FileSettings settings = new FileSettings("distrib/gitblit.properties");
+ GitBlit.self().configureContext(settings);
+ JettyLoginService loginService = new JettyLoginService(new File("distrib/users.properties"));
+ loginService.loadUsers();
+ GitBlit.self().setLoginService(loginService);
}
private void cloneOrFetch(String toFolder, String fromUrl, boolean bare) throws Exception {
diff --git a/tests/com/gitblit/tests/GitBlitTest.java b/tests/com/gitblit/tests/GitBlitTest.java
new file mode 100644
index 00000000..50d36064
--- /dev/null
+++ b/tests/com/gitblit/tests/GitBlitTest.java
@@ -0,0 +1,36 @@
+package com.gitblit.tests;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import com.gitblit.GitBlit;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.UserModel;
+
+public class GitBlitTest extends TestCase {
+
+ public void testRepositoryModel() throws Exception {
+ List<String> repositories = GitBlit.self().getRepositoryList();
+ assertTrue("Repository list is empty!", repositories.size() > 0);
+ assertTrue("Missing Helloworld repository!", repositories.contains(GitBlitSuite.getHelloworldRepository().getDirectory().getName()));
+ RepositoryModel model = GitBlit.self().getRepositoryModel(GitBlitSuite.getHelloworldRepository().getDirectory().getName());
+ assertTrue("Helloworld model is null!", model != null);
+ assertTrue(model.toString().equals(GitBlitSuite.getHelloworldRepository().getDirectory().getName()));
+ }
+
+ public void testUserModel() throws Exception {
+ List<String> users = GitBlit.self().getAllUsernames();
+ assertTrue("No users found!", users.size() > 0);
+ assertTrue("Admin not found", users.contains("admin"));
+ UserModel model = GitBlit.self().getUserModel("admin");
+ assertTrue(model.toString().equals("admin"));
+ assertTrue("Admin missing #admin role!", model.canAdmin);
+ model.canAdmin = false;
+ assertFalse("Admin should not hae #admin!", model.canAdmin);
+ String repository = GitBlitSuite.getHelloworldRepository().getDirectory().getName();
+ assertFalse("Admin can still access repository!", model.canAccessRepository(repository));
+ model.addRepository(repository);
+ assertTrue("Admin can't access repository!", model.canAccessRepository(repository));
+ }
+}
diff --git a/tests/com/gitblit/tests/JGitUtilsTest.java b/tests/com/gitblit/tests/JGitUtilsTest.java
index 7fcf48d7..39a4a36b 100644
--- a/tests/com/gitblit/tests/JGitUtilsTest.java
+++ b/tests/com/gitblit/tests/JGitUtilsTest.java
@@ -29,9 +29,11 @@ import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevObject;
import org.eclipse.jgit.revwalk.RevTree;
+import com.gitblit.models.Metric;
import com.gitblit.models.PathModel.PathChangeModel;
import com.gitblit.models.RefModel;
import com.gitblit.models.TicketModel;
+import com.gitblit.models.TicketModel.Comment;
import com.gitblit.utils.DiffUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.JGitUtils.DiffOutputType;
@@ -69,6 +71,38 @@ public class JGitUtilsTest extends TestCase {
commit.getName().equals("f554664a346629dc2b839f7292d06bad2db4aece"));
}
+ public void testRefs() throws Exception {
+ Repository repository = GitBlitSuite.getTicgitRepository();
+ for (RefModel model : JGitUtils.getLocalBranches(repository, -1)) {
+ assertTrue(model.getName().startsWith(Constants.R_HEADS));
+ assertTrue(model.equals(model));
+ assertFalse(model.equals(""));
+ assertTrue(model.hashCode() == model.getCommitId().hashCode()
+ + model.getName().hashCode());
+ assertTrue(model.getShortLog().equals(model.commit.getShortMessage()));
+ }
+ for (RefModel model : JGitUtils.getRemoteBranches(repository, -1)) {
+ assertTrue(model.getName().startsWith(Constants.R_REMOTES));
+ assertTrue(model.equals(model));
+ assertFalse(model.equals(""));
+ assertTrue(model.hashCode() == model.getCommitId().hashCode()
+ + model.getName().hashCode());
+ assertTrue(model.getShortLog().equals(model.commit.getShortMessage()));
+ }
+ for (RefModel model : JGitUtils.getTags(repository, -1)) {
+ if (model.getObjectId().getName().equals("283035e4848054ff1803cb0e690270787dc92399")) {
+ assertTrue("Not an annotated tag!", model.isAnnotatedTag());
+ }
+ assertTrue(model.getName().startsWith(Constants.R_TAGS));
+ assertTrue(model.equals(model));
+ assertFalse(model.equals(""));
+ assertTrue(model.hashCode() == model.getCommitId().hashCode()
+ + model.getName().hashCode());
+ assertTrue(model.getShortLog().equals(model.commit.getShortMessage()));
+ }
+ repository.close();
+ }
+
public void testRetrieveRevObject() throws Exception {
Repository repository = GitBlitSuite.getHelloworldRepository();
RevCommit commit = JGitUtils.getCommit(repository, Constants.HEAD);
@@ -95,6 +129,12 @@ public class JGitUtilsTest extends TestCase {
List<PathChangeModel> paths = JGitUtils.getFilesInCommit(repository, commit);
repository.close();
assertTrue("No changed paths found!", paths.size() == 1);
+ for (PathChangeModel path : paths) {
+ assertTrue("PathChangeModel hashcode incorrect!",
+ path.hashCode() == (path.commitId.hashCode() + path.path.hashCode()));
+ assertTrue("PathChangeModel equals itself failed!", path.equals(path));
+ assertFalse("PathChangeModel equals string failed!", path.equals(""));
+ }
}
public void testCommitDiff() throws Exception {
@@ -120,12 +160,34 @@ public class JGitUtilsTest extends TestCase {
repository.close();
}
+ public void testMetrics() throws Exception {
+ Repository repository = GitBlitSuite.getHelloworldRepository();
+ List<Metric> metrics = JGitUtils.getDateMetrics(repository);
+ repository.close();
+ assertTrue("No metrics found!", metrics.size() > 0);
+ }
+
public void testTicGit() throws Exception {
Repository repository = GitBlitSuite.getTicgitRepository();
RefModel branch = JGitUtils.getTicketsBranch(repository);
assertTrue("Ticgit branch does not exist!", branch != null);
- List<TicketModel> tickets = JGitUtils.getTickets(repository);
+ List<TicketModel> ticketsA = JGitUtils.getTickets(repository);
+ List<TicketModel> ticketsB = JGitUtils.getTickets(repository);
repository.close();
- assertTrue("No tickets found!", tickets.size() > 0);
+ assertTrue("No tickets found!", ticketsA.size() > 0);
+ for (int i = 0; i < ticketsA.size(); i++) {
+ TicketModel ticketA = ticketsA.get(i);
+ TicketModel ticketB = ticketsB.get(i);
+ assertTrue("Tickets are not equal!", ticketA.equals(ticketB));
+ assertFalse(ticketA.equals(""));
+ assertTrue(ticketA.hashCode() == ticketA.id.hashCode());
+ for (int j = 0; j < ticketA.comments.size(); j++) {
+ Comment commentA = ticketA.comments.get(j);
+ Comment commentB = ticketB.comments.get(j);
+ assertTrue("Comments are not equal!", commentA.equals(commentB));
+ assertFalse(commentA.equals(""));
+ assertTrue(commentA.hashCode() == commentA.text.hashCode());
+ }
+ }
}
} \ No newline at end of file
diff --git a/tests/com/gitblit/tests/TimeUtilsTest.java b/tests/com/gitblit/tests/TimeUtilsTest.java
new file mode 100644
index 00000000..8227fcf6
--- /dev/null
+++ b/tests/com/gitblit/tests/TimeUtilsTest.java
@@ -0,0 +1,60 @@
+package com.gitblit.tests;
+
+import java.util.Date;
+
+import junit.framework.TestCase;
+
+import com.gitblit.utils.TimeUtils;
+
+public class TimeUtilsTest extends TestCase {
+
+ public void testToday() throws Exception {
+ assertTrue("Is today failed!", TimeUtils.isToday(new Date()));
+ }
+
+ public void testYesterday() throws Exception {
+ assertTrue("Is yesterday failed!", TimeUtils.isYesterday(new Date(System.currentTimeMillis() - TimeUtils.ONEDAY)));
+ }
+
+ public void testDurations() throws Exception {
+ assertTrue(TimeUtils.duration(5).equals("5 days"));
+ assertTrue(TimeUtils.duration(364).equals("12 months"));
+ assertTrue(TimeUtils.duration(365 + 0).equals("1 year"));
+ assertTrue(TimeUtils.duration(365 + 10).equals("1 year"));
+ assertTrue(TimeUtils.duration(365 + 15).equals("1 year, 1 month"));
+ assertTrue(TimeUtils.duration(365 + 30).equals("1 year, 1 month"));
+ assertTrue(TimeUtils.duration(365 + 44).equals("1 year, 1 month"));
+ assertTrue(TimeUtils.duration(365 + 45).equals("1 year, 2 months"));
+ assertTrue(TimeUtils.duration(365 + 60).equals("1 year, 2 months"));
+
+ assertTrue(TimeUtils.duration(2*365 + 0).equals("2 years"));
+ assertTrue(TimeUtils.duration(2*365 + 10).equals("2 years"));
+ assertTrue(TimeUtils.duration(2*365 + 15).equals("2 years, 1 month"));
+ assertTrue(TimeUtils.duration(2*365 + 30).equals("2 years, 1 month"));
+ assertTrue(TimeUtils.duration(2*365 + 44).equals("2 years, 1 month"));
+ assertTrue(TimeUtils.duration(2*365 + 45).equals("2 years, 2 months"));
+ assertTrue(TimeUtils.duration(2*365 + 60).equals("2 years, 2 months"));
+ }
+
+ public void testTimeAgo() throws Exception {
+ long time = System.currentTimeMillis();
+ assertTrue(TimeUtils.timeAgo(new Date(time - 1*TimeUtils.MIN)).equals("1 min ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 60*TimeUtils.MIN)).equals("60 mins ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 120*TimeUtils.MIN)).equals("2 hours ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 15*TimeUtils.ONEHOUR)).equals("15 hours ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 24*TimeUtils.ONEHOUR)).equals("yesterday"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 2*TimeUtils.ONEDAY)).equals("2 days ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 35*TimeUtils.ONEDAY)).equals("5 weeks ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 84*TimeUtils.ONEDAY)).equals("3 months ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 95*TimeUtils.ONEDAY)).equals("3 months ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 104*TimeUtils.ONEDAY)).equals("4 months ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 365*TimeUtils.ONEDAY)).equals("1 year ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - 395*TimeUtils.ONEDAY)).equals("13 months ago"));
+ assertTrue(TimeUtils.timeAgo(new Date(time - (2*365 + 30)*TimeUtils.ONEDAY)).equals("2 years ago"));
+
+ assertTrue(TimeUtils.timeAgoCss(new Date(time - 1*TimeUtils.MIN)).equals("age0"));
+ assertTrue(TimeUtils.timeAgoCss(new Date(time - 60*TimeUtils.MIN)).equals("age0"));
+ assertTrue(TimeUtils.timeAgoCss(new Date(time - 120*TimeUtils.MIN)).equals("age1"));
+ assertTrue(TimeUtils.timeAgoCss(new Date(time - 24*TimeUtils.ONEHOUR)).equals("age1"));
+ assertTrue(TimeUtils.timeAgoCss(new Date(time - 2*TimeUtils.ONEDAY)).equals("age2")); }
+}