/* * Copyright 2000-2010 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.integration; import com.intellij.history.LocalHistory; import com.intellij.history.core.LocalHistoryTestCase; import com.intellij.history.core.changes.ChangeSet; import com.intellij.history.core.revisions.Revision; import com.intellij.openapi.util.Clock; import com.intellij.openapi.vfs.VirtualFile; import org.junit.Test; import java.io.IOException; import java.util.List; public class PurgingTest extends IntegrationTestCase { @Override public void setUp() throws Exception { super.setUp(); getVcs().getChangeListInTests().setIntervalBetweenActivities(2); } @Override protected void setUpInWriteAction() throws Exception { Clock.setTime(0); super.setUpInWriteAction(); } @Test public void testPurgeWithoutGapsBetweenChanges() { createChangesWithTimestamps(1, 2, 3); getVcs().getChangeListInTests().purgeObsolete(2); assertRemainedChangesTimestamps(3, 2); } @Test public void testPurgeSeveral() { createChangesWithTimestamps(1, 2, 3); getVcs().getChangeListInTests().purgeObsolete(1); assertRemainedChangesTimestamps(3); } @Test public void testPurgeNothing() { createChangesWithTimestamps(1, 2, 3); getVcs().getChangeListInTests().purgeObsolete(10); assertRemainedChangesTimestamps(3, 2, 1, 0); } @Test public void testDoesNotPurgeTheOnlyChange() { createChangesWithTimestamps(1); getVcs().getChangeListInTests().purgeObsolete(1); assertRemainedChangesTimestamps(1); } @Test public void testPurgeWithOneGap() { createChangesWithTimestamps(1, 2, 4); getVcs().getChangeListInTests().purgeObsolete(2); assertRemainedChangesTimestamps(4, 2); } @Test public void testPurgeWithSeveralGaps() { createChangesWithTimestamps(1, 2, 4, 5, 7, 8); getVcs().getChangeListInTests().purgeObsolete(5); assertRemainedChangesTimestamps(8, 7, 5, 4, 2); } @Test public void testPurgeWithLongGaps() { createChangesWithTimestamps(10, 20, 30, 40); getVcs().getChangeListInTests().purgeObsolete(3); assertRemainedChangesTimestamps(40, 30, 20); } @Test public void testPurgeWithBifIntervalBetweenChanges() { getVcs().getChangeListInTests().setIntervalBetweenActivities(100); createChangesWithTimestamps(110, 120, 130, 250, 260, 270); getVcs().getChangeListInTests().purgeObsolete(40); assertRemainedChangesTimestamps(270, 260, 250, 130, 120); } @Test public void testPurgingEmptyListDoesNotThrowException() { getVcs().getChangeListInTests().purgeObsolete(50); } @Test public void testChangesAfterPurge() throws IOException { Clock.setTime(1); VirtualFile f = createFile("file.txt"); Clock.setTime(2); setContent(f, "1"); Clock.setTime(3); setContent(f, "2"); assertEquals(3, LocalHistoryTestCase.collectChanges(getVcs(), f.getPath(), myProject.getLocationHash(), null).size()); getVcs().getChangeListInTests().purgeObsolete(2); assertEquals(2, LocalHistoryTestCase.collectChanges(getVcs(), f.getPath(), myProject.getLocationHash(), null).size()); } @Test public void testLabelsAfterPurge() throws IOException { Clock.setTime(1); VirtualFile file = createFile("file"); Clock.setTime(2); LocalHistory.getInstance().putUserLabel(myProject, "1"); getVcs().getChangeListInTests().purgeObsolete(1); List<Revision> rr = getRevisionsFor(file); assertEquals(2, rr.size()); assertEquals("1", rr.get(1).getLabel()); } private void createChangesWithTimestamps(long... tt) { for (long t : tt) { Clock.setTime(t); getVcs().beginChangeSet(); getVcs().putUserLabel("foo", "project"); getVcs().endChangeSet(null); } } private void assertRemainedChangesTimestamps(long... tt) { assertEquals(tt.length, getVcs().getChangeListInTests().getChangesInTests().size()); for (int i = 0; i < tt.length; i++) { long t = tt[i]; ChangeSet c = getVcs().getChangeListInTests().getChangesInTests().get(i); assertEquals(t, c.getTimestamp()); } } }