mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[Workspace Model] Add tests for virtual file index
GitOrigin-RevId: 5cc6d59bdf7ad9da7a58bb826a63d5ad8422e3ea
This commit is contained in:
committed by
intellij-monorepo-bot
parent
4b03360fb3
commit
dce856edce
+65
-4
@@ -1,10 +1,7 @@
|
||||
// Copyright 2000-2020 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.workspace.api.pstorage
|
||||
|
||||
import com.intellij.workspace.api.EntitySource
|
||||
import com.intellij.workspace.api.TypedEntityStorageBuilder
|
||||
import com.intellij.workspace.api.VirtualFileUrl
|
||||
import com.intellij.workspace.api.VirtualFileUrlManager
|
||||
import com.intellij.idea.Bombed
|
||||
import com.intellij.workspace.api.*
|
||||
import com.intellij.workspace.api.pstorage.indices.VirtualFileUrlListProperty
|
||||
import com.intellij.workspace.api.pstorage.indices.VirtualFileUrlNullableProperty
|
||||
@@ -12,6 +9,7 @@ import com.intellij.workspace.api.pstorage.indices.VirtualFileUrlProperty
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import java.util.*
|
||||
|
||||
internal class PVFUEntityData : PEntityData<PVFUEntity>() {
|
||||
lateinit var data: String
|
||||
@@ -21,6 +19,15 @@ internal class PVFUEntityData : PEntityData<PVFUEntity>() {
|
||||
}
|
||||
}
|
||||
|
||||
internal class PVFUWithTwoPropertiesEntityData : PEntityData<PVFUWithTwoPropertiesEntity>() {
|
||||
lateinit var data: String
|
||||
lateinit var fileProperty: VirtualFileUrl
|
||||
lateinit var secondFileProperty: VirtualFileUrl
|
||||
override fun createEntity(snapshot: TypedEntityStorage): PVFUWithTwoPropertiesEntity {
|
||||
return PVFUWithTwoPropertiesEntity(data, fileProperty, secondFileProperty).also { addMetaData(it, snapshot) }
|
||||
}
|
||||
}
|
||||
|
||||
internal class PNullableVFUEntityData : PEntityData<PNullableVFUEntity>() {
|
||||
lateinit var data: String
|
||||
var fileProperty: VirtualFileUrl? = null
|
||||
@@ -38,6 +45,7 @@ internal class PListVFUEntityData : PEntityData<PListVFUEntity>() {
|
||||
}
|
||||
|
||||
internal class PVFUEntity(val data: String, val fileProperty: VirtualFileUrl) : PTypedEntity()
|
||||
internal class PVFUWithTwoPropertiesEntity(val data: String, val fileProperty: VirtualFileUrl, val secondFileProperty: VirtualFileUrl) : PTypedEntity()
|
||||
internal class PNullableVFUEntity(val data: String, val fileProperty: VirtualFileUrl?) : PTypedEntity()
|
||||
internal class PListVFUEntity(val data: String, val fileProperty: List<VirtualFileUrl>) : PTypedEntity()
|
||||
|
||||
@@ -46,6 +54,12 @@ internal class ModifiablePVFUEntity : PModifiableTypedEntity<PVFUEntity>() {
|
||||
var fileProperty: VirtualFileUrl by VirtualFileUrlProperty()
|
||||
}
|
||||
|
||||
internal class ModifiablePVFUWithTwoPropertiesEntity : PModifiableTypedEntity<PVFUWithTwoPropertiesEntity>() {
|
||||
var data: String by EntityDataDelegation()
|
||||
var fileProperty: VirtualFileUrl by VirtualFileUrlProperty()
|
||||
var secondFileProperty: VirtualFileUrl by VirtualFileUrlProperty()
|
||||
}
|
||||
|
||||
internal class ModifiablePNullableVFUEntity : PModifiableTypedEntity<PNullableVFUEntity>() {
|
||||
var data: String by EntityDataDelegation()
|
||||
var fileProperty: VirtualFileUrl? by VirtualFileUrlNullableProperty()
|
||||
@@ -66,6 +80,18 @@ internal fun TypedEntityStorageBuilder.addPVFUEntity(data: String,
|
||||
}
|
||||
}
|
||||
|
||||
internal fun TypedEntityStorageBuilder.addPVFU2Entity(data: String,
|
||||
fileUrl: String,
|
||||
secondFileUrl: String,
|
||||
virtualFileManager: VirtualFileUrlManager,
|
||||
source: EntitySource = PSampleEntitySource("test")): PVFUWithTwoPropertiesEntity {
|
||||
return addEntity(ModifiablePVFUWithTwoPropertiesEntity::class.java, source) {
|
||||
this.data = data
|
||||
this.fileProperty = virtualFileManager.fromUrl(fileUrl)
|
||||
this.secondFileProperty = virtualFileManager.fromUrl(secondFileUrl)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun TypedEntityStorageBuilder.addPNullableVFUEntity(data: String,
|
||||
fileUrl: String?,
|
||||
virtualFileManager: VirtualFileUrlManager,
|
||||
@@ -102,6 +128,25 @@ class VirtualFileIndexTest {
|
||||
assertEquals(entity.fileProperty, builder.indexes.virtualFileIndex.getVirtualFiles(entity.id)?.first())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `change virtual file url`() {
|
||||
val fileUrl = "/user/opt/app/a.txt"
|
||||
val fileUrl2 = "/user/opt/app/b.txt"
|
||||
val fileUrl3 = "/user/opt/app/c.txt"
|
||||
val builder = PEntityStorageBuilder.create()
|
||||
val entity = builder.addPVFUEntity("hello", fileUrl, virtualFileManager)
|
||||
assertEquals(fileUrl, entity.fileProperty.url)
|
||||
|
||||
val modifiedEntity = builder.modifyEntity(ModifiablePVFUEntity::class.java, entity) {
|
||||
this.fileProperty = virtualFileManager.fromUrl(fileUrl2)
|
||||
this.fileProperty = virtualFileManager.fromUrl(fileUrl3)
|
||||
}
|
||||
assertEquals(fileUrl3, modifiedEntity.fileProperty.url)
|
||||
val virtualFiles = builder.indexes.virtualFileIndex.getVirtualFiles(modifiedEntity.id) ?: error("")
|
||||
assertEquals(1, virtualFiles.size)
|
||||
assertEquals(modifiedEntity.fileProperty, virtualFiles.first())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `add entity with nullable vfu`() {
|
||||
val builder = PEntityStorageBuilder.create()
|
||||
@@ -110,6 +155,22 @@ class VirtualFileIndexTest {
|
||||
assertTrue(builder.indexes.virtualFileIndex.getVirtualFiles(entity.id)?.isEmpty() ?: false)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Bombed(year = 2020, month = Calendar.JUNE, day = 20, user = "Mikhail Mazurkevich")
|
||||
fun `add entity with two properties`() {
|
||||
val fileUrl = "/user/opt/app/a.txt"
|
||||
val secondUrl = "/user/opt/app/b.txt"
|
||||
val builder = PEntityStorageBuilder.create()
|
||||
val entity = builder.addPVFU2Entity("hello", fileUrl, secondUrl, virtualFileManager)
|
||||
assertEquals(fileUrl, entity.fileProperty.url)
|
||||
assertEquals(secondUrl, entity.secondFileProperty.url)
|
||||
|
||||
val virtualFiles = builder.indexes.virtualFileIndex.getVirtualFiles(entity.id) ?: error("")
|
||||
assertEquals(2, virtualFiles.size)
|
||||
assertEquals(entity.fileProperty, virtualFiles.first())
|
||||
assertEquals(entity.secondFileProperty, virtualFiles.last())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `add entity with vfu list`() {
|
||||
val fileUrlList = listOf("/user/a.txt", "/user/opt/app/a.txt", "/user/opt/app/b.txt")
|
||||
|
||||
Reference in New Issue
Block a user