shelf: add tests for unshelve and delete operations

This commit is contained in:
Nadya Zabrodina
2018-11-06 20:24:37 +03:00
parent d2d7a09227
commit ed02283896
13 changed files with 214 additions and 0 deletions
@@ -0,0 +1,14 @@
<changelist name="test" date="1539026452817" recycled="false">
<option name="PATH" value="$PROJECT_DIR$/.shelf/test/shelved.patch"/>
<option name="DESCRIPTION" value="description"/>
<binary>
<option name="BEFORE_PATH"/>
<option name="AFTER_PATH" value="c.png"/>
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.shelf/test/c.png"/>
</binary>
<binary>
<option name="BEFORE_PATH"/>
<option name="AFTER_PATH" value="c1.png"/>
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.shelf/test/c1.png"/>
</binary>
</changelist>
@@ -0,0 +1,12 @@
--- 1.txt
+++ 1.txt
@@ -0,0 +1,3 @@
+One
+Two
+Three
--- 2.txt
+++ 2.txt
@@ -0,0 +1,3 @@
+One
+Two
+Three
@@ -0,0 +1,15 @@
<changelist name="test1" date="1539026452817" recycled="false">
<option name="PATH" value="$PROJECT_DIR$/.shelf/test1/shelved.patch"/>
<option name="DESCRIPTION" value="description1"/>
<binary>
<option name="BEFORE_PATH"/>
<option name="AFTER_PATH" value="c.png"/>
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.shelf/test1/c.png"/>
</binary>
<binary>
<option name="BEFORE_PATH"/>
<option name="AFTER_PATH" value="c1.png"/>
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.shelf/test1/c1.png"/>
</binary>
</changelist>
@@ -0,0 +1,12 @@
--- 1.txt
+++ 1.txt
@@ -0,0 +1,3 @@
+One
+Two
+Three
--- 2.txt
+++ 2.txt
@@ -0,0 +1,3 @@
+One
+Two
+Three
@@ -0,0 +1,15 @@
<changelist name="test2" date="1539026452817" recycled="false">
<option name="PATH" value="$PROJECT_DIR$/.shelf/test2/shelved.patch"/>
<option name="DESCRIPTION" value="description2"/>
<binary>
<option name="BEFORE_PATH"/>
<option name="AFTER_PATH" value="c.png"/>
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.shelf/test2/c.png"/>
</binary>
<binary>
<option name="BEFORE_PATH"/>
<option name="AFTER_PATH" value="c1.png"/>
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.shelf/test2/c1.png"/>
</binary>
</changelist>
@@ -0,0 +1,12 @@
--- 1.txt
+++ 1.txt
@@ -0,0 +1,3 @@
+One
+Two
+Three
--- 2.txt
+++ 2.txt
@@ -0,0 +1,3 @@
+One
+Two
+Three
@@ -0,0 +1,134 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.openapi.vcs.changes.shelf
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vcs.VcsTestUtil
import com.intellij.testFramework.PlatformTestCase
import junit.framework.TestCase
import java.io.File
import java.nio.file.Path
class ShelveChangesManagerTest : PlatformTestCase() {
private lateinit var myShelvedChangesManager: ShelveChangesManager
override fun doCreateProject(projectFile: Path): Project {
val project = super.doCreateProject(projectFile)
val testDataFile = File("${VcsTestUtil.getTestDataPath()}/shelf/shelvedChangeLists")
val shelfFile = File("${project.basePath}/.shelf")
FileUtil.createDirectory(shelfFile)
myFilesToDelete.add(shelfFile)
testDataFile.copyRecursively(shelfFile)
return project
}
override fun setUp() {
super.setUp()
myShelvedChangesManager = ShelveChangesManager.getInstance(myProject)
}
fun `test unshelve list`() {
doTestUnshelve(0, 0, 2, 1)
}
fun `test unshelve files`() {
doTestUnshelve(1, 1, 3, 1)
}
fun `test unshelve all files`() {
doTestUnshelve(2, 2, 2, 1)
}
fun `test do not remove files when unshelve`() {
doTestUnshelve(0, 0, 3, 0, false)
}
fun `test delete list`() {
doTestDelete(myShelvedChangesManager.shelvedChangeLists[0], 0, 0, 2, 1)
}
fun `test delete files`() {
doTestDelete(myShelvedChangesManager.shelvedChangeLists[0], 1, 1, 3, 1)
}
fun `test delete all files`() {
doTestDelete(myShelvedChangesManager.shelvedChangeLists[0], 2, 2, 2, 1)
}
fun `test delete deleted list`() {
val shelvedChangeList = myShelvedChangesManager.shelvedChangeLists[0]
myShelvedChangesManager.deleteChangeList(shelvedChangeList)
doTestDelete(shelvedChangeList, 0, 0, 2, 0)
}
fun `test delete deleted files`() {
val shelvedChangeList = myShelvedChangesManager.shelvedChangeLists[0]
myShelvedChangesManager.deleteChangeList(shelvedChangeList)
doTestDelete(shelvedChangeList, 1, 1, 2, 1)
}
fun `test delete all deleted files`() {
val shelvedChangeList = myShelvedChangesManager.shelvedChangeLists[0]
myShelvedChangesManager.deleteChangeList(shelvedChangeList)
doTestDelete(shelvedChangeList, 2, 2, 2, 0)
}
fun `test undo list deletion`() {
doTestDelete(myShelvedChangesManager.shelvedChangeLists[0], 0, 0, 2, 1, true)
}
fun `test undo file deletion`() {
//correct undo depends on ability to merge 2 shelved lists with separated changes inside
doTestDelete(myShelvedChangesManager.shelvedChangeLists[0], 1, 1, 3, 1, true)
}
private fun doTestUnshelve(changesNum: Int,
binariesNum: Int,
expectedListNum: Int,
expectedRecycledNum: Int,
removeFilesFromShelf: Boolean = true) {
myShelvedChangesManager.isRemoveFilesFromShelf = removeFilesFromShelf
val shelvedChangeList = myShelvedChangesManager.shelvedChangeLists[0]
val originalDate = shelvedChangeList.DATE
val changes = if (changesNum == 0) null else shelvedChangeList.getChanges(myProject).subList(0, changesNum)
val binaries = if (changesNum == 0) null else shelvedChangeList.binaryFiles.subList(0, binariesNum)
myShelvedChangesManager.unshelveChangeList(shelvedChangeList, changes, binaries, null, false)
val recycledShelvedChangeLists = myShelvedChangesManager.recycledShelvedChangeLists
TestCase.assertEquals(expectedListNum, myShelvedChangesManager.shelvedChangeLists.size)
TestCase.assertEquals(expectedRecycledNum, recycledShelvedChangeLists.size)
if (recycledShelvedChangeLists.isNotEmpty())
assertTrue(originalDate.before(recycledShelvedChangeLists[0].DATE))
}
private fun doTestDelete(shelvedChangeList: ShelvedChangeList,
changesNum: Int,
binariesNum: Int,
expectedListNum: Int,
expectedDeletedNum: Int,
undoDeletion: Boolean = false) {
val originalDate = shelvedChangeList.DATE
val changes = if (changesNum == 0) emptyList<ShelvedChange>() else shelvedChangeList.getChanges(myProject).subList(0, changesNum)
val binaries = if (changesNum == 0) emptyList<ShelvedBinaryFile>() else shelvedChangeList.binaryFiles.subList(0, binariesNum)
val shouldDeleteEntireList = changesNum == 0 && binariesNum == 0
val deleteShelvesWithDates = myShelvedChangesManager.deleteShelves(
if (shouldDeleteEntireList) listOf(shelvedChangeList) else emptyList(),
if (!shouldDeleteEntireList) listOf(shelvedChangeList) else emptyList(),
changes, binaries)
val deletedLists = myShelvedChangesManager.deletedLists
TestCase.assertEquals(expectedListNum, myShelvedChangesManager.shelvedChangeLists.size)
TestCase.assertEquals(expectedDeletedNum, deletedLists.size)
if (deletedLists.isNotEmpty() && deleteShelvesWithDates.isNotEmpty())
assertTrue(originalDate.before(deletedLists[0].DATE))
if (undoDeletion) {
deleteShelvesWithDates.forEach { l, d -> myShelvedChangesManager.restoreList(l, d) }
TestCase.assertEquals(expectedListNum + expectedDeletedNum, myShelvedChangesManager.shelvedChangeLists.size)
}
}
}