/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.history.core; import com.intellij.history.core.revisions.RecentChange; import com.intellij.history.core.tree.Entry; import com.intellij.history.core.tree.RootEntry; import org.junit.Test; import java.util.List; public class LocalVcsRecentChangesTest extends LocalHistoryTestCase { LocalHistoryFacade vcs = new InMemoryLocalHistoryFacade(); RootEntry root = new RootEntry(); @Test public void testRecentChanges() { vcs.beginChangeSet(); add(vcs, createFile(root, "f1")); vcs.endChangeSet("a"); vcs.beginChangeSet(); add(vcs, createFile(root, "f2")); vcs.endChangeSet("b"); List<RecentChange> cc = vcs.getRecentChanges(root); assertRecentChanges(cc, "b", "a"); RecentChange c0 = cc.get(0); RecentChange c1 = cc.get(1); assertNotNull(findEntryAfter(c0, "f1")); assertNotNull(findEntryAfter(c0, "f2")); assertNotNull(findEntryBefore(c0, "f1")); assertNull(findEntryBefore(c0, "f2")); assertNotNull(findEntryAfter(c1, "f1")); assertNull(findEntryAfter(c1, "f2")); assertNull(findEntryBefore(c1, "f1")); assertNull(findEntryBefore(c1, "f2")); } @Test public void testDoesNotIncludeUnnamedChanges() { vcs.beginChangeSet(); add(vcs, createFile(root, "f1")); vcs.endChangeSet("a"); add(vcs, createFile(root, "f2")); vcs.beginChangeSet(); add(vcs, createFile(root, "f3")); vcs.endChangeSet("b"); List<RecentChange> cc = vcs.getRecentChanges(root); assertRecentChanges(cc, "b", "a"); RecentChange c0 = cc.get(0); RecentChange c1 = cc.get(1); assertNotNull(findEntryAfter(c0, "f1")); assertNotNull(findEntryAfter(c0, "f2")); assertNotNull(findEntryAfter(c0, "f3")); assertNotNull(findEntryBefore(c0, "f1")); assertNotNull(findEntryBefore(c0, "f2")); assertNull(findEntryBefore(c0, "f3")); assertNotNull(findEntryAfter(c1, "f1")); assertNull(findEntryAfter(c1, "f2")); assertNull(findEntryAfter(c1, "f3")); assertNull(findEntryBefore(c1, "f1")); assertNull(findEntryBefore(c1, "f2")); assertNull(findEntryBefore(c1, "f3")); } @Test public void testDoesNotIncludeLocalFileChanges() { vcs.beginChangeSet(); add(vcs, createFile(root, "f1")); vcs.endChangeSet("a"); vcs.beginChangeSet(); add(vcs, createFile(root, "f2")); add(vcs, changeContent(root, "f1", null)); vcs.endChangeSet("b"); vcs.beginChangeSet(); add(vcs, changeContent(root, "f2", null)); vcs.endChangeSet("c"); List<RecentChange> cc = vcs.getRecentChanges(root); assertEquals(2, cc.size()); assertEquals("b", cc.get(0).getChangeName()); assertEquals("a", cc.get(1).getChangeName()); } @Test public void testIncludeChangeSetsWithFileContentChangesOnly() { vcs.beginChangeSet(); add(vcs, createFile(root, "f1")); add(vcs, createFile(root, "f2")); vcs.endChangeSet("a"); vcs.beginChangeSet(); add(vcs, changeContent(root, "f1", null)); add(vcs, changeContent(root, "f2", null)); vcs.endChangeSet("b"); List<RecentChange> cc = vcs.getRecentChanges(root); assertEquals(2, cc.size()); assertEquals("b", cc.get(0).getChangeName()); assertEquals("a", cc.get(1).getChangeName()); } @Test public void testDoesNotIncludeLabels() { vcs.beginChangeSet(); add(vcs, createFile(root, "f")); vcs.endChangeSet("change"); vcs.putUserLabel("label", "project"); List<RecentChange> cc = vcs.getRecentChanges(root); assertEquals(1, cc.size()); assertEquals("change", cc.get(0).getChangeName()); } @Test public void testIncludeOnlyLastValuable20Changes() { for (int i = 0; i < 40; i++) { vcs.beginChangeSet(); add(vcs, createFile(root, "f" + i)); vcs.endChangeSet(String.valueOf(i)); vcs.beginChangeSet(); add(vcs, changeContent(root, "f" + i, null)); vcs.endChangeSet(i + "_"); } List<RecentChange> cc = vcs.getRecentChanges(root); assertEquals(20, cc.size()); for (int i = 0; i < 20; i++) { assertEquals(String.valueOf(39 - i), cc.get(i).getChangeName()); } } private void assertRecentChanges(List<RecentChange> cc, String... names) { assertEquals(names.length, cc.size()); for (int i = 0; i < names.length; i++) { assertEquals(names[i], cc.get(i).getChangeName()); } } private Entry findEntryAfter(RecentChange c, String path) { return ((RootEntry)c.getRevisionAfter().findEntry()).findEntry(path); } private Entry findEntryBefore(RecentChange c, String path) { return ((RootEntry)c.getRevisionBefore().findEntry()).findEntry(path); } }