blob: 198cdbb92b89dae7975c70c9dcbe26e2cbdf0aa7 [file] [log] [blame]
/*
* Copyright 2000-2013 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.openapi.vcs.roots;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vcs.VcsDirectoryMapping;
import com.intellij.openapi.vcs.VcsRootError;
import com.intellij.openapi.vcs.VcsRootErrorImpl;
import com.intellij.openapi.vcs.VcsTestUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author Nadya Zabrodina
*/
public class VcsRootErrorsFinderTest extends VcsRootPlatformTest {
static final String PROJECT = VcsDirectoryMapping.PROJECT_CONSTANT;
@Override
public void setUp() throws Exception {
super.setUp();
}
public void testNoRootsThenNoErrors() throws IOException {
doTest(new VcsRootConfiguration());
}
public void testSameOneRootInBothThenNoErrors() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".")
.roots(".");
doTest(vcsRootConfiguration);
}
public void testSameTwoRootsInBothThenNoErrors() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "community")
.roots(".", "community");
doTest(vcsRootConfiguration);
}
public void testOneMockRootNoVCSRootsThenError() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".")
.unregErrors(".");
doTest(vcsRootConfiguration);
}
public void testOneVCSRootNoMockRootsThenError() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().roots(".")
.extraErrors(".");
doTest(vcsRootConfiguration);
}
public void testOneRootButDifferentThenTwoErrors() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".")
.roots("community")
.unregErrors(".").extraErrors("community");
doTest(vcsRootConfiguration);
}
public void testTwoRootsOneMatchingOneDifferentThenTwoErrors() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "community")
.roots(".", "contrib")
.unregErrors("community").extraErrors("contrib");
doTest(vcsRootConfiguration);
}
public void testTwoRootsInMockRootOneMatchingInVCSThenError() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "community")
.roots(".")
.unregErrors("community");
doTest(vcsRootConfiguration);
}
public void testTwoRootsBothNotMatchingThenFourErrors() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "community")
.roots("another", "contrib")
.unregErrors("community", ".").extraErrors("contrib", "another");
doTest(vcsRootConfiguration);
}
public void testProjectRootNoMockRootsThenErrorAboutExtraRoot() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration()
.roots(PROJECT)
.extraErrors(PROJECT);
doTest(vcsRootConfiguration);
}
public void testProjectRootFullUnderMockRootThenCorrect() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".")
.roots(PROJECT);
doTest(vcsRootConfiguration);
}
public void testProjectRootMockRootForAContentRootBelowProjectThenError() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock("content_root")
.contentRoots("content_root").roots(PROJECT)
.unregErrors("content_root").extraErrors(PROJECT);
doTest(vcsRootConfiguration);
}
public void testProjectRootMockRootBelowProjectFolderNotInAContentRootThenUnregisteredRootError() throws IOException {
// this is to be fixed: auto-detection of MockRoot repositories in subfolders for the <Project> mapping
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock("community")
.contentRoots(".").roots(PROJECT)
.unregErrors("community").extraErrors(PROJECT);
doTest(vcsRootConfiguration);
}
public void testProjectRootMockRootForFullProjectContentRootLinkedSourceFolderBelowProjectThenErrors() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "content_root", "../linked_source_root", "folder")
.roots(PROJECT)
.contentRoots(".", "content_root", "../linked_source_root")
.unregErrors("content_root", "../linked_source_root", "folder");
doTest(vcsRootConfiguration);
}
public void testProjectRootForFolderMockRootForFullProjectContentRootLinkedSourceFolderBelowProjectThenErrors() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "content_root", "../linked_source_root", "folder")
.roots(PROJECT, "folder")
.contentRoots(".", "content_root", "../linked_source_root")
.unregErrors("content_root", "../linked_source_root");
doTest(vcsRootConfiguration);
}
public void testProjectRootMockRootLikeInIDEAProjectThenError() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "community", "contrib").roots(PROJECT)
.contentRoots(".", "community", "contrib").unregErrors("community", "contrib");
doTest(vcsRootConfiguration);
}
public void testRealMockRootRootDeeperThanThreeLevelsShouldBeDetected() throws IOException {
VcsRootConfiguration vcsRootConfiguration =
new VcsRootConfiguration().mock(".", "community", "contrib", "community/level1/level2/level3")
.contentRoots(".", "community", "contrib").roots(PROJECT, "community/level1/level2/level3")
.unregErrors("community", "contrib");
doTest(vcsRootConfiguration);
}
private void doTest(@NotNull VcsRootConfiguration vcsRootConfiguration) throws IOException {
initProject(vcsRootConfiguration);
addVcsRoots(vcsRootConfiguration.getRoots());
Collection<VcsRootError> expected = new ArrayList<VcsRootError>();
expected.addAll(unregAll(vcsRootConfiguration.getUnregErrors()));
expected.addAll(extraAll(vcsRootConfiguration.getExtraErrors()));
Collection<VcsRootError> actual = ContainerUtil.filter(new VcsRootErrorsFinder(myProject).find(), new Condition<VcsRootError>() {
@Override
public boolean value(VcsRootError error) {
return error.getVcsKey().equals(myVcs.getKeyInstanceMethod());
}
});
VcsTestUtil.assertEqualCollections(actual, expected);
}
void addVcsRoots(@NotNull Collection<String> relativeRoots) {
for (String root : relativeRoots) {
if (root.equals(PROJECT)) {
myVcsManager.setDirectoryMapping("", myVcsName);
}
else {
String absoluteRoot = VcsTestUtil.toAbsolute(root, myProject);
myVcsManager.setDirectoryMapping(absoluteRoot, myVcsName);
}
}
}
@NotNull
Collection<VcsRootError> unregAll(@NotNull Collection<String> paths) {
Collection<VcsRootError> unregRoots = new ArrayList<VcsRootError>();
for (String path : paths) {
unregRoots.add(unreg(path));
}
return unregRoots;
}
@NotNull
Collection<VcsRootError> extraAll(@NotNull Collection<String> paths) {
Collection<VcsRootError> extraRoots = new ArrayList<VcsRootError>();
for (String path : paths) {
extraRoots.add(extra(path));
}
return extraRoots;
}
@NotNull
VcsRootError unreg(@NotNull String path) {
return new VcsRootErrorImpl(VcsRootError.Type.UNREGISTERED_ROOT, VcsTestUtil.toAbsolute(path, myProject), myVcsName);
}
@NotNull
VcsRootError extra(@NotNull String path) {
return new VcsRootErrorImpl(VcsRootError.Type.EXTRA_MAPPING, PROJECT.equals(path) ? PROJECT : VcsTestUtil.toAbsolute(path, myProject),
myVcsName);
}
}