blob: ef774d35c01b07fce3496ad3de38b5d61fc88679 [file] [log] [blame]
/*
* 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);
}
}