16de62d6d9483dd00a45f987b33b53598a49d790
[idea/community.git] / platform / service-container / testSrc / com / intellij / serviceContainer / ConstructorInjectionTest.kt
1 // Copyright 2000-2019 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.
2 package com.intellij.serviceContainer
3
4 import com.intellij.configurationStore.StateStorageManager
5 import com.intellij.ide.plugins.IdeaPluginDescriptorImpl
6 import com.intellij.openapi.components.PersistentStateComponent
7 import com.intellij.openapi.components.Service
8 import com.intellij.openapi.components.ServiceDescriptor
9 import com.intellij.openapi.components.impl.stores.IComponentStore
10 import com.intellij.openapi.extensions.DefaultPluginDescriptor
11 import com.intellij.openapi.extensions.PluginId
12 import com.intellij.openapi.extensions.impl.ExtensionsAreaImpl
13 import com.intellij.util.messages.MessageBus
14 import org.junit.Test
15
16 class ConstructorInjectionTest {
17   private val pluginDescriptor = DefaultPluginDescriptor("test")
18
19   @Test
20   fun `interface extension`() {
21     val componentManager = TestComponentManager()
22     val area = componentManager.extensionArea as ExtensionsAreaImpl
23     val point = area.registerPoint("bar", Bar::class.java, pluginDescriptor)
24     @Suppress("DEPRECATION")
25     point.registerExtension(BarImpl())
26
27     componentManager.instantiateClassWithConstructorInjection(Foo::class.java, Foo::class.java, pluginDescriptor.pluginId)
28   }
29
30   @Test
31   fun `resolve light service`() {
32     val componentManager = TestComponentManager()
33     componentManager.registerService(IComponentStore::class.java, TestComponentStore::class.java, pluginDescriptor, false)
34     componentManager.instantiateClassWithConstructorInjection(BarServiceClient::class.java, BarServiceClient::class.java.name, pluginDescriptor.pluginId)
35   }
36 }
37
38 private interface Bar
39
40 private class BarImpl : Bar
41
42 private class Foo(@Suppress("UNUSED_PARAMETER") bar: BarImpl)
43
44 @Service
45 private class BarService
46
47 private class BarServiceClient(@Suppress("UNUSED_PARAMETER") bar: BarService)
48
49 private class TestComponentManager : PlatformComponentManagerImpl(null, setExtensionsRootArea = false /* must work without */) {
50   override fun getContainerDescriptor(pluginDescriptor: IdeaPluginDescriptorImpl) = pluginDescriptor.appContainerDescriptor
51
52   override fun assertExtensionInjection(pluginId: PluginId?, e: Exception) {
53   }
54 }
55
56 private class TestComponentStore : IComponentStore {
57   override val storageManager: StateStorageManager
58     get() = TODO("not implemented")
59
60   override fun setPath(path: String) {
61   }
62
63   override fun initComponent(component: Any, serviceDescriptor: ServiceDescriptor?) {
64   }
65
66   override fun initPersistencePlainComponent(component: Any, key: String) {
67   }
68
69   override fun reloadStates(componentNames: Set<String>, messageBus: MessageBus) {
70   }
71
72   override fun reloadState(componentClass: Class<out PersistentStateComponent<*>>) {
73   }
74
75   override fun isReloadPossible(componentNames: Set<String>) = false
76
77   override suspend fun save(forceSavingAllSettings: Boolean) {
78   }
79
80   override fun saveComponent(component: PersistentStateComponent<*>) {
81   }
82 }