Files
openide/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnExternalTest.java
Vladimir Krivosheev cf8cf718ce IJPL-158385 SvnFileUrlMappingImpl - pass scope to MergingUpdateQueue instead of Disposable
GitOrigin-RevId: c3e6fa4c42cd57c99fedad533410af4e4b7f66a4
2024-07-21 22:18:56 +00:00

167 lines
5.6 KiB
Java

// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.idea.svn;
import com.intellij.openapi.vcs.FileStatus;
import com.intellij.openapi.vcs.VcsConfiguration;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.idea.svn.api.Url;
import org.junit.Test;
import java.io.File;
import java.util.List;
import java.util.concurrent.TimeoutException;
import static com.intellij.util.containers.ContainerUtil.ar;
import static com.intellij.util.containers.ContainerUtil.map;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.jetbrains.idea.svn.SvnUtil.parseUrl;
import static org.junit.Assert.*;
public class SvnExternalTest extends SvnTestCase {
private Url myMainUrl;
private Url myExternalURL;
@Override
public void before() throws Exception {
super.before();
enableSilentOperation(VcsConfiguration.StandardConfirmation.ADD);
enableSilentOperation(VcsConfiguration.StandardConfirmation.REMOVE);
myMainUrl = myRepositoryUrl.appendPath("root/source", false);
myExternalURL = myRepositoryUrl.appendPath("root/target", false);
}
@Test
public void testExternalCopyIsDetected() throws Exception {
prepareExternal();
assertWorkingCopies();
}
@Test
public void testExternalCopyIsDetectedAnotherRepo() throws Exception {
prepareExternal(true, true, true);
assertWorkingCopies();
}
private void assertWorkingCopies() {
List<RootUrlInfo> infos = vcs.getSvnFileUrlMapping().getAllWcInfos();
Url[] urls = ar(myAnotherRepoUrl != null ? parseUrl(myAnotherRepoUrl + "/root/target", false) : myExternalURL, myMainUrl);
assertThat(map(infos, RootUrlInfo::getUrl), containsInAnyOrder(urls));
}
@Test
public void testInnerCopyDetected() throws Exception {
prepareInnerCopy(false);
assertWorkingCopies();
assertThat(map(vcs.getSvnFileUrlMapping().getAllWcInfos(), RootUrlInfo::getType), hasItem(equalTo(NestedCopyType.inner)));
}
@Test
public void testSimpleExternalsStatus() throws Exception {
prepareExternal();
simpleExternalStatusImpl();
}
@Test
public void testSimpleExternalsAnotherStatus() throws Exception {
prepareExternal(true, true, true);
simpleExternalStatusImpl();
}
private void simpleExternalStatusImpl() {
final File sourceFile = new File(myWorkingCopyDir.getPath(), "source" + File.separator + "s1.txt");
final File externalFile = new File(myWorkingCopyDir.getPath(), "source" + File.separator + "external" + File.separator + "t12.txt");
final LocalFileSystem lfs = LocalFileSystem.getInstance();
final VirtualFile vf1 = lfs.refreshAndFindFileByIoFile(sourceFile);
final VirtualFile vf2 = lfs.refreshAndFindFileByIoFile(externalFile);
assertNotNull(vf1);
assertNotNull(vf2);
editFileInCommand(vf1, "test externals 123" + System.currentTimeMillis());
editFileInCommand(vf2, "test externals 123" + System.currentTimeMillis());
refreshChanges();
final Change change1 = changeListManager.getChange(vf1);
final Change change2 = changeListManager.getChange(vf2);
assertNotNull(change1);
assertNotNull(change2);
assertNotNull(change1.getBeforeRevision());
assertNotNull(change2.getBeforeRevision());
assertNotNull(change1.getAfterRevision());
assertNotNull(change2.getAfterRevision());
}
@Test
public void testUpdatedCreatedExternalFromIDEA() throws Exception {
prepareExternal(false, false, false);
updatedCreatedExternalFromIDEAImpl();
}
@Test
public void testUpdatedCreatedExternalFromIDEAAnother() throws Exception {
prepareExternal(false, false, true);
updatedCreatedExternalFromIDEAImpl();
}
private void updatedCreatedExternalFromIDEAImpl() {
imitUpdate();
final File sourceDir = new File(myWorkingCopyDir.getPath(), "source");
final File externalFile = new File(sourceDir, "external/t11.txt");
final VirtualFile externalVf = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(externalFile);
assertNotNull(externalVf);
}
@Test
public void testUncommittedExternalStatus() throws Exception {
prepareExternal(false, true, false);
uncommittedExternalStatusImpl();
}
@Test
public void testUncommittedExternalStatusAnother() throws Exception {
prepareExternal(false, true, true);
uncommittedExternalStatusImpl();
}
private void uncommittedExternalStatusImpl() {
final File sourceDir = new File(myWorkingCopyDir.getPath(), "source");
final File externalFile = new File(sourceDir, "external/t11.txt");
final VirtualFile externalVf = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(externalFile);
assertNotNull(externalVf);
editFileInCommand(externalVf, "some new content");
refreshChanges();
final Change change = changeListManager.getChange(externalVf);
assertNotNull(change);
assertEquals(FileStatus.MODIFIED, change.getFileStatus());
}
@Test
public void testUncommittedExternalCopyIsDetected() throws Exception {
prepareExternal(false, false, false);
uncommittedExternalCopyIsDetectedImpl();
}
@Test
public void testUncommittedExternalCopyIsDetectedAnother() throws Exception {
prepareExternal(false, false, true);
uncommittedExternalCopyIsDetectedImpl();
}
private void uncommittedExternalCopyIsDetectedImpl() throws TimeoutException {
imitUpdate();
refreshSvnMappingsSynchronously();
assertWorkingCopies();
}
}