From e5fb46b08240660f59825ea1e03a8f8a4d530730 Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Tue, 11 Mar 2014 19:58:18 +0400 Subject: [PATCH] VcsIntegrationEnablerTest implemented for mock test vcs *GitIntegrationEnablerTest changed to common VcsIntegrationEnablerTest; *test notification methods moved to VcsTestUtil; *cosmetics --- .../vcs/roots/VcsIntegrationEnabler.java | 2 +- .../com/intellij/openapi/vcs/VcsTestUtil.java | 28 +++++- .../vcs/roots/VcsIntegrationEnablerTest.java | 89 +++++++++---------- .../vcs/roots/VcsRootPlatformTest.java | 12 ++- .../git4idea/test/GitTestUtil.java | 28 ------ 5 files changed, 76 insertions(+), 83 deletions(-) rename plugins/git4idea/tests/git4idea/roots/GitIntegrationEnablerTest.java => platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsIntegrationEnablerTest.java (60%) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsIntegrationEnabler.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsIntegrationEnabler.java index e395651eee20..1c8edfe42ed1 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsIntegrationEnabler.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsIntegrationEnabler.java @@ -29,7 +29,7 @@ import java.util.*; import static com.intellij.openapi.util.text.StringUtil.pluralize; -public abstract class VcsIntegrationEnabler> { +public abstract class VcsIntegrationEnabler { protected final @NotNull Project myProject; protected final @NotNull VcsT myVcs; diff --git a/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/VcsTestUtil.java b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/VcsTestUtil.java index a76dde616cab..3a9fa5bfe1dd 100644 --- a/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/VcsTestUtil.java +++ b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/VcsTestUtil.java @@ -1,5 +1,6 @@ package com.intellij.openapi.vcs; +import com.intellij.notification.Notification; import com.intellij.openapi.application.PluginPathManager; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.project.Project; @@ -20,8 +21,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.fail; +import static org.junit.Assert.*; /** * @author Nadya Zabrodina @@ -218,4 +218,28 @@ public class VcsTestUtil { } }); } + + public static void assertNotificationShown(@NotNull Project project, @Nullable Notification expected) { + if (expected != null) { + Notification actualNotification = + ((TestVcsNotifier)VcsNotifier.getInstance(project)).getLastNotification(); + assertNotNull("No notification was shown", actualNotification); + assertEquals("Notification has wrong title", expected.getTitle(), actualNotification.getTitle()); + assertEquals("Notification has wrong type", expected.getType(), actualNotification.getType()); + assertEquals("Notification has wrong content", adjustTestContent(expected.getContent()), actualNotification.getContent()); + } + } + + // we allow more spaces and line breaks in tests to make them more readable. + // After all, notifications display html, so all line breaks and extra spaces are ignored. + private static String adjustTestContent(@NotNull String s) { + StringBuilder res = new StringBuilder(); + String[] splits = s.split("\n"); + for (String split : splits) { + res.append(split.trim()); + } + + return res.toString(); + } + } diff --git a/plugins/git4idea/tests/git4idea/roots/GitIntegrationEnablerTest.java b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsIntegrationEnablerTest.java similarity index 60% rename from plugins/git4idea/tests/git4idea/roots/GitIntegrationEnablerTest.java rename to platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsIntegrationEnablerTest.java index 81a95b670d10..753e3624b2a6 100644 --- a/plugins/git4idea/tests/git4idea/roots/GitIntegrationEnablerTest.java +++ b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsIntegrationEnablerTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -13,89 +13,73 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package git4idea.roots; +package com.intellij.openapi.vcs.roots; import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; -import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vcs.ProjectLevelVcsManager; -import com.intellij.openapi.vcs.VcsRoot; -import com.intellij.openapi.vcs.VcsTestUtil; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.vcs.changes.committed.MockAbstractVcs; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.PlatformTestCase; -import com.intellij.testFramework.UsefulTestCase; -import com.intellij.testFramework.fixtures.IdeaProjectTestFixture; -import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.vcsUtil.VcsUtil; -import git4idea.GitUtil; -import git4idea.GitVcs; -import git4idea.commands.Git; -import git4idea.test.GitTestUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.picocontainer.MutablePicoContainer; import java.io.File; import java.util.Collection; import java.util.List; +public class VcsIntegrationEnablerTest extends VcsRootPlatformTest { -public class GitIntegrationEnablerTest extends UsefulTestCase { - - public Project myProject; - protected VirtualFile myProjectRoot; - protected VirtualFile myTestRoot; - public GitVcs myVcs; - public Git myGit; + private VirtualFile myTestRoot; @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors") - public GitIntegrationEnablerTest() { + public VcsIntegrationEnablerTest() { PlatformTestCase.initPlatformLangPrefix(); } public void setUp() throws Exception { super.setUp(); - IdeaProjectTestFixture projectFixture = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getTestName(true)).getFixture(); - projectFixture.setUp(); - myProject = projectFixture.getProject(); - myVcs = GitVcs.getInstance(myProject); - myProjectRoot = myProject.getBaseDir(); + MutablePicoContainer picoContainer = (MutablePicoContainer)myProject.getPicoContainer(); + String vcsNotifierKey = VcsNotifier.class.getName(); + picoContainer.unregisterComponent(vcsNotifierKey); + picoContainer.registerComponentImplementation(vcsNotifierKey, TestVcsNotifier.class); myTestRoot = myProjectRoot.getParent(); - myGit = ServiceManager.getService(myProject, Git.class); } public void testOneRootForTheWholeProjectThenJustAddVcsRoot() { doTest(given("."), null, null); } - public void testNoGitRootsThenInitAndNotify() { + public void testNoMockRootsThenInitAndNotify() { doTest(given(), - notification("Created Git repository in " + myProjectRoot.getPresentableUrl()), ".", VcsTestUtil.toAbsolute(".", myProject)); + notification("Created mock repository in " + myProjectRoot.getPresentableUrl()), ".", VcsTestUtil.toAbsolute(".", myProject)); } - public void testBelowGitNoInsideThenNotify() { + public void testBelowMockNoInsideThenNotify() { doTest(given(".."), - notification("Added Git root: " + myTestRoot.getPresentableUrl())); + notification("Added mock root: " + myTestRoot.getPresentableUrl())); } - public void testGitForProjectSomeInsideThenNotify() { + public void testMockForProjectSomeInsideThenNotify() { doTest(given(".", "community"), - notification("Added Git roots: " + myProjectRoot.getPresentableUrl() + ", " + getPresentationForRoot("community"))); + notification("Added mock roots: " + myProjectRoot.getPresentableUrl() + ", " + getPresentationForRoot("community"))); } - public void testBelowGitSomeInsideThenNotify() { + public void testBelowMockSomeInsideThenNotify() { doTest(given("..", "community"), - notification("Added Git roots: " + myTestRoot.getPresentableUrl() + ", " + getPresentationForRoot("community"))); + notification("Added mock roots: " + myTestRoot.getPresentableUrl() + ", " + getPresentationForRoot("community"))); } - public void testNotUnderGitSomeInsideThenNotify() { + public void testNotUnderMockSomeInsideThenNotify() { doTest(given("community", "contrib"), notification( - "Added Git roots: " + getPresentationForRoot("community") + ", " + getPresentationForRoot("contrib")) + "Added mock roots: " + getPresentationForRoot("community") + ", " + getPresentationForRoot("contrib")) ); } @@ -108,7 +92,7 @@ public class GitIntegrationEnablerTest extends UsefulTestCase { private void doTest(@NotNull Collection vcsRoots, @Nullable Notification notification, - @Nullable String git_init, + @Nullable String mock_init, @NotNull String... vcs_roots) { List vcsRootsList = ContainerUtil.newArrayList(vcs_roots); @@ -123,17 +107,17 @@ public class GitIntegrationEnablerTest extends UsefulTestCase { } })); } - new GitIntegrationEnabler(myVcs, myGit).enable(vcsRoots); + new TestIntegrationEnabler(myVcs).enable(vcsRoots); assertVcsRoots(vcsRootsList); - if (git_init != null) { - assertGitInit(git_init); + if (mock_init != null) { + assertMockInit(mock_init); } - GitTestUtil.assertNotificationShown(myProject, notification); + VcsTestUtil.assertNotificationShown(myProject, notification); } - void assertGitInit(@NotNull String root) { + void assertMockInit(@NotNull String root) { File rootFile = new File(myProjectRoot.getPath(), root); - assertTrue(new File(rootFile.getPath(), GitUtil.DOT_GIT).exists()); + assertTrue(new File(rootFile.getPath(), DOT_MOCK).exists()); } void assertVcsRoots(@NotNull Collection expectedVcsRoots) { @@ -170,4 +154,19 @@ public class GitIntegrationEnablerTest extends UsefulTestCase { private String getPresentationForRoot(@NotNull String root) { return FileUtil.toSystemDependentName(VcsTestUtil.toAbsolute(root, myProject)); } + + private static class TestIntegrationEnabler extends VcsIntegrationEnabler { + + protected TestIntegrationEnabler(@NotNull MockAbstractVcs vcs) { + super(vcs); + } + + @Override + protected boolean initOrNotifyError(@NotNull final VirtualFile projectDir) { + File file = new File(projectDir.getPath(), ".mock"); + VcsNotifier.getInstance(myVcs.getProject()).notifySuccess("Created mock repository in " + projectDir.getPresentableUrl()); + myFilesToDelete.add(file); + return file.mkdir(); + } + } } diff --git a/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsRootPlatformTest.java b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsRootPlatformTest.java index 407903b98c14..e90127124105 100644 --- a/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsRootPlatformTest.java +++ b/platform/vcs-impl/testSrc/com/intellij/openapi/vcs/roots/VcsRootPlatformTest.java @@ -52,12 +52,10 @@ import java.util.HashSet; import static com.intellij.openapi.vcs.Executor.cd; import static com.intellij.openapi.vcs.Executor.mkdir; - -/** - * @author Nadya Zabrodina - */ public abstract class VcsRootPlatformTest extends UsefulTestCase { + public static final String DOT_MOCK = ".mock"; + private VcsRootChecker myExtension; @NotNull protected ProjectLevelVcsManagerImpl myVcsManager; @NotNull protected MockAbstractVcs myVcs; @@ -100,12 +98,12 @@ public abstract class VcsRootPlatformTest extends UsefulTestCase { @Override public boolean isRoot(@NotNull String path) { - return new File(path, ".mock").exists(); + return new File(path, DOT_MOCK).exists(); } @Override public boolean isVcsDir(@Nullable String path) { - return path != null && path.toLowerCase().endsWith(".mock"); + return path != null && path.toLowerCase().endsWith(DOT_MOCK); } }; point.registerExtension(myExtension); @@ -202,7 +200,7 @@ public abstract class VcsRootPlatformTest extends UsefulTestCase { for (String path : mockRoots) { File file = new File(projectDir, path); file.mkdirs(); - File mockDir = new File(file, ".mock"); + File mockDir = new File(file, DOT_MOCK); mockDir.mkdirs(); myFilesToDelete.add(mockDir); mockDir.deleteOnExit(); diff --git a/plugins/git4idea/testFramework/git4idea/test/GitTestUtil.java b/plugins/git4idea/testFramework/git4idea/test/GitTestUtil.java index 695e2dd1dc59..d34e8da70d85 100644 --- a/plugins/git4idea/testFramework/git4idea/test/GitTestUtil.java +++ b/plugins/git4idea/testFramework/git4idea/test/GitTestUtil.java @@ -15,11 +15,8 @@ */ package git4idea.test; -import com.intellij.notification.Notification; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.ProjectLevelVcsManager; -import com.intellij.openapi.vcs.TestVcsNotifier; -import com.intellij.openapi.vcs.VcsNotifier; import com.intellij.openapi.vcs.impl.ProjectLevelVcsManagerImpl; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; @@ -27,7 +24,6 @@ import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.repo.GitRepository; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.ide.BuiltInServerManagerImpl; import java.io.File; @@ -40,7 +36,6 @@ import static com.intellij.openapi.vcs.VcsTestUtil.createDir; import static com.intellij.openapi.vcs.VcsTestUtil.createFile; import static git4idea.test.GitExecutor.git; import static junit.framework.Assert.assertNotNull; -import static junit.framework.TestCase.assertEquals; public class GitTestUtil { @@ -111,29 +106,6 @@ public class GitTestUtil { return repository; } - public static void assertNotificationShown(@NotNull Project project, @Nullable Notification expected) { - if (expected != null) { - Notification actualNotification = - ((TestVcsNotifier)VcsNotifier.getInstance(project)).getLastNotification(); - assertNotNull("No notification was shown", actualNotification); - assertEquals("Notification has wrong title", expected.getTitle(), actualNotification.getTitle()); - assertEquals("Notification has wrong type", expected.getType(), actualNotification.getType()); - assertEquals("Notification has wrong content", adjustTestContent(expected.getContent()), actualNotification.getContent()); - } - } - - // we allow more spaces and line breaks in tests to make them more readable. - // After all, notifications display html, so all line breaks and extra spaces are ignored. - private static String adjustTestContent(@NotNull String s) { - StringBuilder res = new StringBuilder(); - String[] splits = s.split("\n"); - for (String split : splits) { - res.append(split.trim()); - } - - return res.toString(); - } - /** * Default port will be occupied by main idea instance => define the custom default to avoid searching of free port */