This commit is contained in:
Vladimir Krivosheev
2015-08-21 12:37:18 +02:00
parent ee0e04e953
commit f10f5d07fd
3 changed files with 20 additions and 41 deletions
@@ -10,7 +10,6 @@ import com.intellij.openapi.components.stateStore
import com.intellij.openapi.module.ModifiableModuleModel
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.module.ModuleTypeId
import com.intellij.openapi.project.ModuleAdapter
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.systemIndependentPath
@@ -24,12 +23,13 @@ import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExternalResource
import java.io.File
import java.nio.file.Paths
import java.util.UUID
import kotlin.properties.Delegates
class ModuleStoreRenameTest {
companion object {
ClassRule val projectRule = ProjectRule()
@ClassRule val projectRule = ProjectRule()
}
var module: Module by Delegates.notNull()
@@ -44,8 +44,15 @@ class ModuleStoreRenameTest {
object : ExternalResource() {
override fun before() {
runInEdtAndWait {
module = runWriteAction { ModuleManager.getInstance(projectRule.project).newModule(tempDirManager.newPath().resolve("m.iml").systemIndependentPath, ModuleTypeId.JAVA_MODULE) }
module = projectRule.createModule(tempDirManager.newPath().resolve("m.iml"))
}
module.getMessageBus().connect().subscribe(ProjectTopics.MODULES, object : ModuleAdapter() {
override fun modulesRenamed(project: Project, modules: MutableList<Module>, oldNameProvider: Function<Module, String>) {
assertThat(modules).containsOnly(module)
oldModuleNames.add(oldNameProvider.`fun`(module))
}
})
}
// should be invoked after project tearDown
@@ -58,22 +65,12 @@ class ModuleStoreRenameTest {
}
}
},
DisposeModulesRule(projectRule),
object : ExternalResource() {
override fun before() {
module.getMessageBus().connect().subscribe(ProjectTopics.MODULES, object : ModuleAdapter() {
override fun modulesRenamed(project: Project, modules: MutableList<Module>, oldNameProvider: Function<Module, String>) {
assertThat(modules).containsOnly(module)
oldModuleNames.add(oldNameProvider.`fun`(module))
}
})
}
}
DisposeModulesRule(projectRule)
)
public Rule fun getChain(): RuleChain = ruleChain
fun Module.change(task: ModifiableModuleModel.() -> Unit) {
fun changeModule(task: ModifiableModuleModel.() -> Unit) {
runInEdtAndWait {
val model = ModuleManager.getInstance(projectRule.project).getModifiableModel()
runWriteAction {
@@ -92,7 +89,7 @@ class ModuleStoreRenameTest {
val oldName = module.getName()
val newName = "foo"
module.change { renameModule(module, newName) }
changeModule { renameModule(module, newName) }
assertRename(newName, oldFile)
assertThat(oldModuleNames).containsOnly(oldName)
}
@@ -135,9 +132,9 @@ class ModuleStoreRenameTest {
val parentVirtualDir = storage.getVirtualFile()!!.getParent()
runInEdtAndWait { runWriteAction { parentVirtualDir.rename(null, UUID.randomUUID().toString()) } }
val newFile = File(parentVirtualDir.getPath(), module.getName() + ModuleFileType.DOT_DEFAULT_EXTENSION)
val newFile = Paths.get(parentVirtualDir.getPath(), "${module.getName()}${ModuleFileType.DOT_DEFAULT_EXTENSION}")
try {
assertThat(newFile).isFile()
assertThat(newFile).isRegularFile()
assertRename(module.getName(), oldFile)
assertThat(oldModuleNames).isEmpty()
}
@@ -26,7 +26,7 @@ import java.nio.file.Paths
@RunsInActiveStoreMode
class ModuleStoreTest {
companion object {
ClassRule val projectRule = ProjectRule()
@ClassRule val projectRule = ProjectRule()
val MODULE_DIR = "\$MODULE_DIR$"
@@ -41,7 +41,7 @@ class ModuleStoreTest {
private fun VirtualFile.loadModule() = runWriteAction { ModuleManager.getInstance(projectRule.project).loadModule(getPath()) }
fun Path.createModule() = runWriteAction { ModuleManager.getInstance(projectRule.project).newModule(systemIndependentPath, ModuleTypeId.JAVA_MODULE) }
fun Path.createModule() = projectRule.createModule(this)
}
private val tempDirManager = TemporaryDirectory()
@@ -159,4 +159,6 @@ class ModuleStoreTest {
}
val Module.contentRootUrls: Array<String>
get() = ModuleRootManager.getInstance(this).getContentRootUrls()
get() = ModuleRootManager.getInstance(this).getContentRootUrls()
fun ProjectRule.createModule(path: Path) = runWriteAction { ModuleManager.getInstance(project).newModule(path.systemIndependentPath, ModuleTypeId.JAVA_MODULE) }
@@ -33,7 +33,6 @@ import com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl
import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture
import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory
import com.intellij.testFramework.fixtures.TestFixtureBuilder
import com.intellij.util.SmartList
import com.intellij.util.ThrowableRunnable
import com.intellij.util.lang.CompoundRuntimeException
@@ -50,7 +49,6 @@ import java.lang.annotation.Target
import java.lang.reflect.InvocationTargetException
import java.util.concurrent.atomic.AtomicBoolean
import javax.swing.SwingUtilities
import kotlin.properties.Delegates
/**
* Project created on request, so, could be used as a bare (only application).
@@ -156,24 +154,6 @@ public open class FixtureRule() : ExternalResource() {
}
}
public fun FixtureRule(tuner: TestFixtureBuilder<IdeaProjectTestFixture>.() -> Unit): FixtureRule = HeavyFixtureRule(tuner)
private class HeavyFixtureRule(private val tune: TestFixtureBuilder<IdeaProjectTestFixture>.() -> Unit) : FixtureRule() {
private var name: String by Delegates.notNull()
override final fun apply(base: Statement, description: Description): Statement {
name = description.getMethodName()
return super.apply(base, description)
}
override final fun createBuilder(): TestFixtureBuilder<IdeaProjectTestFixture> {
val builder = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(name)
_projectFixture = builder.getFixture()
builder.tune()
return builder
}
}
public class RuleChain(vararg val rules: TestRule) : TestRule {
override fun apply(base: Statement, description: Description): Statement {
var statement = base